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%)
4.9 KiB
<EFBFBD><EFBFBD> 蝏蹱鰵AI<41>拇<EFBFBD><E68B87><EFBFBD>翰<EFBFBD><E7BFB0><EFBFBD><EFBFBD>?
*<EFBFBD>湔鰵<EFBFBD>園𡢿嚗? 2026-01-12
敶枏<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD> <20>?Phase 3.5.5 隞<><E99A9E><EFBFBD>寥<EFBFBD>惩歇摰峕<E691B0>嚗<EFBFBD><E59A97>蝡臬<E89DA1>蝡舀<E89DA1>霂?
<EFBFBD>?30蝘雴<E89D98>閫<EFBFBD><E996AB><EFBFBD>滨𠶖<E6BBA8>?
<EFBFBD>?Phase 3.5.1-3.5.5 隞<><E99A9E><EFBFBD>寥<EFBFBD>惩歇摰峕<E691B0>嚗?5%嚗?<3F>?敺<><E695BA><EFBFBD>琜<EFBFBD>蝡臬<E89DA1>蝡舀<E89DA1>霂閖<E99C82>霂?
撌脣<E6928C><E884A3>琜<EFBFBD>
<20>?<3F>唳旿摨橒<E691A8>capability_schema + prompt_templates + prompt_versions
<20>?<3F>𡒊垢嚗䥪romptService嚗?96銵䕘<E98AB5>+ 8銝服PI<50>亙藁
<20>?<3F>滨垢嚗𡁶恣<F0A181B6><E681A3>垢<EFBFBD>嗆<EFBFBD> + Prompt<70>𡑒” + 蝻𤥁<E89DBB><F0A4A581>剁<EFBFBD>CodeMirror 6嚗? <20>?瘚贝<E7989A>嚗𡁜<E59A97>蝡臬<E89DA1><E887AC><EFBFBD><EFBFBD>霂訫<E99C82><E8A8AB>券<EFBFBD>朞<EFBFBD>
<20>?RVW<56><57><EFBFBD>嚗塄ditorialService + methodologyService 撌脫㺿<E884AB>𩤃<EFBFBD>2026-01-12嚗?
銝衤<E98A9D>甇伐<E79487>
<20>?<3F>臬𢆡<E887AC>𡒊垢<F0A1928A>滚𦛚瘚贝<E7989A>
<20>?蝡臬<E89DA1>蝡舀<E89DA1>霂閧<E99C82>摨阡<E691A8>閫<EFBFBD><E996AB><EFBFBD>? <20>?<3F>湔鰵摰峕<E691B0>摨行<E691A8>獢?```
---
## <20><> <20>喲睸<E596B2><E79DB8>辣雿滨蔭
### <20>詨<EFBFBD><E8A9A8><EFBFBD>辣嚗<E8BEA3><E59A97>霂鳴<E99C82>
| <20><>辣 | 霂湔<E99C82> | 銵峕㺭 |
|------|------|------|
| `backend/src/common/prompt/prompt.service.ts` | PromptService <20>詨<EFBFBD><E8A9A8>餉<EFBFBD> | 596 |
| `backend/src/modules/rvw/services/editorialService.ts` | RVW 蝔輻漲霂<E6BCB2>摯<EFBFBD>滚𦛚 <20>?撌脫㺿<E884AB>?| 83 |
| `backend/src/modules/rvw/services/methodologyService.ts` | RVW <20>寞<EFBFBD>摮西<E691AE>隡唳<E99AA1><E594B3>?<3F>?撌脫㺿<E884AB>?| 83 |
| `backend/src/modules/rvw/workers/reviewWorker.ts` | RVW Worker <20>?撌脫凒<E884AB>唬<EFBFBD><E594AC>𠌊serId | 193 |
| `frontend-v2/src/pages/admin/PromptEditorPage.tsx` | Prompt 蝻𤥁<E89DBB><F0A4A581>券△<E588B8>?| 399 |
### <20><>﹝嚗<EFB99D><E59A97>霂鳴<E99C82>
| <20><>﹝ | <20><>捆 |
|------|------|
| `04-撘<><E69298>𤏸恣<F0A48FB8>?01-TODO皜<4F><E79A9C>嚗<EFBFBD>虾餈質葵嚗?md` | 霂衣<E99C82>隞餃𦛚皜<F0A69B9A><E79A9C>嚗?9/110 摰峕<E691B0>嚗车
| `04-撘<><E69298>𤏸恣<F0A48FB8>?02-Prompt蝞∠<E89D9E>蝟餌<E89D9F>撘<EFBFBD><E69298>𤏸恣<F0A48FB8>?md` | 摰峕㟲撘<E39FB2><E69298>𤏸恣<F0A48FB8>?|
| `00-Phase3.5摰峕<EFBFBD><EFBFBD>餌<EFBFBD>.md` | 撌脣<E6928C><E884A3>𣂼極雿𨀣<E99BBF>餌<EFBFBD> |
---
## <20>㴓 Phase 3.5.5 隞餃𦛚霂西圾嚗<E59CBE><E59A97> 隞<><E99A9E><EFBFBD>寥<EFBFBD>惩歇摰峕<E691B0> 2026-01-12嚗?
### <20>?隞餃𦛚 1嚗𡁏㺿<F0A1818F>?editorialService.ts - 撌脣<E6928C><E884A3>?
**<2A>寥<EFBFBD>惩<EFBFBD>**嚗<><E59A97>隞嗉粉<E59789>吔<EFBFBD>
```typescript
const PROMPT_PATH = path.join(__dirname, '../../../../prompts/review_editorial_system.txt');
const prompt = fs.readFileSync(PROMPT_PATH, 'utf-8');
**<2A>寥<EFBFBD>惩<EFBFBD>**嚗㇊romptService嚗?```typescript import { prisma } from '../../../config/database.js'; import { getPromptService } from '../../../common/prompt/index.js';
const promptService = getPromptService(prisma); const { content: systemPrompt, isDraft } = await promptService.get('RVW_EDITORIAL', {}, { userId });
if (isDraft) { logger.info('[RVW:Editorial] 雿輻鍂 DRAFT <20><>𧋦 Prompt嚗<74><E59A97>霂閙芋撘𧶏<E69298>', { userId }); }
### <20>?隞餃𦛚 2嚗𡁏㺿<F0A1818F>?methodologyService.ts - 撌脣<E6928C><E884A3>?
**<2A>寥<EFBFBD>惩<EFBFBD>**
```typescript
const { content: systemPrompt, isDraft } = await promptService.get('RVW_METHODOLOGY', {}, { userId });
<EFBFBD>?隞餃𦛚 3嚗𡁏凒<F0A1818F>?reviewWorker.ts - 撌脣<E6928C><E884A3>?
<EFBFBD>寥<EFBFBD>惩<EFBFBD> - 隡𣳇<E99AA1>?userId <20>舀<EFBFBD><E88880>啣漲憸<E6BCB2><E686B8>
// <20>?Phase 3.5.5: 隡𣳇<E99AA1>?userId <20>舀<EFBFBD><E88880>啣漲憸<E6BCB2><E686B8>
editorialResult = await reviewEditorialStandards(extractedText, modelType, userId);
methodologyResult = await reviewMethodology(extractedText, modelType, userId);
<EFBFBD>?隞餃𦛚 4嚗𡁶垢<F0A181B6>啁垢瘚贝<E7989A> - 敺<><E695BA>霂?
瘚贝<EFBFBD>甇仿炊
- <EFBFBD>餃<EFBFBD> Prompt撌亦<E6928C>撣<EFBFBD><E692A3>
13800000002/123456嚗?2. 餈𥕦<E9A488>/admin/prompts - 蝻𤥁<EFBFBD>
RVW_EDITORIAL嚗䔶耨<EFBFBD>嫣<EFBFBD>憭<EFBFBD><EFBFBD>摰對<EFBFBD>憒<EFBFBD>溶<EFBFBD>?瘚贝<E7989A>"嚗?4. 靽嘥<E99DBD><E598A5>厩阮 - 撘<EFBFBD><EFBFBD>航<EFBFBD>霂閙芋撘𧶏<EFBFBD><EFBFBD>㗇𥋘 RVW 璅∪<E79285>
- <EFBFBD><EFBFBD>揢<EFBFBD>唬<EFBFBD><EFBFBD>∠垢
/rvw - 銝𠹺<EFBFBD>銝<EFBFBD>銝芣<EFBFBD>獢<EFBFBD><EFBFBD><EFBFBD>亦<EFBFBD>摰⊥䰻蝏𤘪<EFBFBD><EFBFBD>臬炏雿輻鍂鈭<EFBFBD>耨<EFBFBD>孵<EFBFBD><EFBFBD>?Prompt
- 撉諹<EFBFBD><EFBFBD>桅<EFBFBD>𡁶鍂<EFBFBD>瑚<EFBFBD>雿輻鍂<EFBFBD>抒<EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD> <20>喲睸隞<E79DB8><E99A9E>蝷箔<E89DB7>
PromptService.get() <20>冽<EFBFBD>
// <20>瑕<EFBFBD> Prompt嚗<74>䌊<EFBFBD>函<EFBFBD>摨佗<E691A8>
const result = await promptService.get(
'RVW_EDITORIAL', // code
{}, // variables嚗㇌VW<56>惩<EFBFBD><E683A9>𧶏<EFBFBD>
{ userId: req.user.id } // <20>其<EFBFBD><E585B6>斗鱏靚<E9B18F><E99D9A>璅∪<E79285>
);
// 雿輻鍂皜脫<E79A9C><E884AB>𡒊<EFBFBD><F0A1928A><EFBFBD>捆
const messages = [
{ role: 'system', content: result.content },
{ role: 'user', content: documentText },
];
// 雿輻鍂璅∪<E79285><E288AA>滨蔭
const llmResponse = await llm.chat(messages, {
temperature: result.modelConfig.temperature,
model: result.modelConfig.model,
});
靚<EFBFBD><EFBFBD>璅∪<EFBFBD> API
// 撘<><E69298>航<EFBFBD>霂𤏪<E99C82><F0A48FAA>芾<EFBFBD>霂?RVW嚗?POST /api/admin/prompts/debug
{
"modules": ["RVW"],
"enabled": true
}
// <20>喲𡡒靚<F0A1A192><E99D9A>
POST /api/admin/prompts/debug
{
"modules": [],
"enabled": false
}
<EFBFBD><EFBFBD>儭?<3F>臬<EFBFBD>靽⊥<E99DBD>
<EFBFBD>唳旿摨?
Host: localhost
Port: 5432
Database: ai_clinical_research
User: postgres
Password: postgres123
<EFBFBD>𡒊垢<EFBFBD>滚𦛚
蝡臬藁: 3001
<0A>臬𢆡: cd backend && npm run dev
<EFBFBD>滨垢<EFBFBD>滚𦛚
蝡臬藁: 3000
<0A>臬𢆡: cd frontend-v2 && npm run dev
隞<><E99A9E>: /api -> http://localhost:3001 (撌脤<E6928C>蝵?
<EFBFBD>𩤃<EFBFBD> 撣貉<E692A3><E8B289>桅<EFBFBD>
1. Prisma Client <20>曆<EFBFBD><E69B86>?prompt_templates
**閫<><E996AB>**嚗朞<E59A97>銵?npx prisma generate
2. <20>滨垢靚<E59EA2>鍂 API 401
**閫<><E996AB>**嚗𡁏<E59A97><F0A1818F>交糓<E4BAA4>血歇<E8A180>餃<EFBFBD>嚗𥇍WT Token <20>臬炏<E887AC>㗇<EFBFBD>
3. CodeMirror 銝齿遬蝷?
**閫<><E996AB>**嚗𡁏<E59A97><F0A1818F>交糓<E4BAA4>血<EFBFBD>鋆<EFBFBD><E98B86> codemirror <20>?@codemirror/* 靘肽<E99D98>
<EFBFBD><EFBFBD> <20>𠉛頂靽⊥<E99DBD>
憒<EFBFBD><EFBFBD><EFBFBD>煾䔮嚗諹窈<EFBFBD>仿<EFBFBD>嚗?- <20><><EFBFBD>航挽霈∴<E99C88>02-<2D><><EFBFBD>航挽霈?03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>敹恍<E695B9>笔<EFBFBD><E7AC94>?md
- 撘<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
../../04-撘<><E69298>𤏸<EFBFBD><F0A48FB8>?
蟡嘥<EFBFBD><EFBFBD>煾◇<EFBFBD>抬<EFBFBD> <20><>