LangChain createAgent 原理:执行循环与流式输出
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
这一小节,咱们要浅尝一下 LangChain 的源码了,就从 createAgent 开始。
先回顾下咱们上一小节写的案例,上一小节实现的算是一个简单的 Tool Calling
模型先生成 Tool Call,应用程序执行 get_task,再把结果包装成 ToolMessage 交回模型。
不过,上一次只有一个 Tool,跑完一次就结束了。
但是咱们知道,实际开发中,不可能只调用一个单独的 Tool。
Tool 和 模型之间的循环,肯定会进行多次的。
而 createAgent() 真正接管的,正是这段多轮执行过程。
先把案例运行起来
本小节代码在:
/Code/Node/第五章/04-langchain-create-agent
进入项目目录,安装依赖:
cd /Code/Node/第五章/04-langchain-create-agent
npm install
这里必须要跟大家明确一下版本,因为在看源码的时候,不同的版本源码会有所不同
"dependencies": {
"@langchain/core": "1.2.5",
"@langchain/deepseek": "1.1.6",
"langchain": "1.5.5",
"zod": "4.4.3"
}
然后,在当前目录创建 .env:
DEEPSEEK_API_KEY=你的 DeepSeek API Key
DEEPSEEK_MODEL=deepseek-v4-flash
执行:
npm run demo
最终回答会根据模型生成结果略有变化,但是前面的执行顺序应该是稳定的:
大家先看 Tool 的调用顺序。
第一次调用 get_task 时,模型只有任务编号 DEV-1024。
等这个 Tool 返回以后,第二次调用参数才出现:
这个 repository 是模型从第一次 Tool 返回的结果中拿到的。
而这一整的业务逻辑就是从 createAgent() 开始的
createAgent() 到底创建了什么
打开 create-agent.js,可以看到 Agent 的创建代码:
/**
* 创建研发任务交付风险分析 Agent。
*
* 本例存在明确的数据依赖:
*
* get_task
* ↓ repository
* get_latest_test_report
*
* 第二次 Tool 调用所需的 repository,
* 只有第一次 Tool 执行完成之后才能得到。
*
* 因此整个 Agent Run 会经历多轮:
*
* Model → Tool → Model → Tool → Model → Final Answer
*/
const agent = createAgent({
model: createModel(),本节试读已结束
继续学习,解锁完整课程
购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。
