change v1

This commit is contained in:
lky-spec
2026-04-25 16:18:45 +08:00
parent 737f9bca95
commit c244e4cdf1
89 changed files with 17382 additions and 6198 deletions

View File

@@ -0,0 +1,167 @@
# 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 决定如何通过对话向用户要到这些。