feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,24 +1,24 @@
# PKB个人知识库 - 超级安全迁移执行计划
# PKB銝芯犖<EFBFBD><EFBFBD>摨?- 頞<>漣摰匧<E691B0><EFBFBD><EFBFBD><EFBFBD><E99C88>
> **创建日期:** 2026-01-06
> **目标:** 将PKB从旧架构迁移到新架构确保零风险、可回滚、可验证
> **原则:** 保守、渐进、每步可验证、随时可回滚
> **<EFBFBD>𥕦遣<EFBFBD><EFBFBD>嚗?* 2026-01-06
> **<EFBFBD><EFBFBD>嚗?* 撠<>KB隞擧唂<E693A7><EFBFBD><EFBFBD><EFBFBD>唳鰵<E594B3><EFBFBD>嚗𣬚靽嗪妟憌𡡞埯<F0A1A19E><E59FAF><EFBFBD><EFBFBD><E5A2A7><EFBFBD>虾撉諹<E69289>
> **<EFBFBD><EFBFBD>嚗?* 靽嘥<E99DBD><E598A5><EFBFBD><EFBFBD>餈䜘<E9A488><E49C98><EFBFBD>甇亙虾撉諹<E69289><E8ABB9><EFBFBD><EFBFBD><EFBFBD>嗅虾<E59785><EFBFBD>
---
## <20>㴓 餈<><EFBFBD><EFBFBD>
<EFBFBD>KB隞擧唂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- ✅ 保持现有功能100%可用
- ✅ 不影响正在使用的用户
- ✅ 每一步都可以验证和回滚
- ✅ 数据零损失
- <EFBFBD>?靽脲<E99DBD><E884B2><EFBFBD><E594B3><EFBFBD>100%<EFBFBD>舐鍂
- <EFBFBD>?銝滚蔣<E6BB9A>齿迤<E9BDBF>其蝙<E585B6><EFBFBD><E587BD><EFBFBD>
- <EFBFBD>?瘥譍<E798A5>甇仿<E79487><E4BBBF>臭誑撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>皛?
- <EFBFBD>?<3F>唳旿<E594B3><EFBFBD>憭?
---
## 📊 当前状态分析
## <EFBFBD><EFBFBD> 敶枏<E695B6><E69E8F><EFBFBD><E59786><EFBFBD><EFBFBD>?
### 旧架构位置
### <EFBFBD>扳沲<EFBFBD><EFBFBD><EFBFBD>蝵?
```
<EFBFBD>𡒊垢嚗颹ackend/src/legacy/
<EFBFBD><EFBFBD> controllers/knowledgeBaseController.ts
@@ -28,10 +28,10 @@
<EFBFBD>滨垢嚗餎rontend/src/
<EFBFBD><EFBFBD> pages/KnowledgePage.tsx
数据库:✅ pkb_schema已在独立Schema无需迁移
<EFBFBD>唳旿摨橒<EFBFBD><EFBFBD>?pkb_schema<EFBFBD><EFBFBD>函𡠺蝡喹chema嚗峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>宏嚗?
```
### 新架构位置
### <EFBFBD>唳沲<EFBFBD><EFBFBD><EFBFBD>蝵?
```
<EFBFBD>𡒊垢嚗颹ackend/src/modules/pkb/
<EFBFBD><EFBFBD> controllers/
@@ -46,69 +46,69 @@
---
## 🚀 分阶段执行计划
## <EFBFBD><EFBFBD> <20><>𧫴畾菜<E795BE>銵諹恣<E8ABB9>?
### <20><EFBFBD> <20>園𡢿隡啁<E99AA1>
| 阶段 | 任务 | 预估时间 | 可回滚 | 风险 |
| <EFBFBD>嗆挾 | 隞餃𦛚 | 憸<><EFBFBD>園𡢿 | <20><EFBFBD>皛?| 憌𡡞埯 |
|-----|------|---------|--------|-----|
| **阶段0** | 代码审查和准备 | 0.5| N/A | |
| **阶段1** | 后端代码复制(不删除旧代码) | 0.5天 | ✅ | 极低 |
| **阶段2** | 后端API路由添加双路由共存 | 0.5天 | ✅ | 极低 |
| **阶段3** | 后端功能验证 | 0.5天 | ✅ | 低 |
| **阶段4** | 前端代码复制 | 0.5天 | ✅ | 极低 |
| **阶段5** | 前端路由添加(双路由共存) | 0.5天 | ✅ | 极低 |
| **阶段6** | 前端功能验证 | 0.5天 | ✅ | 低 |
| **阶段7** | 灰度发布(功能开关) | 1天 | ✅ | 中 |
| **阶段8** | 全量切换 | 0.5天 | ✅ | 低 |
| **阶段9** | 清理旧代码(可选) | 0.5天 | ⚠️ | |
| **<EFBFBD>嗆挾0** | <EFBFBD><EFBFBD>摰⊥䰻<EFBFBD><EFBFBD><EFBFBD>憭?| 0.5憭?| N/A | <EFBFBD>?|
| **<EFBFBD>嗆挾1** | <EFBFBD>𡒊垢隞<EFBFBD><EFBFBD>憭滚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣳇膄<EFBFBD>找誨<EFBFBD><EFBFBD><EFBFBD> | 0.5憭?| <20>?| <20><><EFBFBD> |
| **<EFBFBD>嗆挾2** | <EFBFBD>𡒊垢API頝舐眏瘛餃<EFBFBD><EFBFBD><EFBFBD>頝舐眏<EFBFBD><EFBFBD>嚗?| 0.5憭?| <20>?| <20><><EFBFBD> |
| **<EFBFBD>嗆挾3** | <EFBFBD>𡒊垢<EFBFBD><EFBFBD>撉諹<EFBFBD> | 0.5憭?| <20>?| 雿?|
| **<EFBFBD>嗆挾4** | <EFBFBD>滨垢隞<EFBFBD><EFBFBD>憭滚<EFBFBD> | 0.5憭?| <20>?| <20><><EFBFBD> |
| **<EFBFBD>嗆挾5** | <EFBFBD>滨垢頝舐眏瘛餃<EFBFBD><EFBFBD><EFBFBD>頝舐眏<EFBFBD><EFBFBD>嚗?| 0.5憭?| <20>?| <20><><EFBFBD> |
| **<EFBFBD>嗆挾6** | <EFBFBD>滨垢<EFBFBD><EFBFBD>撉諹<EFBFBD> | 0.5憭?| <20>?| 雿?|
| **<EFBFBD>嗆挾7** | <EFBFBD>啣漲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 1憭?| <20>?| 銝?|
| **<EFBFBD>嗆挾8** | <EFBFBD><EFBFBD><EFBFBD><EFBFBD>揢 | 0.5憭?| <20>?| 雿?|
| **<EFBFBD>嗆挾9** | <EFBFBD><EFBFBD><EFBFBD>找誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 0.5憭?| <20>𩤃<EFBFBD> | 雿?|
**总计:约 5-6天保守估计**
**<EFBFBD>餉恣嚗𡁶漲 5-6憭抬<E686AD>靽嘥<E99DBD>隡啗恣嚗?*
---
## 📝 阶段0代码审查和准备0.5天)
## <EFBFBD><EFBFBD> <20>嗆挾0嚗帋誨<E5B88B><E8AAA8><EFBFBD><EFBFBD><E4BA99><EFBFBD><EFBFBD>嚗?.5憭抬<EFBFBD>
### <20><EFBFBD>
- <20><><EFBFBD><EFBFBD><EFBFBD><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E58CA7><EFBFBD>
- 蝖株恕靘肽<E99D98><E882BD>喟頂
- 制定详细的迁移清单
- <EFBFBD><EFBFBD>霂衣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘餅<EFBFBD><EFBFBD>?
### 隞餃𦛚皜<F0A69B9A><E79A9C>
#### Task 0.1嚗𡁜恣<EFBFBD>交唂隞<EFBFBD><EFBFBD>蝏𤘪<EFBFBD>
```bash
# <20>𡒊垢隞<E59EA2><E99A9E>摰⊥䰻
- [ ] 阅读 knowledgeBaseController.ts所有API端点
- [ ] 阅读 knowledgeBaseService.ts(所有业务逻辑)
- [ ] <EFBFBD><EFBFBD> knowledgeBaseController.ts<EFBFBD><EFBFBD><EFBFBD>𡅅PI蝡舐<EFBFBD>嚗?
- [ ] <EFBFBD><EFBFBD> knowledgeBaseService.ts<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
- [ ] <20><>粉 knowledgeBases.ts嚗<73><EFBFBD><EFBFBD>銋㚁<E98A8B>
- [ ] 列出所有API端点和功能
- [ ] <EFBFBD>堒枂<EFBFBD><EFBFBD><EFBFBD>𡅅PI蝡舐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
# <20>滨垢隞<E59EA2><E99A9E>摰⊥䰻
- [ ] <20><>粉 KnowledgePage.tsx嚗㇎I<E3878E>䔶漱鈭𡜐<E988AD>
- [ ] 列出所有用户操作流程
- [ ] 确认状态管理方式
- [ ] <EFBFBD>堒枂<EFBFBD><EFBFBD><EFBFBD>厩鍂<EFBFBD><EFBFBD>雿𨀣<EFBFBD>蝔?
- [ ] 蝖株恕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲮撘?
```
#### Task 0.2嚗𡁶霈斗㺭<EFBFBD><EFBFBD>Schema
```bash
- [ ] 验证pkb_schema表结构
- [ ] 撉諹<EFBFBD>pkb_schema銵函<EFBFBD><EFBFBD>?
- [ ] 蝖株恕Prisma璅<E79285>摰帋<E691B0>
- [ ] 检查是否有旧数据
- [ ] 确认索引和约束
- [ ] <EFBFBD><EFBFBD>交糓<EFBFBD><EFBFBD><EFBFBD>扳㺭<EFBFBD>?
- [ ] 蝖株恕蝝<EFBFBD><EFBFBD>𣬚漲<EFBFBD>?
```
#### Task 0.3:创建功能清单
#### Task 0.3嚗𡁜<EFBFBD>撱箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
- [ ] 列出所有功能CRUD、上传、检索等
- [ ] <EFBFBD>堒枂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRUD<EFBFBD><EFBFBD><EFBFBD>隡𨬭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
- [ ] <20>𥕦遣瘚贝<E7989A><E8B49D><EFBFBD>
- [ ] <20><><EFBFBD>瘚贝<E7989A><E8B49D>唳旿
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 所有代码已阅读并理解
- ✅ 功能清单已创建
- ✅ 测试用例已准备
- <EFBFBD>?<3F><><EFBFBD>劐誨<E58A90><E8AAA8><EFBFBD><E6AD87>粉撟嗥<E6929F>閫?
- <EFBFBD>?<3F><EFBFBD><EFBFBD><E79A9C>撌脣<E6928C>撱?
- <EFBFBD>?瘚贝<E7989A><E8B49D><EFBFBD>撌脣<E6928C>憭?
### <20><EFBFBD><E5A2A7><EFBFBD>
- <20>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂颱誨<E9A2B1><E8AAA8><EFBFBD>
@@ -119,8 +119,8 @@
### <20><EFBFBD>
-<>唂隞<E59482><E99A9E>憭滚<E686AD><E6BB9A>唳鰵雿滨蔭
- **不删除、不修改旧代码**
- 确保新代码可以独立编译
- **銝滚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽格㺿<EFBFBD>找誨<EFBFBD>?*
- 蝖桐<EFBFBD><EFBFBD>唬誨<EFBFBD><EFBFBD>虾隞亦𡠺蝡讠<EFBFBD>霂?
### 隞餃𦛚皜<F0A69B9A><E79A9C>
@@ -136,11 +136,11 @@ mkdir -p backend/src/modules/pkb/utils
#### Task 1.2嚗𡁜<EFBFBD><EFBFBD>詆ontroller隞<EFBFBD><EFBFBD>
```bash
# 复制文件(保留旧文件)
# 憭滚<EFBFBD><EFBFBD><EFBFBD>辣嚗<EFBFBD><EFBFBD><EFBFBD>蹱唂<EFBFBD><EFBFBD>辣嚗?
cp backend/src/legacy/controllers/knowledgeBaseController.ts \
backend/src/modules/pkb/controllers/knowledgeBaseController.ts
# 验证:旧文件仍存在
# 撉諹<EFBFBD>嚗𡁏唂<EFBFBD><EFBFBD>辣隞滚<EFBFBD><EFBFBD>?
ls -la backend/src/legacy/controllers/knowledgeBaseController.ts
```
@@ -156,17 +156,17 @@ cp backend/src/legacy/routes/knowledgeBases.ts \
backend/src/modules/pkb/routes/knowledgeBases.ts
```
#### Task 1.5:更新导入路径
#### Task 1.5嚗𡁏凒<EFBFBD>啣紡<EFBFBD>亥楝敺?
```typescript
// 在新代码中,更新所有 import 路径
// 从: import { xxx } from '../../legacy/...'
// 到: import { xxx } from '../services/...'
// <EFBFBD>冽鰵隞<EFBFBD><EFBFBD>銝哨<EFBFBD><EFBFBD>湔鰵<EFBFBD><EFBFBD><EFBFBD>?import 頝臬<EFBFBD>
// 隞? import { xxx } from '../../legacy/...'
// <EFBFBD>? import { xxx } from '../services/...'
// 雿<>糓嚗帋<E59A97>韏鈪ommon撅<6E><E69285>靽脲<E99DBD>銝滚<E98A9D>
import { prisma } from '../../../../common/database/prisma';
```
#### Task 1.6:编译验证
#### Task 1.6嚗𡁶<EFBFBD>霂煾<EFBFBD>霂?
```bash
# 蝻𤥁<E89DBB><EFBFBD><E79289><EFBFBD>銝滩<E98A9D>銵䕘<E98AB5>
cd backend
@@ -177,13 +177,13 @@ npm run build
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 新代码编译通过
- ✅ 旧代码完全未动
- ✅ 旧系统仍可正常运行
- <EFBFBD>?<3F>唬誨<E594AC><E8AAA8><EFBFBD>霂煾<E99C82><EFBFBD>
- <EFBFBD>?<3F>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD>冽𧊋<E586BD>?
- <EFBFBD>?<3F>抒頂蝏煺<E89D8F><E785BA>舀迤撣貉<E692A3>銵?
### <20><EFBFBD><E5A2A7><EFBFBD>
```bash
# 如果出问题,直接删除新目录
# <EFBFBD><EFBFBD><EFBFBD>粹䔮憸矋<EFBFBD><EFBFBD>湔𦻖<EFBFBD>𣳇膄<EFBFBD>啁𤌍敶?
rm -rf backend/src/modules/pkb
# <20>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD>冽𧊋<E586BD><EFBFBD>蝟餌<E89D9F>蝏抒賒餈鞱<E9A488>
```
@@ -201,27 +201,27 @@ rm -rf backend/src/modules/pkb
#### Task 2.1嚗𡁏釣<EFBFBD>峕鰵頝舐眏嚗<EFBFBD><EFBFBD>敶勗<EFBFBD><EFBFBD>扯楝<EFBFBD><EFBFBD>
```typescript
// backend/src/index.ts routes/index.ts
// backend/src/index.ts <EFBFBD>?routes/index.ts
// 旧路由(保持不变)
// <EFBFBD>扯楝<EFBFBD><EFBFBD>靽脲<EFBFBD>銝滚<EFBFBD>嚗?
import legacyKnowledgeRoutes from './legacy/routes/knowledgeBases';
app.use('/api/v1/knowledge', legacyKnowledgeRoutes);
// 新路由(新增)
// <EFBFBD>啗楝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
import newKnowledgeRoutes from './modules/pkb/routes/knowledgeBases';
app.use('/api/v2/knowledge', newKnowledgeRoutes); // 雿輻鍂v2頝臬<E9A09D>
```
#### Task 2.2:确认路由隔离
#### Task 2.2嚗𡁶霈方楝<EFBFBD><EFBFBD>蝳?
```bash
# <20>啗楝<E59597>梯楝敺<E6A59D><E695BA>/api/v2/knowledge/*
# <20>扯楝<E689AF>梯楝敺<E6A59D><E695BA>/api/v1/knowledge/*
# 銝方<E98A9D><E696B9><EFBFBD><EFBFBD>函𡠺蝡页<E89DA1>鈭雴<E988AD>撟脫贋
```
#### Task 2.3:添加健康检查端点
#### Task 2.3嚗𡁏溶<EFBFBD><EFBFBD>摨瑟<EFBFBD><EFBFBD>亦垢<EFBFBD>?
```typescript
// 在新路由中添加健康检查
// <EFBFBD>冽鰵頝舐眏銝剜溶<EFBFBD><EFBFBD>摨瑟<EFBFBD><EFBFBD>?
router.get('/health', (req, res) => {
res.json({
status: 'ok',
@@ -233,38 +233,38 @@ router.get('/health', (req, res) => {
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
#### 验证新路由可用
#### 撉諹<EFBFBD><EFBFBD>啗楝<EFBFBD>勗虾<EFBFBD>?
```bash
# 启动服务器
# <EFBFBD>臬𢆡<EFBFBD>滚𦛚<EFBFBD>?
npm run dev
# 测试新路由健康检查
# 瘚贝<EFBFBD><EFBFBD>啗楝<EFBFBD><EFBFBD>摨瑟<EFBFBD><EFBFBD>?
curl http://localhost:3000/api/v2/knowledge/health
# <20><><EFBFBD>餈𥪜<E9A488>嚗㝯"status":"ok","module":"pkb-v2",...}
# 蝖株恕<E6A0AA>扯楝<E689AF><EFBFBD>撌乩<E6928C>
curl http://localhost:3000/api/v1/knowledge/xxx
# 期望返回:正常数据
# <EFBFBD><EFBFBD><EFBFBD>餈𥪜<EFBFBD>嚗𡁏迤撣豢㺭<EFBFBD>?
```
#### 验证旧路由未受影响
#### 撉諹<EFBFBD><EFBFBD>扯楝<EFBFBD>望𧊋<EFBFBD>堒蔣<EFBFBD>?
```bash
# 雿輻鍂Postman<61>鈪url瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>㗇唂API
# 确保所有功能正常
# 蝖桐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>賣迤撣?
# 例如:
# 靘见<EFBFBD>嚗?
curl -X GET http://localhost:3000/api/v1/knowledge/list
curl -X POST http://localhost:3000/api/v1/knowledge/create
# ... 测试所有端点
# ... 瘚贝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩垢<EFBFBD>?
```
### <20><EFBFBD><E5A2A7><EFBFBD>
```typescript
// 如果新路由有问题,直接注释掉新路由注册
// <EFBFBD><EFBFBD><EFBFBD>啗楝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𣬚凒<EFBFBD>交釣<EFBFBD>𦠜<EFBFBD><EFBFBD>啗楝<EFBFBD>望釣<EFBFBD>?
// import newKnowledgeRoutes from './modules/pkb/routes/knowledgeBases';
// app.use('/api/v2/knowledge', newKnowledgeRoutes); // 注释掉
// app.use('/api/v2/knowledge', newKnowledgeRoutes); // 瘜券<EFBFBD><EFBFBD>?
// 旧路由继续工作,用户无感知
// <EFBFBD>扯楝<EFBFBD>梁誧蝏剖極雿頣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```
---
@@ -272,13 +272,13 @@ curl -X POST http://localhost:3000/api/v1/knowledge/create
## <20><> <20>嗆挾3嚗𡁜<E59A97>蝡臬<E89DA1><E887AC><EFBFBD><EFBFBD><E99C82>0.5憭抬<EFBFBD>
### <20><EFBFBD>
- 验证新后端所有功能
- 撉諹<EFBFBD><EFBFBD><EFBFBD>蝡舀<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- 撖寞<E69296><E5AF9E>唳唂API餈𥪜<E9A488>蝏𤘪<E89D8F>
- 确保新后端与旧后端行为完全一致
- 蝖桐<EFBFBD><EFBFBD><EFBFBD>蝡臭<EFBFBD><EFBFBD><EFBFBD>蝡航<EFBFBD>銝箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### 隞餃𦛚皜<F0A69B9A><E79A9C>
#### Task 3.1:准备测试环境
#### Task 3.1嚗𡁜<EFBFBD><EFBFBD><EFBFBD>霂閧㴓憓?
```bash
# <20>𥕦遣瘚贝<E7989A><E8B49D><EFBFBD>
# <20><><EFBFBD>瘚贝<E7989A><E8B49D>唳旿嚗<E697BF>䰻霂<E4B0BB><E99C82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E78DA2>
@@ -288,37 +288,37 @@ curl -X POST http://localhost:3000/api/v1/knowledge/create
#### Task 3.2嚗𡁻<EFBFBD>𣂷葵瘚贝<EFBFBD>API蝡舐<EFBFBD>
```bash
测试清单:
- [ ] GET /api/v2/knowledge/list - 获取知识库列表
- [ ] POST /api/v2/knowledge/create - 创建知识库
- [ ] GET /api/v2/knowledge/:id - 获取知识库详情
- [ ] PUT /api/v2/knowledge/:id - 更新知识库
- [ ] DELETE /api/v2/knowledge/:id - 删除知识库
瘚贝<EFBFBD><EFBFBD><EFBFBD>嚗?
- [ ] GET /api/v2/knowledge/list - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨枏<EFBFBD>銵?
- [ ] POST /api/v2/knowledge/create - <EFBFBD>𥕦遣<EFBFBD><EFBFBD>摨?
- [ ] GET /api/v2/knowledge/:id - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨栞祕<EFBFBD>?
- [ ] PUT /api/v2/knowledge/:id - <EFBFBD>湔鰵<EFBFBD><EFBFBD>摨?
- [ ] DELETE /api/v2/knowledge/:id - <EFBFBD>𣳇膄<EFBFBD><EFBFBD>摨?
- [ ] POST /api/v2/knowledge/:id/upload - 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
- [ ] GET /api/v2/knowledge/:id/documents - <20><EFBFBD><E79195><EFBFBD><EFBFBD>𡑒”
- [ ] DELETE /api/v2/knowledge/:id/documents/:docId - <20>𣳇膄<F0A3B387><E88684>
- [ ] POST /api/v2/knowledge/:id/query - RAG检索
- [ ] GET /api/v2/knowledge/:id/batch-tasks - 批处理任务列表
- [ ] POST /api/v2/knowledge/:id/batch-tasks - 创建批处理任务
- [ ] POST /api/v2/knowledge/:id/query - RAG<EFBFBD>蝝?
- [ ] GET /api/v2/knowledge/:id/batch-tasks - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵?
- [ ] POST /api/v2/knowledge/:id/batch-tasks - <EFBFBD>𥕦遣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```
#### Task 3.3:对比测试(新旧API
#### Task 3.3嚗𡁜笆瘥娍<EFBFBD>霂𤏪<EFBFBD><EFBFBD>唳唂API嚗?
```bash
# 对于每个API使用相同参数同时调用新旧接口
# 对比返回结果是否一致
# 撖嫣<EFBFBD>瘥譍葵API嚗䔶蝙<EFBFBD>函㮾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>冽鰵<EFBFBD>扳𦻖<EFBFBD>?
# 撖寞<EFBFBD>餈𥪜<EFBFBD>蝏𤘪<EFBFBD><EFBFBD>臬炏銝<EFBFBD><EFBFBD>?
# 示例:
# 蝷箔<EFBFBD>嚗?
curl /api/v1/knowledge/list > old_result.json
curl /api/v2/knowledge/list > new_result.json
diff old_result.json new_result.json
```
#### Task 3.4:边界测试
#### Task 3.4嚗朞器<EFBFBD><EFBFBD>霂?
```bash
- [ ] 瘚贝<E7989A><E8B49D><EFBFBD><E4ADBE><EFBFBD>
- [ ] 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- [ ] 瘚贝<E7989A>撟嗅<E6929F>霂瑟<E99C82>
- [ ] 测试大文件上传
- [ ] 瘚贝<EFBFBD>憭扳<EFBFBD>隞嗡<EFBFBD>隡?
- [ ] 瘚贝<E7989A><E8B49D>躰秤憭<E7A7A4><E686AD>
```
@@ -331,24 +331,24 @@ diff old_result.json new_result.json
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 所有API端点测试通过
- ✅ 新旧API返回结果一致
- ✅ 边界情况处理正确
- ✅ 性能无明显下降
- <EFBFBD>?<3F><><EFBFBD>𡅅PI蝡舐<E89DA1>瘚贝<E7989A><E8B49D><EFBFBD>
- <EFBFBD>?<3F>唳唂API餈𥪜<E9A488>蝏𤘪<E89D8F><EFBFBD><E98A9D>?
- <EFBFBD>?颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD><EFBFBD><E686AD><EFBFBD>
- <EFBFBD>?<3F><EFBFBD><E689AF><EFBFBD><E4ADBE><EFBFBD><E69B86>?
### 发现问题的处理
### <EFBFBD>𤑳緵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
如果发现问题:
<EFBFBD><EFBFBD><EFBFBD>𤑳緵<EFBFBD><EFBFBD>嚗?
1. 霈啣<E99C88><E595A3><EFBFBD>霂行<E99C82>
2. 修复新代码
2. 靽桀<EFBFBD><EFBFBD>唬誨<EFBFBD>?
3. <20>齿鰵瘚贝<E7989A>
4. 不影响旧系统(旧路由继续工作)
4. 銝滚蔣<EFBFBD>齿唂蝟餌<EFBFBD><EFBFBD>唂頝舐眏蝏抒賒撌乩<EFBFBD>嚗?
5. <20>臭誑<E887AD>𤩺𧒄<F0A4A9BA><F0A79284><EFBFBD><EFBFBD>
```
### <20><EFBFBD><E5A2A7><EFBFBD>
- 发现严重问题时,停止使用新路由
- 旧路由继续工作
- <EFBFBD>𤑳緵銝仿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣迫雿輻鍂<EFBFBD>啗楝<EFBFBD>?
- <EFBFBD>扯楝<EFBFBD>梁誧蝏剖極雿?
- <20>㗇𧒄<E39787><EFBFBD><E6B994>耨憭齿鰵隞<E9B0B5><E99A9E>
---
@@ -357,8 +357,8 @@ diff old_result.json new_result.json
### <20><EFBFBD>
-<><EFBFBD>滨垢隞<E59EA2><E99A9E>憭滚<E686AD><E6BB9A>唳鰵雿滨蔭
- **不删除、不修改旧代码**
- 确保新代码可以独立编译
- **銝滚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽格㺿<EFBFBD>找誨<EFBFBD>?*
- 蝖桐<EFBFBD><EFBFBD>唬誨<EFBFBD><EFBFBD>虾隞亦𡠺蝡讠<EFBFBD>霂?
### 隞餃𦛚皜<F0A69B9A><E79A9C>
@@ -371,7 +371,7 @@ mkdir -p frontend-v2/src/modules/pkb/types
mkdir -p frontend-v2/src/modules/pkb/hooks
```
#### Task 4.2:复制页面代码
#### Task 4.2嚗𡁜<EFBFBD><EFBFBD>園△<EFBFBD><EFBFBD>?
```bash
cp frontend/src/pages/KnowledgePage.tsx \
frontend-v2/src/modules/pkb/pages/KnowledgePage.tsx
@@ -383,38 +383,38 @@ cp frontend/src/pages/KnowledgePage.tsx \
// <20>𥕦遣<F0A595A6><EFBFBD>API靚<49>鍂撅<E98D82><E69285><EFBFBD><EFBFBD><EFBFBD> /api/v2/knowledge/*
```
#### Task 4.4:更新导入路径
#### Task 4.4嚗𡁏凒<EFBFBD>啣紡<EFBFBD>亥楝敺?
```typescript
// <20>湔鰵<E6B994><E9B0B5><EFBFBD>栄mport頝臬<E9A09D>
// 但保持调用相同的UI组件库
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>函㮾<EFBFBD>𣬚<EFBFBD>UI蝏<EFBFBD>辣摨?
```
#### Task 4.5:编译验证
#### Task 4.5嚗𡁶<EFBFBD>霂煾<EFBFBD>霂?
```bash
cd frontend-v2
npm run build
# 检查编译错误
# <EFBFBD><EFBFBD><EFBFBD>霂煾<EFBFBD>霂?
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 新代码编译通过
- ✅ 旧前端完全未动
- ✅ 旧前端仍可正常访问
- <EFBFBD>?<3F>唬誨<E594AC><E8AAA8><EFBFBD>霂煾<E99C82><EFBFBD>
- <EFBFBD>?<3F><EFBFBD>蝡臬<E89DA1><E887AC>冽𧊋<E586BD>?
- <EFBFBD>?<3F><EFBFBD>蝡臭<E89DA1><E887AD>舀迤撣貉挪<E8B289>?
### <20><EFBFBD><E5A2A7><EFBFBD>
```bash
# 删除新目录
# <EFBFBD>𣳇膄<EFBFBD>啁𤌍敶?
rm -rf frontend-v2/src/modules/pkb
# 旧前端继续工作
# <EFBFBD><EFBFBD>蝡舐誧蝏剖極雿?
```
---
## 📝 阶段5前端路由添加双路由共存0.5天)
## <EFBFBD><EFBFBD> <20>嗆挾5嚗𡁜<E59A97>蝡航楝<E888AA>望溶<E69C9B>𩤃<EFBFBD><F0A9A483>諹楝<E8ABB9><EFBFBD>摮矋<E691AE>嚗?.5憭抬<EFBFBD>
### <20><EFBFBD>
- <20>冽鰵<E586BD>滨垢瘛餃<E7989B>頝舐眏
- **旧路由保持不变**
- **<EFBFBD>扯楝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*
- <20>唳唂憿菟𢒰<E88F9F>峕𧒄<E5B395>舐鍂
### 隞餃𦛚皜<F0A69B9A><E79A9C>
@@ -423,33 +423,33 @@ rm -rf frontend-v2/src/modules/pkb
```typescript
// frontend-v2/src/router/index.ts
// 旧路由(保持不变)- 如果旧前端还在运行
// <EFBFBD>扯楝<EFBFBD><EFBFBD>靽脲<EFBFBD>銝滚<EFBFBD>嚗? 憒<><E68692><EFBFBD><EFBFBD>蝡航<E89DA1><E888AA><EFBFBD>銵?
// 霈輸䔮嚗冴ttp://localhost:5173/knowledge
// 新路由(新增)
// <EFBFBD>啗楝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
{
path: '/pkb', // 使用新路径
path: '/pkb', // 雿輻鍂<EFBFBD>啗楝敺?
component: () => import('@/modules/pkb/pages/KnowledgePage.tsx'),
meta: { title: 'PKB个人知识库新版' }
meta: { title: 'PKB銝芯犖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? }
}
```
#### Task 5.2嚗𡁏凒<EFBFBD>蚊PI靚<EFBFBD>
```typescript
// 确保新前端调用的是 /api/v2/knowledge/* 路由
// 蝖桐<EFBFBD><EFBFBD><EFBFBD>蝡航<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?/api/v2/knowledge/* 頝舐眏
const API_BASE = '/api/v2/knowledge';
```
#### Task 5.3:添加版本标识
#### Task 5.3嚗𡁏溶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂?
```typescript
// 在页面上添加版本标识,方便区分新旧版本
<div className="version-badge">V2 ()</div>
// <EFBFBD>券△<EFBFBD><EFBFBD>瘛餃<EFBFBD><EFBFBD><EFBFBD>𧋦<EFBFBD><EFBFBD><EFBFBD>嚗峕䲮靘踹躹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<div className="version-badge">V2 (<EFBFBD><EFBFBD>?</div>
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 新路由可访问http://localhost:5174/pkb
- ✅ 页面正常渲染
- ✅ 无编译错误
- <EFBFBD>?<3F>啗楝<E59597>勗虾霈輸䔮嚗冴ttp://localhost:5174/pkb
- <EFBFBD>?憿菟𢒰甇<F0A292B0>虜皜脫<E79A9C>
- <EFBFBD>?<3F><EFBFBD>霂煾<E99C82>霂?
### <20><EFBFBD><E5A2A7><EFBFBD>
```typescript
@@ -465,66 +465,66 @@ const API_BASE = '/api/v2/knowledge';
## <20><> <20>嗆挾6嚗𡁜<E59A97>蝡臬<E89DA1><E887AC><EFBFBD><EFBFBD><E99C82>0.5憭抬<EFBFBD>
### <20><EFBFBD>
- 验证新前端所有功能
- 确保用户体验一致
- 撉諹<EFBFBD><EFBFBD><EFBFBD>蝡舀<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- 蝖桐<EFBFBD><EFBFBD><EFBFBD>雿㯄<EFBFBD><EFBFBD><EFBFBD>?
- <20>𤑳緵撟嗡耨憭䔛I<E4949B><EFBFBD>
### 隞餃𦛚皜<F0A69B9A><E79A9C>
#### Task 6.1:手动功能测试
#### Task 6.1嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂?
```bash
测试流程:
瘚贝<EFBFBD><EFBFBD><EFBFBD>嚗?
1. [ ] 霈輸䔮<E8BCB8>圈△<E59C88><EFBFBD>http://localhost:5174/pkb
2. [ ] <20><EFBFBD><E9A483><EFBFBD>
3. [ ] 查看知识库列表
3. [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨枏<EFBFBD>銵?
4. [ ] <20>𥕦遣<F0A595A6>啁䰻霂<E4B0BB><E99C82>
5. [ ] 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
6. [ ] <20><EFBFBD><E4BAA6><EFBFBD><EFBFBD>𡑒”
7. [ ] RAG检索功能
8. [ ] 编辑知识库
7. [ ] RAG<EFBFBD><EFBFBD><EFBFBD>?
8. [ ] 蝻𤥁<EFBFBD><EFBFBD><EFBFBD>摨?
9. [ ] <20>𣳇膄<F0A3B387><E88684>
10. [ ] 删除知识库
11. [ ] 批处理功能
10. [ ] <EFBFBD>𣳇膄<EFBFBD><EFBFBD>摨?
11. [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
12. [ ] <20>躰秤<E8BAB0>鞟內
```
#### Task 6.2UI一致性检查
#### Task 6.2嚗䦧I銝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
- [ ]<><E692A3><EFBFBD>臬炏甇<E7828F>
- [ ] <20><EFBFBD><E79195>臬炏甇<E7828F>
- [ ] 鈭支<E988AD><E694AF>臬炏瘚<E7828F><E7989A>
- [ ] 加载状态显示
- [ ] <EFBFBD>㰘蝸<EFBFBD><EFBFBD><EFBFBD>遬蝷?
- [ ] <20>躰秤<E8BAB0>鞟內<E99E9F>见末
```
#### Task 6.3:浏览器兼容性
#### Task 6.3嚗𡁏<EFBFBD><EFBFBD><EFBFBD>澆捆<EFBFBD>?
```bash
- [ ] Chrome瘚贝<E7989A>
- [ ] Firefox瘚贝<E7989A>
- [ ] Safari测试如有Mac
- [ ] Safari瘚贝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撑ac嚗?
```
#### Task 6.4嚗𡁜<EFBFBD>摨𥪜<EFBFBD>瘚贝<EFBFBD>
```bash
- [ ] 桌面端(1920x1080
- [ ] 平板端(768x1024
- [ ] 移动端(375x667
- [ ] 獢屸𢒰蝡荔<EFBFBD>1920x1080嚗?
- [ ] 撟單踎蝡荔<EFBFBD>768x1024嚗?
- [ ] 蝘餃𢆡蝡荔<EFBFBD>375x667嚗?
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 所有功能正常工作
- ✅ UI显示正确
- ✅ 无明显bug
- ✅ 用户体验良好
- <EFBFBD>?<3F><><EFBFBD><EFBFBD><E58CA7>賣迤撣詨極雿?
- <EFBFBD>?UI<55>曄內甇<E585A7>
- <EFBFBD>?<3F><EFBFBD><E4ADBE>ug
- <EFBFBD>?<3F><EFBFBD>雿㯄<E99BBF><E3AF84>臬末
### 发现问题的处理
- 修复新前端代码
- 旧前端继续可用
- 不影响现有用户
### <EFBFBD>𤑳緵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- 靽桀<EFBFBD><EFBFBD><EFBFBD>蝡臭誨<EFBFBD>?
- <EFBFBD><EFBFBD>蝡舐誧蝏剖虾<EFBFBD>?
- 銝滚蔣<EFBFBD>滨緵<EFBFBD>厩鍂<EFBFBD>?
---
## 📝 阶段7灰度发布功能开关1天
## <EFBFBD><EFBFBD> <20>嗆挾7嚗𡁶<E59A97>摨血<E691A8><EFBFBD><E692A3><EFBFBD><EFBFBD><EFBFBD><E69298><EFBFBD>嚗?憭抬<E686AD>
### <20><EFBFBD>
- 霈拚<E99C88><E68B9A><EFBFBD><EFBFBD>瑚蝙<E7919A>冽鰵<E586BD><E9B0B5>𧋦
@@ -533,7 +533,7 @@ const API_BASE = '/api/v2/knowledge';
### 隞餃𦛚皜<F0A69B9A><E79A9C>
#### Task 7.1:实现功能开关
#### Task 7.1嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```typescript
// backend/src/common/config/featureFlags.ts
export const featureFlags = {
@@ -541,7 +541,7 @@ export const featureFlags = {
pkbV2UserWhitelist: process.env.PKB_V2_WHITELIST?.split(',') || [],
};
// 中间件检查
// 銝剝𡢿隞嗆<EFBFBD><EFBFBD>?
function pkbVersionRouter(req, res, next) {
const userId = req.user?.id;
@@ -550,7 +550,7 @@ function pkbVersionRouter(req, res, next) {
req.usePKBv2 = true;
}
// 或全局开关
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
if (featureFlags.usePKBv2) {
req.usePKBv2 = true;
}
@@ -559,7 +559,7 @@ function pkbVersionRouter(req, res, next) {
}
```
#### Task 7.2:前端功能开关
#### Task 7.2嚗𡁜<EFBFBD>蝡臬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```typescript
// frontend-v2/src/modules/pkb/config.ts
export const usePKBv2 = () => {
@@ -576,21 +576,21 @@ export const getApiBase = () => {
};
```
#### Task 7.3:灰度发布策略
#### Task 7.3嚗𡁶<EFBFBD>摨血<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
<EFBFBD>嗆挾7.1嚗𡁜<EFBFBD><EFBFBD><EFBFBD>霂𤏪<EFBFBD>1-2憭抬<E686AD>
- [ ]<><E69298>穃𣪧<E7A983>煺蝙<E785BA>冽鰵<E586BD><E9B0B5>𧋦
- [ ] 霈曄蔭嚗饝ocalStorage.setItem('force-pkb-v2', 'true')
- [ ] 记录所有问题
- [ ] 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>厰䔮憸?
阶段7.2小范围用户3-5天
- [ ] 选择5-10个活跃用户
- [ ] 加入白名单
<EFBFBD>嗆挾7.2嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?-5憭抬<E686AD>
- [ ] <EFBFBD>㗇𥋘5-10銝芣暑頝<EFBFBD><EFBFBD>?
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- [ ] <20><EFBFBD><E59C92><EFBFBD>
<EFBFBD>嗆挾7.3嚗𡁏<EFBFBD>憭扯<EFBFBD><EFBFBD><EFBFBD>7憭抬<EFBFBD>
- [ ] 25%用户使用新版本
- [ ] 监控错误率
- [ ] 25%<EFBFBD><EFBFBD>雿輻鍂<EFBFBD><EFBFBD><EFBFBD>?
- [ ] <EFBFBD>烐綉<EFBFBD>躰秤<EFBFBD>?
- [ ] 撖寞<E69296><E5AF9E><EFBFBD><E689AF><EFBFBD><EFBFBD>
```
@@ -610,10 +610,10 @@ if (req.usePKBv2) {
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 灰度用户正常使用
- ✅ 无重大bug
- ✅ 错误率在可接受范围
- ✅ 用户反馈积极
- <EFBFBD>?<3F>啣漲<E595A3><EFBFBD><EFBFBD>虜雿輻鍂
- <EFBFBD>?<3F>𣳇<EFBFBD>憭呆ug
- <EFBFBD>?<3F>躰秤<E8BAB0><E7A7A4><EFBFBD>舀𦻖<E88880>𡑒<EFBFBD><F0A19192>?
- <EFBFBD>?<3F><EFBFBD><E586BD><EFBFBD>蝘舀<E89D98>
### <20><EFBFBD><E5A2A7><EFBFBD>
```bash
@@ -629,13 +629,13 @@ if (req.usePKBv2) {
## <20><> <20>嗆挾8嚗𡁜<E59A97><F0A1819C><EFBFBD><E8AAA9><EFBFBD>0.5憭抬<EFBFBD>
### <20><EFBFBD>
- 所有用户切换到新版本
- <EFBFBD><EFBFBD><EFBFBD>厩鍂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- 蝖桐<E89D96>撟單<E6929F><EFBFBD>
- 靽萘<E99DBD><E89098><EFBFBD><E5A2A7><EFBFBD>
### 隞餃𦛚皜<F0A69B9A><E79A9C>
#### Task 8.1:准备切换
#### Task 8.1嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
# <20>𣂼<EFBFBD><F0A382BC>𡁶䰻
- [ ] <20>𡁶䰻<F0A181B6><EFBFBD><E586BD><EFBFBD><E596B3><EFBFBD>
@@ -643,12 +643,12 @@ if (req.usePKBv2) {
- [ ]<>遢敶枏<E695B6><E69E8F>滨蔭
```
#### Task 8.2:执行切换
#### Task 8.2嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
# 方式1修改默认路由
在frontend-v2中,将 /knowledge 路由指向新页面
# <EFBFBD><EFBFBD>1嚗帋耨<EFBFBD><EFBFBD>霈方楝<EFBFBD>?
<EFBFBD>rontend-v2銝哨<EFBFBD>撠?/knowledge 頝舐眏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>圈△<EFBFBD>?
# 方式2全局开关
# <EFBFBD><EFBFBD>2嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
USE_PKB_V2=true
# <20><EFBFBD>3嚗𡁜<E59A97>蝡舫<E89DA1>摰𡁜<E691B0>
@@ -657,32 +657,32 @@ if (location.pathname === '/knowledge') {
}
```
#### Task 8.3密切监控24小时
#### Task 8.3嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>24撠𤩺𧒄嚗?
```bash
- [ ] 监控错误率
- [ ] <EFBFBD>烐綉<EFBFBD>躰秤<EFBFBD>?
- [ ] <20>烐綉API<50><EFBFBD><E6BB9A>園𡢿
- [ ] 检查用户反馈
- [ ] <EFBFBD><EFBFBD>亦鍂<EFBFBD><EFBFBD>擐?
- [ ] <20><EFBFBD><E4BAA6><EFBFBD><EFBFBD>
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 所有用户访问新版本
- ✅ 错误率正常
- ✅ 性能稳定
- ✅ 无重大投诉
- <EFBFBD>?<3F><><EFBFBD>厩鍂<E58EA9>瑁挪<E79181>格鰵<E6A0BC><E9B0B5>𧋦
- <EFBFBD>?<3F>躰秤<E8BAB0><E7A7A4>迤撣?
- <EFBFBD>?<3F><EFBFBD>蝔喳<E89D94>
- <EFBFBD>?<3F>𣳇<EFBFBD>憭扳<E686AD>霂?
### 回滚方案保留7天
### <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?憭抬<E686AD>
```bash
# 紧急回滚
# 蝝扳<EFBFBD><EFBFBD>皛?
1. USE_PKB_V2=false
2. 或修改路由配置
2. <EFBFBD>碶耨<EFBFBD>寡楝<EFBFBD><EFBFBD>蝵?
3. <20>滚鍳<E6BB9A>滚𦛚
4. 5分钟内完成回滚
4. 5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>皛?
```
---
## 📝 阶段9清理旧代码可选1-2周后
## <EFBFBD><EFBFBD> <20>嗆挾9嚗𡁏<E59A97><F0A1818F><EFBFBD>唂隞<E59482><E99A9E><EFBFBD><EFBFBD><EFBFBD>1-2<><EFBFBD>嚗?
### <20>𩤃<EFBFBD> <20><EFBFBD><E6BBA9>鞟內
**<2A><EFBFBD>蝑匧<E89D91>2<EFBFBD><EFBFBD>蝖株恕<E6A0AA><EFBFBD><E59581><EFBFBD><E7A08D>函迅摰𡁜<E691B0><F0A1819C>齿<EFBFBD>銵䕘<E98AB5>**
@@ -699,49 +699,49 @@ git push origin backup/pkb-legacy-code
#### Task 9.2嚗𡁜<EFBFBD><EFBFBD>斗唂隞<EFBFBD><EFBFBD>
```bash
# 删除旧后端代码
# <EFBFBD>𣳇膄<EFBFBD><EFBFBD>蝡臭誨<EFBFBD>?
rm -rf backend/src/legacy/controllers/knowledgeBaseController.ts
rm -rf backend/src/legacy/services/knowledgeBaseService.ts
rm -rf backend/src/legacy/routes/knowledgeBases.ts
# 删除旧前端代码
# <EFBFBD>𣳇膄<EFBFBD><EFBFBD>蝡臭誨<EFBFBD>?
rm -rf frontend/src/pages/KnowledgePage.tsx
```
#### Task 9.3:清理路由
#### Task 9.3嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```typescript
// 移除旧路由注册
// 蝘駁膄<EFBFBD>扯楝<EFBFBD>望釣<EFBFBD>?
// app.use('/api/v1/knowledge', legacyKnowledgeRoutes);
// 可选:添加重定向
// <EFBFBD><EFBFBD><EFBFBD>瘛餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
app.use('/api/v1/knowledge', (req, res) => {
res.redirect(308, `/api/v2/knowledge${req.path}`);
});
```
### 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>
- ✅ 代码已备份
- ✅ 新版本运行2周无问题
- ✅ 团队一致同意删除
- <EFBFBD>?隞<><E99A9E>撌脣<E6928C>隞?
- <EFBFBD>?<3F><EFBFBD><E59581><EFBFBD>銵?<3F><EFBFBD><E586BD><EFBFBD>
- <EFBFBD>?<3F><EFBFBD><EFBFBD><E98A9D><EFBFBD><E6B8B8><EFBFBD><E8AAA9>?
---
## <20><> 摰匧<E691B0><E58CA7>芣鴌<E88AA3><EFBFBD>
### 1. 始终可回滚
### 1. 憪讠<EFBFBD><EFBFBD><EFBFBD>皛?
```bash
每个阶段都可以立即回滚到上一个状态
回滚时间:< 5分钟
瘥譍葵<EFBFBD>嗆挾<EFBFBD>賢虾隞亦<EFBFBD><EFBFBD><EFBFBD>皛𡁜<EFBFBD>銝𠹺<EFBFBD>銝芰𠶖<EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD>園𡢿嚗? 5<><35><EFBFBD>
```
### 2. 旧系统保护
### 2. <EFBFBD>抒頂蝏煺<EFBFBD><EFBFBD>?
```bash
<EFBFBD><EFBFBD>罸𡢿嚗峕唂隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滚𢆡
旧功能100%可用
用户无感知
<EFBFBD><EFBFBD><EFBFBD>?00%<25>舐鍂
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```
### 3. 渐进式验证
### 3. 皜鞱<EFBFBD>撘誯<EFBFBD>霂?
```bash
瘥譍葵<EFBFBD>嗆挾<EFBFBD><EFBFBD>撉諹<EFBFBD>
<EFBFBD>𤑳緵<EFBFBD><EFBFBD>蝡见朖靽桀<EFBFBD>
@@ -750,34 +750,34 @@ app.use('/api/v1/knowledge', (req, res) => {
### 4. <20>啣漲<E595A3><EFBFBD>
```bash
内部测试 → 小范围用户 → 大范围用户 → 全量
任何阶段发现问题都可以暂停
<EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD> <20>?撠讛<E692A0><E8AE9B>渡鍂<E6B8A1>?<3F>?憭扯<E686AD><E689AF>渡鍂<E6B8A1>?<3F>?<3F><EFBFBD>
隞颱<EFBFBD><EFBFBD>嗆挾<EFBFBD>𤑳緵<EFBFBD><EFBFBD><EFBFBD>賢虾隞交<EFBFBD><EFBFBD>?
```
### 5. <20>烐綉<E78390>𡃏郎
```bash
实时监控错误率
摰墧𧒄<EFBFBD>烐綉<EFBFBD>躰秤<EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撖寞<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```
---
## 📊 检查点Checkpoint
## <EFBFBD><EFBFBD><><E79289><EFBFBD>嚗㇃heckpoint嚗?
<EFBFBD><EFBFBD>銝芷𧫴畾萇<EFBFBD><EFBFBD><EFBFBD>𧒄嚗<EFBFBD><EFBFBD>憿駁<EFBFBD><EFBFBD>隞乩<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
### ✅ 阶段通过标准
### <EFBFBD>?<3F>嗆挾<E59786><EFBFBD><E69C9E><EFBFBD><EFBFBD>
```bash
1. [ ] <20><><EFBFBD><EFBFBD>霂閧鍂靘钅<E99D98><EFBFBD>
2. [ ] 无编译/运行时错误
3. [ ] 旧系统功能正常
4. [ ] 性能无明显下降
2. [ ] <EFBFBD><EFBFBD>霂?餈鞱<E9A488><E99EB1><EFBFBD>霂?
3. [ ] <EFBFBD>抒頂蝏笔<EFBFBD><EFBFBD>賣迤撣?
4. [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
5. [ ]<><E99A9E>撌脫<E6928C>鈭文<E988AD>Git
6. [ ] <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```
### ❌ 阶段失败处理
### <EFBFBD>?<3F>嗆挾憭梯揖憭<E68F96><E686AD>
```bash
1. 蝡见朖<E8A781>𨀣迫餈<E8BFAB>
2. <20><><EFBFBD>憭梯揖<E6A2AF><EFBFBD>
@@ -790,26 +790,26 @@ app.use('/api/v1/knowledge', (req, res) => {
## <20><20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>
### 最终目标
- PKB功能100%迁移到新架构
- ✅ 用户无感知切换
- ✅ 零数据丢失
- ✅ 零停机时间
- ✅ 可随时回滚保留2周
### <EFBFBD><EFBFBD><EFBFBD>𤌍<EFBFBD>?
- <EFBFBD>?PKB<EFBFBD><EFBFBD>100%<EFBFBD><EFBFBD>唳鰵<EFBFBD><EFBFBD>
- <EFBFBD>?<3F><EFBFBD><E586BD><EFBFBD><E4ADBE><EFBFBD><E4BA99>?
- <EFBFBD>?<3F>嗆㺭<E59786>桐腺憭?
- <EFBFBD>?<3F><EFBFBD><E59785>箸𧒄<E7AEB8>?
- <EFBFBD>?<3F><EFBFBD><E888AB><EFBFBD>皛𡄯<E79A9B>靽萘<E99DBD>2<EFBFBD><EFBFBD>
### KPI<50><49><EFBFBD>
```bash
- <20>躰秤<E8BAB0><E7A7A4><EFBFBD>< 0.1%嚗<><E59A97><EFBFBD><EFBFBD><E68A92>砍笆瘥䈑<E798A5>
- <20><EFBFBD><E6BB9A>園𡢿嚗帋<E59A97><EFBFBD><E9A09E><EFBFBD><EFBFBD><E68A92><EFBFBD> 110%
- 用户满意度:≥ 90%
- 回滚次数0次理想情况
- <EFBFBD><EFBFBD>皛⊥<EFBFBD>摨佗<EFBFBD><EFBFBD>?90%
- <EFBFBD><EFBFBD>甈⊥㺭嚗?甈∴<E79488><E288B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
```
---
## 📞 应急联系
## <EFBFBD><EFBFBD> 摨娍<E691A8><EFBFBD>蝟?
### 发现严重问题时
### <EFBFBD>𤑳緵銝仿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```bash
1. 蝡见朖<E8A781>𨀣迫餈<E8BFAB>
2. 霂<>摯敶勗<E695B6><E58B97><EFBFBD>
@@ -821,8 +821,8 @@ app.use('/api/v1/knowledge', (req, res) => {
### <20><EFBFBD><E5A2A7><EFBFBD>
```bash
蝡见朖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- 数据丢失或损坏
- 核心功能不可用
- <EFBFBD>唳旿銝<EFBFBD>𡝗<EFBFBD><EFBFBD>?
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滚虾<EFBFBD>?
- 憭折<E686AD><E68A98><EFBFBD><E586BD><EFBFBD>
- 摰匧<E691B0>瞍𤩺<E79E8D>
@@ -842,28 +842,28 @@ app.use('/api/v1/knowledge', (req, res) => {
**<EFBFBD><EFBFBD>鈭綽<EFBFBD>** XXX
**撘<>憪𧢲𧒄<F0A7A2B2><EFBFBD>** YYYY-MM-DD HH:mm
**结束时间:** YYYY-MM-DD HH:mm
**蝏𤘪<EFBFBD><EFBFBD>園𡢿嚗?* YYYY-MM-DD HH:mm
**执行内容:**
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>捆嚗?*
- Task X.1: [摰峕<E691B0>/憭梯揖] [霂湔<E99C82>]
- Task X.2: [摰峕<E691B0>/憭梯揖] [霂湔<E99C82>]
...
**测试结果:**
- 测试用例1: ✅ 通过
- 测试用例2: ✅ 通过
**瘚贝<EFBFBD>蝏𤘪<EFBFBD>嚗?*
- 瘚贝<EFBFBD><EFBFBD><EFBFBD>1: <20>?<3F><EFBFBD>
- 瘚贝<EFBFBD><EFBFBD><EFBFBD>2: <20>?<3F><EFBFBD>
...
**<EFBFBD>𤑳緵<EFBFBD><EFBFBD>䔮憸矋<EFBFBD>**
1. [问题描述] - [状态:已修复/待修复]
1. [<EFBFBD><EFBFBD><EFBFBD>讛膩] - [<5B><EFBFBD><E59786><EFBFBD>撌脖耨憭?敺<>耨憭䓞
2. ...
**性能指标:**
- API响应时间XX ms (旧版本: XX ms)
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*
- API<EFBFBD><EFBFBD><EFBFBD>園𡢿嚗䧥X ms (<EFBFBD><EFBFBD><EFBFBD>? XX ms)
- <20>躰秤<E8BAB0><E7A7A4><EFBFBD>X%
**结论:**
[✅ 通过 / ❌ 失败]
**蝏栞捏嚗?*
[<EFBFBD>?<3F><EFBFBD> / <20>?憭梯揖]
**銝衤<E98A9D>甇伐<E79487>**
[蝏抒賒銝衤<E98A9D><E8A1A4>嗆挾 / <20><><EFBFBD>靽桀<E99DBD><E6A180><EFBFBD> / <20><EFBFBD>]
@@ -873,21 +873,21 @@ app.use('/api/v1/knowledge', (req, res) => {
## <20><> 蝏誯<E89D8F><E8AAAF><EFBFBD>
### 这个计划的优势
### 餈嗘葵霈<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```
1. ✅ 极度保守,风险最小化
2. ✅ 每步可验证,问题早发现
3. ✅ 随时可回滚,不影响业务
4. ✅ 灰度发布,逐步切换
5. ✅ 旧代码长期保留,双保险
1. <EFBFBD>?<3F><>漲靽嘥<E99DBD>嚗屸<E59A97><E5B1B8><EFBFBD>撠誩<E692A0>
2. <EFBFBD>?瘥𤩺郊<F0A4A9BA><EFBFBD><EFBFBD><E99C82><EFBFBD><EFBFBD><E6A185><EFBFBD><E68B99>?
3. <EFBFBD>?<3F>𤩺𧒄<F0A4A9BA><EFBFBD>皛𡄯<E79A9B>銝滚蔣<E6BB9A><EFBFBD><E6BBA2>?
4. <EFBFBD>?<3F>啣漲<E595A3><EFBFBD>嚗屸<E59A97>鞉郊<E99E89><E9838A>
5. <EFBFBD>?<3F>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD><E785BA><EFBFBD><E8BEB7><EFBFBD><E494B6>?
```
### 銝𤾸翰<F0A4BEB8><EFBFBD>蝘餌<E89D98>撖寞<E69296>
```
敹恍<EFBFBD><EFBFBD>蝘鳴<EFBFBD>1-2憭拙<E686AD><E68B99><EFBFBD><EFBFBD><E99BBF><EFBFBD><EFBFBD>
安全迁移5-6天完成但风险极低
摰匧<EFBFBD><EFBFBD>宏嚗?-6憭拙<E686AD><E68B99><EFBFBD><EFBFBD><E99BBF><EFBFBD><EFBFBD>雿?
选择用4天时间换取安全性和稳定性
<EFBFBD>㗇𥋘嚗𡁶鍂4憭拇𧒄<EFBFBD>湔揢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝔喳<EFBFBD><EFBFBD>?
```
---
@@ -906,3 +906,4 @@ app.use('/api/v1/knowledge', (req, res) => {