1. 客户咨询 Agent 答偏了,先别急着改 prompt
做客户咨询自动回复的团队,几乎都会撞上同一类事故:用户问「我这单为什么还没发货」,Agent 没去调查询工具,反而顺着上下文编了一段物流状态;或者该走知识库检索的时候它选择了自由发挥,答得流畅但完全是错的。你盯着终端里刷过去的一屏输出,根本判断不出问题出在模型选型、prompt 措辞、工具返回格式,还是上下文被截断。
这篇只做一件事:把TaoToken(官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=llmspace_model_setup )的 Key 填进LLM Space 的模型设置,让https://taotoken.net/api成为你追踪、重放、评估 Agent 的统一观察点。
LLM Space 是面向 Agent 构建者的本地桌面应用,由 DeerFlow 团队开源、TypeScript 实现,把「原型 → 追踪 → 调试 → 评估」串成一条工作流。它最有价值的不是帮你写 Agent,而是把那个黑盒打开:每一次模型调用的请求体、每一次工具执行的入参与返回值、每一步的耗时与 Token 消耗,都摊在时间线上。你不再是「加 print 猜原因」,而是点开某次失败的运行,逐步回看它到底在哪一环走偏。
而这一切成立的前提,是模型调用得能被稳定地记录下来。所以第一步不是写 prompt,是把模型端点配好——配错端点,后面所有追踪都是噪音;配对了,重放和评估才有意义。下面从模型设置对照表开始,一步步落到可复现的产出:一份设置对照、一套重放步骤、一份 Token 调用记录。
2. LLM Space 模型设置对照:Base URL、Key、模型名三段式
LLM Space 的模型设置面板本质上是「开放兼容端点 + 自定义模型名」的组合。你不需要等它内置某个厂商,只要拿到一个兼容的 Base URL 和一个可用的 Key,就能把模型接进去。打开设置后,按下面这张对照表填:
| 设置项 | 填写值 | 说明 |
|---|---|---|
| Provider / 供应商类型 | OpenAI Compatible(自定义兼容端点) | 不要选具体厂商预设,走通用兼容通道 |
| Base URL / API 地址 | https://taotoken.net/api | 工具配置项,不加 UTM 参数 |
| API Key | YOUR_API_KEY | 从控制台创建后粘贴,本地保存 |
| Model / 模型 ID | 你在控制台模型列表里看到的 ID | 照抄控制台,别照抄别人的博客 |
| 流式输出 | 按需开启 | 追踪面板对非流式和流式都能记录 |
| 超时 | 建议 60s 起 | 客户咨询场景常带检索,太短会误判为模型问题 |
Key 的获取路径就在这里:打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=llmspace_key ,登录后进控制台创建 API Key。拿到之后先别急着贴进 Agent 项目,先做一次连通性验证:
# 先确认 Key 和 Base URL 都通,再往 LLM Space 里填 curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer YOUR_API_KEY" \ | head -c 400返回里能看到模型列表,说明 Key 有效、网络可达。这里有个容易踩的坑:LLM Space 的设置面板里填的是https://taotoken.net/api,而如果你用 OpenAI 兼容的 SDK 手工调用,通常要把base_url写成https://taotoken.net/api/v1——SDK 不会替你补路径,面板和 SDK 的写法要分开记。把这两个值写成注释贴在项目 README 里,团队里换人接手时能省半小时。
另外提醒一句:LLM Space 是 local-first 的桌面应用,Key 和线程文件都落在你本机。这对做私有化交付的团队是好消息,但也意味着每台开发机都要各自配一次,别指望从云端同步下来。
3. 搭一个可复现的客户咨询 Agent 最小骨架
模型设置填好之后,先用一个最小骨架把链路跑通,再去 LLM Space 里看追踪。骨架不需要复杂框架,一个系统提示、一个知识库检索工具、一个循环就够了。
# requirements: openai>=1.30 import os, json from openai import OpenAI client = OpenAI( api_key=os.environ["TAOTOKEN_API_KEY"], # 即 YOUR_API_KEY base_url="https://taotoken.net/api/v1", # SDK 写法,注意 /v1 ) SYSTEM_PROMPT = """你是电商客服助手。规则: 1. 涉及订单状态、物流、退款进度的问题,必须先调用 search_order 工具。 2. 工具返回为空或超时,如实说明并建议转人工,禁止自行推测。 3. 回答不超过 120 字,不承诺具体到货时间。 """ TOOLS = [{ "type": "function", "function": { "name": "search_order", "description": "按订单号或手机号查询订单与物流状态", "parameters": { "type": "object", "properties": { "order_id": {"type": "string", "description": "订单号"}, "phone": {"type": "string", "description": "下单手机号"} }, "required": [] } } }] def ask(question: str, order_id: str = ""): messages = [ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": f"订单号:{order_id}\n问题:{question}"}, ] resp = client.chat.completions.create( model=os.environ.get("TAOTOKEN_MODEL", "你的模型ID"), messages=messages, tools=TOOLS, temperature=0.2, ) msg = resp.choices[0].message return msg if __name__ == "__main__": print(ask("我这个订单为什么还没发货?", order_id="SO2026xxxx"))把TAOTOKEN_API_KEY和TAOTOKEN_MODEL写进.env,别硬编码进代码。这一步跑通的标准不是「回答对了」,而是:
- 请求确实打到了
https://taotoken.net/api; - 模型在需要时返回了
tool_calls,而不是直接给一段编造的物流文案; - 你能在 LLM Space 的追踪面板里看到这次调用的完整记录。
如果第二条不成立,别改 prompt,先去第 5 节看重放。
4. 读懂 Token 调用记录:追踪面板上到底该看什么
很多人第一次打开追踪面板会被信息量淹没。对客户咨询 Agent 来说,只需要盯住四类字段,就足以定位八成的「答偏」问题。
第一类:请求侧上下文。这次调用实际发出去的 system prompt 是什么?历史消息被裁到几条?如果 system prompt 里那条「必须先调用 search_order」在某次重构后丢了,Agent 不调工具就完全合理——它不是犯错,是你没告诉它。
第二类:工具定义与工具返回。工具 schema 有没有在请求里?search_order返回的是结构化 JSON,还是一段 JSON 字符串?后者在很多模型上会导致解析失败,模型看不懂就干脆绕过去自己答。
第三类:usage 字段。输入 Token、输出 Token、是否有缓存命中。客户咨询场景的 system prompt 通常很长,如果输入 Token 每次都接近上限,说明上下文管理该优化了——这直接关联成本。
第四类:时序与重试。工具调用耗时是否异常?有没有超时后模型「自我补救」地开始编?一次重试如果没有被标记,你看到的追踪会像两个不同的决策,实际是同一轮。
一份正常的追踪记录长这样(示意):
{ "run_id": "run_2026xxxx_0031", "step": 2, "type": "tool_call", "tool": "search_order", "arguments": {"order_id": "SO2026xxxx"}, "result": {"status": "shipped", "carrier": "SF", "updated_at": "2026-09-07T10:22:00Z"}, "latency_ms": 412, "usage": {"prompt_tokens": 1180, "completion_tokens": 96}, "model": "你的模型ID", "endpoint": "https://taotoken.net/api" }把endpoint字段固定成 TaoToken 的地址,好处是团队里所有人的追踪记录一眼就能确认「有没有人偷偷换了模型供应商」。这在多人协作的 Agent 项目里非常实用——配置漂移是排查成本最高的隐形问题之一。
5. 重放步骤:一次「不查知识库」的失败怎么定位
回到开头那个场景:某类问题 Agent 总是直接编,不去调用检索工具。以前的做法是翻日志、加 print、改一处、重跑一轮,半小时起步还不一定收敛。换成重放流程,就是下面这六步。
第一步,锁定失败样本。在 LLM Space 的线程列表里按时间或按模型筛选,找到那次答偏的运行,记下 run_id。别凭记忆找,记忆里的「那次」往往不是真正出问题的那次。
第二步,整段回放。先把这次运行从头到尾看一遍,不做任何判断。很多人一上来就跳到工具调用那一步,结果忽略了前面上下文被裁剪的事实。
第三步,定位决策分叉点。找到「模型本可以调工具、但选择了直接回答」的那一轮。看它当时的输入上下文里,工具定义还在不在、任务描述清不清楚。
第四步,单步重放。从分叉点前一步开始逐步执行,复现模型的每一次选择。注意这里重放的是 Agent 的思考与动作,不是逐行调试代码——传统断点对概率性输出本来就没用。
第五步,做最小变量改动。一次只改一个变量:要么补一句工具约束,要么把工具返回从字符串改成结构化对象,要么调低 temperature。改完再重放同一样本。
第六步,记录对照结论。把「改了什么 → 哪一步变了 → 结果是否变好」写进 issue。这一步就是把玄学调参变成工程资产的关键,也是评估环节的数据来源。
六步走下来,你得到的不再是「感觉现在好点了」,而是一条可追溯的因果链。对企业交付来说,这条链本身就是可以拿给客户看的排查依据。
6. 顺带统一 Claude Code、Codex 与 CC Switch 的端点配置
既然已经把 Base URL 统一到 TaoToken,开发环节的 AI 工具也顺手对齐,省得每个工具各配一套、各自踩坑。
Claude Code:写~/.claude/settings.json,走ANTHROPIC_*系列变量。
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "你在控制台看到的模型ID", "ANTHROPIC_SMALL_FAST_MODEL": "你在控制台看到的轻量模型ID" } }写完重启 Claude Code,然后在会话里问一句和上面curl同样的问题来确认链路。如果之前配过硬编码的旧地址,记得先清掉 shell 里残留的环境变量,否则 settings.json 会被覆盖。
Codex:写~/.codex/config.toml,走 TOML 配置,不要套用ANTHROPIC_*。这是两套完全不同的配置体系,混用必然报错。
model = "你在控制台看到的模型ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api/v1" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"Key 通过环境变量注入,别写进配置文件:
export TAOTOKEN_API_KEY=YOUR_API_KEY echo 'export TAOTOKEN_API_KEY=YOUR_API_KEY' >> ~/.zshrcCC Switch 三件套:端点、Key、默认模型。如果你用 CC Switch 管理多套配置,本质上就是在切换这三个字段的组合:Base URL 指向https://taotoken.net/api,API Key 填创建好的YOUR_API_KEY,默认模型填控制台里的模型 ID。三件套对齐之后,切换供应商不会再出现「Key 换了但地址没换」这类低级事故——而这种事故在追踪面板上表现为一堆 401,非常容易误判成额度问题。
7. 高频报错与排查清单
配置阶段的问题大多集中在几个固定位置,按表对号入座即可:
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 401 Unauthorized | Key 拼错、带了空格、或环境变量没生效 | 重新echo $TAOTOKEN_API_KEY确认;Key 只在控制台重新创建一次 |
| 404 Not Found | Base URL 少了或多了/v1 | 面板填https://taotoken.net/api,SDK 填.../api/v1 |
| 模型不存在 | 模型 ID 抄自别处,与控制台不一致 | 以控制台模型列表为准,逐个核对 |
| 流式输出中断 | 超时设置过短或中间层缓冲 | 超时提到 60s 以上,先关流式验证链路 |
| 工具调用从不触发 | 工具 schema 未随请求发送,或约束写在被裁剪的历史里 | 去 LLM Space 追踪面板看请求体,确认 schema 在不在 |
| 同一问题结果差异大 | temperature 偏高、工具返回格式不稳定 | 降到 0.2 以下,工具返回统一为结构化对象 |
排查顺序建议固定为「先连通、再追踪、后 prompt」。跳过前两步直接改提示词,是最常见的无效劳动。
8. 从 demo 到生产:可观测性才是 Agent 的准入门槛
客户咨询 Agent 从能跑到可信,中间隔着的不是模型能力,而是可解释性。企业客户真正关心的从来不是「你的 Agent 有多聪明」,而是「它答错了,你能不能快速定位、能不能给出解释、能不能持续优化」。没有追踪、重放、评估这三件套,这三个问题一个都答不上来;有了它们,Agent 才具备进入生产环境的资格。
而在多云、多模型、多工具并存的现实里,可观测性的地基是端点统一:所有模型调用都经过同一个入口,追踪记录才有可对比的坐标系。把 LLM Space 的模型设置指向https://taotoken.net/api,本质上是给这个坐标系定了一个原点。建议你现在就按第 2 节的对照表配一遍,再挑一个失败的客户咨询样本走完第 5 节的六步重放——第一次真正做到「看」而不是「猜」,那种感觉会很明显。
下一步可以直接从这几条路径往下走:
- 先在 模型对话 里验证模型 ID 与响应效果,确认这套端点在你的业务话术下表现稳定;
- 如果你同时用 Claude Code、Codex 等编码工具,看下 Coding Plan,把开发期和运行期的调用统一到一处管理;
- 进 API Keys 控制台 创建并妥善保存
YOUR_API_KEY,注意本机保存、不要提交进 Git; - 配置 Claude Code 时对照 Claude Code 文档,逐项核对
ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN与模型变量的写法。
工具不会让你的 Agent 突然变聪明,但它能让你终于看清 Agent 每一步在做什么。对正在把客户咨询 Agent 推向生产的团队来说,这份「看得见」比「更聪明」稀缺得多。