← 返回目录

第 4 卷

第 4 / 6 卷日期:

那两个工具没删,模型怎么知道如何用?

清单换了形式:框架用 schema 现场生成 TypeScript SDK 塞进提示词。读清单抓三样(中文注释是我加的,其余照录运行输出):

3

4interfaceToolArgsMap{//能调什么
5/** Add two numbers. */
6add: {
7/** First addend */
8a:number;
9/** Second addend */
10b:number;
11} &Record<string, jsonvalue>;
12/** Report the runtime environment. */
13env_probe:Record<string, jsonvalue>;
14}

15 16interface ToolOutputMap {// 返回什么

17add: number;

18env_probe: { 19platform?: string;

20node?: string;

21};

22} 23

24type ToolName = keyof ToolOutputMap 25

26declareclassToolCallErrorextendsError{//失败抛什么
27readonlyname:"ToolCallError";
28readonlytoolName:ToolName;
29}

30

31declareconsttools: {//模型就这么调
32[KinToolName]:(args:ToolArgsMap[K]) =>Promise<tooloutputmap[k]>;
33}</tooloutputmap[k]></string, jsonvalue></string, jsonvalue>

SDK 是 schema 的忠实翻译;env_probe 字段带 ?,因为 schema 没写 required,少写一个 required,模型看到的就是这个字段可能不存在(code mode 下模型看到的与 native

mode 不同)。

程序在哪跑、怎么调到工具?

Provider,程序就在独立 worker 线程里跑。tools.add、tools.env_probe 是运行时注入的绑定,每次调用都桥接回注册表、走完整流水线。

整串步骤在 worker 线程里跑完:中间结果留在变量里——逐次往返没了,只剩“发一次程序、收一份结果”:

复制代码 1//(此处代码仅用于演示,未接真实模型)

2constsum =awaittools.add({a:1,b:2})
3constenv =awaittools.env_probe({})
4console.log('platform =', env.platform)
5return{ sum,platform: env.platform}

跑出来:

复制代码 1{"isError": false,"content": [{"type": "text","text": "platform = darwin\n{\n\"

其中 content 的 text 渲染出来,就是模型看到的样子:

复制代码 1platform = darwin

2{ 3"sum": 3,

4"platform": "darwin"

5}

四个动作:add 求和、env_probe 探环境、console.log 进 logs、return 进 result ——两次调用只把渲染出的这份 content 送回模型上下文;中间值只活在程序变量里。

全站分卷索引 · 6 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷