Version: 0.5.6.dev.260314

 feat(agent): 重构 Agent 分层并修复普通聊天助手消息未写入 Redis 的问题

🔧 按职责重构 backend/agent 目录为 route/chat/quicknote 三层结构

🔄 将随口记链路拆分为 graph/nodes/tool/state/prompt,其中 graph 仅负责连线

🏃 新增 quicknote runner(方法引用)来收口节点依赖,提升代码可读性

🔀 将控制码分流逻辑抽离到 agent/route,服务层改为薄封装调用

📚 更新相关 README 与测试引用路径,保持原业务逻辑不变

🐛 修复普通聊天链路遗漏 assistant 写入 Redis 的问题(确保 MySQL 和 Redis 的口径一致)
This commit is contained in:
Losita
2026-03-14 19:42:26 +08:00
parent 21d6fe5b5f
commit c689af56c8
16 changed files with 1018 additions and 962 deletions

View File

@@ -1,31 +1,23 @@
# backend/agent 目录说明
# backend/agent 目录说明
该目录当前按“聊天流式输出能力”和“可编排的随口记能力”拆分
该目录已按“路由 / 聊天 / 随口记”三层拆分,便于阅读、调试与扩展
1. `graph.go`
- 仅负责现有流式聊天输出封装SSE/OpenAI 兼容 chunk 转换)。
- 已有线上链路依赖,当前不改业务逻辑
1. `route/`
- `route.go`:只负责模型控制码分流(`quick_note` / `chat`)。
- 提供控制码解析、nonce 校验、路由兜底,不参与写库与回复拼装
2. `prompt.go`
- 通用 Agent 提示词
2. `chat/`
- `stream.go`普通聊天流式输出封装SSE/OpenAI 兼容 chunk 转换)
- `prompt.go`:聊天主系统提示词。
3. `quick_note_prompt.go`
- AI 随口记专用提示词(意图识别、优先级评估)
3. `quicknote/`
- `graph.go`:只负责图编排连线与分支,不承载节点内部实现
- `nodes.go`:节点实现(意图识别、优先级评估、持久化、分支选择)。
- `tool.go`工具定义、参数校验、deadline 解析、写库工具打包。
- `state.go`:随口记状态容器与重试状态记录。
- `prompt.go`:随口记提示词(控制码路由、聚合规划、优先级评估、回复润色)。
4. `state.go`
- 随口记链路状态结构(意图标记、抽取结果、重试计数、持久化结果)
4. `README.md`(当前文件)
- 记录目录职责边界,帮助后续继续按同样范式扩展 `query/update` 等技能链路
5. `tool.go`
- 随口记工具打包入口:
- `BuildQuickNoteToolBundle`
- 工具输入输出 schema
- deadline 解析与优先级校验
6. `quick_note_graph.go`
- 随口记 graph 编排实现:
- 节点1意图识别
- 节点2优先级评估
- 节点3调用写库工具
- 分支:失败自动重试(最多 3 次)
> 说明:服务层通过 `RunQuickNoteGraph` 调用该图;若判定为非随口记意图,会自动回落到原有普通流式聊天逻辑。
> 说明:服务层仍通过 `RunQuickNoteGraph` 调用随口记图;若判定为非随口记意图,会自动回落到普通流式聊天链路。