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%)
19 KiB
PKB銝芯犖<EFBFBD>亥<EFBFBD>摨?- 頞<>漣摰匧<E691B0>餈<EFBFBD>宏<EFBFBD>扯<EFBFBD>霈∪<E99C88>
*<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>
<EFBFBD>㴓 餈<>宏<EFBFBD>格<EFBFBD>
撠<EFBFBD>KB隞擧唂<EFBFBD>嗆<EFBFBD>餈<EFBFBD>宏<EFBFBD>唳鰵<EFBFBD>嗆<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>塚<EFBFBD>
- <EFBFBD>?靽脲<E99DBD><E884B2>唳<EFBFBD><E594B3>蠘<EFBFBD>100%<25>舐鍂
- <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/
<0A>鎿<EFBFBD> controllers/knowledgeBaseController.ts
<0A>鎿<EFBFBD> services/knowledgeBaseService.ts
<0A>婙<EFBFBD> routes/knowledgeBases.ts
<0A>滨垢嚗餎rontend/src/
<0A>婙<EFBFBD> pages/KnowledgePage.tsx
<0A>唳旿摨橒<E691A8><E6A992>?pkb_schema嚗<61>歇<EFBFBD>函𡠺蝡喹chema嚗峕<E59A97><E5B395><EFBFBD>餈<EFBFBD>宏嚗?
<EFBFBD>唳沲<EFBFBD><EFBFBD><EFBFBD>蝵?
<EFBFBD>𡒊垢嚗颹ackend/src/modules/pkb/
<0A>鎿<EFBFBD> controllers/
<0A>鎿<EFBFBD> services/
<0A>婙<EFBFBD> routes/
<0A>滨垢嚗餎rontend-v2/src/modules/pkb/
<0A>鎿<EFBFBD> pages/
<0A>鎿<EFBFBD> components/
<0A>婙<EFBFBD> api/
<EFBFBD><EFBFBD> <20><>𧫴畾菜<E795BE>銵諹恣<E8ABB9>?
<EFBFBD>梧<EFBFBD> <20>園𡢿隡啁<E99AA1>
| <EFBFBD>嗆挾 | 隞餃𦛚 | 憸<EFBFBD>摯<EFBFBD>園𡢿 | <EFBFBD>臬<EFBFBD>皛? | 憌𡡞埯 |
|---|---|---|---|---|
| <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憭? | <EFBFBD>? | <EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD>嗆挾2 | <EFBFBD>𡒊垢API頝舐眏瘛餃<EFBFBD>嚗<EFBFBD><EFBFBD>頝舐眏<EFBFBD>勗<EFBFBD>嚗? | 0.5憭? | <EFBFBD>? | <EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD>嗆挾3 | <EFBFBD>𡒊垢<EFBFBD>蠘<EFBFBD>撉諹<EFBFBD> | 0.5憭? | <EFBFBD>? | 雿? |
| <EFBFBD>嗆挾4 | <EFBFBD>滨垢隞<EFBFBD><EFBFBD>憭滚<EFBFBD> | 0.5憭? | <EFBFBD>? | <EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD>嗆挾5 | <EFBFBD>滨垢頝舐眏瘛餃<EFBFBD>嚗<EFBFBD><EFBFBD>頝舐眏<EFBFBD>勗<EFBFBD>嚗? | 0.5憭? | <EFBFBD>? | <EFBFBD><EFBFBD><EFBFBD> |
| <EFBFBD>嗆挾6 | <EFBFBD>滨垢<EFBFBD>蠘<EFBFBD>撉諹<EFBFBD> | 0.5憭? | <EFBFBD>? | 雿? |
| <EFBFBD>嗆挾7 | <EFBFBD>啣漲<EFBFBD>穃<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>喉<EFBFBD> | 1憭? | <EFBFBD>? | 銝? |
| <EFBFBD>嗆挾8 | <EFBFBD>券<EFBFBD><EFBFBD><EFBFBD>揢 | 0.5憭? | <EFBFBD>? | 雿? |
| <EFBFBD>嗆挾9 | 皜<EFBFBD><EFBFBD><EFBFBD>找誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>舫<EFBFBD>㚁<EFBFBD> | 0.5憭? | <EFBFBD>𩤃<EFBFBD> | 雿? |
*<EFBFBD>餉恣嚗𡁶漲 5-6憭抬<E686AD>靽嘥<E99DBD>隡啗恣嚗?
<EFBFBD><EFBFBD> <20>嗆挾0嚗帋誨<E5B88B><E8AAA8>恣<EFBFBD>亙<EFBFBD><E4BA99><EFBFBD><EFBFBD>嚗?.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- <EFBFBD><EFBFBD>圾<EFBFBD>唳<EFBFBD>隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>賜<EFBFBD>
- 蝖株恕靘肽<EFBFBD><EFBFBD>喟頂
- <EFBFBD>嗅<EFBFBD>霂衣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘餅<EFBFBD><EFBFBD>?
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 0.1嚗𡁜恣<EFBFBD>交唂隞<EFBFBD><EFBFBD>蝏𤘪<EFBFBD>
# <20>𡒊垢隞<E59EA2><E99A9E>摰⊥䰻
- [ ] <20><>粉 knowledgeBaseController.ts嚗<73><E59A97><EFBFBD>𡅅PI蝡舐<E89DA1>嚗?
- [ ] <20><>粉 knowledgeBaseService.ts嚗<73><E59A97><EFBFBD>劐<EFBFBD><E58A90>⊿<EFBFBD>餉<EFBFBD>嚗?
- [ ] <20><>粉 knowledgeBases.ts嚗<73>楝<EFBFBD>勗<EFBFBD>銋㚁<E98A8B>
- [ ] <20>堒枂<E5A092><E69E82><EFBFBD>𡅅PI蝡舐<E89DA1><E88890><EFBFBD><EFBFBD><EFBFBD>?
# <20>滨垢隞<E59EA2><E99A9E>摰⊥䰻
- [ ] <20><>粉 KnowledgePage.tsx嚗㇎I<E3878E>䔶漱鈭𡜐<E988AD>
- [ ] <20>堒枂<E5A092><E69E82><EFBFBD>厩鍂<E58EA9>瑟<EFBFBD>雿𨀣<E99BBF>蝔?
- [ ] 蝖株恕<E6A0AA>嗆<EFBFBD><E59786>恣<EFBFBD><E681A3>䲮撘?
Task 0.2嚗𡁶&霈斗㺭<EFBFBD>桀<EFBFBD>Schema
- [ ] 撉諹<E69289>pkb_schema銵函<E98AB5><E587BD>?
- [ ] 蝖株恕Prisma璅∪<E79285>摰帋<E691B0>
- [ ] 璉<><E79289>交糓<E4BAA4>行<EFBFBD><E8A18C>扳㺭<E689B3>?
- [ ] 蝖株恕蝝W<E89D9D><EFBCB7>𣬚漲<F0A3AC9A>?
Task 0.3嚗𡁜<EFBFBD>撱箏<EFBFBD><EFBFBD>賣<EFBFBD><EFBFBD>?
- [ ] <20>堒枂<E5A092><E69E82><EFBFBD>匧<EFBFBD><E58CA7>踝<EFBFBD>CRUD<55><44><EFBFBD>隡𨬭<E99AA1><F0A8ACAD><EFBFBD>蝝Y<E89D9D>嚗?
- [ ] <20>𥕦遣瘚贝<E7989A><E8B49D>其<EFBFBD>
- [ ] <20><><EFBFBD>瘚贝<E7989A><E8B49D>唳旿
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F><><EFBFBD>劐誨<E58A90><E8AAA8>歇<EFBFBD><E6AD87>粉撟嗥<E6929F>閫?
- <EFBFBD>?<3F>蠘<EFBFBD>皜<EFBFBD><E79A9C>撌脣<E6928C>撱?
- <EFBFBD>?瘚贝<E7989A><E8B49D>其<EFBFBD>撌脣<E6928C>憭?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
- <EFBFBD>𣳇<EFBFBD><EFBFBD>墧<EFBFBD>嚗<EFBFBD>蘨<EFBFBD>舫<EFBFBD>霂颱誨<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <20>嗆挾1嚗𡁜<E59A97>蝡臭誨<E887AD><E8AAA8><EFBFBD><EFBFBD>塚<EFBFBD>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- 撠<EFBFBD>唂隞<EFBFBD><EFBFBD>憭滚<EFBFBD><EFBFBD>唳鰵雿滨蔭
- *銝滚<EFBFBD><EFBFBD>扎<EFBFBD><EFBFBD><EFBFBD>靽格㺿<EFBFBD>找誨<EFBFBD>?
- 蝖桐<EFBFBD><EFBFBD>唬誨<EFBFBD><EFBFBD>虾隞亦𡠺蝡讠<EFBFBD>霂?
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 1.1嚗𡁜<EFBFBD>撱箸鰵<EFBFBD>桀<EFBFBD>蝏𤘪<EFBFBD>
# <20>𥕦遣<F0A595A6>桀<EFBFBD>
mkdir -p backend/src/modules/pkb/controllers
mkdir -p backend/src/modules/pkb/services
mkdir -p backend/src/modules/pkb/routes
mkdir -p backend/src/modules/pkb/types
mkdir -p backend/src/modules/pkb/utils
Task 1.2嚗𡁜<EFBFBD><EFBFBD>詆ontroller隞<EFBFBD><EFBFBD>
# 憭滚<E686AD><E6BB9A><EFBFBD>辣嚗<E8BEA3><E59A97><EFBFBD>蹱唂<E8B9B1><E59482>辣嚗?
cp backend/src/legacy/controllers/knowledgeBaseController.ts \
backend/src/modules/pkb/controllers/knowledgeBaseController.ts
# 撉諹<E69289>嚗𡁏唂<F0A1818F><E59482>辣隞滚<E99A9E><E6BB9A>?
ls -la backend/src/legacy/controllers/knowledgeBaseController.ts
Task 1.3嚗𡁜<EFBFBD><EFBFBD>貶ervice隞<EFBFBD><EFBFBD>
cp backend/src/legacy/services/knowledgeBaseService.ts \
backend/src/modules/pkb/services/knowledgeBaseService.ts
Task 1.4嚗𡁜<EFBFBD><EFBFBD>買oute隞<EFBFBD><EFBFBD>
cp backend/src/legacy/routes/knowledgeBases.ts \
backend/src/modules/pkb/routes/knowledgeBases.ts
Task 1.5嚗𡁏凒<EFBFBD>啣紡<EFBFBD>亥楝敺?
// <20>冽鰵隞<E9B0B5><E99A9E>銝哨<E98A9D><E593A8>湔鰵<E6B994><E9B0B5><EFBFBD>?import 頝臬<E9A09D>
// 隞? import { xxx } from '../../legacy/...'
// <20>? import { xxx } from '../services/...'
// 雿<>糓嚗帋<E59A97>韏鈪ommon撅<6E><E69285>靽脲<E99DBD>銝滚<E98A9D>
import { prisma } from '../../../../common/database/prisma';
Task 1.6嚗𡁶<EFBFBD>霂煾<EFBFBD>霂?
# 蝻𤥁<E89DBB>璉<EFBFBD><E79289>伐<EFBFBD>銝滩<E98A9D>銵䕘<E98AB5>
cd backend
npm run build
# 璉<><E79289>交糓<E4BAA4>行<EFBFBD>蝻𤥁<E89DBB><F0A4A581>躰秤
# 憒<><E68692><EFBFBD>厰<EFBFBD>霂荔<E99C82><E88D94>芯耨憭滚紡<E6BB9A>亥楝敺<E6A59D>䔮憸矋<E686B8>銝滢耨<E6BBA2>寥<EFBFBD>餉<EFBFBD>
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F>唬誨<E594AC><E8AAA8><EFBFBD>霂煾<E99C82>朞<EFBFBD>
- <EFBFBD>?<3F>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD>冽𧊋<E586BD>?
- <EFBFBD>?<3F>抒頂蝏煺<E89D8F><E785BA>舀迤撣貉<E692A3>銵?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
# 憒<><E68692><EFBFBD>粹䔮憸矋<E686B8><E79F8B>湔𦻖<E6B994>𣳇膄<F0A3B387>啁𤌍敶?
rm -rf backend/src/modules/pkb
# <20>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD>冽𧊋<E586BD>剁<EFBFBD>蝟餌<E89D9F>蝏抒賒餈鞱<E9A488>
<EFBFBD><EFBFBD> <20>嗆挾2嚗𡁜<E59A97>蝡涉PI頝舐眏瘛餃<E7989B>嚗<EFBFBD><E59A97>頝舐眏<E88890>勗<EFBFBD>嚗㚁<E59A97>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- <EFBFBD>冽鰵雿滨蔭瘛餃<EFBFBD>API頝舐眏
- <EFBFBD>扯楝<EFBFBD>曹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>矋<EFBFBD>蝏抒賒撌乩<EFBFBD>
- <EFBFBD>唳唂頝舐眏<EFBFBD>峕𧒄<EFBFBD>舐鍂
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 2.1嚗𡁏釣<EFBFBD>峕鰵頝舐眏嚗<EFBFBD><EFBFBD>敶勗<EFBFBD><EFBFBD>扯楝<EFBFBD>梧<EFBFBD>
// backend/src/index.ts <20>?routes/index.ts
// <20>扯楝<E689AF>梧<EFBFBD>靽脲<E99DBD>銝滚<E98A9D>嚗?
import legacyKnowledgeRoutes from './legacy/routes/knowledgeBases';
app.use('/api/v1/knowledge', legacyKnowledgeRoutes);
// <20>啗楝<E59597>梧<EFBFBD><E6A2A7>啣<EFBFBD>嚗?
import newKnowledgeRoutes from './modules/pkb/routes/knowledgeBases';
app.use('/api/v2/knowledge', newKnowledgeRoutes); // 雿輻鍂v2頝臬<E9A09D>
Task 2.2嚗𡁶&霈方楝<EFBFBD>梢<EFBFBD>蝳?
# <20>啗楝<E59597>梯楝敺<E6A59D><E695BA>/api/v2/knowledge/*
# <20>扯楝<E689AF>梯楝敺<E6A59D><E695BA>/api/v1/knowledge/*
# 銝方<E98A9D><E696B9><EFBFBD><EFBFBD>函𡠺蝡页<E89DA1>鈭雴<E988AD>撟脫贋
Task 2.3嚗𡁏溶<EFBFBD>惩<EFBFBD>摨瑟<EFBFBD><EFBFBD>亦垢<EFBFBD>?
// <20>冽鰵頝舐眏銝剜溶<E5899C>惩<EFBFBD>摨瑟<E691A8><E7919F>?
router.get('/health', (req, res) => {
res.json({
status: 'ok',
module: 'pkb-v2',
timestamp: new Date().toISOString()
});
});
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
撉諹<EFBFBD><EFBFBD>啗楝<EFBFBD>勗虾<EFBFBD>?
# <20>臬𢆡<E887AC>滚𦛚<E6BB9A>?
npm run dev
# 瘚贝<E7989A><E8B49D>啗楝<E59597>勗<EFBFBD>摨瑟<E691A8><E7919F>?
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
# <20><><EFBFBD>餈𥪜<E9A488>嚗𡁏迤撣豢㺭<E8B1A2>?
撉諹<EFBFBD><EFBFBD>扯楝<EFBFBD>望𧊋<EFBFBD>堒蔣<EFBFBD>?
# 雿輻鍂Postman<61>鈪url瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>㗇唂API
# 蝖桐<E89D96><E6A190><EFBFBD><EFBFBD>匧<EFBFBD><E58CA7>賣迤撣?
# 靘见<E99D98>嚗?
curl -X GET http://localhost:3000/api/v1/knowledge/list
curl -X POST http://localhost:3000/api/v1/knowledge/create
# ... 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>厩垢<E58EA9>?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
// 憒<><E68692><EFBFBD>啗楝<E59597>望<EFBFBD><E69C9B>桅<EFBFBD>嚗𣬚凒<F0A3AC9A>交釣<E4BAA4>𦠜<EFBFBD><F0A6A09C>啗楝<E59597>望釣<E69C9B>?
// import newKnowledgeRoutes from './modules/pkb/routes/knowledgeBases';
// app.use('/api/v2/knowledge', newKnowledgeRoutes); // 瘜券<E7989C><E588B8>?
// <20>扯楝<E689AF>梁誧蝏剖極雿頣<E99BBF><E9A0A3>冽<EFBFBD><E586BD>䭾<EFBFBD><E4ADBE>?
<EFBFBD><EFBFBD> <20>嗆挾3嚗𡁜<E59A97>蝡臬<E89DA1><E887AC>賡<EFBFBD>霂<EFBFBD><E99C82>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- 撉諹<EFBFBD><EFBFBD>啣<EFBFBD>蝡舀<EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>?
- 撖寞<EFBFBD><EFBFBD>唳唂API餈𥪜<EFBFBD>蝏𤘪<EFBFBD>
- 蝖桐<EFBFBD><EFBFBD>啣<EFBFBD>蝡臭<EFBFBD><EFBFBD>批<EFBFBD>蝡航<EFBFBD>銝箏<EFBFBD><EFBFBD>其<EFBFBD><EFBFBD>?
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 3.1嚗𡁜<EFBFBD>憭<EFBFBD><EFBFBD>霂閧㴓憓?
# <20>𥕦遣瘚贝<E7989A><E8B49D>冽<EFBFBD>
# <20><><EFBFBD>瘚贝<E7989A><E8B49D>唳旿嚗<E697BF>䰻霂<E4B0BB><E99C82><EFBFBD><EFBFBD><EFBFBD>獢<EFBFBD><E78DA2>
# <20><><EFBFBD>Postman瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>
Task 3.2嚗𡁻<EFBFBD>𣂷葵瘚贝<EFBFBD>API蝡舐<EFBFBD>
瘚贝<EFBFBD>皜<EFBFBD><EFBFBD>嚗?
- [ ] GET /api/v2/knowledge/list - <20>瑕<EFBFBD><E79195>亥<EFBFBD>摨枏<E691A8>銵?
- [ ] POST /api/v2/knowledge/create - <20>𥕦遣<F0A595A6>亥<EFBFBD>摨?
- [ ] GET /api/v2/knowledge/:id - <20>瑕<EFBFBD><E79195>亥<EFBFBD>摨栞祕<E6A09E>?
- [ ] PUT /api/v2/knowledge/:id - <20>湔鰵<E6B994>亥<EFBFBD>摨?
- [ ] DELETE /api/v2/knowledge/:id - <20>𣳇膄<F0A3B387>亥<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璉<47>蝝?
- [ ] GET /api/v2/knowledge/:id/batch-tasks - <20>孵<EFBFBD><E5ADB5><EFBFBD>遙<EFBFBD>∪<EFBFBD>銵?
- [ ] POST /api/v2/knowledge/:id/batch-tasks - <20>𥕦遣<F0A595A6>孵<EFBFBD><E5ADB5><EFBFBD>遙<EFBFBD>?
Task 3.3嚗𡁜笆瘥娍<EFBFBD>霂𤏪<EFBFBD><EFBFBD>唳唂API嚗?
# 撖嫣<E69296>瘥譍葵API嚗䔶蝙<E494B6>函㮾<E587BD><E3AEBE><EFBFBD><EFBFBD>啣<EFBFBD><E595A3>嗉<EFBFBD><E59789>冽鰵<E586BD>扳𦻖<E689B3>?
# 撖寞<E69296>餈𥪜<E9A488>蝏𤘪<E89D8F><F0A498AA>臬炏銝<E7828F><E98A9D>?
# 蝷箔<E89DB7>嚗?
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嚗朞器<EFBFBD>峕<EFBFBD>霂?
- [ ] 瘚贝<E7989A><E8B49D>䭾<EFBFBD><E4ADBE><EFBFBD>㺭
- [ ] 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD>批<EFBFBD>
- [ ] 瘚贝<E7989A>撟嗅<E6929F>霂瑟<E99C82>
- [ ] 瘚贝<E7989A>憭扳<E686AD>隞嗡<E99A9E>隡?
- [ ] 瘚贝<E7989A><E8B49D>躰秤憭<E7A7A4><E686AD>
Task 3.5嚗𡁏<EFBFBD>扯<EFBFBD>瘚贝<EFBFBD>
# 蝞<><E89D9E>閧<EFBFBD><E996A7>扯<EFBFBD>撖寞<E69296>
- [ ] 瘚贝<E7989A><E8B49D>滚<EFBFBD><E6BB9A>園𡢿
- [ ] 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>雿輻鍂
- [ ] 蝖株恕<E6A0AA>䭾<EFBFBD><E4ADBE>暹<EFBFBD>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <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>?
憒<EFBFBD><EFBFBD><EFBFBD>𤑳緵<EFBFBD>桅<EFBFBD>嚗?
1. 霈啣<E99C88><E595A3>桅<EFBFBD>霂行<E99C82>
2. 靽桀<E99DBD><E6A180>唬誨<E594AC>?
3. <20>齿鰵瘚贝<E7989A>
4. 銝滚蔣<E6BB9A>齿唂蝟餌<E89D9F>嚗<EFBFBD>唂頝舐眏蝏抒賒撌乩<E6928C>嚗?
5. <20>臭誑<E887AD>𤩺𧒄<F0A4A9BA><F0A79284><EFBFBD>餈<EFBFBD>宏
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
- <EFBFBD>𤑳緵銝仿<EFBFBD><EFBFBD>桅<EFBFBD><EFBFBD>塚<EFBFBD><EFBFBD>𨀣迫雿輻鍂<EFBFBD>啗楝<EFBFBD>?
- <EFBFBD>扯楝<EFBFBD>梁誧蝏剖極雿?
- <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD><EFBFBD>V耨憭齿鰵隞<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <20>嗆挾4嚗𡁜<E59A97>蝡臭誨<E887AD><E8AAA8><EFBFBD><EFBFBD>塚<EFBFBD>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- 撠<EFBFBD>唂<EFBFBD>滨垢隞<EFBFBD><EFBFBD>憭滚<EFBFBD><EFBFBD>唳鰵雿滨蔭
- *銝滚<EFBFBD><EFBFBD>扎<EFBFBD><EFBFBD><EFBFBD>靽格㺿<EFBFBD>找誨<EFBFBD>?
- 蝖桐<EFBFBD><EFBFBD>唬誨<EFBFBD><EFBFBD>虾隞亦𡠺蝡讠<EFBFBD>霂?
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 4.1嚗𡁜<EFBFBD>撱箸鰵<EFBFBD>桀<EFBFBD>蝏𤘪<EFBFBD>
mkdir -p frontend-v2/src/modules/pkb/pages
mkdir -p frontend-v2/src/modules/pkb/components
mkdir -p frontend-v2/src/modules/pkb/api
mkdir -p frontend-v2/src/modules/pkb/types
mkdir -p frontend-v2/src/modules/pkb/hooks
Task 4.2嚗𡁜<EFBFBD><EFBFBD>園△<EFBFBD>V誨<EFBFBD>?
cp frontend/src/pages/KnowledgePage.tsx \
frontend-v2/src/modules/pkb/pages/KnowledgePage.tsx
Task 4.3嚗𡁜<EFBFBD>撱態PI<EFBFBD>滚𦛚
// frontend-v2/src/modules/pkb/api/knowledgeApi.ts
// <20>𥕦遣<F0A595A6>啁<EFBFBD>API靚<49>鍂撅<E98D82><E69285><EFBFBD><EFBFBD><EFBFBD> /api/v2/knowledge/*
Task 4.4嚗𡁏凒<EFBFBD>啣紡<EFBFBD>亥楝敺?
// <20>湔鰵<E6B994><E9B0B5><EFBFBD>栄mport頝臬<E9A09D>
// 雿<><E99BBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>函㮾<E587BD>𣬚<EFBFBD>UI蝏<49>辣摨?
Task 4.5嚗𡁶<EFBFBD>霂煾<EFBFBD>霂?
cd frontend-v2
npm run build
# 璉<><E79289>亦<EFBFBD>霂煾<E99C82>霂?
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F>唬誨<E594AC><E8AAA8><EFBFBD>霂煾<E99C82>朞<EFBFBD>
- <EFBFBD>?<3F>批<EFBFBD>蝡臬<E89DA1><E887AC>冽𧊋<E586BD>?
- <EFBFBD>?<3F>批<EFBFBD>蝡臭<E89DA1><E887AD>舀迤撣貉挪<E8B289>?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
# <20>𣳇膄<F0A3B387>啁𤌍敶?
rm -rf frontend-v2/src/modules/pkb
# <20>批<EFBFBD>蝡舐誧蝏剖極雿?
<EFBFBD><EFBFBD> <20>嗆挾5嚗𡁜<E59A97>蝡航楝<E888AA>望溶<E69C9B>𩤃<EFBFBD><F0A9A483>諹楝<E8ABB9>勗<EFBFBD>摮矋<E691AE>嚗?.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- <EFBFBD>冽鰵<EFBFBD>滨垢瘛餃<EFBFBD>頝舐眏
- *<EFBFBD>扯楝<EFBFBD>曹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD>唳唂憿菟𢒰<EFBFBD>峕𧒄<EFBFBD>舐鍂
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 5.1嚗𡁏釣<EFBFBD>峕鰵頝舐眏
// frontend-v2/src/router/index.ts
// <20>扯楝<E689AF>梧<EFBFBD>靽脲<E99DBD>銝滚<E98A9D>嚗? 憒<><E68692><EFBFBD>批<EFBFBD>蝡航<E89DA1><E888AA>刻<EFBFBD>銵?
// 霈輸䔮嚗冴ttp://localhost:5173/knowledge
// <20>啗楝<E59597>梧<EFBFBD><E6A2A7>啣<EFBFBD>嚗?
{
path: '/pkb', // 雿輻鍂<E8BCBB>啗楝敺?
component: () => import('@/modules/pkb/pages/KnowledgePage.tsx'),
meta: { title: 'PKB銝芯犖<EFBFBD>亥<EFBFBD>摨橒<EFBFBD><EFBFBD>啁<EFBFBD>嚗? }
}
Task 5.2嚗𡁏凒<EFBFBD>蚊PI靚<EFBFBD>鍂
// 蝖桐<E89D96><E6A190>啣<EFBFBD>蝡航<E89DA1><E888AA>函<EFBFBD><E587BD>?/api/v2/knowledge/* 頝舐眏
const API_BASE = '/api/v2/knowledge';
Task 5.3嚗𡁏溶<EFBFBD>删<EFBFBD><EFBFBD>祆<EFBFBD>霂?
// <20>券△<E588B8>V<EFBFBD>瘛餃<E7989B><E9A483><EFBFBD>𧋦<EFBFBD><F0A78BA6><EFBFBD>嚗峕䲮靘踹躹<E8B8B9><E8BAB9>鰵<EFBFBD>抒<EFBFBD><E68A92>?
<div className="version-badge">V2 (<EFBFBD>唳沲<EFBFBD>?</div>
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F>啗楝<E59597>勗虾霈輸䔮嚗冴ttp://localhost:5174/pkb
- <EFBFBD>?憿菟𢒰甇<F0A292B0>虜皜脫<E79A9C>
- <EFBFBD>?<3F>删<EFBFBD>霂煾<E99C82>霂?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
// 瘜券<E7989C><E588B8>㗇鰵頝舐眏
// {
// path: '/pkb',
// component: ...
// }
<EFBFBD><EFBFBD> <20>嗆挾6嚗𡁜<E59A97>蝡臬<E89DA1><E887AC>賡<EFBFBD>霂<EFBFBD><E99C82>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- 撉諹<EFBFBD><EFBFBD>啣<EFBFBD>蝡舀<EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>?
- 蝖桐<EFBFBD><EFBFBD>冽<EFBFBD>雿㯄<EFBFBD>銝<EFBFBD><EFBFBD>?
- <EFBFBD>𤑳緵撟嗡耨憭䔛I<EFBFBD>桅<EFBFBD>
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 6.1嚗𡁏<EFBFBD><EFBFBD>典<EFBFBD><EFBFBD>賣<EFBFBD>霂?
瘚贝<EFBFBD>瘚<EFBFBD><EFBFBD>嚗?
1. [ ] 霈輸䔮<E8BCB8>圈△<E59C88>g<EFBFBD>http://localhost:5174/pkb
2. [ ] <20>餃<EFBFBD><E9A483>蠘<EFBFBD>
3. [ ] <20>亦<EFBFBD><E4BAA6>亥<EFBFBD>摨枏<E691A8>銵?
4. [ ] <20>𥕦遣<F0A595A6>啁䰻霂<E4B0BB><E99C82>
5. [ ] 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>﹝
6. [ ] <20>亦<EFBFBD><E4BAA6><EFBFBD>﹝<EFBFBD>𡑒”
7. [ ] RAG璉<47>蝝W<E89D9D><EFBCB7>?
8. [ ] 蝻𤥁<E89DBB><F0A4A581>亥<EFBFBD>摨?
9. [ ] <20>𣳇膄<F0A3B387><E88684>﹝
10. [ ] <20>𣳇膄<F0A3B387>亥<EFBFBD>摨?
11. [ ] <20>孵<EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>?
12. [ ] <20>躰秤<E8BAB0>鞟內
Task 6.2嚗䦧I銝<EFBFBD><EFBFBD>湔<EFBFBD>扳<EFBFBD><EFBFBD>?
- [ ] 撣<><E692A3><EFBFBD>臬炏甇<E7828F>&
- [ ] <20>瑕<EFBFBD><E79195>臬炏甇<E7828F>虜
- [ ] 鈭支<E988AD><E694AF>臬炏瘚<E7828F><E7989A>
- [ ] <20>㰘蝸<E3B098>嗆<EFBFBD><E59786>遬蝷?
- [ ] <20>躰秤<E8BAB0>鞟內<E99E9F>见末
Task 6.3嚗𡁏<EFBFBD>閫<EFBFBD>膥<EFBFBD>澆捆<EFBFBD>?
- [ ] Chrome瘚贝<E7989A>
- [ ] Firefox瘚贝<E7989A>
- [ ] Safari瘚贝<E7989A>嚗<EFBFBD><E59A97><EFBFBD>撑ac嚗?
Task 6.4嚗𡁜<EFBFBD>摨𥪜<EFBFBD>瘚贝<EFBFBD>
- [ ] 獢屸𢒰蝡荔<E89DA1>1920x1080嚗?
- [ ] 撟單踎蝡荔<E89DA1>768x1024嚗?
- [ ] 蝘餃𢆡蝡荔<E89DA1>375x667嚗?
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <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>?
<EFBFBD><EFBFBD> <20>嗆挾7嚗𡁶<E59A97>摨血<E691A8>撣<EFBFBD><E692A3><EFBFBD>蠘<EFBFBD>撘<EFBFBD><E69298>喉<EFBFBD>嚗?憭抬<E686AD>
<EFBFBD>格<EFBFBD>
- 霈拚<EFBFBD><EFBFBD><EFBFBD>鍂<EFBFBD>瑚蝙<EFBFBD>冽鰵<EFBFBD><EFBFBD>𧋦
- <EFBFBD>園<EFBFBD><EFBFBD>笔<EFBFBD>雿輻鍂<EFBFBD>漤<EFBFBD>
- <EFBFBD>𤑳緵瞏𨅯銁<EFBFBD>桅<EFBFBD>
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 7.1嚗𡁜<EFBFBD><EFBFBD>啣<EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>?
// backend/src/common/config/featureFlags.ts
export const featureFlags = {
usePKBv2: process.env.USE_PKB_V2 === 'true' || false,
pkbV2UserWhitelist: process.env.PKB_V2_WHITELIST?.split(',') || [],
};
// 銝剝𡢿隞嗆<E99A9E><E59786>?
function pkbVersionRouter(req, res, next) {
const userId = req.user?.id;
// <20>賢<EFBFBD><E8B3A2>閧鍂<E996A7>瑚蝙<E7919A>冽鰵<E586BD><E9B0B5>𧋦
if (featureFlags.pkbV2UserWhitelist.includes(userId)) {
req.usePKBv2 = true;
}
// <20>硋<EFBFBD>撅<EFBFBD>撘<EFBFBD><E69298>?
if (featureFlags.usePKBv2) {
req.usePKBv2 = true;
}
next();
}
Task 7.2嚗𡁜<EFBFBD>蝡臬<EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>?
// frontend-v2/src/modules/pkb/config.ts
export const usePKBv2 = () => {
// 璉<><E79289>召ocalStorage<67>𨯅RL<52><4C>㺭
const forceV2 = localStorage.getItem('force-pkb-v2') === 'true';
const urlParam = new URLSearchParams(window.location.search).get('v2');
return forceV2 || urlParam === 'true';
};
// <20>寞旿撘<E697BF><E69298>喳<EFBFBD>摰帋蝙<E5B88B>典𪑛銝服PI
export const getApiBase = () => {
return usePKBv2() ? '/api/v2/knowledge' : '/api/v1/knowledge';
};
Task 7.3嚗𡁶<EFBFBD>摨血<EFBFBD>撣<EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>嗆挾7.1嚗𡁜<EFBFBD><EFBFBD>冽<EFBFBD>霂𤏪<EFBFBD>1-2憭抬<E686AD>
- [ ] 撘<><E69298>穃𣪧<E7A983>煺蝙<E785BA>冽鰵<E586BD><E9B0B5>𧋦
- [ ] 霈曄蔭嚗饝ocalStorage.setItem('force-pkb-v2', 'true')
- [ ] 霈啣<E99C88><E595A3><EFBFBD><EFBFBD>厰䔮憸?
<0A>嗆挾7.2嚗𡁜<EFBFBD><EFBFBD><EFBFBD>凒<EFBFBD>冽<EFBFBD>嚗?-5憭抬<E686AD>
- [ ] <20>㗇𥋘5-10銝芣暑頝<E69A91>鍂<EFBFBD>?
- [ ] <20>惩<EFBFBD><E683A9>賢<EFBFBD><E8B3A2>?
- [ ] <20>園<EFBFBD><E59C92>漤<EFBFBD>
<0A>嗆挾7.3嚗𡁏<EFBFBD>憭扯<EFBFBD><EFBFBD>湛<EFBFBD>7憭抬<EFBFBD>
- [ ] 25%<25>冽<EFBFBD>雿輻鍂<E8BCBB>啁<EFBFBD><E59581>?
- [ ] <20>烐綉<E78390>躰秤<E8BAB0>?
- [ ] 撖寞<E69296><E5AF9E>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>
Task 7.4嚗𡁶<EFBFBD><EFBFBD>批<EFBFBD><EFBFBD>亙<EFBFBD>
// 瘛餃<E7989B>霂衣<E99C82><E8A1A3>亙<EFBFBD>
logger.info('PKB API called', {
version: req.usePKBv2 ? 'v2' : 'v1',
userId: req.user.id,
action: req.path,
});
// <20>躰秤<E8BAB0>烐綉
if (req.usePKBv2) {
Sentry.setTag('pkb-version', 'v2');
}
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F>啣漲<E595A3>冽<EFBFBD>甇<EFBFBD>虜雿輻鍂
- <EFBFBD>?<3F>𣳇<EFBFBD>憭呆ug
- <EFBFBD>?<3F>躰秤<E8BAB0><E7A7A4>銁<EFBFBD>舀𦻖<E88880>𡑒<EFBFBD><F0A19192>?
- <EFBFBD>?<3F>冽<EFBFBD><E586BD>漤<EFBFBD>蝘舀<E89D98>
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>
# 蝡见朖<E8A781>墧<EFBFBD><E5A2A7>啣漲<E595A3>冽<EFBFBD>
1. 霈曄蔭<E69B84>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗䦧SE_PKB_V2=false
2. <20>𡝗<EFBFBD>蝛箇蒾<E7AE87>滚<EFBFBD>嚗䥪KB_V2_WHITELIST=""
3. <20>滚鍳<E6BB9A>滚𦛚
4. <20><><EFBFBD>厩鍂<E58EA9>瑁䌊<E79181>典<EFBFBD><E585B8>唳唂<E594B3><E59482>𧋦
<EFBFBD><EFBFBD> <20>嗆挾8嚗𡁜<E59A97><F0A1819C>誩<EFBFBD><E8AAA9>g<EFBFBD>0.5憭抬<EFBFBD>
<EFBFBD>格<EFBFBD>
- <EFBFBD><EFBFBD><EFBFBD>厩鍂<EFBFBD>瑕<EFBFBD><EFBFBD>W<EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>?
- 蝖桐<EFBFBD>撟單<EFBFBD>餈<EFBFBD>腹
- 靽萘<EFBFBD><EFBFBD>墧<EFBFBD><EFBFBD>賢<EFBFBD>
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 8.1嚗𡁜<EFBFBD>憭<EFBFBD><EFBFBD><EFBFBD>?
# <20>𣂼<EFBFBD><F0A382BC>𡁶䰻
- [ ] <20>𡁶䰻<F0A181B6>冽<EFBFBD><E586BD>喳<EFBFBD><E596B3><EFBFBD>漣
- [ ] <20><><EFBFBD><EFBFBD>墧<EFBFBD>憸<EFBFBD><E686B8>
- [ ] 憭<>遢敶枏<E695B6><E69E8F>滨蔭
Task 8.2嚗𡁏<EFBFBD>銵<EFBFBD><EFBFBD><EFBFBD>?
# <20>孵<EFBFBD>1嚗帋耨<E5B88B>寥<EFBFBD>霈方楝<E696B9>?
<0A>狄rontend-v2銝哨<E98A9D>撠?/knowledge 頝舐眏<E88890><E79C8F><EFBFBD><EFBFBD>圈△<E59C88>?
# <20>孵<EFBFBD>2嚗𡁜<E59A97>撅<EFBFBD>撘<EFBFBD><E69298>?
USE_PKB_V2=true
# <20>孵<EFBFBD>3嚗𡁜<E59A97>蝡舫<E89DA1>摰𡁜<E691B0>
if (location.pathname === '/knowledge') {
location.href = '/pkb';
}
Task 8.3嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>改<EFBFBD>24撠𤩺𧒄嚗?
- [ ] <20>烐綉<E78390>躰秤<E8BAB0>?
- [ ] <20>烐綉API<50>滚<EFBFBD><E6BB9A>園𡢿
- [ ] 璉<><E79289>亦鍂<E4BAA6>瑕<EFBFBD>擐?
- [ ] <20>亦<EFBFBD><E4BAA6>亙<EFBFBD>撘<EFBFBD>虜
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F><><EFBFBD>厩鍂<E58EA9>瑁挪<E79181>格鰵<E6A0BC><E9B0B5>𧋦
- <EFBFBD>?<3F>躰秤<E8BAB0><E7A7A4>迤撣?
- <EFBFBD>?<3F>扯<EFBFBD>蝔喳<E89D94>
- <EFBFBD>?<3F>𣳇<EFBFBD>憭扳<E686AD>霂?
<EFBFBD>墧<EFBFBD><EFBFBD>寞<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>?憭抬<E686AD>
# 蝝扳<E89D9D>亙<EFBFBD>皛?
1. USE_PKB_V2=false
2. <20>碶耨<E7A2B6>寡楝<E5AFA1>梢<EFBFBD>蝵?
3. <20>滚鍳<E6BB9A>滚𦛚
4. 5<><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>皛?
<EFBFBD><EFBFBD> <20>嗆挾9嚗𡁏<E59A97><F0A1818F><EFBFBD>唂隞<E59482><E99A9E>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>1-2<>典<EFBFBD>嚗?
<EFBFBD>𩤃<EFBFBD> <20>滩<EFBFBD><E6BBA9>鞟內
<EFBFBD>喳<EFBFBD>蝑匧<EFBFBD>2<EFBFBD>剁<EFBFBD>蝖株恕<EFBFBD>啁<EFBFBD><EFBFBD>砍<EFBFBD><EFBFBD>函迅摰𡁜<EFBFBD><EFBFBD>齿<EFBFBD>銵䕘<EFBFBD>
隞餃𦛚皜<EFBFBD><EFBFBD>
Task 9.1嚗𡁜<EFBFBD>隞賣唂隞<EFBFBD><EFBFBD>
# <20>𥕦遣憭<E981A3>遢<EFBFBD><E981A2>𣈲
git checkout -b backup/pkb-legacy-code
git commit -am "Backup: PKB legacy code before cleanup"
git push origin backup/pkb-legacy-code
Task 9.2嚗𡁜<EFBFBD><EFBFBD>斗唂隞<EFBFBD><EFBFBD>
# <20>𣳇膄<F0A3B387>批<EFBFBD>蝡臭誨<E887AD>?
rm -rf backend/src/legacy/controllers/knowledgeBaseController.ts
rm -rf backend/src/legacy/services/knowledgeBaseService.ts
rm -rf backend/src/legacy/routes/knowledgeBases.ts
# <20>𣳇膄<F0A3B387>批<EFBFBD>蝡臭誨<E887AD>?
rm -rf frontend/src/pages/KnowledgePage.tsx
Task 9.3嚗𡁏<EFBFBD><EFBFBD><EFBFBD>楝<EFBFBD>?
// 蝘駁膄<E9A781>扯楝<E689AF>望釣<E69C9B>?
// app.use('/api/v1/knowledge', legacyKnowledgeRoutes);
// <20>舫<EFBFBD>㚁<EFBFBD>瘛餃<E7989B><E9A483>滚<EFBFBD><E6BB9A>?
app.use('/api/v1/knowledge', (req, res) => {
res.redirect(308, `/api/v2/knowledge${req.path}`);
});
撉諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?隞<><E99A9E>撌脣<E6928C>隞?
- <EFBFBD>?<3F>啁<EFBFBD><E59581>祈<EFBFBD>銵?<3F>冽<EFBFBD><E586BD>桅<EFBFBD>
- <EFBFBD>?<3F>a<EFBFBD>銝<EFBFBD><E98A9D>游<EFBFBD><E6B8B8>誩<EFBFBD><E8AAA9>?
<EFBFBD><EFBFBD> 摰匧<E691B0><E58CA7>芣鴌<E88AA3>餌<EFBFBD>
1. 憪讠<E686AA><E8AEA0>臬<EFBFBD>皛?
瘥譍葵<EFBFBD>嗆挾<EFBFBD>賢虾隞亦<EFBFBD><EFBFBD>喳<EFBFBD>皛𡁜<EFBFBD>銝𠹺<EFBFBD>銝芰𠶖<EFBFBD>?
<0A>墧<EFBFBD><E5A2A7>園𡢿嚗? 5<><35><EFBFBD>
2. <20>抒頂蝏煺<E89D8F><E785BA>?
餈<EFBFBD>宏<EFBFBD>罸𡢿嚗峕唂隞<EFBFBD><EFBFBD>摰<EFBFBD><EFBFBD>銝滚𢆡
<0A>批<EFBFBD><E689B9>?00%<25>舐鍂
<0A>冽<EFBFBD><E586BD>䭾<EFBFBD><E4ADBE>?
3. 皜鞱<E79A9C>撘誯<E69298>霂?
瘥譍葵<EFBFBD>嗆挾<EFBFBD>祉<EFBFBD>撉諹<EFBFBD>
<0A>𤑳緵<F0A491B3>桅<EFBFBD>蝡见朖靽桀<E99DBD>
銝滚蔣<E6BB9A>滢<EFBFBD>銝<EFBFBD><E98A9D>嗆挾
4. <20>啣漲<E595A3>穃<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD> <20>?撠讛<E692A0><E8AE9B>渡鍂<E6B8A1>?<3F>?憭扯<E686AD><E689AF>渡鍂<E6B8A1>?<3F>?<3F>券<EFBFBD>
隞颱<E99A9E><E9A2B1>嗆挾<E59786>𤑳緵<F0A491B3>桅<EFBFBD><E6A185>賢虾隞交<E99A9E><E4BAA4>?
5. <20>烐綉<E78390>𡃏郎
摰墧𧒄<EFBFBD>烐綉<EFBFBD>躰秤<EFBFBD>?
<0A>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>撖寞<E69296>
<0A>冽<EFBFBD><E586BD>漤<EFBFBD><E6BCA4>園<EFBFBD>
<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>
1. [ ] <20><><EFBFBD>㗇<EFBFBD>霂閧鍂靘钅<E99D98>朞<EFBFBD>
2. [ ] <20>删<EFBFBD>霂?餈鞱<E9A488><E99EB1>園<EFBFBD>霂?
3. [ ] <20>抒頂蝏笔<E89D8F><E7AC94>賣迤撣?
4. [ ] <20>扯<EFBFBD><E689AF>䭾<EFBFBD><E4ADBE>曆<EFBFBD><E69B86>?
5. [ ] 隞<><E99A9E>撌脫<E6928C>鈭文<E988AD>Git
6. [ ] <20>a<EFBFBD>霂<EFBFBD>恣<EFBFBD>朞<EFBFBD>
<EFBFBD>?<3F>嗆挾憭梯揖憭<E68F96><E686AD>
1. 蝡见朖<E8A781>𨀣迫餈<E8BFAB>宏
2. <20><><EFBFBD>憭梯揖<E6A2AF>笔<EFBFBD>
3. 靽桀<E99DBD><E6A180>桅<EFBFBD>
4. <20>齿鰵撉諹<E69289>
5. <20>朞<EFBFBD><E69C9E>𤾸<EFBFBD>蝏抒賒銝衤<E98A9D><E8A1A4>嗆挾
<EFBFBD>㴓 <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>蝏<EFBFBD>𤌍<EFBFBD>?
- <EFBFBD>?PKB<4B>蠘<EFBFBD>100%餈<>宏<EFBFBD>唳鰵<E594B3>嗆<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<EFBFBD><EFBFBD><EFBFBD>
- <20>躰秤<E8BAB0><E7A7A4><EFBFBD>< 0.1%嚗<><E59A97><EFBFBD>抒<EFBFBD><E68A92>砍笆瘥䈑<E798A5>
- <20>滚<EFBFBD><E6BB9A>園𡢿嚗帋<E59A97>頞<EFBFBD><E9A09E><EFBFBD>抒<EFBFBD><E68A92>祉<EFBFBD> 110%
- <20>冽<EFBFBD>皛⊥<E79A9B>摨佗<E691A8><E4BD97>?90%
- <20>墧<EFBFBD>甈⊥㺭嚗?甈∴<E79488><E288B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
<EFBFBD><EFBFBD> 摨娍<E691A8>亥<EFBFBD>蝟?
<EFBFBD>𤑳緵銝仿<EFBFBD><EFBFBD>桅<EFBFBD><EFBFBD>?
1. 蝡见朖<E8A781>𨀣迫餈<E8BFAB>宏
2. 霂<>摯敶勗<E695B6><E58B97><EFBFBD>凒
3. <20>喳<EFBFBD><E596B3>臬炏<E887AC>墧<EFBFBD>
4. <20>𡁶䰻<F0A181B6>a<EFBFBD>
5. 霈啣<E99C88><E595A3>桅<EFBFBD>霂行<E99C82>
<EFBFBD>墧<EFBFBD><EFBFBD>喟<EFBFBD>
蝡见朖<EFBFBD>墧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蛛<EFBFBD>
- <20>唳旿銝W仃<EFBCB7>𡝗<EFBFBD><F0A19D97>?
- <20>詨<EFBFBD><E8A9A8>蠘<EFBFBD>銝滚虾<E6BB9A>?
- 憭折<E686AD><E68A98>冽<EFBFBD><E586BD>閗<EFBFBD>
- 摰匧<E691B0>瞍𤩺<E79E8D>
<0A>臭誑蝏抒賒<E68A92><E8B392><EFBFBD><EFBFBD>蛛<EFBFBD>
- 銝芸<E98A9D>颲寧<E9A2B2>case<73>桅<EFBFBD>
- UI撠葱ug
- <20>扯<EFBFBD>頧餃凝銝钅<E98A9D>
- <20>冽<EFBFBD><E586BD>漤<EFBFBD><E6BCA4>臭誑<E887AD>亙<EFBFBD>
<EFBFBD><EFBFBD> 餈<>宏<EFBFBD>亙<EFBFBD>璅⊥踎
### [<5B>交<EFBFBD>] <20>嗆挾X<E68CBE>扯<EFBFBD>霈啣<E99C88>
**<EFBFBD>扯<EFBFBD>鈭綽<EFBFBD>** XXX
**撘<>憪𧢲𧒄<F0A7A2B2>湛<EFBFBD>** YYYY-MM-DD HH:mm
**蝏𤘪<E89D8F><F0A498AA>園𡢿嚗?* YYYY-MM-DD HH:mm
**<EFBFBD>扯<EFBFBD><EFBFBD><EFBFBD>捆嚗?*
- Task X.1: [摰峕<E691B0>/憭梯揖] [霂湔<E99C82>]
- Task X.2: [摰峕<E691B0>/憭梯揖] [霂湔<E99C82>]
...
**瘚贝<E7989A>蝏𤘪<E89D8F>嚗?*
- 瘚贝<E7989A><E8B49D>其<EFBFBD>1: <20>?<3F>朞<EFBFBD>
- 瘚贝<E7989A><E8B49D>其<EFBFBD>2: <20>?<3F>朞<EFBFBD>
...
**<EFBFBD>𤑳緵<EFBFBD><EFBFBD>䔮憸矋<EFBFBD>**
1. [<5B>桅<EFBFBD><E6A185>讛膩] - [<5B>嗆<EFBFBD><E59786><EFBFBD>撌脖耨憭?敺<>耨憭䓞
2. ...
**<EFBFBD>扯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*
- API<50>滚<EFBFBD><E6BB9A>園𡢿嚗䧥X ms (<28>抒<EFBFBD><E68A92>? XX ms)
- <20>躰秤<E8BAB0><E7A7A4><EFBFBD>X%
**蝏栞捏嚗?*
[<5B>?<3F>朞<EFBFBD> / <20>?憭梯揖]
**銝衤<E98A9D>甇伐<E79487>**
[蝏抒賒銝衤<E98A9D><E8A1A4>嗆挾 / <20><><EFBFBD>靽桀<E99DBD><E6A180>桅<EFBFBD> / <20>墧<EFBFBD>]
<EFBFBD><EFBFBD> 蝏誯<E89D8F><E8AAAF>餌<EFBFBD>
餈嗘葵霈∪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
1. <20>?<3F><>漲靽嘥<E99DBD>嚗屸<E59A97><E5B1B8>拇<EFBFBD>撠誩<E692A0>
2. <20>?瘥𤩺郊<F0A4A9BA>舫<EFBFBD>霂<EFBFBD><E99C82><EFBFBD>桅<EFBFBD><E6A185>拙<EFBFBD><E68B99>?
3. <20>?<3F>𤩺𧒄<F0A4A9BA>臬<EFBFBD>皛𡄯<E79A9B>銝滚蔣<E6BB9A>滢<EFBFBD><E6BBA2>?
4. <20>?<3F>啣漲<E595A3>穃<EFBFBD>嚗屸<E59A97>鞉郊<E99E89><E9838A>揢
5. <20>?<3F>找誨<E689BE><E8AAA8>鵭<EFBFBD>煺<EFBFBD><E785BA>辷<EFBFBD><E8BEB7>䔶<EFBFBD><E494B6>?
銝𤾸翰<EFBFBD>蠘<EFBFBD>蝘餌<EFBFBD>撖寞<EFBFBD>
敹恍<EFBFBD>蠘<EFBFBD>蝘鳴<EFBFBD>1-2憭拙<E686AD><E68B99>琜<EFBFBD>雿<EFBFBD><E99BBF><EFBFBD>拚<EFBFBD>
摰匧<E691B0>餈<EFBFBD>宏嚗?-6憭拙<E686AD><E68B99>琜<EFBFBD>雿<EFBFBD><E99BBF><EFBFBD>拇<EFBFBD>雿?
<0A>㗇𥋘嚗𡁶鍂4憭拇𧒄<E68B87>湔揢<E6B994>硋<EFBFBD><E7A18B>冽<EFBFBD>批<EFBFBD>蝔喳<E89D94><E596B3>?
<EFBFBD><EFBFBD><EFBFBD>憟賭<EFBFBD><EFBFBD>梹<EFBFBD>霈拇<EFBFBD>隞砌<EFBFBD><EFBFBD>嗆挾0撘<EFBFBD>憪页<EFBFBD> <20><>