Files
socweb/claudehd.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

107 lines
4.2 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.
# claudehd.md — so-c-chat-clone 后端功能方案
**前端代码未经明确指定不允许修改。**
---
## 功能一:基础对话
**做什么:** 用户发送消息,后端调用 LLM 生成回复,返回 Markdown 文本给前端渲染。
**用什么:**
- **FastAPI**(Python)— 提供 `POST /chat` 接口,接收 `message` + `thread_id` + `model`
- **Azure OpenAI SDK(异步)** — 调用 gpt-5.4 部署,返回文本内容
- **内存字典** — 按 `thread_id` 存储多轮对话历史,拼入每次请求的 messages 数组实现上下文连续
**模型行为:**
- `model=flash` → `max_tokens=500`,`temperature=0.2`,快速简洁
- `model=pro` → `max_tokens=4096`,`temperature=0.3`,深度详细
---
## 功能二:内部知识库检索
**做什么:** 用户在输入框激活"内部知识库"工具后,发送消息前先检索企业知识库,将相关文档片段注入 LLM prompt,让回复基于内部知识。
**用什么:**
- **httpx(异步)** — 调用 KB Agent REST API(Azure AI Search 代理)
- 检索参数:`search_mode=hybrid`,`top=5`
- 检索结果格式化为背景材料追加到 system prompt,LLM 基于此生成回复
---
## 功能三:外部 AI 搜索
**做什么:** 用户激活"搜索"工具后,后端联网检索实时信息(含图片、视频),经重排后注入 LLM,回复引用真实来源。
**用什么:**
- **Jina Search API** (`https://s.jina.ai/`) — 搜索网页,返回标题+摘要+URL
- **Jina Reader API** (`https://r.jina.ai/{url}`) — 读取搜索结果全文
- **Jina Rerank API** (`jina-reranker-v2-base-multilingual`) — 对结果按相关性重排,提升准确度
- **httpx(异步)** — 并发调用以上三个接口
**按模型深度区分:**
- `flash` → 搜索 top=3,timeout=8s,跳过重排,追求速度
- `pro` → 搜索 top=10,timeout=20s,Rerank 取 top=5,追求准确
---
## 功能四:沙盒代码执行
**做什么:** 用户激活"沙盒"工具并提出编程需求时,后端在隔离环境中执行代码,将 stdout/stderr 格式化为 Markdown 代码块注入回复。
**用什么:**
- **Daytona API** (`https://app.daytona.io/api`) — 创建隔离 workspace → 上传代码 → 执行 → 获取输出 → 销毁 workspace
- **httpx(异步)** — 调用 Daytona REST API
- 执行结果以 Markdown 代码块形式追加到 LLM 最终回复
---
## 功能五:文档生成
**做什么:** 用户激活"文档生成"工具并描述需求时,后端调用 Doc Creator Agent 生成 Word/PPT/表格文件,将下载链接追加到回复末尾。
**用什么:**
- **Doc Creator Agent** (`http://doc-creator-agent-b0d02105-a557fe.taijiagnet.com`) — 传入 prompt,返回生成文件的 URL
- **httpx(异步)** — 调用 Agent REST API
- 输出类型自动识别:含 ppt/slides → PPT;含 table/excel → 表格;其余 → Word
---
## 功能六:工单数据接入
**做什么:** 前端 ExtensionsPanel 连接工单系统后,展示真实工单列表(P0-P3 优先级、状态)。后端作为代理拉取 Gongdan 工单数据。
**用什么:**
- **FastAPI** — 提供 `GET /tickets` 接口,支持 `page` / `pageSize` 分页参数
- **httpx(异步)** — 代理调用 Gongdan API,透传工单数据
- 返回字段严格对齐前端 `TicketData` 类型:`id / title / status / priority / createdAt`
---
## 功能七:多轮对话持久化
**做什么:** 对话历史在服务重启后不丢失,支持恢复历史对话上下文。
**用什么:**
- **PostgreSQL**(Azure,`dataope.postgres.database.azure.com`)— 存储 thread 和 message 记录
- **asyncpg** — 异步数据库驱动,不阻塞事件循环
- 未配置 `DATABASE_URL` 时自动降级为内存字典(开发模式)
---
## 技术栈总览
| 层 | 技术 |
|----|------|
| Web 框架 | FastAPI + Uvicorn |
| LLM | Azure OpenAI SDK (AsyncAzureOpenAI) |
| HTTP 客户端 | httpx(全异步) |
| 外部搜索 | Jina Search / Reader / Rerank |
| 知识库 | KB Agent (Azure AI Search 代理) |
| 沙盒 | Daytona API |
| 文档生成 | Doc Creator Agent |
| 工单 | Gongdan API(只读代理) |
| 数据库 | PostgreSQL / asyncpg(可选) |
| 部署 | Azure Web App (Python 3.11) |