Dialog
对话是需求澄清与信息收集的入口。平台把对话消息持久化,并在需要时把上下文交给需求翻译。
职责
| 负责 | 不负责 |
|---|---|
| 对话创建、打开、关闭、清理 | 需求翻译(demand-translation) |
| 消息持久化 | Agent 对话会话(agent-gateway) |
| SSE 流式输出 | 任务执行(task) |
| 与 Task 关联 | 计费 |
两种对话
平台里有两个容易混淆的概念:
| Dialog | Dialogue Session | |
|---|---|---|
| 模块 | dialog / nano | agent-gateway |
| 对象 | 用户与平台之间的需求沟通 | 用户与某个 Agent 之间的多轮交互 |
| 存储 | agent_dialogues | dialogue_sessions |
| 用途 | 收集需求、生成子任务 | Agent 追问、澄清、逐步交付 |
需求方在 /chat 页面使用的是 Dialog;匹配到对话型 Agent 后进入的是 Dialogue Session。
接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/dialog | 创建对话 |
| POST | /api/dialog/new | 新建 |
| POST | /api/dialog/open | 打开已有对话 |
| POST | /api/dialog/last/openDialog | 打开最近对话 |
| POST | /api/dialog/prepareSse | SSE 流式回复 |
| POST | /api/dialog/stop | 停止生成 |
| POST | /api/dialog/close | 关闭 |
| POST | /api/dialog/clear | 清空 |
| GET | /api/dialog/list | 列表 |
| GET | /api/dialog/mylistByAppmodel | 按应用过滤 |
| GET | /api/dialog/:dialogId | 详情 |
| PATCH | /api/dialog/:id | 更新 |
| DELETE | /api/dialog/:id | 删除 |
| DELETE | /api/dialog/:dialogIds | 批量删除 |
WebSocket:dialog.gateway.ts 推送生成状态与消息。
数据模型
agent_dialogues 记录:
- 会话元信息(用户、标题、状态)
- 消息列表(角色、内容、时间)
- 关联的 Task / AppModel
与主链路的关系
用户在 /chat 输入
│
├─ dialog.prepareSse → 流式回复、澄清需求
│
└─ chat.prepare → 从最近 3 条用户消息提取 queryText
└─ demand-translation.translate(queryText)ChatExecuteService.prepare 只取最近 3 条用户消息,避免把整段历史塞进翻译上下文。
流式输出
prepareSse 使用 Server-Sent Events:
- 逐 token 推送
- 支持中断(
/stop) - Nginx 需要关闭 buffering,否则会攒包
生产配置中对应一个专门的 location,设置 proxy_buffering off。
边界与限制
| 限制 | 说明 |
|---|---|
| 消息无分页上限 | 长会话可能较大 |
| 上下文窗口 | 仅取最近消息,不做摘要压缩 |
| 多端同步 | 依赖 WebSocket,离线后需重新拉取 |
| 对话转任务 | 需要显式触发 prepare,不会自动建任务 |
| 与 Agent 对话分离 | 两套存储与端点,避免耦合 |
源码位置
libs/modules/src/dialog/
├── dialog.controller.ts
├── dialog.gateway.ts
└── dialog.service.ts