ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LangGraph 跑 Multi-Agent:Key 用 TaoToken

LangGraph 跑 Multi-Agent:Key 用 TaoToken Multi-Agent 不是概念问题是配置问题。原文说“派一个团队上”但 LangGraph 里每个子 Agent 都要接模型、填 Key规划、写代码、测试各配一套账单也跟着散。TaoTokenhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 用一把 Key 统一这条通道所有子 Agent 填同一个 Base URL模型 ID 从模型广场按需挑。跑通一次 Multi-Agent 协作你就知道原先分散在多家厂商的 Key、账单、模型名其实都能收拢到一处。下面把原文里那张分工图和 LangGraph 的实际配置对应起来。1. 原文说“派一个团队上”没说的是这个团队需要多少把 Key1.1 每个子 Agent 一套模型配置先乱的是 Key 不是代码原文在讲 Agent 工作模式时把 Multi-Agent 比作项目组分工有人做 PPT有人写文字有人答辩。这是功能视角。工程视角是另一回事负责规划的 Agent 要调用模型才能生成计划负责编码的 Agent 要调用模型才能产出代码负责测试的 Agent 也要调用模型才能输出评审结论。每一个“调用模型”背后都需要一个真实的 API 地址和一个真实的密钥。如果这三个角色分别来自不同厂商你就要维护三套 Key、三个 Base URL、三个账单页面。配置分散的直接后果是换一个子 Agent 的模型得先搞清楚它在哪个后台查一次总消耗要在三个页面来回切报了个 401还要判断是哪个 Key 出了问题。原文花大篇幅讲工具调用需要统一标准Key 管理同样需要标准化只是容易被忽略。1.2 Key 碎片化的本质N 个 Agent × M 个厂商原文讲 MCP 时提到过 N×M 的集成问题每个 AI 应用对接每个服务都要单独适配很痛苦。Key 的碎片化也是同一结构N 个子 AgentM 个模型厂商你手里就有 N×M 份密钥。哪怕同一个厂商不同项目也可能要分 Key越管越乱。TaoToken 把这 N×M 收成 N1子 Agent 仍然可以选不同模型 ID但所有模型都走同一个 https://taotoken.net/api 通道消耗记在同一把 Key 下面。这有点像剧组里的制片主任灯光、摄影、收音各组设备不一样但报销都找同一个人结账只结一笔。配置管理从“每个角色一套环境变量”变成“一份 Base URL 一个 Key 多个模型 ID”团队还是那个团队账本只剩一本。2. LangGraph 的 StateGraph 到底在编排什么2.1 先有 ReAct才有多个 ReAct 的协作原文把 Agent 工作模式分成 ReAct、Plan-and-Execute、Reflection、Multi-Agent并提醒说这些模式不互斥Multi-Agent 里的每个子 Agent 内部很可能还是 ReAct。理解 LangGraph 正好从这句话入手。LangGraph 的 StateGraph 把协作过程画成一张有向图状态对象在节点之间流转每个节点是一个 Agent 或一次工具调用边代表任务交接。规划节点跑完把计划写入状态编码节点从状态里读计划生成代码再写回状态测试节点接着读代码输出评审结果。节点内部的思考—行动—观察循环是 ReAct节点之间的边是“你做完交给我”的团队动作。2.2 Workflow 和 Agent 的混合正是 StateGraph 的形态原文在讲 Workflow 和 Agent 区别时说生产环境最常见的其实是混合架构整体流程用 Workflow 控制复杂环节再启动 Agent 自主决策。LangGraph 的图结构恰好就是这样。你在代码里定义节点和边的连接方式这是预设的 Workflow但每个节点内部调用什么工具、执行几步、要不要提前结束由模型自己判断这是 Agent 的行为。所以写 LangGraph 配置时要切换一个心态不用把子 Agent 的逻辑写死只需要画清角色边界。规划节点输出什么格式编码节点从哪里读输入测试节点发现问题后把状态退给谁。模型怎么完成各自任务那是模型和 prompt 的事。2.3 一个最小团队规划、编码、测试三个节点先跑三个节点足够覆盖原文说的“各司其职”。规划节点理解用户任务输出分步计划是整个图的入口。编码节点按计划生成代码只负责产出不负责执行。测试节点审查代码输出问题清单并决定是否退回编码节点。三个节点共享同一份状态也共享同一个模型通道。下面进入拿 Key 和填配置的环节。3. 拿 Key在 TaoToken 官网完成注册、建 Key、记模型 ID3.1 注册、创建 Key、看模型广场打开 TaoToken 注册登录后在控制台做三件事。第一创建 API Key拿到YOUR_API_KEY形式的密钥第二打开模型广场复制当前可用的模型 ID第三找到用量页面后面跑完 Multi-Agent 要回来对账。两个地址要分清网页上的注册、看模型、看用量都发生在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 填进 LangGraph 代码里的 Base URL 是 https://taotoken.net/api 末尾不要加/v1。前者是人操作的界面后者是程序访问的接口混用会出现“在网页上填接口、在代码里填网页”的经典错误。3.2 模型 ID 以模型广场为准模型 ID 是最容易凭印象填错的地方。不要用其他平台的习惯去猜也不要写记忆里的旧名字直接去模型广场复制当时列表里给出的 ID。TaoToken 的模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场为准列表随时可能变化一切以页面展示为准。下面的代码里用MODEL_ID做占位符运行前替换成你复制到的值。4. LangGraph 接入 TaoToken一个工厂函数喂饱整个团队4.1 用 ChatOpenAI 构造统一的 LLM 客户端LangGraph 不直接发模型请求它依赖 LangChain 的模型封装层。TaoToken 提供 OpenAI 兼容的 API 通道直接用langchain-openai的ChatOpenAI就行不用额外装插件。这样写的好处是子 Agent 之间换模型只换模型 IDBase URL 和 Key 始终只有一份。from langchain_openai import ChatOpenAI # 模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场为准 MODEL_ID 从模型广场复制的模型 ID def make_llm(temperature: float 0.2) - ChatOpenAI: 所有子 Agent 共用的模型工厂 return ChatOpenAI( base_urlhttps://taotoken.net/api, api_keyYOUR_API_KEY, # 在 TaoToken 官网控制台创建 modelMODEL_ID, temperaturetemperature, ) planner_llm make_llm(0.2) coder_llm make_llm(0.1) tester_llm make_llm(0.3)三个实例指向同一个通道参数各自独立。规划节点温度高一点留出发散空间编码节点温度低一点输出更稳定测试节点介于两者之间。4.2 用 StateGraph 把三个节点接成一张图下面是一个可跑的 Multi-Agent 图。状态对象TeamState在节点之间传递任务、计划、代码和评审意见测试节点发现代码有问题时通过条件边退回编码节点形成一次“返工”循环。from typing import TypedDict from langgraph.graph import StateGraph, END class TeamState(TypedDict): task: str plan: str code: str feedback: str def planner_node(state: TeamState) - dict: prompt f你是规划 Agent。任务{state[task]}\n请输出分步计划不要写代码。 return {plan: planner_llm.invoke(prompt).content} def coder_node(state: TeamState) - dict: prompt f你是编码 Agent。按计划写代码\n{state[plan]} return {code: coder_llm.invoke(prompt).content} def tester_node(state: TeamState) - dict: prompt f你是测试 Agent。审查这段代码输出问题清单和改进建议\n{state[code]} return {feedback: tester_llm.invoke(prompt).content} def should_revise(state: TeamState) - str: return coder if 问题 in state[feedback] else END builder StateGraph(TeamState) builder.add_node(planner, planner_node) builder.add_node(coder, coder_node) builder.add_node(tester, tester_node) builder.set_entry_point(planner) builder.add_edge(planner, coder) builder.add_edge(coder, tester) builder.add_conditional_edges(tester, should_revise, {coder: coder, END: END}) app builder.compile() result app.invoke({ task: 写一个 Python 脚本把当前目录下所有 .tmp 文件批量重命名为 .txt, plan: , code: , feedback: , }) print(result[code])注意一个边界测试 Agent 只生成审查意见不会替你在本机执行任何命令。生成的代码要不要跑、在哪里跑由你在本地决定跑出来的报错贴回对话让测试节点接着审。多 Agent 协作负责生成、解释、对照真正执行始终在你手里。4.3 一次 invoke 对应一串调用记录app.invoke(...)跑完后规划、编码、测试三个节点各自的模型调用都记在同一把 Key 下。去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的用量页面能看到这次任务的完整调用链规划的输入输出 Token、编码的输入输出 Token、测试的输入输出 Token。如果测试节点把任务退回编码节点调用链上会多一组编码和测试记录。这就是 Long Context 场景下最直观的感受同一个 Key 支撑了整支队伍的每一轮对话。5. 验证与排障先跑模型对话再跑整张图5.1 用模型对话页面先做一次冒烟测试配置写完了先别急着跑完整张图在 TaoToken 模型对话 里用同一把 Key 发一条消息。这一步能筛掉最基础的问题模型 ID 填没填对、Key 有没有复制完整、账户有没有可用额度。模型对话页面相当于免代码的调试台配置类低级错误几秒钟就能暴露。对话通了再回 LangGraph 跑整张图问题定位范围会小很多。5.2 AuthenticationError 和模型不存在按这两个方向查跑 LangGraph 时最常见的两类报错处理路径不一样。第一类是AuthenticationError报错直说 API key 无效。回控制台重新复制 Key注意YOUR_API_KEY是占位符别原样填进去复制时留意开头结尾有没有被加上空格。第二类是模型不存在或地址 404。优先回模型广场重新复制模型 ID——很多“检查了很多遍代码都没错”的问题最后都是模型 ID 过期或填了旧名字如果 Base URL 末尾多写了/v1也可能表现成类似的 404。规范写法是 https://taotoken.net/api 不要自己加路径。6. 对照原文Function Call、MCP、Skills 和通道的关系6.1 分工不同层不同原文花了大篇幅区分 Function Call、MCP、SkillsFunction Call 是 LLM 输出结构化调用请求的能力MCP 是统一工具接入的协议Skills 是教 Agent 怎么做事的菜谱。TaoToken 不在这一层它在更底下。MCP 决定 Agent 能调用哪些工具Skills 决定 Agent 按什么方法做事TaoToken 决定这些能力跑起来时模型通道从哪里来、消耗记在谁账上。对应原文的比喻MCP 是厨房Skills 是菜谱TaoToken 是食材供应商。不管做什么菜食材都走同一条供应链结账也只结一笔。Multi-Agent 场景里规划、编码、测试各干各的但 Token 都记在同一本账上。6.2 跑通团队之后去控制台对一次账建议先用本文的三角色图跑通一次回到用量页核对这次调用的 Token 记录。同一个 Key 在长会话里会持续累计上下文消耗用量页能看到一条清晰的按时间排列的调用曲线。日常写代码比较多的可以看看 Coding Plan 是否符合你的节奏Key 随时可以在 控制台 API Keys 创建。把 Key 填进 LangGraph 的那一刻这个由规划、编码、测试组成的团队才算真正交到你手里。
返回列表