200 行 Python 写的 Agent 连上 TaoToken 后能跑通贪吃蛇任务

发布时间:2026/9/19 18:41:06
200 行 Python 写的 Agent 连上 TaoToken 后能跑通贪吃蛇任务
200 行 Python Agent 接入 TaoToken从官方 Key 切换到统一模型接入层上一篇我们用 200 行 Python 写了一个最小 ReAct Agenttools.py里定义read_file、write_to_file、run_terminal_command三个工具agent.py里用anthropic.Anthropic()初始化客户端循环调用claude-3-5-sonnet-20241022让模型自己决定读哪个文件、写什么代码、跑什么命令。跑通之后你会发现Agent 的逻辑其实不复杂真正让人头疼的是模型接入这一层官方 Key 要单独管理Base URL 写死在代码里换一个环境就得改一次初始化代码团队里几个人共用还得互相传 Key。这篇不重写 Agent只做一件事把agent.py里初始化 client 的那几行改成走 TaoToken让这个 200 行 Agent 在保持tools.py和 ReAct 循环完全不变的前提下跑通「写一个贪吃蛇游戏」的任务。TaoToken 在这里只承担统一模型接入层的角色不替换你的工具函数也不改变 Agent 的推理循环。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 先拿到 Key再回来改代码。一、原问题Agent 能跑但接入层是散的先复盘一下原始代码里和接入相关的部分。agent.py的ReActAgent.__init__里只有一行self.client anthropic.Anthropic()这一行背后其实藏了三个隐含假设第一ANTHROPIC_API_KEY已经写在环境变量里第二请求默认打到 Anthropic 官方端点第三模型 ID 硬编码在messages.create的model参数里。单机自己玩没问题但一旦出现下面这些场景就会卡住本地开发、测试机、CI 三套环境Key 和 Base URL 各管各的改一次代码提交一次想把模型从claude-3-5-sonnet-20241022换成别的得全局搜model再逐个改多人协作时Key 通过聊天工具传来传去既不好轮换也不好审计官方额度或并发受限时Agent 跑到一半报错排查起来分不清是工具逻辑问题还是接入问题。这些都不是 Agent 本身的问题而是接入层没有收口。我们要做的就是把「用哪个端点、用哪个 Key、用哪个模型」这三件事从agent.py里抽出来交给一个统一的接入层。TaoToken 就是这个接入层你从官网创建 Key把base_url指向https://taotoken.net/apiAgent 的其余部分一行都不用动。二、TaoToken 前置拿 Key、认端点、明确边界在改代码之前先把三件事确认清楚。第一创建 Key。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册后在控制台创建 API Key。这个 Key 就是后面要填进api_key参数的值本文里统一用YOUR_API_KEY占位你替换成自己的即可。Key 的管理页面在 https://taotoken.net/console/api-keys 后续轮换、停用都在这里操作。第二认准端点。TaoToken 的 API 端点是https://taotoken.net/api注意这里不带任何查询参数直接作为base_url使用。Anthropic SDK 会自动在这个 base 上拼接/v1/messages之类的路径所以你不要自己补/v1也不要加多余的斜杠。第三明确边界。这一点很重要TaoToken 只负责模型推理这一层。你的read_file还是读本地文件write_to_file还是写本地文件run_terminal_command还是通过subprocess执行命令ReAct 循环还是那个for iteration in range(MAX_ITERATIONS)。TaoToken 不碰这些它只回答「这次messages.create请求发到哪、用哪个 Key、由哪个模型来推理」。想清楚这个边界后面的改动就非常小。如果你还想在改代码前先验证一下 Key 是否可用可以到模型对话页面 https://taotoken.net/models 发一条测试消息确认能正常返回再回到本地改 Agent。三、可复制配置只改 agent.py 的初始化部分下面给出改动后的agent.py关键片段。tools.py完全不动SYSTEM_PROMPT、_parse_tool_call、_execute_tool、_extract_tag这些也都不动唯一变化的是ReActAgent.__init__和messages.create里的模型参数来源。推荐的做法是把接入配置集中到环境变量代码里只读不写死# agent.py 顶部 import os import re import anthropic from tools import AVAILABLE_TOOLS # 接入层配置全部从环境变量读取代码里不出现明文 Key TAOTOKEN_BASE_URL os.getenv(TAOTOKEN_BASE_URL, https://taotoken.net/api) TAOTOKEN_API_KEY os.getenv(TAOTOKEN_API_KEY, YOUR_API_KEY) TAOTOKEN_MODEL_ID os.getenv(TAOTOKEN_MODEL_ID, claude-3-5-sonnet-20241022)然后修改ReActAgent.__init__class ReActAgent: def __init__(self, working_dir: str .): # 关键改动显式指定 base_url 和 api_key self.client anthropic.Anthropic( base_urlTAOTOKEN_BASE_URL, api_keyTAOTOKEN_API_KEY, ) self.working_dir working_dir self.messages []再修改run方法里调用模型的那一行把硬编码的模型 ID 换成变量response self.client.messages.create( modelTAOTOKEN_MODEL_ID, max_tokens4096, systemSYSTEM_PROMPT, messagesself.messages, )就这三处。tools.py里的三个工具函数、AVAILABLE_TOOLS注册表、ReAct 循环、XML 解析逻辑全部原样保留。改完之后你在终端里这样运行export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_MODEL_IDclaude-3-5-sonnet-20241022 python agent.py ./snake 写一个贪吃蛇游戏用 HTML、CSS 和 JavaScript 实现代码分别放在 index.html、style.css、game.js 三个文件中如果你更习惯用 CLI 方式管理也可以先安装 TaoToken 的命令行工具npm i -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m claude-3-5-sonnet-20241022不过对于这个 Python Agent直接用环境变量注入是最轻的方式不引入额外依赖。四、验证请求让 Agent 自己跑通贪吃蛇任务配置改完接下来就是验证。验证分两步先确认接入层通了再确认 Agent 的完整循环能跑完。第一步最小连通性验证。在项目目录下开一个 Python 交互环境单独测一次messages.createimport anthropic client anthropic.Anthropic( base_urlhttps://taotoken.net/api, api_keyYOUR_API_KEY, ) resp client.messages.create( modelclaude-3-5-sonnet-20241022, max_tokens256, messages[{role: user, content: 只回复两个字通了}], ) print(resp.content[0].text)如果这里能打印出模型返回的内容说明 Key、Base URL、模型 ID 三者都对接入层没问题。如果这一步就报错先别急着跑 Agent直接跳到第五节的排查清单。第二步跑完整任务。连通性通过后执行前面那条python agent.py ./snake 写一个贪吃蛇游戏...命令。你会看到终端里逐轮打印推理过程大致是这样一条链路第 1 轮模型输出thinking分析任务决定先写index.html发起write_to_file工具调用第 2 轮Agent 执行write_to_file把结果作为tool_result回填模型继续写style.css第 3 轮写game.js把游戏逻辑放进去第 4 轮模型调用run_terminal_command用ls或类似命令确认三个文件都已创建第 5 轮模型输出final_answer报告任务完成。整个过程里read_file、write_to_file、run_terminal_command都是你本地在跑只有每一轮messages.create的推理请求走 TaoToken。跑完后到./snake目录下确认index.html、style.css、game.js三个文件都在用浏览器打开index.html能看到贪吃蛇能动就说明这个 200 行 Agent 已经完整跑通。成功结果的判断标准有三条终端里出现final_answer标签./snake目录下三个文件齐全且非空浏览器打开页面后游戏可交互。三条都满足接入改造就算完成。五、本篇常见错排查改接入层时报错往往集中在几个固定位置。下面按「报错现象 → 原因 → 处理」来列。报错一AuthenticationError或 401。最常见的原因是api_key没传对。检查三点环境变量TAOTOKEN_API_KEY是否真的 export 成功可以echo $TAOTOKEN_API_KEY确认代码里是否误用了ANTHROPIC_API_KEY这个旧变量名Key 是否在控制台被停用。如果都正常到 https://taotoken.net/console/api-keys 重新生成一个 Key 再试。报错二ConnectionError或请求超时。多半是base_url写错了。确认值是https://taotoken.net/api不要写成https://taotoken.net/api/v1也不要漏掉https。另外检查本机网络是否能正常访问该域名公司内网如果有代理需要把代理配置加到环境变量里。报错三NotFoundError或提示模型不存在。这是model参数的问题。确认TAOTOKEN_MODEL_ID的值和你在控制台看到的可用模型 ID 一致不要自己拼写变体。如果暂时不确定用哪个可以先到模型对话页面 https://taotoken.net/models 试一条消息用能正常返回的模型 ID 回填。报错四Agent 循环跑满 20 轮还没出final_answer。这不是接入层报错而是模型输出格式没被正确解析。检查_parse_tool_call是否还能匹配到tool_call标签——如果你在改接入层时顺手动了SYSTEM_PROMPT可能导致模型不再按 XML 格式输出。恢复原始SYSTEM_PROMPT即可。另外确认MAX_ITERATIONS没有被改小。报错五工具执行结果回填后模型「装看不见」。检查回填的消息格式必须是{role: user, content: ftool_result\n{tool_result}\n/tool_result}。如果误写成assistant角色模型会把自己的工具结果当成自己说过的话循环就会乱。报错六本地能跑换台机器就 401。说明 Key 没有通过环境变量注入而是硬编码在了某台机器上。回到第三节的做法把TAOTOKEN_API_KEY统一走环境变量代码里只留YOUR_API_KEY占位。排查时如果拿不准是接入问题还是 Agent 逻辑问题最快的区分方法是回到第四节的「最小连通性验证」单独跑一次messages.create。这一步通了问题就在 Agent 逻辑这一步不通问题就在接入配置。接入相关的文档和 Key 管理入口分别在 https://taotoken.net/doc 和 https://taotoken.net/console/api-keys 。六、接入收口之后Agent 还能怎么用到这里你的 200 行 Python Agent 已经完成了接入层收口tools.py一行没改ReAct 循环一行没改只把anthropic.Anthropic()的初始化和model参数换成了从环境变量读取的 TaoToken 配置。这个改动的价值不在于「换了个端点」而在于把模型接入从业务代码里剥离出来——以后换模型、换环境、轮换 Key都只动环境变量不动 Agent 逻辑。如果你接下来打算长期跑这类编码 Agent比如让它批量处理文件、持续迭代一个小项目或者把 ReAct 循环接到更复杂的任务上可以了解一下 Coding Planhttps://taotoken.net/coding-plan 。它面向的就是这种持续消耗 Token 的编码场景配合你现在这套已经收口好的接入配置切换成本很低。如果你还想继续打磨这个 Agent 本身下一步可以做的方向包括给run_terminal_command加白名单和超时控制、给write_to_file加 diff 预览、把MAX_ITERATIONS和上下文长度做联动管理。这些都属于 Agent 逻辑层和接入层无关改起来也不会再牵动 Key 和 Base URL。需要再确认接入细节的话接入文档在 https://taotoken.net/doc Key 管理在 https://taotoken.net/console/api-keys 模型对话验证在 https://taotoken.net/models 。把这几处收藏好下次换环境时按第三节改三个环境变量Agent 就能直接跑起来。