Files
AIclinicalresearch/docs/03-业务模块/ADMIN-运营管理端/00-给新AI的快速指南.md
HaHafeng 1b53ab9d52 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%)
2026-01-14 19:15:01 +08:00

4.9 KiB
Raw Blame History

<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>甇仿炊

  1. <EFBFBD><EFBFBD> Prompt撌亦<E6928C><EFBFBD><E692A3>13800000002 / 123456嚗?2. 餈𥕦<E9A488> /admin/prompts
  2. 蝻𤥁<EFBFBD> RVW_EDITORIAL嚗䔶耨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰對<EFBFBD><EFBFBD><EFBFBD>?瘚贝<E7989A>"嚗?4. 靽嘥<E99DBD><E598A5>厩阮
  3. <EFBFBD><EFBFBD><EFBFBD>霂閙芋撘𧶏<EFBFBD><EFBFBD>㗇𥋘 RVW 璅<E79285>
  4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>∠垢 /rvw
  5. 銝𠹺<EFBFBD><EFBFBD>銝芣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰⊥䰻蝏𤘪<EFBFBD><EFBFBD>臬炏雿輻鍂鈭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?Prompt
  6. 撉諹<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><>