如何理解system prompt和json格式的tool

A
Admin

可以把它们理解成 Agent 系统里的两种完全不同的约束机制:

| 组件 | 作用 | 约束对象 | | ------------------ | --------------- | ------ | | System Prompt | 告诉模型应该怎么思考和决策 | 模型行为 | | Tool Schema (JSON) | 告诉模型工具长什么样、怎么调用 | 模型输出格式 |

一个负责脑子,一个负责手脚


System Prompt:行为约束

例如:

你是一名数据分析师。

规则:

- 不要编造数据
- 不知道表结构时先查看Schema
- 统计结果必须来源于数据库查询
- 回答前验证SQL结果

用户问:

上个月收入多少?

模型内部会倾向于:

我没有数据

→ 查看数据库

→ 查询收入

→ 给出答案

而不是:

我猜大概100万

因为 System Prompt 改变的是:

决策逻辑

而不是:

输出格式

Tool Schema:格式约束

假设有个工具:

query_db(sql)

你把它描述成:

{
  "name": "query_db",
  "description": "执行SQL查询",
  "parameters": {
    "type": "object",
    "properties": {
      "sql": {
        "type": "string"
      }
    },
    "required": ["sql"]
  }
}

模型看到后就知道:

query_db
必须接收:

{
  "sql": "..."
}

于是会输出:

{
  "name": "query_db",
  "arguments": {
    "sql": "SELECT * FROM users"
  }
}

而不会输出:

{
  "query": "SELECT * FROM users"
}

因为 Schema 不允许。


一个形象的比喻

假设你招聘一个数据分析师。

System Prompt

相当于岗位说明书:

你是数据分析师。

工作要求:

- 严谨
- 不允许猜测
- 先查数据再结论

告诉他:

怎么工作

Tool Schema

相当于公司给他的工具:

数据库查询系统

输入:

{
   sql: string
}

输出:

{
   rows: [...]
}

告诉他:

怎么使用工具

为什么两者缺一不可

假设只有 Tool,没有 System Prompt:

{
  "name": "query_db"
}

用户:

公司去年利润多少?

模型可能:

我猜利润是500万

因为没人要求它查数据库。


假设只有 Prompt,没有 Tool Schema:

你必须查数据库

模型会想查:

Action:
query_db(...)

但不知道:

参数叫什么?

返回什么?

格式是什么?

执行不了。


在 Codex 里的实际情况

Codex 本质上是:

System Prompt
+
Tool Definitions
+
Conversation

例如概念上:

[System]

你是软件工程Agent

优先修改代码

不要编造测试结果

遵守沙箱限制

------------------

[Tool]

shell(command)

read_file(path)

write_file(path, content)

------------------

[User]

修复登录Bug

然后模型决定:

先调用 read_file

再调用 shell

最后输出结果

设计领域 Agent 时的思路

例如做数据分析 Agent:

System Prompt

你是高级数据分析师。

原则:

1. 不编造数据
2. 优先查询数据库
3. SQL失败时解释原因
4. 输出时给出结论和依据

Tool Schema

{
  "name": "query_db",
  "parameters": {
    "type": "object",
    "properties": {
      "sql": {
        "type": "string"
      }
    }
  }
}

Agent Loop

用户问题
    ↓
LLM
    ↓
Tool Call
    ↓
执行SQL
    ↓
结果返回
    ↓
LLM分析
    ↓
最终回答

这就是 Codex、Claude Code、以及很多现代 Agent 的核心模式。

进一步抽象的话:

System Prompt
    =
    "告诉模型应该做什么"

Tool Schema
    =
    "告诉模型能够做什么"

Agent Loop
    =
    "让模型真的去做"

这三个部分组合起来,基本就是一个现代 Agent 的最小可用架构。


如何理解system prompt和json格式的tool | JBLOG