LangChain.js 如何用 createAgent 与 tool 定义工具构建第一个工具调用 Agent
LangChain.js 如何用 createAgent 与 tool 定义工具构建第一个工具调用 Agent【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs在 LangChain.js 1.0 中构建 Agent 的标准方式是createAgent把它和用tool定义的函数一起传入Agent 就会在模型循环中自动选择并执行这些工具直到模型不再调用任何工具为止。这篇文章以仓库自带的 tools.ts 示例 为主路径带你完成一个最小可用的工具调用 Agent定义两个操作内存存储的工具、创建 Agent、发起两轮对话并通过输出结果确认工具确实被调用了。准备条件按仓库文档给出的要求准备环境Node.js 版本LangChain.js 支持 Node.jsESM 和 CommonJS20.x、22.x、24.x见 README.md 的 Supported Environments。安装核心包和模型包。仓库根 README.md 给出的安装命令npm install -S langchain示例代码同时用到了langchain/openaiChatOpenAI和langchain/langgraphInMemoryStore、LangGraphRunnableConfig。在仓库内这些以 workspace 依赖形式提供见 examples/package.jsonlangchain/openai: workspace:*、langchain/langgraph: ^1.4.13在自己的项目中则通过pnpm install langchain/openai等命令安装对应发布包。 3.模型提供方密钥示例使用new ChatOpenAI({ model: gpt-4o })需要可用的 OpenAI 密钥ChatOpenAI构造参数以langchain/openai文档为准本文不展开。定义两个工具tools.ts 用tool函数把两个普通异步函数包装成 Agent 可调用的工具。每个工具传两部分执行函数和一个包含name、description、schema的配置对象。schema用 Zod 描述模型传入的参数模型每次调用工具时参数会按这个 schema 解析后交给执行函数。import { z } from zod; import { createAgent, tool } from langchain; import { InMemoryStore, LangGraphRunnableConfig } from langchain/langgraph; import { ChatOpenAI } from langchain/openai; const getUserInfo tool( async ({ userId }, config: LangGraphRunnableConfig) { return config.store?.get([users], userId); }, { name: get_user_info, description: Look up user info., schema: z.object({ userId: z.string(), }), } ); const saveUserInfo tool( async ({ userId, name, age, email }, config: LangGraphRunnableConfig) { await config.store?.put([users], userId, { name, age, email }); return Successfully saved user info.; }, { name: save_user_info, description: Save user info., schema: z.object({ userId: z.string(), name: z.string(), age: z.number(), email: z.string(), }), } );两个工具通过config.store读写同一个命名空间[users]下的数据saveUserInfo用put写入getUserInfo用get读取。这样设计是为了让“保存”和“查询”发生在两次独立的会话之间验证跨会话的状态共享。description会作为工具说明提供给模型模型依据它决定在什么时候调用哪个工具所以描述应当准确说明工具的用途如示例中的 Look up user info. 与 Save user info.。用 createAgent 创建 Agent 并发起两轮对话创建 Agent 时传入model、tools和storeconst agent createAgent({ model: new ChatOpenAI({ model: gpt-4o }), tools: [getUserInfo, saveUserInfo], store: new InMemoryStore(), }); // First session: save user info await agent.invoke({ messages: Save the following user: userid: abc123, name: Foo, age: 25, email: foolangchain.dev, }); // Second session: get user info const result await agent.invoke({ messages: Get user info for user with id abc123, }); console.log(result.messages.at(-1)?.content);其中model接收模型实例这里是ChatOpenAI。CHANGELOG 中的 1.0 示例还展示了直接传anthropic:claude-sonnet-4-5-20250929这类带 provider 前缀的字符串见 libs/langchain/CHANGELOG.md可按需选择写法。tools是工具的数组Agent 会在循环中让模型从中选择工具执行。store这里传入langchain/langgraph的new InMemoryStore()工具执行时的config.store就指向它。注意InMemoryStore是进程内的内存存储进程结束后数据不保留跨进程持久化需要使用其他存储实现本文不展开。两次agent.invoke对应两次独立会话第一次让 Agent 把指定用户信息存进去第二次让它按userId查回来。验证结果运行示例后检查终端最后打印的内容。tools.ts 中记录的预期输出为文档示例Here is the user info for user with ID abc123: - Name: Foo - Age: 25 - Email: foolangchain.dev这段输出来自console.log(result.messages.at(-1)?.content)即打印本次会话最后一条消息的内容。如果第二次会话返回的仍是空结果或模型回复“找不到用户”说明工具没有被调用或两次会话没有共享同一个store实例。关于createAgent的底层行为libs/langchain/CHANGELOG.md 的说明是它构建在一个基本的 Agent 循环上——通过 LangGraph 调用模型、让模型选择要执行的工具、当模型不再调用工具时结束。因此正常结束时result.messages里应包含工具调用及其结果的完整轨迹可以用它判断工具是否真的被执行。在仓库 examples 目录中运行该示例仓库自带示例的运行入口是 examples/src/index.ts它接收第一个命令行参数作为示例路径支持foo.ts、src/foo.ts、./src/foo.ts、dist/foo.js等写法动态加载该文件并调用其导出的run函数没有传路径时会打印 Please provide path to example to run 并退出。examples的启动脚本见 examples/package.json是pnpm start createAgent/tools.ts对应实际执行的命令为tsx --experimental-wasm-modules -r dotenv/config src/index.ts createAgent/tools.ts需要在examples/目录下运行。两个前提注意入口处只会执行示例模块导出的run函数而 tools.ts 本身是顶层await脚本、没有导出run。要在仓库入口下运行需要给它包一层例如export function run() { // 把 tools.ts 中的 agent.invoke 与 console.log 逻辑放入这里 }入口用-r dotenv/config加载环境变量模型密钥按此方式从.env提供。如果你只是在自己的项目里学习这个用法更直接的做法是把上面“定义工具”和“创建 Agent”两节的代码放进自己的脚本如tsx agent.ts运行不必经由 examples 入口。限制与边界模型与提供方本例绑定ChatOpenAI与gpt-4o。createAgent的model本身不限于 OpenAI可以换成其他 provider 的聊天模型但需要相应安装该 provider 包并配置密钥。存储范围InMemoryStore仅在进程生命周期内有效示例的“第二次会话”指的是同一进程内的第二次invoke。参数类型save_user_info的age声明为z.number()如果模型传回的参数不符合 schema工具调用会按 Zod 校验失败处理这一点在写自定义工具时需要自己处理。参考路径examples/src/createAgent/tools.ts本文主路径的完整示例代码。examples/package.json示例目录的依赖与start脚本。examples/src/index.ts示例统一运行入口及其参数约定。libs/langchain/CHANGELOG.mdcreateAgent在 LangChain 1.0 中的定位、Agent 循环机制与更多示例结构化输出responseFormat、middleware 等。README.md安装命令与支持运行环境。如果下一步想扩展这个 Agenttools.ts 所在的 createAgent 示例目录 还包含streaming.ts流式输出、structuredOutput.ts结构化输出、middleware/各类中间件等示例可作为同主题的延伸入口。【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →