如何理解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 的最小可用架构。