Skip to content

Dialog ​

对话是需求澄清与信息收集的入口。平台把对话消息持久化,并在需要时把上下文交给需求翻译。


职责 ​

负责不负责
对话创建、打开、关闭、清理需求翻译(demand-translation)
消息持久化Agent 对话会话(agent-gateway)
SSE 流式输出任务执行(task)
与 Task 关联计费

两种对话 ​

平台里有两个容易混淆的概念:

DialogDialogue Session
模块dialog / nanoagent-gateway
对象用户与平台之间的需求沟通用户与某个 Agent 之间的多轮交互
存储agent_dialoguesdialogue_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/prepareSseSSE 流式回复
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

相关页面 ​

Released under the MIT License.