1. 先解决 Key 和 Base URL:Claude Code 接 TaoToken 的最短路径
在 Claude Code 里让模型一次性吐出一套 FICC 场外衍生品平台的四层功能架构,最先卡住的往往不是提示词写得够不够细,而是 Key 和 Base URL 到底该往哪里填。这篇用 TaoToken 做供应商,先去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch 拿到 Key,Base URL 填https://taotoken.net/api,后面所有配置里的YOUR_API_KEY都换成它。
上一轮我用 Claude Code 推进一个金融交易平台项目,踩过一个顺序问题:架构文档一铺开、上下文一涨,请求量和 token 消耗比预想快得多,如果供应商入口不稳定,中途换 Key 会把已经养起来的对话链路整段打断。所以这一轮我改了做法——先把配置钉死,再进正式对话。顺序是:拿 Key → 写配置文件 → 跑一次连通性验证 → 再开始让模型产出架构清单。反过来做的话,架构没生成出来,你根本分不清是提示词的问题、上下文的问题,还是 Key 压根没生效。
这一篇的产出目标很具体:在 Claude Code 里用 TaoToken 提供的 Key,产出用户入口、核心系统、风控分析、集成服务四层架构清单,并且把模块边界写清楚。视角仍然是产品经理先立系统结构,一期只做对客门户,但架构必须站在全平台视角搭,否则后面每加一个模块、每扩一个品种,都可能伤筋动骨。
下面按“配置 → 提示词 → 四层架构核对 → 引擎边界 → 接口契约 → 排障”的顺序展开,每一步都可以跟着做一遍。
2. settings.json 与 ANTHROPIC_*:把供应商切换写成可复制的三份配置
Claude Code 的供应商切换,本质上就是让ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN指向 TaoToken。推荐用项目级或全局的settings.json,好处是配置跟着项目走,不需要每次开终端都 export 一遍。
全局配置放在~/.claude/settings.json,项目级放在项目根目录的.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY" } }如果你更习惯用环境变量,macOS / Linux 下这样写:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"Windows PowerShell:
$env:ANTHROPIC_BASE_URL = "https://taotoken.net/api" $env:ANTHROPIC_AUTH_TOKEN = "YOUR_API_KEY"这里要强调一句:上面这套ANTHROPIC_*是 Claude Code 的写法,不要套到 Codex 上去。Codex 走的是config.toml,两者字段完全不通用。Codex 的配置放在~/.codex/config.toml:
model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"对应的环境变量单独设一个:
export TAOTOKEN_API_KEY="YOUR_API_KEY"如果你同时用 Claude Code、Codex,还想在两者之间快速切换,就用 CC Switch 三件套的思路来管理:Base URL、API Key、默认模型,各自存成一份 profile,切换的时候只改引用,不改内容。这样切供应商不会把手写好的架构对话上下文搞乱,也不会出现“Claude Code 里能跑、Codex 里报 401”这种莫名其妙的错位。
Key 从哪来?统一走官网控制台:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch ,注册后进 API Keys 页面创建。创建完先别关页面,把 Key 粘到配置文件里,再跑一次连通性检查。
连通性验证建议用一次最简单的模型对话,而不是直接上架构提示词。进 https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch 发一条短消息,能正常返回,说明 Base URL 和 Key 都通了;如果报 401,多半是 Key 复制带了空格;如果报 404,检查 Base URL 有没有多写/v1或结尾斜杠。这一步排掉之后,再进正式对话。
3. 提示词骨架:让 Claude Code 先输出四层架构清单,再谈模块边界
配置通了之后,第二步是提示词。很多人一上来就让模型“设计一套 FICC 平台架构”,结果拿到一份看起来完整、但层级混乱、模块互相重叠的文档。问题不在模型能力,而在约束给得太松。
我这一轮的提示词骨架是这样的,可以直接复制去用:
你现在扮演 FICC 场外衍生品平台的产品架构师。 请基于以下约束,输出一份四层功能架构清单: 1. 分层固定为:用户入口层 / 核心系统层 / 风控与分析层 / 系统集成与基础服务层 2. 每层必须列出:模块名、一句话职责、上游依赖、下游被依赖方 3. 一期范围只做对客门户,其余入口保留占位并标注"二期" 4. 单独拆出"对冲撮合引擎"作为核心系统层的一个模块, 并说明它为什么需要横跨客户订单、自营订单、做市订单 5. 不允许虚构监管报送字段,只写模块边界 6. 输出格式:按层用 Markdown 表格, 列依次为 模块名 / 职责 / 上游 / 下游 / 本期是否实现这个提示词的关键在于第 2 条和第 5 条。第 2 条逼模型把“上游依赖”和“下游被依赖方”显式写出来,模块边界就藏在这两列里;第 5 条是防止模型为了“看起来完整”而编造字段。AI 输出东西快、结构完整,特别容易给人一种“看起来没问题”的错觉,你如果不在提示词里提前封口,它就会把没核实的内容整齐地包进文档里。
跑完这一轮,你会拿到一份四层表格。但拿到表格只是开始,真正的活是逐条核对边界。这一步别偷懒,下面单独讲。
4. 四层架构逐层体检:用户入口 / 核心系统 / 风控分析 / 集成服务
对照模型产出的表格,逐层过一遍,看它有没有把该留的占位留出来、该拆的模块拆开。
用户入口层,最终应该包含对客门户、交易员工作台、销售工作台、风控工作台、运营管理台、产品管理台六个入口。一期只实现对客门户,但其余五个必须留在架构图里,作用是让一期位置一目了然——否则你后面加交易员工作台的时候,会发现它不知道该挂在哪一层。
核心系统层,应该包含对客门户系统、产品管理系统、业务管理系统、交易子系统,以及一个必须单独拎出来的模块:对冲撮合引擎。前四个是常规拆分,第五个是这套平台和市面上常见平台最核心的差异点,后面单独一节讲。
风控与分析层,负责实时风控、日终风控、压力测试与情景分析、报告与分析。这里最容易出的问题是模型把“实时风控”和“事前风控”混成一件事。事前风控是订单提交时的校验动作,属于交易链路;实时风控是对存续敞口的持续监控,属于风控层。核对的时候把这两个拆开,否则接口契约会跟着错。
系统集成与基础服务层,包含用户中心与权限服务、参考数据服务,以及若干周边系统:客户管理系统、行情系统、外部交易通道、清结算平台、监管报送。这一层的模块大多不是一期要实现的,但必须在清单里列清楚,因为对客门户系统要依赖它们。
我在核对这一层的时候发现过一个典型问题:模型在“直接下单”这个场景下,又自己拆出了两个子场景,我当时扫了一眼觉得结构对就放过去了。直到后来输出功能列表,发现下单模块里多出来一个页面,倒查回去才发现问题出在架构文档。这个坑不大,但提醒我一件事——AI 不会主动告诉你“这里我多拆了一层”,它只会把多拆的内容整齐地包进文档里。如果你不逐条核对边界,后面的设计会一层一层把错误放大。
所以这一层的核对动作要具体:拿一张纸,把模型输出的模块名逐个抄下来,对着四层结构问三个问题——它属于哪一层?它的上游是谁?它的下游是谁?答不上来的模块,要么是多余,要么是边界没写清,回去让模型重写那一段。
5. 对冲撮合引擎为什么必须被单独拎出来
四层架构里,最值得单独讲的是核心系统层的对冲撮合引擎。很多平台的架构会把“订单匹配”当成交易子系统的一部分,但场外衍生品的场景不一样。
它真正要处理的,是跨业务条线、跨品种、跨市场的综合对冲与流动性寻优。A 账户的债券卖出需求,可以和 B 账户的买入需求匹配;代客业务里的利率风险敞口,也可能和自营盘里的外汇风险形成内部抵消。有些情况下甚至不需要发生实质的持仓和资金划转,只在合并报表层面形成内部承诺,把风险敞口抵消掉。
它的目的只有一个:最大化内部消化风险,减少不必要的外部交易,从而节约交易成本、资金占用和风险指标占用。
在 Claude Code 的提示词里,我把“生成对冲单的规则”也合并进了这个模块的描述,而不是放在交易子系统里。原因是:生成对冲单和撮合对冲单,本质上是同一个优化问题的两个阶段,拆到两个模块里会导致规则分散、边界模糊。让模型明白这一点,它输出的接口契约才会把这两个动作放在同一条链路上。
核对这一层的时候,重点看三件事:这个模块的输入是不是包含客户订单、自营订单、做市订单三类;它的输出是不是明确区分了“内部撮合成交”和“转外部通道报盘”两条路径;它和交易子系统之间的调用方向是同步还是异步。这三条对上了,后面写接口契约才不会返工。
6. 接口契约只做到粗粒度:给 AI 划边界的四个层级
接口契约这个阶段不需要做到字段级。我在提示词里明确要求模型只输出粗粒度契约:哪些系统之间存在接口、每个接口解决什么业务问题、关键输入输出是什么、同步还是异步。字段类型、校验规则、错误码、状态机,全部留到后续功能设计时再补——那时候需求已经收敛,现在硬写会浪费工作量,而且大概率会被推翻。
按与一期工作的关联度,接口分成四层来列。
第一层是对客门户前端和对客门户系统之间的接口,包括登录、产品浏览、下单、查询持仓资金。这一层是一期最直接要实现的,必须逐条列清楚。
第二层是对客门户系统与周边系统的接口,包括用户中心与权限服务、客户管理系统、产品管理系统、交易子系统、行情系统、业务管理系统。这些是一期对客门户必须依赖的外部服务,任何一条缺失,一期都跑不起来。
第三层是核心系统层内部的接口,比如对客门户系统到交易子系统、交易子系统到对冲撮合引擎、对冲撮合引擎到外部交易通道。这一层决定了核心链路的调用顺序,建议让模型把同步/异步标注出来。
第四层是业务运营链路,服务日终运营、追保强平、清结算。对客门户一期不直接涉及,所以只列清单,不展开。
让模型按这四层输出的时候,加一句约束:“每个接口必须写清楚它属于哪一层,如果归类不确定,单独列出来讨论。”这样能避免模型把不同层的接口混在一起,导致后面拆任务的时候边界打架。
粗粒度契约的价值在于,它能让你在不动代码的情况下,先把系统之间的握手顺序推演一遍。推演过程中如果发现两个接口形成循环依赖,说明模块边界有问题,回架构层改,比等到写代码时再改便宜得多。
7. 排障与落地顺序:从模型对话到 Coding Plan
配置和提示词都跑通之后,常见的报错就那几个,逐个排掉就行。
一是 401,Key 无效或没生效。先确认settings.json里的ANTHROPIC_AUTH_TOKEN是不是YOUR_API_KEY的占位符还没替换;再确认环境变量和配置文件没有同时设置且值冲突。Claude Code 的优先级是环境变量高于配置文件,两处值不一样时会用环境变量。
二是 404,Base URL 路径不对。TaoToken 的 Base URL 就是https://taotoken.net/api,不要自己加/v1,也不要留结尾斜杠。
三是超时。先确认网络能通https://taotoken.net/api,再确认当前对话上下文有没有过大。架构文档这种长文本任务,建议拆成“先生成某一层、再生成下一层”,而不是一次让它输出全部四层。
四是 Codex 侧配置不生效。检查~/.codex/config.toml里的env_key和实际设置的环境变量名是否一致;Codex 不会自动读取ANTHROPIC_*,这是两个独立的配置体系。
如果你同时用多个模型供应商,建议按 CC Switch 三件套的方式,把 Base URL、API Key、默认模型分别管理,切换时只改引用。这样在架构设计、需求文档、技术文档几个阶段之间切换模型时,不会把项目级的.claude/settings.json搞乱。
回顾一下这一轮的进度对比:上一阶段搭领域模型用了三天半;这一轮做系统功能架构、核心业务流程、接口契约,三项加起来四天。今天已经开始输出一期对客门户的功能列表。能明显感觉到,前期做的知识库、spec、每日对话沉淀开始起作用,先打整体地基、再建一期工程的路线也选对了。AI 对项目上下文的把握越来越稳,很多方案第一版就能接近可用。
但这个实验还在继续。接下来两周的重点是一期对客门户的需求文档,需求定稿之后进入技术文档和代码阶段。如果你也在用 Claude Code 做复杂产品设计,建议按下面的顺序把工具链搭好:
- 先去 https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch 发一条短消息,确认 Base URL 和 Key 通;
- 需要长期跑架构、需求、技术文档多阶段任务,看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch ;
- 到 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch 创建正式 Key,替换掉
YOUR_API_KEY; - 配置细节和字段说明查 https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch ;
- 最后回官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=ficc_arch 确认账号和套餐状态。
把这五步走完,Claude Code 里的 Key 和 Base URL 就算彻底钉死了。剩下的,就是拿第 3 节那段提示词,把 FICC 的四层架构清单跑出来,然后一层一层核对边界。