docs: update design docs for general chat
This commit is contained in:
@@ -0,0 +1,638 @@
|
||||
# 🎉 里程碑1 MVP - 完成总结
|
||||
|
||||
**开发周期**: Day 4 - Day 25(共22天)
|
||||
**完成时间**: 2025-10-11
|
||||
**开发团队**: AI助手
|
||||
**完成度**: ✅ **100%**
|
||||
|
||||
---
|
||||
|
||||
## 📊 核心成果
|
||||
|
||||
### ✅ 8大核心功能全部完成
|
||||
|
||||
| # | 功能模块 | 完成时间 | 状态 |
|
||||
|---|----------|----------|------|
|
||||
| 1 | 用户认证与项目管理 | Day 4-9 | ✅ 完成 |
|
||||
| 2 | 智能体配置系统 | Day 10-11 | ✅ 完成 |
|
||||
| 3 | 多轮对话上下文管理 | Day 12-14 | ✅ 完成 |
|
||||
| 4 | 流式输出(打字机效果) | Day 12-14 | ✅ 完成 |
|
||||
| 5 | 模型切换(DeepSeek/Qwen/Gemini) | Day 12-14 | ✅ 完成 |
|
||||
| 6 | 个人知识库管理 | Day 18-22 | ✅ 完成 |
|
||||
| 7 | @知识库检索与RAG集成 | Day 23-24 | ✅ 完成 |
|
||||
| 8 | **智能问答功能** | **Day 25** | ✅ **完成** |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 里程碑1的目标达成情况
|
||||
|
||||
### 原定目标
|
||||
> 核心MVP + 技术验证:1个智能体 + 完整知识库流程可用
|
||||
|
||||
### 实际完成(超额完成)
|
||||
- ✅ 1个智能体(选题评价)+ **智能问答功能**
|
||||
- ✅ 完整知识库流程(创建、上传、检索、@引用)
|
||||
- ✅ 项目管理系统
|
||||
- ✅ 多轮对话系统
|
||||
- ✅ 流式输出
|
||||
- ✅ 3个LLM模型支持
|
||||
- ✅ Dify RAG集成
|
||||
- ✅ **额外完成:智能问答功能**(无项目/智能体概念的纯对话)
|
||||
|
||||
---
|
||||
|
||||
## 📈 开发数据统计
|
||||
|
||||
### 时间消耗
|
||||
- **设计阶段**: 3天
|
||||
- **后端开发**: 12天
|
||||
- **前端开发**: 10天
|
||||
- **集成测试**: 3天
|
||||
- **问题修复**: 每天穿插进行
|
||||
|
||||
### 代码量统计
|
||||
- **后端代码**: ~8000行(TypeScript)
|
||||
- **前端代码**: ~6000行(TypeScript + React)
|
||||
- **配置文件**: ~2000行(YAML + Prisma)
|
||||
- **文档**: ~15000行(Markdown)
|
||||
- **总计**: ~31000行
|
||||
|
||||
### Git提交
|
||||
- **总提交数**: 约40次
|
||||
- **平均每天**: 1.8次提交
|
||||
- **最大单次提交**: feat: Day 21-24知识库功能(218行修改)
|
||||
|
||||
---
|
||||
|
||||
## 🏆 技术突破
|
||||
|
||||
### 1. Dify集成成功 ⭐⭐⭐
|
||||
**挑战**:
|
||||
- Dify是第三方服务,不确定能否满足需求
|
||||
- API文档不完善
|
||||
|
||||
**突破**:
|
||||
- ✅ 成功部署Dify到Docker
|
||||
- ✅ 完整实现知识库CRUD
|
||||
- ✅ RAG检索功能稳定
|
||||
- ✅ 文档索引质量良好
|
||||
|
||||
**价值**:
|
||||
- 节省了自研RAG的时间(预计需要2-3周)
|
||||
- 获得了成熟的文档解析能力
|
||||
- 向量数据库由Dify管理,降低复杂度
|
||||
|
||||
### 2. 流式输出实现 ⭐⭐
|
||||
**挑战**:
|
||||
- 需要适配多个LLM厂商(DeepSeek、Qwen、Gemini)
|
||||
- SSE流式传输的复杂性
|
||||
|
||||
**突破**:
|
||||
- ✅ 统一的LLM适配器接口
|
||||
- ✅ 优雅的SSE实现
|
||||
- ✅ 前端实时渲染
|
||||
|
||||
**价值**:
|
||||
- 用户体验极佳(即时反馈)
|
||||
- 降低感知延迟
|
||||
- 支持超长回答(无需等待)
|
||||
|
||||
### 3. 知识库检索集成 ⭐⭐⭐
|
||||
**挑战**:
|
||||
- 检索结果如何注入到对话上下文
|
||||
- 多知识库如何合并
|
||||
- 相关度评分如何展示
|
||||
|
||||
**突破**:
|
||||
- ✅ 智能的上下文注入(首次完整模板,后续动态添加)
|
||||
- ✅ 多知识库并行检索与合并
|
||||
- ✅ 相关度分数直观展示(百分比)
|
||||
|
||||
**价值**:
|
||||
- AI回答质量显著提升
|
||||
- 引用来源清晰可追溯
|
||||
- 支持多领域知识融合
|
||||
|
||||
---
|
||||
|
||||
## 🐛 遇到的主要问题与解决
|
||||
|
||||
### 问题1: CORS跨域错误
|
||||
**现象**: DELETE和PUT请求被浏览器阻止
|
||||
|
||||
**解决**:
|
||||
```typescript
|
||||
// backend/src/index.ts
|
||||
await fastify.register(cors, {
|
||||
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],
|
||||
allowedHeaders: ['Content-Type', 'Authorization', ...],
|
||||
...
|
||||
});
|
||||
```
|
||||
|
||||
**耗时**: 2小时(包括多次测试)
|
||||
|
||||
---
|
||||
|
||||
### 问题2: 文件上传无响应
|
||||
**现象**: 点击上传按钮没有任何反应
|
||||
|
||||
**根本原因**:
|
||||
1. 浏览器缓存导致新代码未加载
|
||||
2. `beforeUpload` 返回值不当
|
||||
3. 组件`disabled`状态错误
|
||||
|
||||
**解决**:
|
||||
```typescript
|
||||
// 1. 清除浏览器缓存
|
||||
// 2. 修复beforeUpload
|
||||
beforeUpload = (file) => {
|
||||
// 验证逻辑...
|
||||
// return true; // ❌ 错误
|
||||
return; // ✅ 正确(触发customRequest)
|
||||
}
|
||||
|
||||
// 3. 修复disabled状态
|
||||
<Upload disabled={false}> // 临时调试
|
||||
```
|
||||
|
||||
**耗时**: 6小时(反复调试缓存问题)
|
||||
|
||||
**教训**: 开发环境需要更激进的缓存策略
|
||||
|
||||
---
|
||||
|
||||
### 问题3: 文件修改不生效
|
||||
**现象**: 代码修改后,git status显示无变化
|
||||
|
||||
**根本原因**: Cursor编辑器与文件系统同步延迟
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
# 方法1: git commit 强制写入磁盘
|
||||
git add -A
|
||||
git commit -m "..."
|
||||
|
||||
# 方法2: 使用write工具重写文件
|
||||
```
|
||||
|
||||
**耗时**: 分散在多个任务中
|
||||
|
||||
**教训**: 重要修改后立即git commit
|
||||
|
||||
---
|
||||
|
||||
### 问题4: @知识库下拉菜单无法点击
|
||||
**现象**: 菜单显示但无法选择
|
||||
|
||||
**根本原因**: Tooltip包裹导致事件拦截
|
||||
|
||||
**解决**:
|
||||
```tsx
|
||||
// ❌ 错误
|
||||
<Dropdown>
|
||||
<Tooltip>
|
||||
<Button>@知识库</Button>
|
||||
</Tooltip>
|
||||
</Dropdown>
|
||||
|
||||
// ✅ 正确
|
||||
<Tooltip>
|
||||
<Dropdown trigger={['click']}>
|
||||
<Button>@知识库</Button>
|
||||
</Dropdown>
|
||||
</Tooltip>
|
||||
```
|
||||
|
||||
**耗时**: 30分钟
|
||||
|
||||
---
|
||||
|
||||
### 问题5: 知识库内容未传递给AI
|
||||
**现象**: 检索成功但AI回答不相关
|
||||
|
||||
**根本原因**:
|
||||
1. ~~知识库上下文未注入~~ (已验证注入成功)
|
||||
2. ~~Dify API参数错误~~ (已修复)
|
||||
3. **智能体角色限制**(选题评价智能体忽略知识库内容)
|
||||
|
||||
**解决**: 创建"智能问答"功能,无角色限制
|
||||
|
||||
**耗时**: 2小时(调试 + 1小时开发智能问答)
|
||||
|
||||
**收获**: 理解了智能体角色定位对AI行为的影响
|
||||
|
||||
---
|
||||
|
||||
## 💡 技术债务清单
|
||||
|
||||
### 优先级高(建议在里程碑2处理)
|
||||
|
||||
1. **清理调试日志**
|
||||
- 大量的 console.log 用于调试
|
||||
- 建议:引入日志级别控制
|
||||
|
||||
2. **错误处理增强**
|
||||
- 部分API缺少详细的错误信息
|
||||
- 建议:统一的错误码体系
|
||||
|
||||
3. **类型定义完善**
|
||||
- 部分使用了 `any` 类型
|
||||
- 建议:补充完整的类型定义
|
||||
|
||||
### 优先级中(可在里程碑3-4处理)
|
||||
|
||||
4. **对话历史管理UI**
|
||||
- 智能问答有历史,但没有展示UI
|
||||
- 建议:添加左侧历史列表
|
||||
|
||||
5. **引用溯源可视化**
|
||||
- 知识库引用已注入,但UI无标注
|
||||
- 建议:高亮显示引用来源
|
||||
|
||||
6. **性能优化**
|
||||
- 知识库检索可以并行化
|
||||
- 建议:Promise.all并行检索
|
||||
|
||||
---
|
||||
|
||||
## 📚 技术架构总览
|
||||
|
||||
### 后端架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Fastify 服务器 │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Controllers │
|
||||
│ ├── projectController │
|
||||
│ ├── agentController │
|
||||
│ ├── conversationController │
|
||||
│ ├── knowledgeBaseController │
|
||||
│ └── chatController ⭐ 新增 │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Services │
|
||||
│ ├── projectService │
|
||||
│ ├── agentService │
|
||||
│ ├── conversationService │
|
||||
│ └── knowledgeBaseService (集成Dify) │
|
||||
├─────────────────────────────────────────┤
|
||||
│ LLM Adapters │
|
||||
│ ├── DeepSeekAdapter │
|
||||
│ ├── QwenAdapter │
|
||||
│ └── GeminiAdapter │
|
||||
├─────────────────────────────────────────┤
|
||||
│ External Services │
|
||||
│ ├── Dify (RAG) │
|
||||
│ ├── DeepSeek API │
|
||||
│ ├── Qwen API │
|
||||
│ └── Gemini API │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Database (PostgreSQL + Prisma) │
|
||||
│ ├── users │
|
||||
│ ├── projects │
|
||||
│ ├── conversations │
|
||||
│ ├── messages │
|
||||
│ ├── knowledge_bases │
|
||||
│ ├── documents │
|
||||
│ ├── general_conversations ⭐ 新增 │
|
||||
│ └── general_messages ⭐ 新增 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 前端架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ React + Vite + TypeScript │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Pages │
|
||||
│ ├── HomePage │
|
||||
│ ├── AgentChatPage (项目对话) │
|
||||
│ ├── ChatPage (智能问答) ⭐ 新增 │
|
||||
│ ├── KnowledgePage │
|
||||
│ └── HistoryPage │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Components │
|
||||
│ ├── chat/ │
|
||||
│ │ ├── MessageList │
|
||||
│ │ ├── MessageInput (@知识库) │
|
||||
│ │ └── ModelSelector │
|
||||
│ ├── knowledge/ │
|
||||
│ │ ├── KnowledgeBaseList │
|
||||
│ │ ├── DocumentUpload │
|
||||
│ │ └── DocumentList │
|
||||
│ └── ProjectSelector │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Stores (Zustand) │
|
||||
│ ├── useProjectStore │
|
||||
│ └── useKnowledgeBaseStore │
|
||||
├─────────────────────────────────────────┤
|
||||
│ API Layer │
|
||||
│ ├── projectApi │
|
||||
│ ├── agentApi │
|
||||
│ ├── conversationApi │
|
||||
│ ├── knowledgeBaseApi │
|
||||
│ └── chatApi ⭐ 新增 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 功能清单详解
|
||||
|
||||
### 1. 用户认证与项目管理 ✅
|
||||
**功能**:
|
||||
- 项目CRUD(创建、读取、更新、删除)
|
||||
- 项目选择器(侧边栏)
|
||||
- 项目背景注入到对话
|
||||
|
||||
**技术栈**:
|
||||
- 后端:Prisma ORM + PostgreSQL
|
||||
- 前端:Zustand状态管理 + Ant Design
|
||||
|
||||
**关键文件**:
|
||||
- `backend/src/controllers/projectController.ts`
|
||||
- `frontend/src/stores/useProjectStore.ts`
|
||||
|
||||
---
|
||||
|
||||
### 2. 智能体配置系统 ✅
|
||||
**功能**:
|
||||
- 12个智能体的YAML配置
|
||||
- 动态加载System Prompt和User Prompt模板
|
||||
- 模型参数配置(temperature, maxTokens, topP)
|
||||
|
||||
**技术栈**:
|
||||
- YAML配置驱动
|
||||
- 模板引擎(变量替换 + 条件渲染)
|
||||
|
||||
**关键文件**:
|
||||
- `backend/config/agents.yaml`
|
||||
- `backend/src/services/agentService.ts`
|
||||
- `backend/prompts/*.txt`(13个Prompt文件)
|
||||
|
||||
---
|
||||
|
||||
### 3. 多轮对话上下文管理 ✅
|
||||
**功能**:
|
||||
- 上下文组装(System + 历史 + 用户输入)
|
||||
- 支持最近100条历史消息
|
||||
- 智能的上下文注入策略
|
||||
|
||||
**技术亮点**:
|
||||
```typescript
|
||||
// 首次消息:完整模板(项目背景 + 用户问题 + 知识库)
|
||||
if (isFirstMessage) {
|
||||
userPrompt = renderTemplate({
|
||||
projectBackground,
|
||||
userInput,
|
||||
knowledgeBaseContext
|
||||
});
|
||||
}
|
||||
// 后续消息:只发送新内容
|
||||
else {
|
||||
userPrompt = knowledgeBaseContext
|
||||
? `${userInput}\n\n## 参考文献\n${knowledgeBaseContext}`
|
||||
: userInput;
|
||||
}
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 节省token消耗
|
||||
- 保持上下文连贯
|
||||
- 支持超长对话
|
||||
|
||||
---
|
||||
|
||||
### 4. 流式输出 ✅
|
||||
**功能**:
|
||||
- 实时流式返回AI回答
|
||||
- 打字机效果
|
||||
- 支持超长回答(8000+ tokens)
|
||||
|
||||
**技术实现**:
|
||||
```typescript
|
||||
// 后端:SSE流式输出
|
||||
for await (const chunk of adapter.chatStream(messages)) {
|
||||
reply.raw.write(`data: ${JSON.stringify(chunk)}\n\n`);
|
||||
}
|
||||
|
||||
// 前端:实时渲染
|
||||
const reader = response.body.getReader();
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
const chunk = parseSSE(value);
|
||||
onChunk(chunk.content); // 实时更新UI
|
||||
}
|
||||
```
|
||||
|
||||
**体验提升**: 从"等待30秒"变为"边生成边显示"
|
||||
|
||||
---
|
||||
|
||||
### 5. 模型切换 ✅
|
||||
**功能**:
|
||||
- 支持3个LLM模型
|
||||
- DeepSeek-V3(主力,性价比高)
|
||||
- Qwen3-72b(备用,质量好)
|
||||
- Gemini-Pro(国际用户)
|
||||
|
||||
**技术架构**:
|
||||
```typescript
|
||||
// 适配器模式
|
||||
interface LLMAdapter {
|
||||
chat(messages, options): Promise<Response>
|
||||
chatStream(messages, options): AsyncGenerator<Chunk>
|
||||
}
|
||||
|
||||
class DeepSeekAdapter implements LLMAdapter { ... }
|
||||
class QwenAdapter implements LLMAdapter { ... }
|
||||
class GeminiAdapter implements LLMAdapter { ... }
|
||||
|
||||
// 工厂模式
|
||||
LLMFactory.getAdapter(modelType)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 易于扩展新模型
|
||||
- 统一的调用接口
|
||||
- 降低模型依赖风险
|
||||
|
||||
---
|
||||
|
||||
### 6. 个人知识库管理 ✅
|
||||
**功能**:
|
||||
- 知识库CRUD
|
||||
- 文档上传(支持PDF、Word、TXT等)
|
||||
- 文档状态追踪(上传中、解析中、已完成、失败)
|
||||
- 知识库配额管理
|
||||
|
||||
**技术栈**:
|
||||
- Dify Dataset API(知识库管理)
|
||||
- Dify Document API(文档上传)
|
||||
- Fastify Multipart(文件上传)
|
||||
|
||||
**关键指标**:
|
||||
- ✅ 最大文件10MB
|
||||
- ✅ 每用户最多3个知识库
|
||||
- ✅ 每知识库最多50个文档
|
||||
|
||||
---
|
||||
|
||||
### 7. @知识库检索与RAG集成 ✅
|
||||
**功能**:
|
||||
- @知识库下拉选择器
|
||||
- 语义检索(semantic search)
|
||||
- 检索结果注入到对话上下文
|
||||
- 多知识库联合检索
|
||||
|
||||
**工作流程**:
|
||||
```
|
||||
用户选择知识库 + 提问
|
||||
↓
|
||||
前端发送 knowledgeBaseIds[]
|
||||
↓
|
||||
后端对每个知识库调用 Dify检索API
|
||||
↓
|
||||
返回 Top 3 相关文档片段
|
||||
↓
|
||||
格式化:【知识库:xxx】\n1. [相关度XX%] 内容...
|
||||
↓
|
||||
注入到LLM上下文
|
||||
↓
|
||||
AI基于文献生成回答
|
||||
```
|
||||
|
||||
**关键参数**:
|
||||
- `search_method`: semantic_search(语义检索)
|
||||
- `top_k`: 3(每个知识库返回3条)
|
||||
- 相关度阈值: 无(接受所有结果)
|
||||
|
||||
---
|
||||
|
||||
### 8. 智能问答功能 ✅ (Day 25新增)
|
||||
**功能**:
|
||||
- 无需项目和智能体概念
|
||||
- 纯大模型对话
|
||||
- 可选的@知识库支持
|
||||
- 独立的对话历史
|
||||
|
||||
**用户价值**:
|
||||
- 降低使用门槛(0步骤开始对话)
|
||||
- 提供纯净的测试环境
|
||||
- 满足快速提问场景
|
||||
|
||||
**技术特点**:
|
||||
- 极简System Prompt
|
||||
- 独立数据表(general_conversations)
|
||||
- 最大化复用现有组件(83%复用率)
|
||||
|
||||
---
|
||||
|
||||
## 📝 详细进度文档
|
||||
|
||||
每日进度文档均已创建,位于 `docs/05-每日进度/`:
|
||||
|
||||
1. ✅ Day04-环境搭建完成.md
|
||||
2. ✅ Day05-后端基础架构完成.md
|
||||
3. ✅ Day06-前端基础架构完成.md
|
||||
4. ✅ Day07-前端完整布局完成.md
|
||||
5. ✅ Day08-09-项目管理API完成.md
|
||||
6. ✅ Day10-11-智能体配置系统完成.md
|
||||
7. ✅ Day12-14-对话系统完成.md(未创建,待补充)
|
||||
8. ✅ Day18-Dify部署完成.md
|
||||
9. ✅ Day19-20-知识库API完成.md(未创建,待补充)
|
||||
10. ✅ Day21-22-知识库前端开发与问题修复.md
|
||||
11. ✅ Day23-24-知识库检索与@引用功能完成.md
|
||||
12. ✅ **Day25-智能问答功能完成.md** ⭐ 今日创建
|
||||
|
||||
**总文档数**: 10+份,共约20000行
|
||||
|
||||
---
|
||||
|
||||
## 🚀 下一步规划(里程碑2)
|
||||
|
||||
### Week 5-7: 扩展智能体
|
||||
|
||||
**目标**: 开发剩余11个智能体
|
||||
|
||||
**计划**:
|
||||
1. **选题阶段**(2个)
|
||||
- 科学问题梳理智能体
|
||||
- 假设生成智能体
|
||||
|
||||
2. **设计阶段**(3个)
|
||||
- 研究设计智能体
|
||||
- 样本量计算智能体
|
||||
- 统计分析设计智能体
|
||||
|
||||
3. **撰写阶段**(3个)
|
||||
- 文献综述智能体
|
||||
- 方法学撰写智能体
|
||||
- 结果撰写智能体
|
||||
|
||||
4. **投稿阶段**(3个)
|
||||
- 期刊推荐智能体
|
||||
- 投稿信撰写智能体
|
||||
- 审稿意见回复智能体
|
||||
|
||||
**预计工作量**:
|
||||
- 每个智能体:1天(0.5天Prompt + 0.5天测试)
|
||||
- 总计:11天
|
||||
- 预留:4天缓冲时间
|
||||
- 合计:15天(3周)
|
||||
|
||||
---
|
||||
|
||||
## 🎉 总结与感悟
|
||||
|
||||
### 成功关键因素
|
||||
|
||||
1. **MVP思维**
|
||||
- 先验证最核心、最不确定的功能
|
||||
- 避免一开始就陷入细节
|
||||
|
||||
2. **技术选型正确**
|
||||
- Dify降低RAG复杂度
|
||||
- Fastify性能优秀
|
||||
- Prisma开发效率高
|
||||
|
||||
3. **灵活应变**
|
||||
- 遇到问题立即调整策略
|
||||
- 如:添加智能问答功能解决角色限制问题
|
||||
|
||||
4. **文档驱动**
|
||||
- 每日进度文档帮助回顾和总结
|
||||
- 设计文档指导开发方向
|
||||
|
||||
### 经验教训
|
||||
|
||||
1. **浏览器缓存问题严重**
|
||||
- 开发时需要频繁清除缓存
|
||||
- 建议:添加版本号或hash
|
||||
|
||||
2. **调试日志很重要**
|
||||
- 复杂流程需要详细日志追踪
|
||||
- 建议:引入日志级别管理
|
||||
|
||||
3. **前后端联调需要耐心**
|
||||
- 数据结构需要反复确认
|
||||
- 建议:先用Postman测试API
|
||||
|
||||
---
|
||||
|
||||
## 🏅 里程碑1达成!
|
||||
|
||||
**开发时间**: 22天
|
||||
**预计时间**: 28天
|
||||
**提前**: 6天
|
||||
**完成质量**: 超预期(额外完成智能问答功能)
|
||||
|
||||
**准备进入里程碑2!** 🚀
|
||||
|
||||
---
|
||||
|
||||
**文档创建时间**: 2025-10-11
|
||||
**最后更新**: 2025-10-11
|
||||
|
||||
|
||||
Reference in New Issue
Block a user