ARTICLE DETAIL

资讯详情

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

台大李宏毅OpenClaw原理课来了!用TaoToken统一Key跑通系统提示与工具调用

台大李宏毅OpenClaw原理课来了!用TaoToken统一Key跑通系统提示与工具调用 1. 从李宏毅的 OpenClaw 课说起系统提示与工具调用到底怎么跑台大李宏毅老师最近那期 OpenClaw 原理课我反复看了两遍。课程里把 AI Agent 拆得很直白OpenClaw 本身不是模型它是跑在你电脑上、夹在人和语言模型之间的那层“接口”。你发一句话它不会原样转发而是先拼上一大段系统提示System Prompt再把历史对话一起塞进去最后才交给背后的语言模型。模型回一句“使用工具read参数question.txt”OpenClaw 就真的去读文件把结果再贴回上下文继续下一轮。这套链路听起来简单但真到自己动手复现时第一个卡点往往不是逻辑而是 Key。OpenClaw 背后可以接 Claude、GPT、Gemini 等不同模型如果你每个模型都单独申请一套 Key、单独配一遍环境变量光是切换和排错就够折腾半天。我试过用 TaoToken 把模型访问统一到一个 Key 上config.toml 和 settings.json 各写一份骨架后面换模型只改一个字段系统提示和工具调用的验证动作完全不用动。这篇就聚焦课程里“系统提示 工具调用”这一段落地环节给你可复制的配置骨架再演示一次完整的工具调用请求怎么验证成功。适合已经看完课程、想在自己机器上把 Agent 调用链路跑通的开发者。不需要你先把 OpenClaw 全部功能吃透只要能把一次 read 工具调用走通后面 Subagent、Skill、心跳这些机制都是在这条链路上加东西。2. 前置准备TaoToken 统一 Key 与 OpenClaw 环境2.1 为什么用统一 Key 而不是每个模型一套课程里李宏毅提到他的“小金”一开始选了个比较差的模型用起来烂得不行换成最新模型后能力直接爆表。这说明 Agent 的聪明程度取决于背后接的模型。但实际开发时你不可能只用一个模型调试系统提示可能用便宜快的跑复杂工具调用可能用能力强的做 Subagent 摘要可能又换一个。如果每个模型都单独配 KeyOpenClaw 的配置文件里就会散落一堆 api_key 字段改起来容易漏。TaoToken 的做法是给你一个统一入口模型名作为参数传Key 只有一套。这样 config.toml 里 provider 段保持稳定切换模型只动 model 那一行。2.2 拿到 Key 并确认接入地址先去 TaoToken 控制台创建一个 API Key。地址是 https://taotoken.net/api 注意这个是不带追踪参数的接入端点配置里填这个。创建完 Key 后你会在控制台看到它以 sk- 开头复制下来后面写进配置文件。注意Key 不要直接硬编码在会提交到 Git 的文件里。本地调试可以先用环境变量或者放在 .env 里并加进 .gitignore。2.3 OpenClaw 侧需要准备什么OpenClaw 本身按官方方式装好能启动网页界面即可。你不需要在这步就配好所有工具先确保它能读到一个 config.toml 和一个 settings.json。这两个文件的位置取决于你的安装方式通常在用户目录下的 .openclaw 文件夹里。如果找不到可以在 OpenClaw 启动日志里搜 config 关键字它会打印实际加载路径。3. 可复制配置config.toml 与 settings.json 骨架3.1 config.toml模型接入与系统提示挂载下面这份 config.toml 是我实测能跑通工具调用的最小骨架。关键点是 provider 段指向 TaoToken 的接入地址model 段留一个可替换的模型名system_prompt_file 指向你本地的系统提示文件。# ~/.openclaw/config.toml [provider] name taotoken base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY # 如果你的 OpenClaw 版本不支持 env 读取可临时写 api_key sk-xxx但不要提交 [model] # 这里填你要用的模型标识换模型只改这一行 name claude-sonnet max_tokens 4096 temperature 0.2 [agent] # 系统提示文件路径OpenClaw 会把它拼在用户消息前面 system_prompt_file ./prompts/system.txt # 历史对话保留轮数太小会导致工具调用上下文丢失 history_rounds 20 [tools] # 先只开 read 和 write验证链路足够 enabled [read, write] # 执行工具前是否需要人工批准调试阶段建议 true require_approval true这里 require_approval true 对应课程里讲的“配置层防御”。李宏毅特别强调语言模型层的防御不可靠程序级的批准才是六亲不认的。调试阶段打开它每次工具调用都会先问你你能清楚看到模型到底想执行什么。3.2 settings.json工具定义与调用格式settings.json 负责告诉 OpenClaw 工具有哪些、参数长什么样。模型本身不知道你电脑上有什么工具它全靠系统提示里的工具说明。下面这份骨架定义了 read 和 write 两个工具。{ tools: [ { name: read, description: 读取指定路径的文本文件内容, parameters: { type: object, properties: { path: { type: string, description: 要读取的文件路径相对于工作目录 } }, required: [path] } }, { name: write, description: 将内容写入指定路径的文本文件, parameters: { type: object, properties: { path: { type: string, description: 要写入的文件路径 }, content: { type: string, description: 要写入的文本内容 } }, required: [path, content] } } ], tool_call_format: { marker: 使用工具, param_separator: 参数 } }tool_call_format 这一段是给 OpenClaw 的解析器看的。课程里讲过模型回传的“使用工具read 参数question.txt”并不是魔法而是 OpenClaw 用固定规则去 parse 的。你这里的 marker 和 param_separator 要和系统提示里写给模型看的格式保持一致否则模型回得对OpenClaw 解析不出来。3.3 system.txt系统提示里必须写清的三件事系统提示是 Agent 的灵魂。课程里李宏毅的系统提示写了“你是一个 AI Agent”“你的名字是小金”“你可以使用以下工具”。落到我们这份最小配置system.txt 至少要有三块内容。你是一个运行在本地电脑上的 AI Agent。 你的任务是协助用户完成文件读写类操作。 你可以使用以下工具 - read读取指定路径的文本文件。调用格式使用工具read 参数path - write将内容写入指定路径。调用格式使用工具write 参数path 内容content 规则 1. 每次只调用一个工具。 2. 调用工具后等待结果返回再决定下一步。 3. 不要编造工具返回的内容。 4. 如果任务完成直接回复“任务完成”。这里第 3 条很关键。课程里提到弱模型会说“已记住”但实际没调工具纯粹记了个寂寞。系统提示里明确禁止编造工具返回能减少这种假动作。但真正要确认还是得看 OpenClaw 的日志里有没有实际的工具执行记录。4. 验证一次工具调用请求从发指令到看到结果4.1 准备测试文件在工作目录下建一个 question.txt内容写一行字比如“OpenClaw 的工具调用验证”。再确认 answer.txt 不存在这样后面 write 成功时你能明显看到新文件生成。echo OpenClaw 的工具调用验证 question.txt ls answer.txt 2/dev/null || echo answer.txt 不存在符合预期4.2 发起请求并观察工具调用启动 OpenClaw在对话界面输入请读取 question.txt 的内容然后写入 answer.txt。因为 config.toml 里 require_approval true你应该会先看到一条批准提示类似“Agent 请求执行 read参数 question.txt是否允许”点允许后OpenClaw 执行读取把内容贴回上下文模型再发起 write 请求你再批准一次。如果你在日志里看到类似下面的记录说明工具调用链路走通了[tool_call] nameread pathquestion.txt [tool_result] contentOpenClaw 的工具调用验证 [tool_call] namewrite pathanswer.txt contentOpenClaw 的工具调用验证 [tool_result] statusdone4.3 确认结果与上下文拼接检查 answer.txt 是否真的生成cat answer.txt # 预期输出OpenClaw 的工具调用验证如果文件内容正确说明从系统提示挂载、模型回传工具指令、OpenClaw 解析执行、结果回贴上下文这一整条链路是通的。这时候你可以把 require_approval 暂时关掉再跑一次同样的指令观察没有人工批准时是否也能完成。但关掉之前想清楚课程里那个删邮件事件就是因为批准机制在 compact 过程中丢了指令才出事的。5. 本篇常见错排查5.1 模型回了工具指令但 OpenClaw 没执行最常见的原因是 tool_call_format 里的 marker 和系统提示里写的不一致。比如系统提示写“使用工具”settings.json 里 marker 写成“调用工具”OpenClaw 就 parse 不出来。检查两处字符串是否完全一致包括冒号的全角半角。另一个可能是模型名填错实际请求发到了不支持工具调用的模型上。有些模型对工具调用格式支持不好回传的内容里没有 marker。换一个明确支持 function calling 的模型再试。5.2 工具执行了但模型下一轮不知道结果这通常是 history_rounds 设得太小或者 OpenClaw 在拼接上下文时没把 tool_result 放进历史。课程里反复强调语言模型没有记忆每次都是重新读一遍完整上下文。如果工具结果没被拼进去模型看到的就是“我调了工具但不知道结果”自然会卡住或编造。把 history_rounds 调到 20 以上再确认日志里 tool_result 后面紧跟着下一次模型请求。如果还是不行检查 config.toml 里有没有开启上下文压缩相关的选项压缩可能把工具结果截掉了。5.3 批准提示不出现工具直接执行了检查 config.toml 里 require_approval 是否被其他配置覆盖。有些 OpenClaw 版本里settings.json 的 tools 段也有独立的 approval 字段两边冲突时以更宽松的为准。另外如果你在调试过程中手动改过 memory.md 或 habit.md里面可能有“自动执行”类的指令被写进了系统提示导致批准机制被绕过。5.4 换了模型后工具调用格式变了不同模型对工具调用的输出格式可能有差异。有的模型习惯输出 JSON 格式的 tool_call有的习惯输出自然语言加 marker。如果你的系统提示只教了一种格式换模型后可能就不匹配了。解决办法是在系统提示里把格式写得更明确或者用 TaoToken 的统一入口先固定一个模型跑通再逐步换。6. 把链路跑通之后下一步怎么走一次 read write 的工具调用验证通过后你其实已经复现了课程里最核心的那段链路系统提示拼装、模型回传工具指令、OpenClaw 解析执行、结果回贴、模型继续接龙。后面 Subagent 机制无非是让主 Agent spawn 出子 Agent每个子 Agent 有独立上下文最后只回摘要Skill 系统无非是把 SOP 写成文字档按需读取心跳和 Cron Job 无非是定时触发这条链路。如果你要长期跑编码类或 Agent 类任务建议把模型访问统一到 TaoToken 的 Coding Plan 上config.toml 里 model 段换模型不用重新申请 Key调试系统提示和工具定义时切换成本低很多。需要验证不同模型对工具调用格式的支持差异时可以直接在模型对话里发同样的指令对比回传格式。接入文档里有完整的参数说明和示例配置卡住时对着查一遍通常能定位到问题。课程里李宏毅最后说AI 做事和 AI 搞事只是一线之隔。把批准机制打开、把系统提示写清楚、把工具结果确认到位这条链路跑得越熟你越知道什么时候该让它自己跑什么时候该伸手拦一下。
返回列表