Files
AIclinicalresearch/docs/00-系统总体设计/03-数据库架构说明.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

460 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# <20>唳旿摨𤘪沲<F0A498AA><E6B2B2><EFBFBD>?
> **<2A>𥕦遣<F0A595A6><EFBFBD>嚗?* 2025-11-06
> **<2A><><EFBFBD><EFBFBD>嚗?* 瞉<><E79E89><EFBFBD>唳旿摨㯄<E691A8>蝵脫䲮撘誩<E69298><E8AAA9><EFBFBD>
---
## <20><> <20><EFBFBD><EFBFBD><E79E89>
### <20>?<3F><EFBFBD><E586BD>芸楛<E88AB8><EFBFBD><E7A589><EFBFBD>ostgreSQL<51>唳旿摨橒<E691A8>
**<EFBFBD>喲睸鈭见<EFBFBD>嚗?*
1. <20>?PostgreSQL<51><EFBFBD><EFBFBD>Docker<65>函蔡<E587BD><E894A1><EFBFBD>`docker-compose.yml`嚗?
2. <20>?餈蹱糓<E8B9B1>券★<E588B8><EFBFBD><E6A183><EFBFBD><E7A589>唳旿摨橒<E691A8>銝齿糓Dify<66>?
3. <20>?Dify<66>㕑䌊撌勗<E6928C><E58B97>函𡠺蝡讠<E89DA1><E8AEA0>唳旿摨橒<E691A8><E6A992>灼dify/docker/`<60><EFBFBD>銝页<E98A9D>
4. <20>?<3F><EFBFBD><E585B6><EFBFBD><EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>ostgreSQL嚗㷉ocker隡朞䌊<E69C9E><EFBFBD>撱?
---
## <20>閦 Docker<65>函蔡霂行<E99C82>
### docker-compose.yml<6D>滨蔭
```yaml
# 雿滨蔭嚗鋫Iclinicalresearch/docker-compose.yml
services:
# PostgreSQL <20>唳旿摨?
postgres:
image: postgres:15-alpine # 雿輻鍂摰䀹䲮PostgreSQL<51>𨅯<EFBFBD>
container_name: ai-clinical-postgres
environment:
POSTGRES_DB: ai_clinical_research # <20>唳旿摨枏<E691A8>
POSTGRES_USER: postgres # <20><EFBFBD><E586BD>?
POSTGRES_PASSWORD: postgres123 # 撖<><E69296>
ports:
- "5432:5432" # 蝡臬藁<E887AC><EFBFBD>
volumes:
- postgres_data:/var/lib/postgresql/data # <20>唳旿<E594B3><E697BF><EFBFBD><EFBFBD>?
networks:
- ai-clinical-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
# Redis 蝻枏<E89DBB>
redis:
image: redis:7-alpine
container_name: ai-clinical-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- ai-clinical-network
volumes:
postgres_data: # PostgreSQL<51>唳旿<E594B3><EFBFBD><E79880>唳旿<E594B3><E697BF><EFBFBD><EFBFBD><EFBFBD><E7A18B><EFBFBD>
redis_data: # Redis<69>唳旿<E594B3>?
```
---
## <20><> <20>臬𢆡瘚<F0A286A1><E7989A>
### 銝<><E98A9D>桀鍳<E6A180><EFBFBD><E588BB>穿<EFBFBD><EFBFBD><E98A9D>桀鍳<E6A180>?bat嚗?
```batch
[甇仿炊2/7] <20>臬𢆡PostgreSQL<51>朙edis摰孵膥
docker-compose up -d
餈嗘葵<EFBFBD>賭誘隡𡄯<EFBFBD>
1. <20>芸𢆡銝贝蝸PostgreSQL 15<31>𨅯<EFBFBD><EFBFBD><E59A97><EFBFBD>𨀣𧋦<F0A880A3>唳瓷<E594B3><EFBFBD>
2. <20>𥕦遣PostgreSQL摰孵膥
3. <20>𥕦遣Redis摰孵膥
4. <20>𥕦遣<F0A595A6>唳旿<E594B3><EFBFBD>postgres_data嚗厩鍂鈭擧<E988AD><EFBFBD><E98A8B>摮睃<E691AE>
5. <20>臬𢆡摰孵膥撟嗅銁<E59785>𤾸蝱餈鞱<E9A488>
```
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ostgreSQL嚗?*
- <20>?Docker隡朞䌊<E69C9E><EFBFBD>撱箏<E692B1>蝞∠<E89D9E>
- <20>?<3F>唳旿摮睃<E691AE><E79D83>求ocker<65>唳旿<E594B3>瑚葉嚗䔶<E59A97>隡帋腺憭?
- <20>?<3F>臭誑<E887AD><EFBFBD>`localhost:5432`餈墧𦻖
---
## <20><>儭?<3F>唳旿摨栞<E691A8><E6A09E>乩縑<E4B9A9>?
### 餈墧𦻖<E5A2A7>滨蔭
**<EFBFBD>唳旿摨栞<EFBFBD><EFBFBD><EFBFBD>蝚虫葡嚗㇄ATABASE_URL嚗㚁<EFBFBD>**
```
postgresql://postgres:postgres123@localhost:5432/ai_clinical_research
```
**<EFBFBD><EFBFBD>圾嚗?*
- **<2A>讛悅嚗?* postgresql://
- **<2A><EFBFBD><E586BD><EFBFBD>** postgres
- **撖<><E69296>嚗?* postgres123
- **銝餅㦤嚗?* localhost嚗㇄ocker<65><EFBFBD><E683A9>唳𧋦<E594B3><EFBFBD>
- **蝡臬藁嚗?* 5432
- **<2A>唳旿摨枏<E691A8>嚗?* ai_clinical_research
### <20>𡒊垢<F0A1928A>滨蔭嚗Ê̄ackend/.env嚗?
```bash
# <20>唳旿摨栞<E691A8><E6A09E>?
DATABASE_URL=postgresql://postgres:postgres123@localhost:5432/ai_clinical_research
# 餈嗘葵餈墧𦻖<E5A2A7><F0A6BB96><EFBFBD>刻䌊撌梁<E6928C>PostgreSQL嚗䔶<E59A97><E494B6>浴ify<66><79><EFBFBD>
```
---
## <20><> 銝支葵<E694AF><EFBFBD><E7A589><EFBFBD><EFBFBD><EFBFBD>蝟餌<E89D9F>
### 蝟餌<E89D9F>撖寞<E69296>
| 憿寧𤌍 | <20><EFBFBD><E587BD>唳旿摨?| Dify<66><79><EFBFBD><EFBFBD> |
|------|----------|-------------|
| **雿滨蔭** | `AIclinicalresearch/docker-compose.yml` | `dify/docker/docker-compose.yml` |
| **摰孵膥<E5ADB5>?* | `ai-clinical-postgres` | `dify-db`<EFBFBD><EFBFBD>瘚页<EFBFBD> |
| **蝡臬藁** | `5432` | <20><EFBFBD><E888AA>畔5433`<60><EFBFBD><E7A2B6>湧蠧 |
| **<2A>唳旿摨枏<E691A8>** | `ai_clinical_research` | `dify` |
| **<2A><EFBFBD>?* | 摮睃<E691AE><E79D83>券★<E588B8><EFBFBD>銝𡁜𦛚<F0A1819C>唳旿 | 摮睃<E691AE>Dify<66><79><EFBFBD>?|
| **霈輸䔮<E8BCB8><EFBFBD>** | <20>湔𦻖Prisma霈輸䔮 | <20><EFBFBD>Dify API霈輸䔮 |
### <20><EFBFBD><E59786>?
```
<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><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><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><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><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>? AIclinicalresearch憿寧𤌍 <20>?
<EFBFBD>? <20>?
<EFBFBD>? <20>𢞖<EFBFBD><F0A29E96><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>? <20>𢞖<EFBFBD><F0A29E96><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>? <20>?
<EFBFBD>? <20>? Backend <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? PostgreSQL <20>? <20>?
<EFBFBD>? <20>? (Node.js) <20>?SQL <20>? (Docker) <20>? <20>?
<EFBFBD>? <20>? <20>? <20>? <20>? <20>?
<EFBFBD>? <20>? Prisma <20>? <20>?Port: 5432 <20>? <20>?
<EFBFBD>? <20><EFBFBD><E5A999><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>? <20><EFBFBD><E5A999><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>? <20>?
<EFBFBD>? <20>? <20>?
<EFBFBD>? <20>?HTTP API <20>?
<EFBFBD>? <20>? <20>?
<EFBFBD>? <20>𢞖<EFBFBD><F0A29E96><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>? <20>?
<EFBFBD>? <20>? Dify <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> Dify<66>芸楛<E88AB8><E6A59B>ostgreSQL <20>?
<EFBFBD>? <20>? (Docker) <20>? (摰<><E691B0><EFBFBD><EFBFBD>) <20>?
<EFBFBD>? <20><EFBFBD><E5A999><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>? <20>?
<EFBFBD>? <20>?
<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><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><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><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><EFBFBD><EFBFBD><EFBFBD>?
```
---
## <20><> 敶枏<E695B6><E69E8F>唳旿摨栞”蝏𤘪<E89D8F>
### <20><EFBFBD>PostgreSQL銝剔<E98A9D>銵?
```sql
-- <20><EFBFBD>嚗颹ackend/prisma/schema.prisma
-- <20><EFBFBD><E79285>
users -- <20><EFBFBD>銵?
-- 憿寧𤌍璅<E79285>
projects -- 憿寧𤌍銵?
-- AI<41><EFBFBD><E79285>
conversations -- 撖寡<E69296>銵?
messages -- 瘨<><E798A8>銵?
general_conversations -- <20>𡁶鍂撖寡<E69296>銵?
general_messages -- <20>𡁶鍂瘨<E98D82><E798A8>銵?
-- <20><EFBFBD>摨𤘪芋<F0A498AA>?
knowledge_bases -- <20><EFBFBD>摨栞”
documents -- <20><>﹝銵?
-- <20><EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>Phase 3嚗?
batch_tasks -- <20><EFBFBD><E5ADB5><EFBFBD><EFBFBD>∟”
batch_results -- <20><EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>𡏭”
task_templates -- 隞餃𦛚璅⊥踎銵?
-- 蝔蹂辣摰⊥䰻璅<E79285>
review_tasks -- 蝔蹂辣摰⊥䰻隞餃𦛚銵?
-- 餈鞱𨯫蝞∠<E89D9E><E79285>
admin_logs -- 蝞∠<E89D9E><E288A0>䀹𠯫敹𡑒”
```
**<2A>餉恣嚗?6撘㰘”嚗<E2809D><E59A97><EFBFBD>典銁<E585B8>刻䌊撌梁<E6928C>PostgreSQL銝准<E98A9D>?*
---
## <20>圲 撣貊鍂<E8B28A><EFBFBD>
### <20><EFBFBD>Docker摰孵膥<E5ADB5><EFBFBD>?
```bash
# <20><EFBFBD><E4BAA6><EFBFBD><EFBFBD>匧捆<E58CA7>?
docker ps
# 摨磰砲<E7A3B0><EFBFBD><E8B39C><EFBFBD>
# ai-clinical-postgres (PostgreSQL)
# ai-clinical-redis (Redis)
```
### 餈墧𦻖<E5A2A7>訐ostgreSQL
**<2A><EFBFBD>1嚗帋蝙<E5B88B>求ocker<65>賭誘**
```bash
# 餈𥕦<E9A488>PostgreSQL摰孵膥
docker exec -it ai-clinical-postgres psql -U postgres -d ai_clinical_research
# <20><EFBFBD><E59785>臭誑<E887AD><EFBFBD>SQL嚗?
\dt # <20><EFBFBD><E4BAA6><EFBFBD><EFBFBD>㕑”
\d users # <20><EFBFBD>users銵函<E98AB5><E587BD>?
SELECT * FROM users LIMIT 10;
```
**<2A><EFBFBD>2嚗帋蝙<E5B88B>冽㺭<E586BD><EFBFBD><E691B0>蝡?*
- **DBeaver** / **pgAdmin** / **DataGrip** / **Navicat**
- 餈墧𦻖靽⊥<E99DBD>嚗?
- Host: `localhost`
- Port: `5432`
- Database: `ai_clinical_research`
- User: `postgres`
- Password: `postgres123`
### <20>𨀣迫<F0A880A3><E8BFAB><EFBFBD>冽㺭<E586BD><EFBFBD>
```bash
# <20>𨀣迫嚗<E8BFAB><E59A97>銝滚<E98A9D><E6BB9A>斗㺭<E69697><EFBFBD>
docker-compose down
# <20>臬𢆡
docker-compose up -d
# <20>滚鍳
docker-compose restart postgres
```
### <20><EFBFBD><E4BAA6>唳旿摨𤘪𠯫敹?
```bash
# <20><EFBFBD>PostgreSQL<51><EFBFBD>
docker logs ai-clinical-postgres
# 摰墧𧒄<E5A2A7><EFBFBD><E4BAA6><EFBFBD>
docker logs -f ai-clinical-postgres
```
---
## <20>𠒣 <20>唳旿<E594B3><E697BF><EFBFBD><EFBFBD>?
### <20>唳旿摮睃<E691AE>雿滨蔭
**<2A>唳旿<E594B3><EFBFBD>Volume嚗㚁<E59A97>**
```
postgres_data:/var/lib/postgresql/data
```
**摰鮋<E691B0>摮睃<E691AE>雿滨蔭嚗?*
- Windows: `C:\ProgramData\Docker\volumes\aiclinicalresearch_postgres_data\_data`
- Mac/Linux: `/var/lib/docker/volumes/aiclinicalresearch_postgres_data/_data`
**<2A><EFBFBD>嚗?*
- <20>?<3F>喃蝙<E59683>𣳇膄摰孵膥嚗Ǒdocker-compose down`嚗㚁<EFBFBD><EFBFBD>唳旿銝滢<EFBFBD>
- <20>?<3F>唳旿摮睃<E691AE><E79D83>求ocker<65>唳旿<E594B3>瑚葉嚗峕<E59A97><EFBFBD><E98A8B>靽嘥<E99DBD>
- <20>𩤃<EFBFBD> <20><EFBFBD><E88AA3><EFBFBD>`docker-compose down -v`<EFBFBD><EFBFBD><EFBFBD>斗㺭<EFBFBD>桀㭘嚗㗇<EFBFBD>隡𡁏<EFBFBD>蝛箸㺭<EFBFBD>?
### 憭<><EFBFBD>唳旿摨?
```bash
# 憭<>遢嚗<E981A2><EFBFBD>搴QL嚗?
docker exec ai-clinical-postgres pg_dump -U postgres ai_clinical_research > backup.sql
# <20><EFBFBD><EFBFBD><EFBFBD>兄QL嚗?
docker exec -i ai-clinical-postgres psql -U postgres ai_clinical_research < backup.sql
```
---
## <20><20>芣䔉嚗锭chema<6D>𠉛氖霈<E99C88>
### 敶枏<E695B6><E69E8F><EFBFBD>?
```sql
-- <20><><EFBFBD>㕑”<E39591>賢銁public schema
public.users
public.projects
public.conversations
public.knowledge_bases
public.documents
public.review_tasks
...
```
### <20><EFBFBD><E6A0BC><EFBFBD>嚗𠄎chema<6D>𠉛氖嚗?
```sql
-- 撟喳蝱撅<E89DB1>chema
CREATE SCHEMA platform_schema;
platform_schema.users
platform_schema.roles
platform_schema.permissions
-- 銝𡁜𦛚璅<E79285>Schema
CREATE SCHEMA aia_schema; -- AI<41><EFBFBD><E7AE84><EFBFBD>
aia_schema.projects
aia_schema.conversations
aia_schema.messages
CREATE SCHEMA pkb_schema; -- 銝芯犖<E88AAF><EFBFBD>摨?
pkb_schema.knowledge_bases
pkb_schema.documents
CREATE SCHEMA asl_schema; -- AI<41><EFBFBD><E7AE84><EFBFBD>
asl_schema.projects
asl_schema.literature_items
asl_schema.screening_results
CREATE SCHEMA review_schema; -- 蝔蹂辣摰⊥䰻
review_schema.review_tasks
review_schema.review_journals
```
**摰墧鴌霈<E99C88>嚗?*
- **<2A>嗆挾銝<E68CBE><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?* <20><EFBFBD><E9A489>𠉛氖嚗䔶蝙<E494B6>刻”<E588BB><EFBFBD><EFBFBD>嚗Ǒaia_projects`, `asl_projects`嚗?
- **<2A>嗆挾鈭䕘<E988AD>敺格<E695BA><E6A0BC><EFBFBD><E28AA5><EFBFBD>𧒄嚗㚁<E59A97>** <20><EFBFBD><E68B8D>𠉛氖嚗<E6B096><E59A97>撱箇<E692B1><EFBFBD><E79487>Schema
---
## <20><> Dify<66>唳旿摨橒<E691A8><E6A992><EFBFBD>蝟餌<E89D9F>嚗?
### Dify<66><79><EFBFBD>蝵?
```
dify/docker/docker-compose.yml
<20><EFBFBD><E98EBF><EFBFBD> dify-db (PostgreSQL)
<20><EFBFBD><E98EBF><EFBFBD> dify-redis
<20><EFBFBD><E98EBF><EFBFBD> dify-web
<20><EFBFBD><E98EBF><EFBFBD> dify-api
<20><EFBFBD><E5A999><EFBFBD> ...
```
**<EFBFBD>喲睸<EFBFBD><EFBFBD>**
- <20>?Dify<66>㕑䌊撌勗<E6928C><E58B97>函𡠺蝡讠<E89DA1>docker-compose.yml
- <20>?Dify<66><79>ostgreSQL<51>舐𡠺蝡讠<E89DA1>摰孵膥
- <20>?<3F><EFBFBD>憿寧𤌍銝滨凒<E6BBA8>亥挪<E4BAA5>唏ify<66><79><EFBFBD><EFBFBD>
- <20>?<3F><EFBFBD>Dify API嚗𠃍TTP REST嚗㕑<E59A97><E39591>求ify<66><EFBFBD>
### <20><EFBFBD>憿寧𤌍憒<F0A48C8D><E68692>雿輻鍂Dify
```typescript
// 銝齿糓<E9BDBF>湔𦻖霈輸䔮Dify<66>唳旿摨橒<E691A8><E6A992>峕糓<E5B395><EFBFBD>API
// <20>𥕦遣<F0A595A6><EFBFBD>摨?
const response = await fetch('http://localhost/v1/datasets', {
method: 'POST',
headers: {
'Authorization': `Bearer ${DIFY_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<27>𤑳<EFBFBD><F0A491B3><EFBFBD>摨?
})
});
// 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
const formData = new FormData();
formData.append('file', file);
await fetch(`http://localhost/v1/datasets/${datasetId}/document/create-by-file`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${DIFY_API_KEY}`
},
body: formData
});
```
**<EFBFBD><EFBFBD><EFBFBD>唳旿摨㮖葉摮睃<EFBFBD>嚗?*
```sql
-- knowledge_bases銵?
{
id: 'uuid',
name: '<EFBFBD>𤑳<EFBFBD><EFBFBD><EFBFBD>摨?,
dify_dataset_id: 'xxx' -- <20><EFBFBD>Dify<66><79>ataset_id
}
```
---
## <20><20><EFBFBD>
### <20><EFBFBD><EFBFBD><E996AC>
1. <20>?**<2A><EFBFBD><E586BD>芸楛<E88AB8><E6A59B>ostgreSQL<51>唳旿摨?*
- <20><EFBFBD>Docker<65>函蔡嚗Ǒdocker-compose.yml`嚗?
- 摰孵膥<E5ADB5><EFBFBD>`ai-clinical-postgres`
- <20>唳旿摨枏<E691A8>嚗䫤ai_clinical_research`
2. <20>?**<2A><EFBFBD><E585B6><EFBFBD><EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>ostgreSQL**
- `docker-compose up -d`隡朞䌊<EFBFBD><EFBFBD>撱?
- <20>唳旿<E594B3><E697BF><EFBFBD><EFBFBD><EFBFBD><E7A18B>典銁Docker<65>唳旿<E594B3>瑚葉
3. <20>?**Dify<66><EFBFBD><E887AC>函𡠺蝡讠<E89DA1>蝟餌<E89D9F>**
- <20>㕑䌊撌梁<E6928C>PostgreSQL<51>唳旿摨?
- <20><EFBFBD><EFBFBD>Dify API霈輸䔮嚗䔶<E59A97><E494B6>湔𦻖霈輸䔮<E8BCB8>唳旿摨?
4. <20>?**敶枏<E695B6>16撘㰘”<E3B098><EFBFBD><E588B8><EFBFBD><E586BD><EFBFBD>ostgreSQL銝?*
- <20><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><E69FB4>笆霂腈<E99C82><E88588>䰻霂<E4B0BB><E99C82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E78DA2><EFBFBD>鸌憭<E9B88C><E686AD><EFBFBD><EFBFBD>阮隞嗅恣<E59785><EFBFBD>
- <20><EFBFBD><E588B8>灼public` schema嚗<61>𧊋<EFBFBD>仿<EFBFBD><EFBFBD><E996AC>蝳鳴<E89DB3>
### 銝箔<E98A9D><EFBFBD><E98A8B>銝滩扇敺堒<E695BA><EFBFBD>ostgreSQL嚗?
**<EFBFBD>牐蛹<EFBFBD>冽覔<EFBFBD>祆瓷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20><>
- <20>?Docker<65>芸𢆡銝贝蝸<E8B49D>𨅯<EFBFBD>
- <20>?Docker<65>芸𢆡<E88AB8>𥕦遣摰孵膥
- <20>?銝<><E98A9D>桀鍳<E6A180><EFBFBD><E588BB>祈䌊<E7A588>典鍳<E585B8>?
- <20>?<3F>典蘨<E585B8><E898A8><EFBFBD><E996AC>銵䈣銝<E488A3><E98A9D>桀鍳<E6A180>?bat`
**餈坔停<E59D94>浴ocker<65><72><EFBFBD><EFBFBD>𨥈<EFBFBD>**
---
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>甇乩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>捆嚗?*
1.<><E68692><EFBFBD><EFBFBD><EFBFBD>憭齿㺭<E9BDBF><EFBFBD>嚗?
2.<><E68692><EFBFBD><EFBFBD>訕chema<6D>𠉛氖<F0A0899B><EFBFBD>嚗?
3.<><E68692>餈墧𦻖<E5A2A7>唳旿摨栞<E691A8>銵峕<E98AB5><E5B395>冽䰻霂<E99C82>
4. Prisma憒<61><E68692>蝞∠<E89D9E><E288A0>唳旿摨栞<E691A8>蝘鳴<E89D98>