mirror of
https://github.com/tvytlx/ai-agent-deep-dive.git
synced 2026-04-03 07:34:50 +08:00
144 lines
3.7 KiB
Markdown
144 lines
3.7 KiB
Markdown
# 01. 系统提示词与 Agent 编排需求文档
|
||
|
||
## 1. 系统提示词为什么不是一段固定文案
|
||
|
||
从源码结构可以反推,这个产品要求系统提示词具备“动态拼装”能力,而不是固定模板。
|
||
|
||
### 需求原因
|
||
用户环境、工具集、语言、输出风格、会话状态、MCP 连接状态都可能变化。如果系统提示词不能动态组装,就会出现:
|
||
- 规则不匹配当前会话
|
||
- 工具说明失效
|
||
- 记忆无法注入
|
||
- token 成本失控
|
||
|
||
## 2. 系统提示词层的核心需求
|
||
|
||
### 2.1 基础身份定义
|
||
系统需要明确告诉模型:
|
||
- 你是执行型协作者
|
||
- 你的主要任务是软件工程支持
|
||
- 你的输出直接给用户看
|
||
|
||
### 2.2 做任务规范
|
||
系统需要内建一套工程行为规范,例如:
|
||
- 不要乱加功能
|
||
- 不要过度抽象
|
||
- 不要假装验证过
|
||
- 先读代码再改代码
|
||
- 不要随意创建文件
|
||
|
||
这不是“风格偏好”,而是稳定性需求。
|
||
|
||
### 2.3 风险动作规范
|
||
系统需要明确哪些操作有 blast radius,需要额外确认。例如:
|
||
- 删除
|
||
- 推送
|
||
- 外部可见动作
|
||
- 修改共享状态
|
||
|
||
### 2.4 工具使用语法
|
||
系统不仅要告诉模型“有什么工具”,还要告诉它:
|
||
- 什么时候读文件
|
||
- 什么时候搜索
|
||
- 什么时候编辑
|
||
- 什么时候用 shell
|
||
- 什么时候并行调用
|
||
|
||
## 3. 动态区块需求
|
||
|
||
系统提示词至少需要支持以下动态区块:
|
||
|
||
1. 环境信息
|
||
2. 当前语言偏好
|
||
3. 输出风格
|
||
4. 会话局部规则
|
||
5. 记忆内容
|
||
6. MCP 指令
|
||
7. scratchpad / 临时工作区规则
|
||
8. token budget 提示
|
||
|
||
## 4. 为什么要有 Prompt cache boundary
|
||
|
||
如果每次请求都完全重造提示词,会带来两个问题:
|
||
- 成本上升
|
||
- 缓存命中下降
|
||
|
||
因此产品需要把系统提示词分成:
|
||
- 稳定前缀
|
||
- 动态后缀
|
||
|
||
这样才能兼顾灵活性与成本控制。
|
||
|
||
## 5. Agent 编排的需求本质
|
||
|
||
系统需要支持把复杂任务拆给不同角色,而不是只依赖一个万能主 agent。
|
||
|
||
### 必须支持的角色至少包括
|
||
- 通用执行角色
|
||
- 探索角色
|
||
- 规划角色
|
||
- 验证角色
|
||
|
||
### 需求原因
|
||
不同任务阶段对行为模式要求不同:
|
||
- 探索需要只读
|
||
- 规划需要结构化输出
|
||
- 实施需要可执行
|
||
- 验证需要对抗性检查
|
||
|
||
如果用一个 agent 混合承担所有角色,稳定性会下降。
|
||
|
||
## 6. 子 Agent 设计需求
|
||
|
||
### 6.1 fork 子任务
|
||
系统需要支持:
|
||
- 子任务继承上下文
|
||
- 子任务尽量共享缓存前缀
|
||
- 子任务减少主线程污染
|
||
|
||
### 6.2 background 子任务
|
||
系统需要支持:
|
||
- 后台执行
|
||
- 进度跟踪
|
||
- 结果通知
|
||
- 可恢复输出
|
||
|
||
### 6.3 isolation 子任务
|
||
系统需要支持:
|
||
- worktree 隔离
|
||
- remote 隔离(如果启用)
|
||
|
||
## 7. Prompt 写给子 Agent 的需求
|
||
|
||
主 agent 必须能够给子 agent 交接充分背景,不能只丢一个模糊命令。产品层面要明确要求:
|
||
- 写清任务目标
|
||
- 写清已知背景
|
||
- 写清约束
|
||
- 写清期望输出
|
||
|
||
## 8. 伪代码表达
|
||
|
||
```python
|
||
class SystemPromptBuilder:
|
||
def build(self, env, tools, memory, output_style, language, mcp_info):
|
||
static_sections = [
|
||
intro(),
|
||
system_rules(),
|
||
task_rules(),
|
||
action_safety(),
|
||
tool_usage_rules(),
|
||
]
|
||
dynamic_sections = [
|
||
env_section(env),
|
||
language_section(language),
|
||
output_style_section(output_style),
|
||
memory_section(memory),
|
||
mcp_section(mcp_info),
|
||
]
|
||
return static_sections + dynamic_sections
|
||
```
|
||
|
||
## 9. 产品经理视角下的总需求句
|
||
|
||
> 系统提示词层的核心需求,是把产品规则、工具语法、会话状态和环境约束组装成一套可动态生成、可缓存优化、可支持多角色协作的运行时控制平面。
|