Files
nofx/AGENT_IMPLEMENTATION_SPEC.md
2026-04-25 16:18:45 +08:00

168 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENT Implementation Spec
## Goal
重构 Agent 的主循环逻辑:将意图识别、快照管理、字段提取完全交给 LLM 驱动。建立“任务栈”管理机制,确保跨 Skill、中途换话题、回填参数等复杂场景下的状态一致性并由 DAG 自动化完成执行逻辑。
## 1. Core Principles
### 1.1 必须遵守
- 大脑前置:每一轮用户输入必须先经过意图识别,禁止规则层先于模型层截断复合语义。
- 快照优先LLM 必须感知当前及历史快照Snapshot/Reference优先判断输入是否属于对已有任务的续接。
- DAG 驱动执行Skill Handler 仅负责原子操作,复杂的逻辑依赖、顺序、确认由 LLM 生成的 DAG 任务包驱动执行。
### 1.2 明确禁止
- 禁止静默失败:参数越界或逻辑冲突时,必须通过 LLM 反馈给用户原因,禁止直接丢弃输入。
- 禁止单向路由:禁止在单次意图识别中只认一个 Action必须支持多 Action 列表化输出。
## 2. Intent Handling
### 2.1 总入口
所有用户输入都必须先经过统一意图识别:
- [x]
统一意图识别需要判断以下结果:
- [x] `continue`
说明:续接当前快照。
- [x] `switch`
说明:开启新快照或切换到历史快照。
- [x] `cancel`
说明:明确取消当前任务。
- [x] `instant_reply`
说明:直接回答,无需进入快照流转。
### 2.2 由谁判断
意图识别主要由以下方式负责:
- [x] 大模型
### 2.3 当前 Flow 中的输入
`continue`
- 用户提供了缺失字段。
- 用户对配置表示确认例如“OK”“建吧”。
- 用户对已有配置进行微调。
`switch`
- 用户输入了与当前快照领域无关的新需求。
- 例如正在调策略时突然要查余额。
- 例如正在配置一个模型时突然要求配置另一个模型。
`cancel`
- 用户表达了明确的负面意图。
- 例如“算了”“不要了”“重来”。
## 3. Slot Extraction / Field Extraction
### 3.1 抽取方式
字段抽取主要由以下方式负责:
- [x] 大模型
如果由大模型负责,抽取时必须输入以下上下文:
- [x] 当前 `skill/action`
- [x] 当前 `draft/session`
- [x] 当前缺失字段(来自 DAG 定义)
- [x] 历史对话(近 3 轮)
- [x] 快照 / 当前引用
### 3.2 输出格式
期望大模型返回如下结构化 JSON
```json
{
"intent": "continue | switch | cancel",
"target_snapshot_id": "uuid-xxxx",
"tasks": [
{
"skill": "strategy",
"action": "create",
"fields": {
"leverage": 20,
"name": "my_strat"
}
}
],
"reason": "用户提供了杠杆倍数,继续策略创建流程"
}
```
### 3.3 合并策略
- 补全模式:新抽取的字段 merge 到原快照中。
- 覆盖模式:若用户明确修改已存在的值,以最新输入为准,但必须经过 Validator 重新校验。
## 4. Flow / State Machine
### 4.1 统一状态机
所有 flow 必须统一走同一个 orchestrator
- [x]
Flow 状态至少包含:
- [x] `collecting`
说明:字段收集中。
- [x] `waiting_confirmation`
说明:待用户确认。
- [x] `ready`
说明:校验通过。
- [x] `executing`
说明DAG 执行中。
- [x] `suspended`
说明:被新任务压栈挂起。
### 4.2 Switch / Suspend / Resume
用户切换话题时,当前任务应该:
- [x] 压栈
说明:放入 History Snapshots 栈,支持后续唤回。
## 5. Skill Scope
### 5.1 适用范围
这套方法模式适用于:
- [x] 全部
说明:实现全架构的语义编排。
### 5.2 不允许单独补丁
是否禁止只针对单个 skill / 单句子打补丁:
- [x]
补充说明:
- 必须保证所有 Skill 共享同一套 Router 和快照机制。
## 6. Risk Control / Validation
### 6.1 校验层
字段抽取后必须统一进入 validator
- [x]
validator 需要覆盖:
- [x] `strategy` 数值限制Clamp
- [x] `model` 配置合法性
- [x] `exchange` 凭证合法性
- [x] `trader` 绑定关系合法性
### 6.2 错误提示
- 提示原则LLM 解析校验失败结果,用自然语言告知用户安全范围。
- 示例:`杠杆最高 20 倍,已为您设为 20是否接受`
## 7. Performance
### 7.1 调用策略
- 流式响应:意图识别确定后,第一时间返回“正在处理[某意图]...”,减少用户感知延迟。
- LLM Cache对高频重复意图进行缓存。
### 7.2 快路径
允许不用大模型直接返回的场景:
- 简单打招呼,例如 `Hi``Hello`
- 完全匹配的单词退出指令,例如 `exit``quit`
## 8. Testing / Acceptance
### 8.1 必测场景
- 意图切换:正在创建策略时,询问“比特币价格”,查完后回答“继续创建刚才的策略吗”并成功恢复快照。
- 多动作合并:一句话同时完成“创建策略 A”和“配置交易所 B”。
- 纠错重填:用户输入了错误的杠杆倍数,系统提示纠正后,用户补填正确数值,系统能正确合并到原快照。
### 8.2 验收标准
- 无静默吞咽:任何有效信息必须体现在快照更新或回复中。
- 快照一致性:`CurrentReferences` 必须能精准映射到用户口中的“它”或“那个策略”。
## 9. Notes
- 快照快照还是快照:代码底层必须实现一个 `SnapshotManager`,支持 `Save/Load/List` 动作,供 LLM 通过特定的内部 Tool 进行调用。
- DAG 是约束而非死板流程DAG 告诉 LLM 缺什么,但 LLM 决定如何通过对话向用户要到这些。