my-agent-py 的 chat 子命令调大模型,Base URL 改到 TaoToken

发布时间:2026/9/22 0:05:34
my-agent-py 的 chat 子命令调大模型,Base URL 改到 TaoToken 1. my-agent-py chat 子命令为什么需要换掉默认 Base URL如果你跟着《把Agent装进CLI》写到第 10 章手里应该已经有一个能跑通命令树、输出规范、退出码稳定的my-agent-py。但真到chat子命令这一步很多人会卡在同一个地方代码里写死了ANTHROPIC_API_KEYSDK 默认往官方地址发请求密钥散落在环境变量、配置文件、甚至某次临时export里换台机器就得重新配一遍。这篇要解决的就是这个接入配置问题把my-agent-py chat的模型调用通道从默认地址切到 TaoToken 提供的 Base URL用一把统一的 Key 管理所有模型调用。TaoToken 在这里的角色很明确——只提供 API Key 和 Base URL 两样东西不替你的 CLI 执行业务逻辑也不管你的工具描述清单长什么样。你的chat子命令怎么组织 prompt、怎么处理流式、怎么把 token 用量写到 stderr这些还是你自己的代码说了算。适合谁看已经写完chat子命令骨架、但被密钥管理和 Base URL 配置卡住的读者或者想让 CLI 的模型调用凭证集中管理、不想在每个子命令里重复读环境变量的人。下面按「先拿 Key、再改代码、最后验证」的顺序走一遍每一步都能直接复制。2. 前置准备从 TaoToken 拿到 Key 和 Base URL在动代码之前先把两样东西准备好。第一样是 API Key第二样是 Base URL。这两样都从 TaoToken 拿注册和创建 Key 的入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 。注册流程不复杂邮箱验证完就能进控制台。进控制台后找 API Keys 页面点创建复制出来的那串就是你的 Key。这里有个习惯建议创建时给 Key 起个能认出来的名字比如my-agent-py-dev以后 Key 多了不至于分不清哪个是哪个。Key 只在创建时完整显示一次复制完先存到安全的地方别直接贴进代码。Base URL 是固定的https://taotoken.net/api。注意两个细节——不带/v1也不加任何查询参数。Anthropic SDK 自己会在 Base URL 后面拼/v1/messages这类路径你手动加上/v1反而会拼成/v1/v1/messages请求直接 404。这一点我在第一次配的时候踩过报错信息还不明显排查了半天。注意Key 属于凭证不要写进代码字面量不要 commit 到 Git也不要在--help输出里打印。配置文件权限设成 0600避免同机器其他用户读到。拿到这两样之后回到你的my-agent-py项目。接下来要改的地方有两处一处是resolve_api_key()的密钥来源链一处是 Anthropic SDK 客户端的初始化。下面分别说。3. 可复制配置改 resolve_api_key 与 SDK Base URL先看密钥来源链。原文 10.3.3 给的resolve_api_key()是按「环境变量 → 配置文件 → 报错提示」的顺序找 Key。这个结构本身没问题我们要做的是把环境变量名和配置字段名从 Anthropic 专用的改成通用的让 TaoToken 的 Key 能填进来。import os import json from pathlib import Path import click def resolve_api_key() - str: # 1. 环境变量优先方便 CI 和临时调用 if key : os.environ.get(TAOTOKEN_API_KEY): return key # 2. 配置文件次之适合本地长期使用 cfg Path.home() / .my-agent / config.json if cfg.exists(): data json.loads(cfg.read_text()) if key : data.get(taotoken_api_key): return key # 3. 都没有就明确报错别让请求带着空 Key 发出去 raise click.UsageError( 未找到 API 密钥。请设置 TAOTOKEN_API_KEY 环境变量 或运行 my-agent-py config set taotoken_api_key value )这里把环境变量名定为TAOTOKEN_API_KEY配置字段定为taotoken_api_key。你也可以保留ANTHROPIC_API_KEY作为兼容项但既然要统一管理建议直接换掉避免两套 Key 混用时分不清哪个生效。然后是 SDK 客户端初始化。Anthropic SDK 支持传base_url参数把 TaoToken 的地址填进去就行import os from anthropic import Anthropic def build_client() - Anthropic: return Anthropic( api_keyresolve_api_key(), base_urlhttps://taotoken.net/api, # 不带 /v1不加 UTM )把chat子命令里的Anthropic(api_keyos.environ[ANTHROPIC_API_KEY])换成build_client()密钥来源和 Base URL 就都统一了。完整改完的chat子命令大概长这样cli.command() click.argument(prompt) click.option(--model, defaultclaude-sonnet-4-5) def chat(prompt, model): 与大模型对话 client build_client() resp client.messages.create( modelmodel, max_tokens1024, messages[{role: user, content: prompt}], ) click.echo(resp.content[0].text)如果你之前写的是流式版本改动只在客户端构造那一行client.messages.stream(...)的调用方式不变。流式和非流式共用同一个build_client()不用维护两份配置。配置文件的写入命令也顺手改一下让config set支持新字段cli.command(config) click.argument(action, typeclick.Choice([set, get])) click.argument(key) click.argument(value, requiredFalse) def config_cmd(action, key, value): 管理 my-agent-py 配置 cfg_dir Path.home() / .my-agent cfg_dir.mkdir(mode0o700, exist_okTrue) cfg cfg_dir / config.json data json.loads(cfg.read_text()) if cfg.exists() else {} if action set: data[key] value cfg.write_text(json.dumps(data, indent2)) cfg.chmod(0o600) # 权限收紧 click.echo(f已写入 {key}) else: click.echo(data.get(key, ))cfg.chmod(0o600)这行别省配置文件里存的是明文 Key权限放开等于把 Key 摊给同机器所有人看。4. 验证请求用 my-agent-py chat 跑通并看 stderr配置改完先设环境变量再跑一次确认请求真的走通了export TAOTOKEN_API_KEY你刚创建的Key my-agent-py chat 用一句话解释什么是 CLI 的退出码契约如果 stdout 打印出模型回复说明 Base URL 和 Key 都生效了。但光看回复还不够我们要确认请求确实走了 TaoToken 而不是别的地址。这时候把 token 用量和延迟写到 stderr 就派上用场了——原文 10.3.3 的注意里提过模型回复走 stdout元数据走 stderr上游解析器读 stdout 只看到内容调试和计量靠 stderr。在chat子命令里加一段元数据输出import sys import time cli.command() click.argument(prompt) click.option(--model, defaultclaude-sonnet-4-5) def chat(prompt, model): 与大模型对话 client build_client() start time.time() resp client.messages.create( modelmodel, max_tokens1024, messages[{role: user, content: prompt}], ) elapsed time.time() - start click.echo(resp.content[0].text) # 元数据走 stderr不污染 stdout print( f[meta] model{resp.model} fin{resp.usage.input_tokens} fout{resp.usage.output_tokens} flatency{elapsed:.2f}s, filesys.stderr, )再跑一次把 stdout 和 stderr 分开看my-agent-py chat 写一个 Python 函数判断字符串是否为回文 2meta.log cat meta.logmeta.log里应该能看到类似[meta] model... in... out... latency...的行。有这行就说明请求完整走通了token 用量和延迟都拿到了。如果 stdout 有回复但 stderr 没有 meta 行检查一下print(..., filesys.stderr)是不是被别的地方重定向了。验证模型本身是否可用也可以直接在模型对话页面发一条测试消息确认 Key 的权限和额度没问题。这一步和 CLI 里的调用是两条独立通道但用的是同一把 Key。5. 本篇常见错排查配 Base URL 这一步报错往往不直观下面几个是我和读者都遇到过的。404 或路径重复最常见的原因是 Base URL 多写了/v1。Anthropic SDK 会在 Base URL 后拼/v1/messages你写https://taotoken.net/api/v1就变成/api/v1/v1/messages。正确写法是https://taotoken.net/api不带/v1。401 未授权Key 没读到或者读到了空字符串。先确认echo $TAOTOKEN_API_KEY有值再确认resolve_api_key()里的环境变量名和export的名字一致。如果用的是配置文件检查~/.my-agent/config.json里字段名是不是taotoken_api_key以及文件权限是不是 0600。请求超时或连接失败检查 Base URL 有没有拼错https://taotoken.net/api这个地址不要加尾部斜杠以外的任何东西。另外确认网络环境能正常访问该地址公司内网如果有出站限制需要让网络管理员放行。stdout 混入元数据如果上游解析器报 JSON 解析失败多半是 meta 行写到了 stdout。检查print的filesys.stderr参数有没有漏。流式模式下尤其要注意click.echo(text, nlFalse)是写 stdout 的meta 行必须单独走 stderr。Key 泄露风险如果git log里出现过 Key立刻去控制台吊销重新创建。已经 commit 的 Key 即使后来删掉历史记录里还在。配置文件权限没设 0600 的补上chmod 600 ~/.my-agent/config.json。提示排障时把--model换成一个确定可用的模型名再试排除模型名写错导致的 400。模型名和 Key 的可用范围有关具体以控制台里能看到的为准。6. 把模型调用通道固定下来到这里my-agent-py chat的模型调用通道就配好了Key 从TAOTOKEN_API_KEY或配置文件读Base URL 指向https://taotoken.net/apistdout 出回复、stderr 出用量和延迟。这套配置的好处是密钥来源集中以后再加summarize、translate之类的子命令直接复用build_client()就行不用每个命令都写一遍 SDK 初始化。如果你打算长期在编码和 Agent 场景里用这套通道可以了解一下 Coding Plan它更适合高频调用和 Agent 工作流。需要管理多把 Key、看调用量的话控制台里的 API Keys 页面能直接创建和吊销。接入过程中如果遇到 SDK 参数问题接入文档里有更细的字段说明。下一步可以做的是把chat子命令的流式输出和--output json模式对齐——流式走 stdout 给人看JSON 模式等完整响应一次性输出meta 始终走 stderr。这样你的 CLI 就同时具备了「给人用」和「给 Agent 调度」两种形态的雏形路径二和路径三也就自然接上了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询