- 前端文件移入 frontend/ 子目录 - 新建 backend/ 目录(待开发) - 新增 CLAUDE.md、claudehd.md、EXTERNAL_SERVICES.md Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
11 KiB
11 KiB
SOC 项目后端功能方案(按功能拆解)
约束:在未获得明确允许前,不修改前端交互,只补后端能力、接口和数据层。 目标:严格围绕当前
~/go/soc这个 Gemini 风格前端,为每一个功能明确说明“用什么技术,完成什么功能,怎么落地”。
1. 对话流式回复
要完成什么功能
- 用户在当前聊天输入框发送消息
- 后端实时返回回答内容
- 支持“思考中 / 检索中 / 生成中”的流式状态
- 不改变现有前端交互,只替换当前前端
simulateAIResponse()
用什么技术
- FastAPI:提供聊天接口
- SSE(Server-Sent Events):把大模型回答流式推给前端
- Azure OpenAI:生成最终回答
- PostgreSQL:保存消息记录和会话记录
怎么落地
- 新增接口:
POST /api/chat/stream - 前端发送用户消息到后端
- 后端先写入用户消息
- 再调用 Azure OpenAI 流式生成
- 将生成过程通过 SSE 持续返回给前端
- 最终把 assistant 回复保存入库
输出结果
- 前端保持当前 Gemini 风格交互不变
- 用户发送后能看到真实流式回答
- 替换掉前端 mock 返回逻辑
2. 会话管理
要完成什么功能
- 左侧历史会话列表从真实数据读取
- 支持新建会话
- 支持切换会话
- 支持删除会话
- 支持自动生成会话标题
用什么技术
- FastAPI:提供 REST API
- PostgreSQL:保存 conversation 和 message
- SQLAlchemy / SQLModel:管理数据表和查询
怎么落地
- 新增接口:
GET /api/conversationsPOST /api/conversationsGET /api/conversations/{id}PATCH /api/conversations/{id}DELETE /api/conversations/{id}
- 用户首次发送消息时自动创建会话
- 默认用首条消息前 20~30 字生成标题
- 前端左侧栏改为读取真实会话数据
输出结果
- 当前左侧 mock 会话列表替换成数据库真实数据
- 用户聊天记录可恢复
3. 内部知识库检索
要完成什么功能
- 当用户提问产品、方案、配置、内部资料时
- 后端优先查询内部知识库
- 再把知识库结果交给大模型总结回答
- 回答中带来源信息
用什么技术
- KB_AGENT 接口:调用内部知识库搜索
- FastAPI service layer:封装知识库调用
- Azure OpenAI:对检索结果总结与生成回答
怎么落地
- 新增服务模块:
kb_agent.py - 根据
EXTERNAL_SERVICES.md中的:KB_AGENT_URLKB_AGENT_API_KEYKB_AGENT_SEARCH_PATH
- 后端在识别为内部知识问题时:
- 请求知识库搜索
- 获取 top-k 文档片段
- 做摘要裁剪
- 将结果作为上下文交给 Azure OpenAI
- 前端不改交互,只在回答里附带引用来源块
输出结果
- 当前产品类问题不再纯靠大模型空想
- 回答能基于内部知识库
- 更适合售前、售后、研发支持场景
4. 外部 AI 搜索
要完成什么功能
- 当用户问实时互联网信息、行业动态、外部资料时
- 后端自动执行外部搜索
- 支持网页搜索、内容读取、结果重排
- 满足快速模式和深度模式
- 后续支持图片和视频结果展示
用什么技术
- Jina Search API:做外部搜索
- Jina Reader:读取网页正文
- Rerank 模型:对结果重排
- Azure OpenAI:基于外部资料生成答案
怎么落地
- 新增模块:
jina_search.pyjina_reader.pyreranker.py
- 固定流程:
- Search -> Read -> Rerank -> LLM
- 提供三种模式:
fast:低延迟,少量搜索deep:高质量,多轮检索auto:后端自动判断
- 前端仍保持原有聊天区交互,只增加来源区块展示
输出结果
- 外部问题可获得更准确结果
- 不再只依赖大模型参数知识
- 满足企业级搜索准确度要求
5. 工单系统只读接入
要完成什么功能
- 支持查询工单列表
- 支持查询工单详情
- 支持汇总最近高优先级工单
- 支持在聊天中回答“最近有什么 P0/P1 工单”“某类问题集中在哪里”
- 支持首页/聊天区展示工单摘要数据
用什么技术
- Gongdan HTTP API:工单数据来源
- FastAPI:对前端提供统一工单接口
- PostgreSQL(可选缓存):保存摘要缓存或查询记录
- Azure OpenAI:对工单数据做归纳总结
怎么落地
- 新增模块:
gongdan_client.py - 新增接口:
GET /api/tickets/summaryGET /api/ticketsGET /api/tickets/{id}
- 对话场景下:
- 用户问工单问题
- 后端查询 gongdan
- 将结果整理后交给大模型总结
- 非对话场景下:
- 前端通过 summary 接口读取摘要
输出结果
- 当前前端 mock 工单摘要可替换为真实工单数据
- 用户能直接在聊天里分析工单问题
6. 文档生成
要完成什么功能
- 用户在聊天中要求生成方案、汇报、纪要、总结
- 后端把需求提交给文档生成 Agent
- 返回任务状态
- 文档完成后可返回下载地址或结果卡片
用什么技术
- Doc Creator Agent HTTP API:生成正式文档
- FastAPI BackgroundTasks / 异步任务机制:管理任务状态
- PostgreSQL:保存文档任务记录
- Azure OpenAI:前置整理文档提纲或结构
怎么落地
- 新增接口:
POST /api/documents/generateGET /api/documents/{task_id}
- 对话中识别“生成文档”类意图
- 后端创建任务记录
- 调用 doc creator agent
- 前端保持当前聊天交互,后续只在消息中增加文档结果卡片
输出结果
- 用户可从聊天直接发起正式文档生成
- 满足销售、售前、汇报场景
7. 沙盒代码执行
要完成什么功能
- 处理表格、JSON、日志、数据分析类任务
- 允许后端在安全沙盒中执行代码
- 返回执行结果、图表、文件
- 不直接改前端交互,只把结果作为消息内容或附件返回
用什么技术
- Daytona Sandbox:安全执行环境
- FastAPI:封装沙盒执行入口
- Python 工具链:pandas / matplotlib / json / csv 等
- PostgreSQL:记录执行任务
怎么落地
- 新增接口:
POST /api/sandbox/run - 第一阶段不开放任意代码执行
- 先封装几类固定能力:
- CSV 汇总
- JSON 转换
- 数据统计
- 图表生成
- 对话编排层按意图决定是否调用 sandbox
输出结果
- 数据分析、表格处理能力可真正执行
- 后端具备“算”的能力,而不只是“说”的能力
8. 附件上传与解析
要完成什么功能
- 用户上传文件后,后端能接收附件
- 保存附件元数据
- 提取文本内容供知识理解、搜索或分析使用
- 后续支持文档总结、数据分析、代码执行
用什么技术
- FastAPI UploadFile:接收文件
- 对象存储/本地文件存储:保存附件
- 文本解析库:PDF、DOCX、TXT、CSV 解析
- PostgreSQL:保存附件元数据
怎么落地
- 新增接口:
POST /api/attachmentsGET /api/attachments/{id}
- 后端保存文件路径与文件类型
- 针对不同格式做解析
- 将解析文本挂到对应消息上下文里
输出结果
- 后续聊天可真正支持“基于附件分析”
- 为文档生成、沙盒分析、知识问答提供基础能力
9. 工具编排层
要完成什么功能
- 判断用户问题该调用哪个能力
- 决定先查 KB、还是先查工单、还是先外部搜索
- 决定是否进入文档生成或沙盒执行
- 把多个工具结果统一整理成大模型上下文
用什么技术
- Python Orchestrator:自定义编排逻辑
- Azure OpenAI:辅助做工具选择与结果总结
- FastAPI service layer:承接 API 和工具层
怎么落地
- 新增模块:
planner.pychat_orchestrator.pycontext_builder.py
- 第一阶段可以先做规则驱动:
- 问产品/项目 -> KB
- 问实时外部信息 -> Search
- 问工单 -> Tickets
- 问生成汇报 -> Documents
- 问数据处理 -> Sandbox
- 第二阶段再逐步引入 LLM 辅助路由
输出结果
- 后端从“多个孤立接口”升级成“统一智能后端”
- 前端仍然只需要一个对话入口
10. 数据持久化
要完成什么功能
- 保存历史会话
- 保存聊天消息
- 保存工具调用记录
- 保存附件记录
- 保存文档任务记录
用什么技术
- PostgreSQL:主数据库
- SQLAlchemy / SQLModel:ORM
- Alembic:数据库迁移
怎么落地
- 至少建立以下表:
conversationsmessagestool_runsattachmentsdocument_tasks
- 以后如需多租户,再增加:
usersorganizationsmembershipsaudit_logs
输出结果
- 数据不丢失
- 会话可追溯
- 工具调用过程可排查
11. 接口层总表
第一阶段建议建设的接口
基础接口
GET /health
会话接口
GET /api/conversationsPOST /api/conversationsGET /api/conversations/{id}PATCH /api/conversations/{id}DELETE /api/conversations/{id}
聊天接口
POST /api/chat/stream
工单接口
GET /api/tickets/summaryGET /api/ticketsGET /api/tickets/{id}
搜索接口
POST /api/search/internalPOST /api/search/external
文档接口
POST /api/documents/generateGET /api/documents/{task_id}
附件接口
POST /api/attachmentsGET /api/attachments/{id}
沙盒接口
POST /api/sandbox/run
12. 推荐技术组合总结
基础后端框架
- FastAPI:API 服务
- Uvicorn / Gunicorn:服务运行
数据层
- PostgreSQL:数据持久化
- SQLAlchemy / SQLModel:ORM
- Alembic:迁移管理
AI 与搜索
- Azure OpenAI:LLM 生成与总结
- KB_AGENT:内部知识库检索
- Jina Search / Reader / Rerank:外部搜索链路
外部业务系统
- Gongdan API:工单只读
- Doc Creator Agent:文档生成
- Daytona Sandbox:受控代码执行
交互协议
- SSE:流式输出
- REST API:管理类接口
13. 第一阶段开发顺序
第一步
先完成:
- FastAPI 基础框架
- PostgreSQL 接入
- conversations/messages 表
/api/chat/stream/api/conversations
第二步
接入:
- Azure OpenAI
- KB_AGENT
- 工单系统
第三步
接入:
- Jina 外部搜索
- 来源引用
- 工具状态流式事件
第四步
接入:
- 文档生成任务
- 附件解析
- Sandbox
14. 最终结论
这个项目当前最合适的后端建设方式,不是泛泛而谈“做一个 AI 平台后端”,而是严格按功能拆:
- 用 FastAPI + SSE 完成真实聊天流式回复
- 用 PostgreSQL 完成会话和消息持久化
- 用 Azure OpenAI 完成回答生成
- 用 KB_AGENT 完成内部知识检索
- 用 Jina Search/Reader/Rerank 完成外部搜索
- 用 Gongdan API 完成工单只读分析
- 用 Doc Creator Agent 完成正式文档生成
- 用 Daytona Sandbox 完成安全数据处理与代码执行
而且整个过程中: 前端交互不改,只替换数据来源和后端能力。