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%)
700 lines
16 KiB
Markdown
700 lines
16 KiB
Markdown
# <20>臬<EFBFBD><E887AC>滨蔭<E6BBA8><E894AD><EFBFBD>
|
||
|
||
> **<2A><>﹝<EFBFBD><EFB99D>𧋦嚗?* v1.0
|
||
> **<2A>𥕦遣<F0A595A6>交<EFBFBD>嚗?* 2025-11-09
|
||
> **蝏湔擪<E6B994><E693AA><EFBFBD>** <20><><EFBFBD>臬𣪧<E887AC>?
|
||
> **<2A><><EFBFBD>擧凒<E693A7>堆<EFBFBD>** 2025-11-09
|
||
|
||
---
|
||
|
||
## <20><> <20><>﹝霂湔<E99C82>
|
||
|
||
<EFBFBD>祆<EFBFBD>獢<EFBFBD>扇敶閧頂蝏蠘<EFBFBD>銵峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>函㴓憓<EFBFBD><EFBFBD><EFBFBD>誯<EFBFBD>蝵殷<EFBFBD><EFBFBD><EFBFBD>𡠺嚗?- <20>唳旿摨栞<E691A8><E6A09E>乩縑<E4B9A9>?- LLM API撖<49>𤨎<EFBFBD>滨蔭
|
||
- 蝚砌<E89D9A><E7A08C>寞<EFBFBD><E5AF9E>⊿<EFBFBD>蝵?- 摰匧<E691B0><E58CA7>詨<EFBFBD><E8A9A8>滨蔭
|
||
|
||
---
|
||
|
||
## <20><>儭?<3F>唳旿摨㯄<E691A8>蝵?
|
||
### PostgreSQL餈墧𦻖靽⊥<E99DBD>
|
||
|
||
**敶枏<E695B6><E69E8F>滨蔭嚗?*
|
||
```env
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research
|
||
```
|
||
|
||
**餈墧𦻖<E5A2A7><F0A6BB96>㺭霂湔<E99C82>嚗?*
|
||
| <20><>㺭 | 敶枏<E695B6><E69E8F>?| 霂湔<E99C82> |
|
||
|------|--------|------|
|
||
| <20>冽<EFBFBD><E586BD>?| postgres | PostgreSQL暺䁅恕<E48185>冽<EFBFBD> |
|
||
| 撖<><E69296> | postgres | <20>砍𧑐撘<F0A79190><E69298>穃<EFBFBD><E7A983>?|
|
||
| 銝餅㦤 | localhost | <20>砍𧑐<E7A08D>唳旿摨?|
|
||
| 蝡臬藁 | 5432 | PostgreSQL暺䁅恕蝡臬藁 |
|
||
| <20>唳旿摨枏<E691A8> | ai_clinical_research | 憿寧𤌍<E5AFA7>唳旿摨?|
|
||
|
||
**Schema靽⊥<E99DBD>嚗?*
|
||
- **敶枏<E695B6>Schema嚗?* `public`嚗<EFBFBD><EFBFBD><EFBFBD>?3銝芾”嚗?- **霈∪<E99C88>Schema嚗?* 10銝芷<E98A9D>蝳艋chema嚗Áeek 1摰墧鴌嚗? - platform_schema
|
||
- common_schema
|
||
- asl_schema
|
||
- aia_schema
|
||
- pkb_schema
|
||
- dc_schema
|
||
- rvw_schema
|
||
- admin_schema
|
||
- ssa_schema
|
||
- st_schema
|
||
|
||
---
|
||
|
||
## <20><> LLM API<50>滨蔭
|
||
|
||
### 1. DeepSeek API
|
||
|
||
**<EFBFBD>券<EFBFBD>䈑<EFBFBD>** 銝餃<E98A9D>憭扳芋<E689B3>页<EFBFBD><E9A1B5>函<EFBFBD><E587BD><EFBFBD>笆霂腈<E99C82><E88588>鸌憭<E9B88C><E686AD>嚗?
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
DEEPSEEK_API_KEY=sk-your-deepseek-key
|
||
```
|
||
|
||
**<EFBFBD>瑕<EFBFBD><EFBFBD>孵<EFBFBD>嚗?*
|
||
1. 霈輸䔮嚗冴ttps://platform.deepseek.com
|
||
2. 瘜典<E7989C>/<2F>餃<EFBFBD>韐血噡
|
||
3. 餈𥕦<E9A488>API Keys憿菟𢒰
|
||
4. <20>𥕦遣<F0A595A6>啁<EFBFBD>API Key
|
||
|
||
**雿輻鍂<E8BCBB>箸艶嚗?*
|
||
- AI<41>箄<EFBFBD><E7AE84>桃<EFBFBD>嚗<EFBFBD><E59A97>厰<EFBFBD>霂<EFBFBD>遠<EFBFBD><E981A0>ICO璇喟<E79287>蝑㚁<E89D91>
|
||
- <20>孵<EFBFBD><E5ADB5><EFBFBD>遙<EFBFBD>?- <20><><EFBFBD><EFBFBD>䁅<EFBFBD><E48185>萘<EFBFBD>
|
||
- <20>冽<EFBFBD>憭滨<E686AD>
|
||
|
||
**摰帋遠嚗?*
|
||
- DeepSeek-V3: 瞼1/M tokens嚗<73><E59A97><EFBFBD>伐<EFBFBD>嚗𡐿?/M tokens嚗<73><E59A97><EFBFBD>綽<EFBFBD>
|
||
|
||
---
|
||
|
||
### 2. <20>帋<EFBFBD><E5B88B><EFBFBD>䔮嚗㇋wen嚗𡅅PI
|
||
|
||
**<EFBFBD>券<EFBFBD>䈑<EFBFBD>** 憭<>鍂璅∪<E79285><E288AA><EFBFBD>鸌摰𡁜㦤<F0A1819C>臭<EFBFBD><E887AD>?
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
DASHSCOPE_API_KEY=sk-your-qwen-key
|
||
```
|
||
|
||
**<EFBFBD>瑕<EFBFBD><EFBFBD>孵<EFBFBD>嚗?*
|
||
1. 霈輸䔮嚗冴ttps://dashscope.console.aliyun.com
|
||
2. 撘<><E69298>鋽ashScope<70>滚𦛚
|
||
3. <20>𥕦遣API Key
|
||
|
||
**雿輻鍂<E8BCBB>箸艶嚗?*
|
||
- <20>踵<EFBFBD><E8B8B5>砍<EFBFBD><E7A08D><EFBFBD><EFBFBD>Qwen-Long嚗?- <20>孵<EFBFBD>憸<EFBFBD><E686B8>隞餃𦛚
|
||
- 璅∪<E79285>撖寞<E69296>蝑偦<E89D91>?
|
||
**摰帋遠嚗?*
|
||
- Qwen-Max: 瞼0.04/1K tokens
|
||
- Qwen-Long: 瞼0.005/1K tokens
|
||
|
||
---
|
||
|
||
### 3. CloseAI<41>滨蔭嚗<E894AD>誨<EFBFBD><E8AAA8>penAI<41>龦laude嚗争<E59A97>潃鐥<E6BD83>
|
||
|
||
**<EFBFBD>券<EFBFBD>䈑<EFBFBD>** <20>朞<EFBFBD>隞<EFBFBD><E99A9E>撟喳蝱蝔喳<E89D94>霈輸䔮OpenAI<41>龦laude API
|
||
|
||
**銝箔<E98A9D>銋<EFBFBD>蝙<EFBFBD>每loseAI嚗?*
|
||
- <20>?<3F>賢<EFBFBD>蝔喳<E89D94>霈輸䔮嚗峕<E59A97><E5B395><EFBFBD>蝘穃郎銝羓<E98A9D>
|
||
- <20>?銝<>銝芾揭<E88ABE>瑕<EFBFBD><E79195>嗡蝙<E597A1>汰penAI<41>龦laude
|
||
- <20>?<3F>澆捆OpenAI SDK<44><4B><EFBFBD><EFBFBD>亙藁
|
||
- <20>?<3F><><EFBFBD>唳芋<E594B3>𧢲𣈲<F0A7A2B2><F0A388B2><EFBFBD>GPT-5-Pro<72><6F>laude-Sonnet-4.5
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
# CloseAI蝏煺<E89D8F>API Key
|
||
CLOSEAI_API_KEY=sk-cu0iepbXYGGx2jc7BqP6ogtSWmP6fk918qV3RUdtGC3Edlpo
|
||
|
||
# OpenAI蝡舐<E89DA1>嚗<EFBFBD><E59A97>朞<EFBFBD>CloseAI隞<49><E99A9E>嚗?CLOSEAI_OPENAI_BASE_URL=https://api.openai-proxy.org/v1
|
||
|
||
# Claude蝡舐<E89DA1>嚗<EFBFBD><E59A97>朞<EFBFBD>CloseAI隞<49><E99A9E>嚗?CLOSEAI_CLAUDE_BASE_URL=https://api.openai-proxy.org/anthropic
|
||
```
|
||
|
||
**<EFBFBD>舀<EFBFBD><EFBFBD><EFBFBD>芋<EFBFBD>页<EFBFBD>**
|
||
|
||
| 璅∪<E79285>蝟餃<E89D9F> | <20><><EFBFBD>唳芋<E594B3>?| 霂湔<E99C82> |
|
||
|---------|---------|------|
|
||
| **OpenAI** | `gpt-5-pro` | <20><><EFBFBD>蚣PT-5璅∪<E79285> 潃?|
|
||
| OpenAI | `gpt-4-turbo-preview` | GPT-4擃䀹<E69383>扯<EFBFBD><E689AF><EFBFBD>𧋦 |
|
||
| OpenAI | `gpt-3.5-turbo` | 敹恍<E695B9>毺<EFBFBD>瘚𡒊<E7989A><F0A1928A>?|
|
||
| **Claude** | `claude-sonnet-4-5-20250929` | <20><><EFBFBD>蚓laude-4.5 潃?|
|
||
| Claude | `claude-3-5-sonnet-20241022` | Claude-3.5蝔喳<EFBFBD><EFBFBD>?|
|
||
| Claude | `claude-3-opus-20240229` | Claude-3<><33>撘箇<E69298><E7AE87>?|
|
||
|
||
**<EFBFBD>瑕<EFBFBD><EFBFBD>孵<EFBFBD>嚗?*
|
||
1. 霈輸䔮嚗冴ttps://platform.openai-proxy.org
|
||
2. 瘜典<E7989C>韐血噡撟嗅<E6929F><E59785>?3. <20>冽綉<E586BD>嗅蝱<E59785>瑕<EFBFBD>API Key
|
||
4. 銝<>銝服PI Key<65>臬<EFBFBD><E887AC>嗉<EFBFBD><E59789>汰penAI<41>龦laude
|
||
|
||
**隞<><E99A9E>蝷箔<E89DB7>嚗㇍ypeScript嚗㚁<E59A97>**
|
||
```typescript
|
||
import OpenAI from 'openai';
|
||
|
||
// OpenAI (<28>朞<EFBFBD>CloseAI)
|
||
const openaiClient = new OpenAI({
|
||
apiKey: process.env.CLOSEAI_API_KEY,
|
||
baseURL: 'https://api.openai-proxy.org/v1',
|
||
});
|
||
|
||
const gptResponse = await openaiClient.chat.completions.create({
|
||
model: 'gpt-5-pro',
|
||
messages: [{ role: 'user', content: '雿惩末' }],
|
||
});
|
||
|
||
// Claude (<28>朞<EFBFBD>CloseAI)
|
||
const claudeClient = new OpenAI({
|
||
apiKey: process.env.CLOSEAI_API_KEY,
|
||
baseURL: 'https://api.openai-proxy.org/anthropic',
|
||
});
|
||
|
||
const claudeResponse = await claudeClient.chat.completions.create({
|
||
model: 'claude-sonnet-4-5-20250929',
|
||
messages: [{ role: 'user', content: '雿惩末' }],
|
||
});
|
||
```
|
||
|
||
**雿輻鍂<E8BCBB>箸艶嚗㇁I<E38781>箄<EFBFBD><E7AE84><EFBFBD>讃 潃琜<E6BD83>嚗?*
|
||
- **GPT-5-Pro嚗?* <20><>讃蝎曉<E89D8E>蝑偦<E89D91>剹<EFBFBD><E589B9>捶<EFBFBD>𤩺綉<F0A4A9BA>?- **Claude-4.5嚗?* 蝚砌<E89D9A><E7A08C>嫣輔鋆<E8BC94><E98B86><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>颲枏枂
|
||
- **<2A>峕芋<E5B395>见笆瘥䈑<E798A5>** DeepSeek + GPT-5-Pro 敹恍<E695B9>?擃䁅捶<E48185>?- **銝㗇芋<E39787>见<EFBFBD>霂<EFBFBD><E99C82>** <20>脩<EFBFBD><E884A9>嗅鍳<E59785>每laude隞脰<E99A9E>
|
||
|
||
**摰帋遠嚗<E981A0><E59A97><EFBFBD><EFBFBD><EFBFBD>嚗?*
|
||
- GPT-5-Pro: ~瞼0.10/1K tokens嚗<73><E59A97><EFBFBD>伐<EFBFBD>嚗斋瞼0.20/1K tokens嚗<73><E59A97><EFBFBD>綽<EFBFBD>
|
||
- Claude-4.5-Sonnet: ~瞼0.021/1K tokens嚗<73><E59A97><EFBFBD>伐<EFBFBD>嚗斋瞼0.105/1K tokens嚗<73><E59A97><EFBFBD>綽<EFBFBD>
|
||
|
||
**瘜冽<E7989C>鈭钅★嚗?*
|
||
- <20>𩤃<EFBFBD> API Key<65><79>鉄<EFBFBD>𤩺<EFBFBD>靽⊥<E99DBD>嚗䔶<E59A97>閬<EFBFBD><E996AC>鈭文<E988AD>Git
|
||
- <20>𩤃<EFBFBD> 撱箄悅摰𡁏<E691B0><F0A1818F>湔揢API Key
|
||
- <20>𩤃<EFBFBD> <20>煺漣<E785BA>臬<EFBFBD>雿輻鍂<E8BCBB>祉<EFBFBD><E7A589><EFBFBD>PI Key
|
||
|
||
---
|
||
|
||
## <20>圲 Dify<66>滨蔭嚗㇌AG撘閙<E69298>嚗?
|
||
**<2A>券<EFBFBD>䈑<EFBFBD>** <20>亥<EFBFBD>摨枏<E691A8><E69E8F>𤩺<EFBFBD>蝝U<E89D9D><EFBCB5>AG<41>桃<EFBFBD>
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
DIFY_API_KEY=app-your-dify-key
|
||
DIFY_API_URL=http://localhost/v1
|
||
```
|
||
|
||
**<EFBFBD>函蔡靽⊥<EFBFBD>嚗?*
|
||
- **<2A>砍𧑐<E7A08D>函蔡嚗?* Docker Compose
|
||
- **霈輸䔮<E8BCB8>啣<EFBFBD>嚗?* http://localhost
|
||
- **蝞∠<E89D9E><E288A0>𤾸蝱嚗?* http://localhost/install
|
||
- **<2A>煾<EFBFBD><E785BE>唳旿摨橒<E691A8>** Qdrant嚗<74><E59A97>蝵殷<E89DB5>
|
||
|
||
**<EFBFBD>瑕<EFBFBD>API Key嚗?*
|
||
1. 霈輸䔮 Dify 蝞∠<E89D9E><E288A0>𤾸蝱
|
||
2. 餈𥕦<E9A488>"摨𠉛鍂"憿菟𢒰
|
||
3. <20>𥕦遣"<22>亥<EFBFBD>摨枏<E691A8><E69E8F>?
|
||
4. 憭滚<E686AD>API Key
|
||
|
||
**雿輻鍂<E8BCBB>箸艶嚗?*
|
||
- 銝芯犖<E88AAF>亥<EFBFBD>摨𤘪<E691A8>獢<EFBFBD><E78DA2>隡?- @<40>亥<EFBFBD>摨㯄䔮蝑?- <20>箄<EFBFBD>撘閧鍂<E996A7>蠘<EFBFBD>
|
||
|
||
---
|
||
|
||
## <20><> 摰匧<E691B0><E58CA7>滨蔭
|
||
|
||
### JWT撖<54>𤨎
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
JWT_SECRET=your-secret-key-change-in-production
|
||
JWT_EXPIRES_IN=7d
|
||
```
|
||
|
||
**霂湔<E99C82>嚗?*
|
||
- <20>其<EFBFBD><E585B6>冽<EFBFBD>霈方<E99C88>Token蝑曉<E89D91>
|
||
- 撱箄悅雿輻鍂32雿滢誑銝𢠃<E98A9D><F0A2A083>箏<EFBFBD>蝚虫葡
|
||
- 餈<><E9A488><EFBFBD>園𡢿嚗?憭?
|
||
**<2A><><EFBFBD>撘箏<E69298><E7AE8F>伐<EFBFBD><E4BC90>舫<EFBFBD>㚁<EFBFBD>嚗?*
|
||
```bash
|
||
# Node.js<6A><73><EFBFBD>
|
||
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
||
|
||
# OpenSSL<53><4C><EFBFBD>
|
||
openssl rand -hex 32
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> <20>滚𦛚<E6BB9A>滨蔭
|
||
|
||
### <20>𡒊垢<F0A1928A>滚𦛚
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
PORT=3001
|
||
HOST=0.0.0.0
|
||
NODE_ENV=development
|
||
LOG_LEVEL=info
|
||
```
|
||
|
||
**霂湔<E99C82>嚗?*
|
||
| <20><>㺭 | <20>?| 霂湔<E99C82> |
|
||
|------|-----|------|
|
||
| PORT | 3001 | <20>𡒊垢<F0A1928A>滚𦛚蝡臬藁 |
|
||
| HOST | 0.0.0.0 | <20>穃𨯬<E7A983><F0A8AFAC><EFBFBD>厩<EFBFBD><E58EA9>?|
|
||
| NODE_ENV | development | 撘<><E69298>𤑳㴓憓?|
|
||
| LOG_LEVEL | info | <20>亙<EFBFBD>蝥批<E89DA5> |
|
||
|
||
---
|
||
|
||
### CORS<52>滨蔭
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
CORS_ORIGIN=http://localhost:5173
|
||
```
|
||
|
||
**霂湔<E99C82>嚗?*
|
||
- <20><>捂<EFBFBD>滨垢頝典<E9A09D>霈輸䔮
|
||
- <20>滨垢撘<E59EA2><E69298>烐<EFBFBD><E78390>∪膥嚗冴ttp://localhost:5173
|
||
|
||
---
|
||
|
||
### Redis<69>滨蔭嚗<E894AD>虾<EFBFBD>㚁<EFBFBD>
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
REDIS_URL=redis://localhost:6379
|
||
```
|
||
|
||
**霂湔<E99C82>嚗?*
|
||
- <20>其<EFBFBD>蝻枏<E89DBB><E69E8F>䔶<EFBFBD>霂萘恣<E89098>?- 敶枏<E695B6><E69E8F>芸撩<E88AB8>嗉<EFBFBD>瘙?
|
||
---
|
||
|
||
## <20><> <20><>辣銝𠹺<E98A9D><F0A0B9BA>滨蔭
|
||
|
||
**<EFBFBD>滨蔭嚗?*
|
||
```env
|
||
UPLOAD_MAX_SIZE=10485760
|
||
UPLOAD_DIR=./uploads
|
||
```
|
||
|
||
**霂湔<E99C82>嚗?*
|
||
| <20><>㺭 | <20>?| 霂湔<E99C82> |
|
||
|------|-----|------|
|
||
| UPLOAD_MAX_SIZE | 10485760 | 10MB嚗<42><E59A97><EFBFBD><EFBFBD><EFBFBD> |
|
||
| UPLOAD_DIR | ./uploads | 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>辣摮睃<E691AE><E79D83>桀<EFBFBD> |
|
||
|
||
---
|
||
|
||
## <20><> <20>滨蔭甇仿炊
|
||
|
||
### 1. 璉<><E79289>亦㴓憓<E3B493><E68693><EFBFBD>𤩺<EFBFBD>隞?
|
||
**雿滨蔭嚗?* `backend/.env`
|
||
|
||
憒<EFBFBD><EFBFBD><EFBFBD><EFBFBD>辣銝滚<EFBFBD><EFBFBD>剁<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>誑銝𧢲芋<EFBFBD>踹<EFBFBD>撱綽<EFBFBD>
|
||
|
||
```env
|
||
# ==================== <20>滚𦛚<E6BB9A>券<EFBFBD>蝵?====================
|
||
PORT=3001
|
||
HOST=0.0.0.0
|
||
NODE_ENV=development
|
||
LOG_LEVEL=info
|
||
|
||
# ==================== <20>唳旿摨㯄<E691A8>蝵?====================
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research
|
||
|
||
# ==================== Redis<69>滨蔭 ====================
|
||
REDIS_URL=redis://localhost:6379
|
||
|
||
# ==================== JWT<57>滨蔭 ====================
|
||
JWT_SECRET=your-secret-key-change-in-production
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# ==================== LLM API<50>滨蔭 ====================
|
||
# DeepSeek
|
||
DEEPSEEK_API_KEY=sk-your-deepseek-key
|
||
|
||
# <20>帋<EFBFBD><E5B88B><EFBFBD>䔮嚗<E494AE>燵<EFBFBD>䔶<EFBFBD>DashScope嚗?DASHSCOPE_API_KEY=sk-your-qwen-key
|
||
|
||
# Gemini嚗<69>虾<EFBFBD>㚁<EFBFBD>
|
||
GEMINI_API_KEY=your-gemini-key
|
||
|
||
# ==================== Dify<66>滨蔭 ====================
|
||
DIFY_API_KEY=app-your-dify-key
|
||
DIFY_API_URL=http://localhost/v1
|
||
|
||
# ==================== <20><>辣銝𠹺<E98A9D><F0A0B9BA>滨蔭 ====================
|
||
UPLOAD_MAX_SIZE=10485760
|
||
UPLOAD_DIR=./uploads
|
||
|
||
# ==================== CORS<52>滨蔭 ====================
|
||
CORS_ORIGIN=http://localhost:5173
|
||
```
|
||
|
||
---
|
||
|
||
### 2. 撉諹<E69289><E8ABB9>滨蔭
|
||
|
||
**<EFBFBD>臬𢆡<EFBFBD>𡒊垢<EFBFBD>滚𦛚嚗?*
|
||
```bash
|
||
cd backend
|
||
npm run dev
|
||
```
|
||
|
||
**璉<><E79289>亙鍳<E4BA99>冽𠯫敹梹<E695B9>**
|
||
```
|
||
<EFBFBD>?Prisma schema loaded
|
||
<EFBFBD>?Environment variables loaded from .env
|
||
<EFBFBD>?Datasource "db": PostgreSQL database "ai_clinical_research"
|
||
<EFBFBD>?Server running on http://0.0.0.0:3001
|
||
```
|
||
|
||
**撉諹<E69289><E8ABB9>唳旿摨栞<E691A8><E6A09E>伐<EFBFBD>**
|
||
```bash
|
||
cd backend
|
||
npx prisma migrate status
|
||
```
|
||
|
||
**憸<><E686B8>颲枏枂嚗?*
|
||
```
|
||
Environment variables loaded from .env
|
||
Datasource "db": PostgreSQL database "ai_clinical_research", schema "public" at "localhost:5432"
|
||
Database schema is up to date!
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 撣貉<E692A3><E8B289>桅<EFBFBD><E6A185>埝䰻
|
||
|
||
#### <20>桅<EFBFBD>1嚗𡁏㺭<F0A1818F>桀<EFBFBD>餈墧𦻖憭梯揖
|
||
|
||
**<EFBFBD>躰秤靽⊥<EFBFBD>嚗?*
|
||
```
|
||
Error: Can't reach database server at localhost:5432
|
||
```
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
1. 璉<><E79289>仙ostgreSQL<51>臬炏<E887AC>臬𢆡
|
||
2. 撉諹<E69289>蝡臬藁5432<33>臬炏鋡怠<E98BA1><E680A0>?3. 蝖株恕<E6A0AA>冽<EFBFBD><E586BD>滚<EFBFBD><E6BB9A><EFBFBD>糓<EFBFBD>行迤蝖?
|
||
**璉<><E79289>仙ostgreSQL<51>嗆<EFBFBD><E59786><EFBFBD>Windows嚗㚁<E59A97>**
|
||
```bash
|
||
# <20>亦<EFBFBD><E4BAA6>滚𦛚<E6BB9A>嗆<EFBFBD>?Get-Service postgresql*
|
||
|
||
# <20>臬𢆡<E887AC>滚𦛚
|
||
Start-Service postgresql-x64-15
|
||
```
|
||
|
||
---
|
||
|
||
#### <20>桅<EFBFBD>2嚗匁LM API靚<49>鍂憭梯揖
|
||
|
||
**<EFBFBD>躰秤靽⊥<EFBFBD>嚗?*
|
||
```
|
||
Error: Invalid API key
|
||
```
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
1. 璉<><E79289>丕PI Key<65>臬炏甇<E7828F>&憭滚<E686AD>
|
||
2. 蝖株恕API Key<65>臬炏撌脫<E6928C>瘣?3. 璉<><E79289>亥揭<E4BAA5>瑚<EFBFBD>憸脲糓<E884B2>血<EFBFBD>頞?
|
||
---
|
||
|
||
#### <20>桅<EFBFBD>3嚗鋽ify餈墧𦻖憭梯揖
|
||
|
||
**<EFBFBD>躰秤靽⊥<EFBFBD>嚗?*
|
||
```
|
||
Error: connect ECONNREFUSED 127.0.0.1:80
|
||
```
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
1. 璉<><E79289>主ify<66>臬炏<E887AC>臬𢆡嚗䫤docker-compose ps`
|
||
2. <20>臬𢆡Dify嚗䫤docker-compose up -d`
|
||
3. 撉諹<E69289>霈輸䔮嚗𡁏<E59A97>閫<EFBFBD>膥<EFBFBD>枏<EFBFBD> http://localhost
|
||
|
||
---
|
||
|
||
## <20><> 撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌<E69AB9>滨蔭嚗?025-11-16 <20>啣<EFBFBD>嚗?
|
||
> **潃?<3F>滩<EFBFBD><E6BBA9>湔鰵**嚗帋蛹<E5B88B>舀<EFBFBD>鈭穃<E988AD><E7A983>罸<EFBFBD>蝵莎<E89DB5><E88E8E>啣<EFBFBD>撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌<E69AB9>臬<EFBFBD><E887AC>㗛<EFBFBD>
|
||
> **霂衣<E99C82><E8A1A3><EFBFBD>﹝**嚗靀撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌閫<E9B48C><E996AB>](../09-<2D>嗆<EFBFBD>摰墧鴌/04-撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌閫<E9B48C><E996AB>.md)
|
||
|
||
---
|
||
|
||
### 1. 摮睃<E691AE><E79D83>滚𦛚<E6BB9A>滨蔭
|
||
|
||
#### **<2A>砍𧑐撘<F0A79190><E69298>𤑳㴓憓?*
|
||
|
||
```bash
|
||
# backend/.env.development
|
||
STORAGE_TYPE=local
|
||
BASE_URL=http://localhost:3001
|
||
```
|
||
|
||
#### **<2A>煺漣<E785BA>臬<EFBFBD>嚗<EFBFBD>燵<EFBFBD>䔶<EFBFBD>OSS嚗?*
|
||
|
||
```bash
|
||
# SAE<41>批<EFBFBD><E689B9>?-> <20>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭
|
||
STORAGE_TYPE=oss
|
||
OSS_REGION=oss-cn-hangzhou
|
||
OSS_BUCKET=aiclinical-prod
|
||
OSS_ACCESS_KEY_ID=LTAI5t***
|
||
OSS_ACCESS_KEY_SECRET=***
|
||
OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com
|
||
```
|
||
|
||
#### **<2A>滨蔭霂湔<E99C82>**
|
||
|
||
| <20>㗛<EFBFBD><E3979B>?| 敹<><E695B9> | 暺䁅恕<E48185>?| 霂湔<E99C82> |
|
||
|--------|------|--------|------|
|
||
| `STORAGE_TYPE` | <20>?| `local` | 摮睃<E691AE>蝐餃<E89D90>嚗䫤local` <20>?`oss` |
|
||
| `BASE_URL` | <20>砍𧑐 | `http://localhost:3001` | <20>砍𧑐摮睃<E691AE>霈輸䔮URL |
|
||
| `OSS_REGION` | <20>煺漣 | - | OSS<53>箏<EFBFBD>嚗<EFBFBD><E59A97>嚗駅ss-cn-hangzhou嚗?|
|
||
| `OSS_BUCKET` | <20>煺漣 | - | OSS Bucket<65>滨妍 |
|
||
| `OSS_ACCESS_KEY_ID` | <20>煺漣 | - | <20>輸<EFBFBD>鈭飊ccessKey ID |
|
||
| `OSS_ACCESS_KEY_SECRET` | <20>煺漣 | - | <20>輸<EFBFBD>鈭飊ccessKey Secret |
|
||
|
||
---
|
||
|
||
### 2. 蝻枏<E89DBB><E69E8F>滚𦛚<E6BB9A>滨蔭
|
||
|
||
#### **<2A>砍𧑐撘<F0A79190><E69298>𤑳㴓憓?*
|
||
|
||
```bash
|
||
# backend/.env.development
|
||
CACHE_TYPE=memory
|
||
```
|
||
|
||
#### **<2A>煺漣<E785BA>臬<EFBFBD>嚗<EFBFBD>燵<EFBFBD>䔶<EFBFBD>Redis嚗?*
|
||
|
||
```bash
|
||
# SAE<41>批<EFBFBD><E689B9>?-> <20>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭
|
||
CACHE_TYPE=redis
|
||
REDIS_HOST=r-***.redis.aliyuncs.com
|
||
REDIS_PORT=6379
|
||
REDIS_PASSWORD=***
|
||
REDIS_DB=0
|
||
```
|
||
|
||
#### **<2A>滨蔭霂湔<E99C82>**
|
||
|
||
| <20>㗛<EFBFBD><E3979B>?| 敹<><E695B9> | 暺䁅恕<E48185>?| 霂湔<E99C82> |
|
||
|--------|------|--------|------|
|
||
| `CACHE_TYPE` | <20>?| `memory` | 蝻枏<E89DBB>蝐餃<E89D90>嚗䫤memory` <20>?`redis` |
|
||
| `REDIS_HOST` | Redis | - | Redis銝餅㦤<E9A485>啣<EFBFBD> |
|
||
| `REDIS_PORT` | Redis | `6379` | Redis蝡臬藁 |
|
||
| `REDIS_PASSWORD` | Redis | - | Redis撖<73><E69296> |
|
||
| `REDIS_DB` | Redis | `0` | Redis<69>唳旿摨梶<E691A8><E6A2B6>?|
|
||
|
||
---
|
||
|
||
### 3. <20>唳旿摨栞<E691A8><E6A09E>交<EFBFBD><E4BAA4>滨蔭
|
||
|
||
#### **<2A>砍𧑐撘<F0A79190><E69298>𤑳㴓憓?*
|
||
|
||
```bash
|
||
# backend/.env.development
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research
|
||
|
||
# <20>砍𧑐撘<F0A79190><E69298>烐<EFBFBD><E78390><EFBFBD><EFBFBD>滨蔭餈墧𦻖瘙?```
|
||
|
||
#### **<2A>煺漣<E785BA>臬<EFBFBD>嚗<EFBFBD>燵<EFBFBD>䔶<EFBFBD>RDS嚗?*
|
||
|
||
```bash
|
||
# SAE<41>批<EFBFBD><E689B9>?-> <20>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭
|
||
DATABASE_URL=postgresql://user:password@rm-xxx.aliyuncs.com:5432/prod_db
|
||
DB_MAX_CONNECTIONS=400 # RDS<44><53>憭扯<E686AD><E689AF>交㺭
|
||
MAX_INSTANCES=20 # SAE<41><45>憭批<E686AD>靘𧢲㺭
|
||
```
|
||
|
||
#### **<2A>滨蔭霂湔<E99C82>**
|
||
|
||
| <20>㗛<EFBFBD><E3979B>?| 敹<><E695B9> | 暺䁅恕<E48185>?| 霂湔<E99C82> |
|
||
|--------|------|--------|------|
|
||
| `DATABASE_URL` | <20>?| - | PostgreSQL餈墧𦻖摮㛖泵銝?|
|
||
| `DB_MAX_CONNECTIONS` | <20>煺漣 | `400` | RDS<44><53>憭扯<E686AD><E689AF>交㺭 |
|
||
| `MAX_INSTANCES` | <20>煺漣 | `20` | SAE<41><45>憭批<E686AD>靘𧢲㺭 |
|
||
|
||
**餈墧𦻖<E5A2A7>啗恣蝞?*嚗?```
|
||
瘥誩<EFBFBD>靘贝<EFBFBD><EFBFBD>交㺭 = DB_MAX_CONNECTIONS / MAX_INSTANCES
|
||
蝷箔<EFBFBD>嚗?00 / 20 = 20餈墧𦻖/摰硺<E691B0>
|
||
```
|
||
|
||
---
|
||
|
||
### 4. <20>亙<EFBFBD><E4BA99>滨蔭
|
||
|
||
```bash
|
||
# <20>𡁶鍂<F0A181B6>滨蔭
|
||
LOG_LEVEL=info # debug | info | warn | error
|
||
NODE_ENV=development # development | production | test
|
||
```
|
||
|
||
#### **<2A>滨蔭霂湔<E99C82>**
|
||
|
||
| <20>㗛<EFBFBD><E3979B>?| 敹<><E695B9> | 暺䁅恕<E48185>?| 霂湔<E99C82> |
|
||
|--------|------|--------|------|
|
||
| `LOG_LEVEL` | <20>?| `info` | <20>亙<EFBFBD>蝥批<E89DA5> |
|
||
| `NODE_ENV` | <20>?| `development` | 餈鞱<E9A488><E99EB1>臬<EFBFBD> |
|
||
|
||
---
|
||
|
||
### 5. <20>蠘<EFBFBD>撘<EFBFBD><E69298>喲<EFBFBD>蝵?
|
||
```bash
|
||
# <20>舐鍂<E88890><E98D82><EFBFBD><EFBFBD>⊥芋<E28AA5>梹<EFBFBD><E6A2B9>堒噡<E5A092><E599A1><EFBFBD>嚗?ENABLED_MODULES=ASL,AIA,PKB,DC,SSA,ST
|
||
|
||
# <20>硋鍳<E7A18B>典<EFBFBD><E585B8>?ENABLED_MODULES=*
|
||
```
|
||
|
||
#### **<2A>滨蔭霂湔<E99C82>**
|
||
|
||
| 璅∪<E79285>隞<EFBFBD><E99A9E> | 璅∪<E79285><E288AA>滨妍 | <20>嗆<EFBFBD>?|
|
||
|---------|---------|------|
|
||
| `ASL` | AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃 | 撘<><E69298>睲葉 |
|
||
| `AIA` | AI<41>箄<EFBFBD><E7AE84>桃<EFBFBD> | 撌脣<E6928C><E884A3>?|
|
||
| `PKB` | 銝芯犖<E88AAF>亥<EFBFBD>摨?| 撌脣<E6928C><E884A3>?|
|
||
| `DC` | <20>唳旿皜<E697BF><E79A9C> | 霈∪<E99C88>銝?|
|
||
| `SSA` | <20>箄<EFBFBD>蝏蠘恣<E8A098><E681A3><EFBFBD> | 霈∪<E99C88>銝?|
|
||
| `ST` | 蝏蠘恣撌亙<E6928C> | 霈∪<E99C88>銝?|
|
||
|
||
---
|
||
|
||
### 6. 摨𠉛鍂<F0A0899B>滨蔭
|
||
|
||
```bash
|
||
# 摨𠉛鍂<F0A0899B>箇<EFBFBD><E7AE87>滨蔭
|
||
PORT=3001 # 摨𠉛鍂蝡臬藁
|
||
BASE_URL=http://localhost:3001
|
||
|
||
# JWT<57>滨蔭
|
||
JWT_SECRET=your-secret-key-here
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# CORS<52>滨蔭
|
||
CORS_ORIGIN=http://localhost:5173
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> 摰峕㟲<E5B395>臬<EFBFBD><E887AC>㗛<EFBFBD>璅⊥踎
|
||
|
||
### **backend/.env.development嚗<74>𧋦<EFBFBD>啣<EFBFBD><E595A3>𡢅<EFBFBD>**
|
||
|
||
```bash
|
||
# ==================== 摨𠉛鍂<F0A0899B>滨蔭 ====================
|
||
NODE_ENV=development
|
||
PORT=3001
|
||
BASE_URL=http://localhost:3001
|
||
|
||
# ==================== <20>唳旿摨㯄<E691A8>蝵?====================
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research
|
||
|
||
# ==================== 摮睃<E691AE><E79D83>滚𦛚 ====================
|
||
STORAGE_TYPE=local
|
||
|
||
# ==================== 蝻枏<E89DBB><E69E8F>滚𦛚 ====================
|
||
CACHE_TYPE=memory
|
||
|
||
# ==================== <20>亙<EFBFBD><E4BA99>滨蔭 ====================
|
||
LOG_LEVEL=debug
|
||
|
||
# ==================== LLM<4C>滨蔭 ====================
|
||
DEEPSEEK_API_KEY=sk-***
|
||
QWEN_API_KEY=sk-***
|
||
|
||
# ==================== RAG<41>滨蔭 ====================
|
||
DIFY_API_BASE_URL=http://localhost/v1
|
||
DIFY_API_KEY=app-***
|
||
|
||
# ==================== JWT<57>滨蔭 ====================
|
||
JWT_SECRET=dev-secret-key-change-in-production
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# ==================== CORS<52>滨蔭 ====================
|
||
CORS_ORIGIN=http://localhost:5173
|
||
|
||
# ==================== <20>蠘<EFBFBD>撘<EFBFBD><E69298>?====================
|
||
ENABLED_MODULES=*
|
||
```
|
||
|
||
### **backend/.env.production嚗<6E><E59A97>鈭抒㴓憓<E3B493><E68693>**
|
||
|
||
```bash
|
||
# ==================== 摨𠉛鍂<F0A0899B>滨蔭 ====================
|
||
NODE_ENV=production
|
||
PORT=3001
|
||
|
||
# ==================== <20>唳旿摨㯄<E691A8>蝵?====================
|
||
DATABASE_URL=postgresql://user:password@rm-xxx.aliyuncs.com:5432/prod_db
|
||
DB_MAX_CONNECTIONS=400
|
||
MAX_INSTANCES=20
|
||
|
||
# ==================== 摮睃<E691AE><E79D83>滚𦛚 ====================
|
||
STORAGE_TYPE=oss
|
||
OSS_REGION=oss-cn-hangzhou
|
||
OSS_BUCKET=aiclinical-prod
|
||
OSS_ACCESS_KEY_ID=LTAI5t***
|
||
OSS_ACCESS_KEY_SECRET=***
|
||
|
||
# ==================== 蝻枏<E89DBB><E69E8F>滚𦛚 ====================
|
||
CACHE_TYPE=redis
|
||
REDIS_HOST=r-***.redis.aliyuncs.com
|
||
REDIS_PORT=6379
|
||
REDIS_PASSWORD=***
|
||
REDIS_DB=0
|
||
|
||
# ==================== <20>亙<EFBFBD><E4BA99>滨蔭 ====================
|
||
LOG_LEVEL=info
|
||
|
||
# ==================== LLM<4C>滨蔭 ====================
|
||
DEEPSEEK_API_KEY=sk-***
|
||
QWEN_API_KEY=sk-***
|
||
|
||
# ==================== RAG<41>滨蔭 ====================
|
||
DIFY_API_BASE_URL=https://api.dify.ai/v1
|
||
DIFY_API_KEY=app-***
|
||
|
||
# ==================== JWT<57>滨蔭 ====================
|
||
JWT_SECRET=<<3C>煺漣<E785BA>臬<EFBFBD>撘箏<E69298><E7AE8F>?
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# ==================== CORS<52>滨蔭 ====================
|
||
CORS_ORIGIN=https://app.yourdomain.com
|
||
|
||
# ==================== <20>蠘<EFBFBD>撘<EFBFBD><E69298>?====================
|
||
ENABLED_MODULES=ASL,AIA,PKB,DC,SSA,ST
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> <20>滨蔭璉<E894AD><E79289>交<EFBFBD><E4BAA4>?
|
||
雿輻鍂隞乩<EFBFBD>皜<EFBFBD><EFBFBD>撉諹<EFBFBD><EFBFBD>滨蔭摰峕㟲<EFBFBD>改<EFBFBD>
|
||
|
||
### **<2A>箇<EFBFBD><E7AE87>滨蔭嚗<E894AD><E59A97><EFBFBD><EFBFBD>嚗?*
|
||
- [ ] <20>?<3F>唳旿摨栞<E691A8><E6A09E>交<EFBFBD><E4BAA4><EFBFBD><EFBFBD>`npx prisma migrate status`嚗?- [ ] <20>?摮睃<E691AE>蝐餃<E89D90>撌脤<E6928C>蝵殷<E89DB5>`STORAGE_TYPE`嚗?- [ ] <20>?<3F>亙<EFBFBD>蝥批<E89DA5>撌脤<E6928C>蝵殷<E89DB5>`LOG_LEVEL`嚗?- [ ] <20>?JWT撖<54>𤨎撌脤<E6928C>蝵?
|
||
### **LLM<4C>滨蔭嚗<E894AD><E59A97><EFBFBD><EFBFBD>嚗?*
|
||
- [ ] <20>?DeepSeek API Key<65>滨蔭銝𥪜虾<F0A5AA9C>?- [ ] <20>?Qwen API Key<65>滨蔭銝𥪜虾<F0A5AA9C>?- [ ] <20>?Dify<66>滚𦛚餈鞱<E9A488>銝哨<E98A9D>`docker-compose ps`嚗?- [ ] <20>?Dify API Key撌脤<E6928C>蝵?
|
||
### **撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌嚗<E9B48C><E59A97><EFBFBD>毺<EFBFBD>嚗?*
|
||
- [ ] <20>?摮睃<E691AE><E79D83>滚𦛚<E6BB9A>滨蔭甇<E894AD>&嚗<EFBC86>𧋦<EFBFBD>?OSS嚗?- [ ] <20>?蝻枏<E89DBB><E69E8F>滚𦛚<E6BB9A>滨蔭甇<E894AD>&嚗㇈emory/Redis嚗?- [ ] <20>?餈墧𦻖瘙惩<E79899><E683A9>啣歇<E595A3>滨蔭嚗<E894AD><E59A97>鈭抒㴓憓<E3B493><E68693>
|
||
- [ ] <20>?<3F>蠘<EFBFBD>撘<EFBFBD><E69298>喳歇<E596B3>滨蔭嚗𠄌NABLED_MODULES嚗?
|
||
### **摨𠉛鍂餈鞱<E9A488>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?*
|
||
- [ ] <20>?<3F>𡒊垢<F0A1928A>滚𦛚<E6BB9A>臬𢆡<E887AC>𣂼<EFBFBD>嚗<EFBFBD>垢<EFBFBD>?001嚗?- [ ] <20>?<3F>滨垢<E6BBA8>滚𦛚<E6BB9A>臬𢆡<E887AC>𣂼<EFBFBD>嚗<EFBFBD>垢<EFBFBD>?173嚗?- [ ] <20>?CORS<52>滨蔭甇<E894AD>&嚗<EFBC86><E59A97>蝡臬虾霈輸䔮<E8BCB8>𡒊垢API嚗?- [ ] <20>?<3F>舀迤撣訾蝙<E8A8BE>典像<E585B8>唳<EFBFBD><E594B3>∴<EFBFBD>storage/logger/cache蝑㚁<E89D91>
|
||
|
||
---
|
||
|
||
## <20><> <20>滨蔭<E6BBA8>湔鰵霈啣<E99C88>
|
||
|
||
| <20>交<EFBFBD> | <20>湔鰵<E6B994><E9B0B5>捆 | <20>湔鰵鈭?|
|
||
|------|---------|--------|
|
||
| 2025-11-09 | <20>嘥<EFBFBD><E598A5>滨蔭<E6BBA8><E894AD>﹝<EFBFBD>𥕦遣 | <20><><EFBFBD>臬𣪧<E887AC>?|
|
||
| 2025-11-16 | <20>啣<EFBFBD>撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌<E69AB9>滨蔭蝡㰘<E89DA1> | <20><><EFBFBD>臬𣪧<E887AC>?|
|
||
|
||
---
|
||
|
||
## <20><> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝
|
||
|
||
- [<5B>唳旿摨栞<E691A8><E6A09E>仿<EFBFBD>蝵孫(../09-<2D>嗆<EFBFBD>摰墧鴌/02-<2D>唳旿摨栞<E691A8><E6A09E>仿<EFBFBD>蝵?md)
|
||
- [<EFBFBD>函蔡<EFBFBD>嗆<EFBFBD>霈曇恣](../05-<2D>函蔡<E587BD><E894A1>﹝/01-<2D>函蔡<E587BD>嗆<EFBFBD>霈曇恣.md)
|
||
- [蝟餌<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD>餉<EFBFBD>](../00-憿寧𤌍璁<F0A48C8D>膩/<2F><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>餉<EFBFBD>.md)
|
||
|
||
---
|
||
|
||
**<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗?* v1.0
|
||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD>** 2025-11-09
|
||
**蝏湔擪<E6B994><E693AA><EFBFBD>** <20><><EFBFBD>臬𣪧<E887AC>?
|