对话API技术文档
目录
简介
AgentChat是一个基于FastAPI构建的实时对话交互平台,支持多种Agent类型和丰富的对话功能。本文档详细介绍了对话API的核心功能,包括发起新对话、发送消息、WebSocket连接建立以及消息流式响应处理等关键特性。
项目架构概览
系统采用前后端分离架构,后端基于FastAPI框架,前端使用Vue.js技术栈。
图表来源
核心API端点
发起新对话 (/api/v1/dialog)
创建新的对话会话,为用户分配唯一的对话ID。
图表来源
端点详情:
- 路径:
/api/v1/dialog - 方法:
POST - 请求体:json
{ "name": "对话名称", "agent_id": "智能体ID", "agent_type": "Agent" } - 响应: 包含新创建对话的唯一标识符
节来源
发送消息 (/api/v1/chat)
处理用户消息并返回流式响应。
图表来源
端点详情:
- 路径:
/api/v1/chat - 方法:
POST - 请求体:json
{ "dialog_id": "对话ID", "user_input": "用户输入文本", "file_url": "文件URL(可选)" }
节来源
WebSocket连接机制
系统支持WebSocket连接,主要用于实时性要求更高的场景,如自动构建工具等。
图表来源
WebSocket特性:
- 认证: 基于JWT的WebSocket认证
- 连接管理: 自动化的连接生命周期管理
- 错误处理: 完善的异常捕获和连接恢复机制
节来源
消息流式响应处理
系统采用Server-Sent Events (SSE) 实现流式响应,支持实时消息传输。
图表来源
流式响应格式:
- 响应块:
data: {"type": "response_chunk", "data": {"chunk": "文本片段"}} - 事件通知:
data: {"type": "event", "data": {"title": "工具名称", "status": "START"}} - 错误处理: 自动兜底机制,确保响应完整性
节来源
对话管理
对话生命周期
对话历史管理
系统提供两种历史记录模式:
- 传统模式: 基于数据库的历史记录查询
- 向量化模式: 基于语义搜索的记忆检索
历史记录特性:
- 持久化: 所有对话都保存到MySQL数据库
- 检索: 支持基于相似度的上下文检索
- 清理: 自动清理长时间未活动的对话
节来源
Agent执行流程
ReAct Agent工作流程
图表来源
Agent配置结构
图表来源
节来源
前端集成示例
使用fetchEventSource的集成
前端使用Microsoft提供的fetchEventSource库实现SSE连接:
typescript
// 基本消息发送示例
function sendMessage(data: Chat, onmessage: any, onclose: any) {
const ctrl = new AbortController();
fetchEventSource('/api/v1/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${localStorage.getItem('token') || ''}`
},
body: JSON.stringify({
dialog_id: data.dialogId,
user_input: data.userInput,
file_url: data.fileUrl
}),
signal: ctrl.signal,
openWhenHidden: true,
onmessage(msg) {
try {
onmessage(msg);
} catch (error) {
console.error('处理消息时出错:', error);
}
},
onclose() {
onclose();
},
onerror(err) {
console.error('聊天连接错误:', err);
ctrl.abort();
throw err;
}
});
return ctrl;
}Vue.js组件集成
前端Vue组件展示了完整的对话界面实现:
功能特性:
- 实时消息流: 支持增量消息显示
- 工具调用状态: 实时显示工具执行状态
- 文件上传: 支持附件消息
- 错误处理: 完善的异常处理机制
节来源
错误处理与超时策略
错误处理机制
超时与重试策略
- 连接超时: WebSocket连接超时自动重连
- 处理超时: Agent处理超时返回默认消息
- 内存清理: 定期清理过期对话和缓存
- 降级处理: 网络异常时的本地缓存回退
节来源
最佳实践
API使用建议
对话管理
- 始终使用有效的对话ID
- 及时清理不需要的对话
- 合理设置对话超时时间
消息发送
- 控制单次消息长度
- 处理文件上传的并发限制
- 实现消息去重机制
错误处理
- 实现优雅的降级策略
- 提供清晰的错误信息
- 记录详细的调试信息
性能优化
- 使用连接池管理WebSocket连接
- 实现消息缓冲和批处理
- 合理使用缓存机制
安全考虑
- 身份验证: 所有API请求都需要有效的JWT令牌
- 输入验证: 严格验证用户输入内容
- 速率限制: 实施API调用频率限制
- 数据保护: 敏感数据加密存储
监控与维护
- 日志记录: 完整的请求和响应日志
- 性能监控: 关键指标的实时监控
- 健康检查: 定期的服务健康状态检查
- 容量规划: 基于使用情况的资源规划
