Files
socaichat/gpthd.md
T
gongzhiyongandClaude Sonnet 4.6 04d8fbb740 refactor: 重组项目结构,前端收拢至 frontend/,新增 backend/ 目录
- 前端文件移入 frontend/ 子目录
- 新建 backend/ 目录(待开发)
- 新增 CLAUDE.md、claudehd.md、EXTERNAL_SERVICES.md

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 18:01:04 +08:00

434 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/conversations`
- `POST /api/conversations`
- `GET /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_URL`
- `KB_AGENT_API_KEY`
- `KB_AGENT_SEARCH_PATH`
- 后端在识别为内部知识问题时:
1. 请求知识库搜索
2. 获取 top-k 文档片段
3. 做摘要裁剪
4. 将结果作为上下文交给 Azure OpenAI
- 前端不改交互,只在回答里附带引用来源块
### 输出结果
- 当前产品类问题不再纯靠大模型空想
- 回答能基于内部知识库
- 更适合售前、售后、研发支持场景
---
## 4. 外部 AI 搜索
### 要完成什么功能
- 当用户问实时互联网信息、行业动态、外部资料时
- 后端自动执行外部搜索
- 支持网页搜索、内容读取、结果重排
- 满足快速模式和深度模式
- 后续支持图片和视频结果展示
### 用什么技术
- **Jina Search API**:做外部搜索
- **Jina Reader**:读取网页正文
- **Rerank 模型**:对结果重排
- **Azure OpenAI**:基于外部资料生成答案
### 怎么落地
- 新增模块:
- `jina_search.py`
- `jina_reader.py`
- `reranker.py`
- 固定流程:
- Search -> Read -> Rerank -> LLM
- 提供三种模式:
- `fast`:低延迟,少量搜索
- `deep`:高质量,多轮检索
- `auto`:后端自动判断
- 前端仍保持原有聊天区交互,只增加来源区块展示
### 输出结果
- 外部问题可获得更准确结果
- 不再只依赖大模型参数知识
- 满足企业级搜索准确度要求
---
## 5. 工单系统只读接入
### 要完成什么功能
- 支持查询工单列表
- 支持查询工单详情
- 支持汇总最近高优先级工单
- 支持在聊天中回答“最近有什么 P0/P1 工单”“某类问题集中在哪里”
- 支持首页/聊天区展示工单摘要数据
### 用什么技术
- **Gongdan HTTP API**:工单数据来源
- **FastAPI**:对前端提供统一工单接口
- **PostgreSQL(可选缓存)**:保存摘要缓存或查询记录
- **Azure OpenAI**:对工单数据做归纳总结
### 怎么落地
- 新增模块:`gongdan_client.py`
- 新增接口:
- `GET /api/tickets/summary`
- `GET /api/tickets`
- `GET /api/tickets/{id}`
- 对话场景下:
- 用户问工单问题
- 后端查询 gongdan
- 将结果整理后交给大模型总结
- 非对话场景下:
- 前端通过 summary 接口读取摘要
### 输出结果
- 当前前端 mock 工单摘要可替换为真实工单数据
- 用户能直接在聊天里分析工单问题
---
## 6. 文档生成
### 要完成什么功能
- 用户在聊天中要求生成方案、汇报、纪要、总结
- 后端把需求提交给文档生成 Agent
- 返回任务状态
- 文档完成后可返回下载地址或结果卡片
### 用什么技术
- **Doc Creator Agent HTTP API**:生成正式文档
- **FastAPI BackgroundTasks / 异步任务机制**:管理任务状态
- **PostgreSQL**:保存文档任务记录
- **Azure OpenAI**:前置整理文档提纲或结构
### 怎么落地
- 新增接口:
- `POST /api/documents/generate`
- `GET /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/attachments`
- `GET /api/attachments/{id}`
- 后端保存文件路径与文件类型
- 针对不同格式做解析
- 将解析文本挂到对应消息上下文里
### 输出结果
- 后续聊天可真正支持“基于附件分析”
- 为文档生成、沙盒分析、知识问答提供基础能力
---
## 9. 工具编排层
### 要完成什么功能
- 判断用户问题该调用哪个能力
- 决定先查 KB、还是先查工单、还是先外部搜索
- 决定是否进入文档生成或沙盒执行
- 把多个工具结果统一整理成大模型上下文
### 用什么技术
- **Python Orchestrator**:自定义编排逻辑
- **Azure OpenAI**:辅助做工具选择与结果总结
- **FastAPI service layer**:承接 API 和工具层
### 怎么落地
- 新增模块:
- `planner.py`
- `chat_orchestrator.py`
- `context_builder.py`
- 第一阶段可以先做规则驱动:
- 问产品/项目 -> KB
- 问实时外部信息 -> Search
- 问工单 -> Tickets
- 问生成汇报 -> Documents
- 问数据处理 -> Sandbox
- 第二阶段再逐步引入 LLM 辅助路由
### 输出结果
- 后端从“多个孤立接口”升级成“统一智能后端”
- 前端仍然只需要一个对话入口
---
## 10. 数据持久化
### 要完成什么功能
- 保存历史会话
- 保存聊天消息
- 保存工具调用记录
- 保存附件记录
- 保存文档任务记录
### 用什么技术
- **PostgreSQL**:主数据库
- **SQLAlchemy / SQLModel**:ORM
- **Alembic**:数据库迁移
### 怎么落地
- 至少建立以下表:
- `conversations`
- `messages`
- `tool_runs`
- `attachments`
- `document_tasks`
- 以后如需多租户,再增加:
- `users`
- `organizations`
- `memberships`
- `audit_logs`
### 输出结果
- 数据不丢失
- 会话可追溯
- 工具调用过程可排查
---
## 11. 接口层总表
### 第一阶段建议建设的接口
#### 基础接口
- `GET /health`
#### 会话接口
- `GET /api/conversations`
- `POST /api/conversations`
- `GET /api/conversations/{id}`
- `PATCH /api/conversations/{id}`
- `DELETE /api/conversations/{id}`
#### 聊天接口
- `POST /api/chat/stream`
#### 工单接口
- `GET /api/tickets/summary`
- `GET /api/tickets`
- `GET /api/tickets/{id}`
#### 搜索接口
- `POST /api/search/internal`
- `POST /api/search/external`
#### 文档接口
- `POST /api/documents/generate`
- `GET /api/documents/{task_id}`
#### 附件接口
- `POST /api/attachments`
- `GET /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** 完成安全数据处理与代码执行
而且整个过程中:
**前端交互不改,只替换数据来源和后端能力。**