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%)
183 lines
4.9 KiB
Markdown
183 lines
4.9 KiB
Markdown
# <20><> 蝏蹱鰵AI<41>拇<EFBFBD><E68B87><EFBFBD>翰<EFBFBD><E7BFB0><EFBFBD><EFBFBD>?
|
||
> **<2A>湔鰵<E6B994>園𡢿嚗?* 2026-01-12
|
||
> **敶枏<E695B6><E69E8F>嗆<EFBFBD><E59786><EFBFBD>** <20>?Phase 3.5.5 隞<><E99A9E><EFBFBD>寥<EFBFBD>惩歇摰峕<E691B0>嚗<EFBFBD><E59A97>蝡臬<E89DA1>蝡舀<E89DA1>霂?
|
||
---
|
||
|
||
## <20>?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>霂?
|
||
撌脣<EFBFBD><EFBFBD>琜<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嚗?
|
||
銝衤<EFBFBD>甇伐<EFBFBD>
|
||
<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');
|
||
```
|
||
|
||
**<EFBFBD>寥<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 });
|
||
```
|
||
|
||
### <20>?隞餃𦛚 3嚗𡁏凒<F0A1818F>?reviewWorker.ts - 撌脣<E6928C><E884A3>?
|
||
**<2A>寥<EFBFBD>惩<EFBFBD>** - 隡𣳇<E99AA1>?userId <20>舀<EFBFBD><E88880>啣漲憸<E6BCB2><E686B8>
|
||
```typescript
|
||
// <20>?Phase 3.5.5: 隡𣳇<E99AA1>?userId <20>舀<EFBFBD><E88880>啣漲憸<E6BCB2><E686B8>
|
||
editorialResult = await reviewEditorialStandards(extractedText, modelType, userId);
|
||
methodologyResult = await reviewMethodology(extractedText, modelType, userId);
|
||
```
|
||
|
||
### <20>?隞餃𦛚 4嚗𡁶垢<F0A181B6>啁垢瘚贝<E7989A> - 敺<><E695BA>霂?
|
||
**瘚贝<E7989A>甇仿炊**
|
||
1. <20>餃<EFBFBD> Prompt撌亦<E6928C>撣<EFBFBD><E692A3>`13800000002` / `123456`嚗?2. 餈𥕦<E9A488> `/admin/prompts`
|
||
3. 蝻𤥁<E89DBB> `RVW_EDITORIAL`嚗䔶耨<E494B6>嫣<EFBFBD>憭<EFBFBD><E686AD>摰對<E691B0>憒<EFBFBD>溶<EFBFBD>?瘚贝<E7989A>"嚗?4. 靽嘥<E99DBD><E598A5>厩阮
|
||
5. 撘<><E69298>航<EFBFBD>霂閙芋撘𧶏<E69298><F0A7B68F>㗇𥋘 RVW 璅∪<E79285>
|
||
6. <20><>揢<EFBFBD>唬<EFBFBD><E594AC>∠垢 `/rvw`
|
||
7. 銝𠹺<E98A9D>銝<EFBFBD>銝芣<E98A9D>獢<EFBFBD><E78DA2><EFBFBD>亦<EFBFBD>摰⊥䰻蝏𤘪<E89D8F><F0A498AA>臬炏雿輻鍂鈭<E98D82>耨<EFBFBD>孵<EFBFBD><E5ADB5>?Prompt
|
||
8. 撉諹<E69289><E8ABB9>桅<EFBFBD>𡁶鍂<F0A181B6>瑚<EFBFBD>雿輻鍂<E8BCBB>抒<EFBFBD><E68A92>?
|
||
---
|
||
|
||
## <20><> <20>喲睸隞<E79DB8><E99A9E>蝷箔<E89DB7>
|
||
|
||
### PromptService.get() <20>冽<EFBFBD>
|
||
|
||
```typescript
|
||
// <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,
|
||
});
|
||
```
|
||
|
||
### 靚<><E99D9A>璅∪<E79285> API
|
||
|
||
```typescript
|
||
// 撘<><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
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## <20><>儭?<3F>臬<EFBFBD>靽⊥<E99DBD>
|
||
|
||
### <20>唳旿摨?
|
||
```
|
||
Host: localhost
|
||
Port: 5432
|
||
Database: ai_clinical_research
|
||
User: postgres
|
||
Password: postgres123
|
||
```
|
||
|
||
### <20>𡒊垢<F0A1928A>滚𦛚
|
||
|
||
```
|
||
蝡臬藁: 3001
|
||
<EFBFBD>臬𢆡: cd backend && npm run dev
|
||
```
|
||
|
||
### <20>滨垢<E6BBA8>滚𦛚
|
||
|
||
```
|
||
蝡臬藁: 3000
|
||
<EFBFBD>臬𢆡: cd frontend-v2 && npm run dev
|
||
隞<EFBFBD><EFBFBD>: /api -> http://localhost:3001 (撌脤<E6928C>蝵?
|
||
```
|
||
|
||
---
|
||
|
||
## <20>𩤃<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>
|
||
|
||
---
|
||
|
||
## <20><> <20>𠉛頂靽⊥<E99DBD>
|
||
|
||
憒<EFBFBD><EFBFBD><EFBFBD>煾䔮嚗諹窈<EFBFBD>仿<EFBFBD>嚗?- <20><><EFBFBD>航挽霈∴<E99C88>`02-<2D><><EFBFBD>航挽霈?03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>敹恍<E695B9>笔<EFBFBD><E7AC94>?md`
|
||
- 撘<><E69298>𤏸<EFBFBD><F0A48FB8><EFBFBD><EFBFBD>`../../04-撘<><E69298>𤏸<EFBFBD><F0A48FB8>?`
|
||
|
||
---
|
||
|
||
*蟡嘥<EFBFBD><EFBFBD>煾◇<EFBFBD>抬<EFBFBD> <20><>*
|
||
|
||
|