【大模型】从零构建 LLM Agent(一):用 LangGraph 跑通 ReAct Agent
从零构建 LLM Agent一用 LangGraph 跑通 ReAct Agent系列说明本系列围绕「从用到懂到造」展开记录基于自部署 LLM 构建 Agent 的实践。篇主题阶段1本文用create_react_agent跑通一个 ReAct Agent用2手写StateGraph拆解 ReAct 循环的状态机实现懂3脱离预置图自实现 agent loop造4引入长期记忆向量检索与 RAG造5多 Agent 协作与人机协同human-in-the-loop造6生产化可观测、容错与部署工程运行环境Python 3.11.15 · langgraph 1.2.9 · langchain-openai 1.3.5 · langchain-core 1.4.9模型Qwen3-235B-A22B公司内网自部署暴露 OpenAI 兼容接口/v1/chat/completions。适用场景本文不依赖 OpenAI / Anthropic 官方 API所有调用指向自部署的 Qwen3对同样使用自部署模型vLLM / Ollama 部署 Qwen、DeepSeek 等的场景可直接复用。1. Agent 与 Chatbot 的边界从工程视角二者的差别集中在控制流归属与是否具备外部交互能力维度ChatbotAgent控制流调用方驱动单轮请求-响应LLM 驱动内部循环工具调用无通过 function calling 协议调用外部函数状态对话历史短期消息链 可选长期记忆终止条件单次生成结束LLM 不再发起 tool_call据此可给出工程定义Agent 是以 LLM 为决策核心、通过 tool calling 协议与外部环境交互、由 LLM 自主控制循环终止的有状态系统。其最小实现可表述为一个循环while True: resp llm(messages, toolstools) if not resp.tool_calls: break messages execute(resp.tool_calls) # 得到 Observation messages resp return resp.contentLangGraph 的create_react_agent即对该循环的图封装。本文先用它跑通第 2 篇再拆开。2. 前置验证模型是否支持 tool callingtool calling 是 Agent 的硬依赖LLM 必须能按 OpenAI function calling 协议返回结构化的tool_calls框架据此分发到对应函数。Qwen3 走 OpenAI 兼容接口需实测确认。验证脚本fromopenaiimportOpenAI clientOpenAI(base_urlhttp://10.138.17.22:3000/v1,api_keysk-xxx)tools[{type:function,function:{name:get_weather,description:查询某城市实时天气,parameters:{type:object,properties:{city:{type:string}},required:[city]},}}]respclient.chat.completions.create(modelQwen3-235B-A22B,messages[{role:user,content:北京今天天气怎么样请用工具查询}],toolstools,)print(resp.choices[0].message.tool_calls)# - [ChatCompletionMessageToolCall(nameget_weather, arguments{city: 北京})]模型正确返回了结构化工具调用未编造天气内容。该协议链路可用后续基于langchain-openai的ChatOpenAI.bind_tools()可直接复用。备注Qwen3 默认开启 thinking 模式会在content中输出推理过程。在 tool calling 场景下其content为空、仅返回tool_calls不影响框架解析。3. 环境与依赖独立 conda 环境隔离依赖conda create-nagentpython3.11-yconda activate agent pipinstalllanggraph langchain-openai openai requests选型说明Python 3.11Python 3.9 已于 2025-10 EOLLangGraph 1.x 主流支持 3.10/3.11。langchain-openai因 Qwen 暴露 OpenAI 兼容接口ChatOpenAI可零适配接入无需额外 Provider。版本langgraph 1.2.9 / langchain-openai 1.3.5 / langchain-core 1.4.9。框架迭代快复现请对齐版本。已知问题另有 embedding 服务bge-m3/v1/embeddings当前网络不通本篇不涉及留待第 4 篇 RAG 部分处理。4. 实现三文件结构config.py 配置集中管理endpoint / api_key / model tools.py 工具集合tool 声明 agent.py 构建 agent、运行与 trace 输出4.1 工具定义工具是普通 Python 函数tool装饰器基于函数签名 docstring自动生成 JSON Schema作为 tool calling 协议中的function.parameters下发给 LLM。因此 docstring 既是文档也是契约质量直接影响模型选 tool 的准确率。fromlangchain_core.toolsimporttooltooldefget_weather(city:str)-str:查询指定城市的实时天气。fake_db{北京:晴25°C,上海:多云28°C,...}returnfake_db.get(city,f暂无{city}天气数据)本篇共定义四个工具get_weather、get_current_time、calculate、get_stock_price均为 mock 数据。其中calculate对表达式做了字符白名单校验并以禁用__builtins__的eval执行避免注入。4.2 构建与运行fromlangchain_openaiimportChatOpenAIfromlanggraph.prebuiltimportcreate_react_agent llmChatOpenAI(modelQwen3-235B-A22B,base_url...,api_key...,temperature0.7)agentcreate_react_agent(llm,[get_weather,get_current_time,calculate,get_stock_price],prompt你是一个个人助手优先调用工具获取信息不要编造。用中文回答。,)resultagent.invoke({messages:[{role:user,content:...}]})create_react_agent内部构建的状态图┌──────────┐ tool_calls 非空 ┌──────────┐ │ agent │ ────────────────▶│ tools │ │ (调 LLM) │◀──────────────── │ (执行函数) │ └──────────┘ ToolMessage 回填 └──────────┘ │ tool_calls 为空 ▼ END (输出 AIMessage)状态以消息列表为载体message-based stateagent 节点产出AIMessage含tool_callstools 节点执行后产出ToolMessage含结果二者均 append 到messages再回流 agent 节点直至tool_calls为空终止。第 2 篇会用StateGraph显式重建此结构。5. 行为验证与 trace 解读5.1 工具链式协作串行输入「现在几点了腾讯股票多少钱持有 100 股市值多少港元」[1] user: 现在几点了腾讯股票多少钱持有100股市值多少港元 [2] AIMessage tool_calls: get_current_time({}) [3] ToolMessage: 2026年07月15日 16:11:59 Wednesday [4] AIMessage tool_calls: get_stock_price({symbol: 腾讯}) [5] ToolMessage: 腾讯控股 当前 385.6 港元1.2% [6] AIMessage tool_calls: calculate({expression: 100 * 385.6}) [7] ToolMessage: 100 * 385.6 38560.0 [8] AIMessage: 市值约为 38,560 港元。第 [6] 步中calculate的入参385.6来源于第 [5] 步get_stock_price的返回。LLM 在第 [4]→[5] 取得股价前无法发起计算故 [2][4][6] 呈串行依赖。这条 trace 体现了 agent 对跨步骤数据依赖的隐式规划能力。5.2 无依赖调用并行输入「北京和上海今天哪个更暖和」[1] user: 北京和上海今天哪个更暖和 [2] AIMessage tool_calls: get_weather({city: 北京}) tool_calls: get_weather({city: 上海}) # 同一 AIMessage 内并行 [3] ToolMessage: 北京 晴25°C [4] ToolMessage: 上海 多云28°C [5] AIMessage: 上海更暖和。两个查询无数据依赖模型在单条AIMessage中发起多个tool_calls框架并行执行。对比 5.1可见串行/并行由任务的数据依赖决定由模型在生成 tool_calls 时隐式调度。5.3 工具边界判断输入「介绍一下你自己」时模型不发起任何tool_calls直接返回AIMessage。agent 循环在首轮即终止。这说明工具是否调用由模型基于 prompt 与 tool schema 自主判断而非强制。6. 小结ReAct 的工程实现是一个以消息列表为状态、以tool_calls是否为空为终止条件的循环tool基于签名与 docstring 生成 schema是工具契约的来源create_react_agent将上述循环封装为 agent↔tools 两节点的状态图agent 的自主性体现在工具选择、跨步数据依赖规划、串并行调度、终止判断均由 LLM 隐式完成。7. 下一阶段create_react_agent隐藏了状态结构与转移逻辑。下一篇改用langgraph.graph.StateGraph显式定义状态、节点与边重建等价的 ReAct 图拆解状态如何在节点间流转、循环如何被tool_calls条件边控制。对应代码见 series 仓库v1-first-agenttag。

相关新闻

AI Agent与大模型:构建智能系统的核心技术解析

AI Agent与大模型:构建智能系统的核心技术解析

1. AI Agent与大模型:智能革命的基石组合去年我在开发一个智能客服系统时,第一次真正体会到AI Agent与大模型结合带来的震撼。当时我们尝试用传统规则引擎处理用户咨询,需要手动编写上千条业务规则,而接入大模型后,仅用…

2026/7/23 7:35:43阅读更多 →
Unity开发进阶:从可视化编辑到面向对象编程的思维跃迁

Unity开发进阶:从可视化编辑到面向对象编程的思维跃迁

1. 项目概述:从“搭积木”到“造世界”的思维跃迁很多刚接触Unity的朋友,包括几年前的我自己,都容易陷入一个误区:把Unity当成一个高级的“可视化积木搭建工具”。我们兴奋地拖拽预制体,在Inspector面板里调整参数&…

2026/7/23 7:35:43阅读更多 →
基于扩散模型的4K视频生成技术解析与应用实践

基于扩散模型的4K视频生成技术解析与应用实践

1. 项目概述:视频生成模型的技术突破上周三凌晨,实验室的服务器集群突然飙到满负载,监控大屏上一片通红——我们的视频生成模型正在处理最后一批测试数据。当第一批生成视频通过质量检测时,整个团队都松了口气。这不是普通的视频剪…

2026/7/23 7:33:42阅读更多 →
Pact契约测试提升前后端协作效率实战指南

Pact契约测试提升前后端协作效率实战指南

1. 契约测试如何让前后端协作效率提升80% 去年我们团队引入Pact契约测试框架后,最明显的改变是:凌晨三点被叫起来处理生产环境接口问题的次数减少了83%。作为经历过前后端"联调地狱"的资深开发,我深刻理解接口不一致带来的沟通成本…

2026/7/23 8:58:10阅读更多 →
华硕W419L笔记本升级SSD与内存实战指南

华硕W419L笔记本升级SSD与内存实战指南

1. 华硕W419L老笔记本升级方案概述 2015年上市的华硕W419L作为一款经典商务本,采用第四代Intel酷睿处理器搭配4GB DDR3内存和500GB机械硬盘的配置。七年过去,这套配置在运行现代办公软件时已明显力不从心——开机耗时超过1分钟,PS打开10MB图片…

2026/7/23 8:58:10阅读更多 →
眼到用时看不清,真相往往很扎心,莫愁平时读书少,图文一篇全知道

眼到用时看不清,真相往往很扎心,莫愁平时读书少,图文一篇全知道

每天的眼科诊室,都在上演相似的遗憾。大多家长带着孩子来验光时,脸上都带着同款焦虑和侥幸: “平时就偶尔眯眼,怎么就真性近视了?” “孩子还这么小,度数肯定能矫正好吧?”作为眼科医生&#xf…

2026/7/23 8:58:10阅读更多 →
UE/Unity/Webgl模型在信创服务器上实时渲染推流的可行性分析

UE/Unity/Webgl模型在信创服务器上实时渲染推流的可行性分析

随着国产化的持续进行,数字孪生和虚拟仿真领域也面临着国产化适配的需求。点量晓芹近年来发现很多数字孪生/虚拟仿真相关的项目,在实时云渲染领域也有越来越多的国产信创的需求,而且从最初的只有操作系统要求麒麟、统信等国产操作系统&#x…

2026/7/23 8:58:10阅读更多 →
网安领域下载量很高的几个离线靶场,提升黑客技术一定要知道,一文带你介绍这几个靶场下载、安装、使用功能

网安领域下载量很高的几个离线靶场,提升黑客技术一定要知道,一文带你介绍这几个靶场下载、安装、使用功能

文章目录离线靶场的定义离线靶场的重要性提供实践机会降低风险测试真实世界的漏洞技能培养与提高安全工具的熟练使用对抗多种防御机制自定义攻击场景与漏洞分析有助于研究和开发高下载率离线靶场分析1. DVWA (Damn Vulnerable Web Application)主要功能和漏洞类型:下…

2026/7/23 8:58:10阅读更多 →
OpenCV色彩空间转换:从RGB到HSV的C++实战指南

OpenCV色彩空间转换:从RGB到HSV的C++实战指南

1. 项目概述:从像素到色彩空间的旅程 在图像处理的世界里,我们看到的每一张图片,本质上都是一个巨大的数字矩阵。对于计算机而言,它“看到”的并非蓝天白云或红花绿叶,而是一串串代表亮度或色彩分量的数值。OpenCV作为…

2026/7/23 8:56:09阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →