Files
AIclinicalresearch/docs/03-业务模块/AIA-AI智能问答/02-技术设计/01-数据库设计.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

540 lines
14 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.
# AIA - AI<41><EFBFBD><E7AE84><EFBFBD><E79285>嚗𡁏㺭<F0A1818F><EFBFBD>霈曇恣
> **<2A><>𧋦嚗?* v1.0
> **<2A>湔鰵<E6B994>園𡢿嚗?* 2025-11-12
> **<2A>唳旿摨廍chema嚗?* `aia_schema`
> **<2A><EFBFBD><E59786><EFBFBD>** <20>?撌脣<E6928C><E884A3>賢僎餈<E5838E>
---
## <20><> <20><EFBFBD>
1. [<EFBFBD><EFBFBD>](#璅<E79285><EFBFBD>)
2. [Schema靽⊥<EFBFBD>](#schema靽⊥<E99DBD>)
3. [<EFBFBD>唳旿摨栞”霈曇恣](#<23>唳旿摨栞”霈曇恣)
4. [銵典<EFBFBD>蝟餃㦛](#銵典<E98AB5>蝟餃㦛)
5. [<EFBFBD>霈曇恣](#蝝<E89D9D>霈曇恣)
6. [<EFBFBD>唳旿蝐餃<EFBFBD>霂湔<EFBFBD>](#<23>唳旿蝐餃<E89D90>霂湔<E99C82>)
7. [<EFBFBD>䀹凒<EFBFBD><EFBFBD>](#<23>䀹凒<E480B9><E58792>)
---
## 璅<E79285><EFBFBD>
### <20><EFBFBD>摰帋<E691B0>
**AIA嚗㇁I Intelligent Assistant嚗? AI<41><EFBFBD><E7AE84><EFBFBD><E79285>**<EFBFBD>臬像<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撖寡<EFBFBD>撘閙<EFBFBD>嚗峕<EFBFBD>靘𨥈<EFBFBD>
1. **憿寧𤌍蝞∠<E89D9E>** - <20>𠉛弦憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD>撱箏<E692B1>蝞∠<E89D9E>
2. **<EFBFBD><EFBFBD>撖寡<EFBFBD>** - <20><EFBFBD>LLM<4C><4D><EFBFBD>銝𡁻<E98A9D><F0A181BB>笔笆霂?
3. **<EFBFBD>𡁶鍂<EFBFBD><EFBFBD>** - 銝滨<E98A9D>摰𡁻★<F0A181BB><EFBFBD><E6A183>𡁶鍂AI撖寡<E69296>
4. **瘨<><E798A8>蝞∠<E89D9E>** - 撖寡<E69296><E5AFA1><EFBFBD>蟮霈啣<E99C88><E595A3><EFBFBD>蝝?
### <20><EFBFBD>銝𡁜𦛚<F0A1819C>箸艶
- <20><EFBFBD><E586BD>𥕦遣銝游<E98A9D><E6B8B8>𠉛弦憿寧𤌍
- <20>券★<E588B8><EFBFBD>銝垾I餈𥡝<E9A488>銝㮖<E98A9D>撖寡<E69296>
- 雿輻鍂<E8BCBB>𡁶鍂撖寡<E69296><E5AFA1><EFBFBD>敹恍<E695B9>笔倮霂?
- <20><EFBFBD><E4BAA6>𣬚恣<F0A3AC9A><E681A3>笆霂嘥<E99C82><E598A5>?
---
## Schema靽⊥<E99DBD>
### Schema<6D>滨妍
```sql
aia_schema
```
### <20>𥕦遣霂剖蘂
```sql
CREATE SCHEMA IF NOT EXISTS aia_schema;
GRANT ALL ON SCHEMA aia_schema TO aiclinical_admin;
```
### <20>唳旿餈<E697BF>
- **餈<><EFBFBD>園𡢿嚗?* 2025-11-12
- **皞𠩐chema嚗?* public
- **餈<><EFBFBD>𡁏𧋦嚗?* `docs/09-<2D><EFBFBD>摰墧鴌/migration-scripts/003-migrate-aia.sql`
- **<2A>唳旿摰峕㟲<E5B395><EFBFBD>** <20>?100%餈<><EFBFBD>𣂼<EFBFBD>
---
## <20>唳旿摨栞”霈曇恣
### 銵典<E98AB5>銵?
| 銵典<E98AB5> | <20><EFBFBD>?| 銵峕㺭嚗<E3BAAD>摯霈∴<E99C88> | <20><EFBFBD>?|
|------|------|------------|------|
| `projects` | <20>𠉛弦憿寧𤌍 | 1-100/<2F><EFBFBD> | <20>?撌脤<E6928C>蝵?|
| `conversations` | 憿寧𤌍撖寡<E69296> | 10-500/憿寧𤌍 | <20>?撌脤<E6928C>蝵?|
| `messages` | 撖寡<E69296><EFBFBD><E798A8> | 10-1000/撖寡<E69296> | <20>?撌脤<E6928C>蝵?|
| `general_conversations` | <20>𡁶鍂撖寡<E69296> | 10-100/<2F><EFBFBD> | <20>?撌脤<E6928C>蝵?|
| `general_messages` | <20>𡁶鍂撖寡<E69296><EFBFBD><E798A8> | 10-1000/撖寡<E69296> | <20>?撌脤<E6928C>蝵?|
**<EFBFBD>餉恣嚗?* 5銝芾”
---
### 1. projects - <20>𠉛弦憿寧𤌍銵?
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE><E79D83><EFBFBD><E586BD>𥕦遣<F0A595A6><E981A3>葩摨羓<E691A8>蝛園★<E59C92>?
#### 銵函<E98AB5><E587BD>?
| 摮埈挾<E59F88>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 憿寧𤌍<E5AFA7><EFBFBD><E887AD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
| user_id | TEXT | NOT NULL, FK | <20><>撅䂿鍂<E482BF>弒D |
| name | TEXT | NOT NULL | 憿寧𤌍<E5AFA7>滨妍 |
| background | TEXT | NULL | <20>𠉛弦<F0A0899B>峕艶 |
| research_type | TEXT | NULL | <20>𠉛弦蝐餃<E89D90>嚗èbservational/experimental蝑㚁<E89D91> |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | <20>𥕦遣<F0A595A6>園𡢿 |
| updated_at | TIMESTAMPTZ | NOT NULL | <20>湔鰵<E6B994>園𡢿 |
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<E9A0A7><E887AC>斗𧒄<E69697>?|
#### Prisma Model
```prisma
model Project {
id String @id @default(uuid())
userId String @map("user_id")
name String
background String?
researchType String? @map("research_type")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
conversations Conversation[]
@@index([userId])
@@index([createdAt])
@@index([deletedAt])
@@map("projects")
@@schema("aia_schema")
}
```
#### 銝𡁜𦛚閫<F0A69B9A><E996AB>
1. **頧臬<E9A0A7><E887AC>斗㦤<E69697>?* - 雿輻鍂`deleted_at`<EFBFBD><EFBFBD><EFBFBD>𣳇膄嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣳇膄
2. **蝥扯<E89DA5><E689AF>𣳇膄** - <20>𣳇膄憿寧𤌍<E5AFA7><EFBFBD><E5A19A><EFBFBD><E594BE><EFBFBD>笆霂苷<E99C82>鋡怨蔓<E680A8>𣳇膄
3. **<EFBFBD><EFBFBD><EFBFBD>𠉛氖** - <20><EFBFBD>`user_id`摰䂿緵<EFBFBD>唳旿<EFBFBD>𠉛氖
---
### 2. conversations - 憿寧𤌍撖寡<E69296>銵?
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE>憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD>AI撖寡<E69296>隡朞<E99AA1>
#### 銵函<E98AB5><E587BD>?
| 摮埈挾<E59F88>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 撖寡<E69296><E5AFA1><EFBFBD><E887AD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
| user_id | TEXT | NOT NULL, FK | <20><>撅䂿鍂<E482BF>弒D |
| project_id | TEXT | NULL, FK | <20><>撅鮋★<E9AE8B>埋D嚗<44><EFBFBD><EFBFBD> |
| agent_id | TEXT | NOT NULL | <20><EFBFBD>雿𨧻D |
| title | TEXT | NOT NULL | 撖寡<E69296><E5AFA1><EFBFBD><EFBFBD> |
| model_name | TEXT | NOT NULL, DEFAULT 'deepseek-v3' | 雿輻鍂<E8BCBB><E98D82>LM璅<E79285> |
| message_count | INTEGER | NOT NULL, DEFAULT 0 | 瘨<><E798A8><EFBFBD><EFBFBD> |
| total_tokens | INTEGER | NOT NULL, DEFAULT 0 | 蝝航恣token<65>?|
| metadata | JSONB | NULL | <20><EFBFBD><E68B99><EFBFBD><EFBFBD>?|
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | <20>𥕦遣<F0A595A6>園𡢿 |
| updated_at | TIMESTAMPTZ | NOT NULL | <20>湔鰵<E6B994>園𡢿 |
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<E9A0A7><E887AC>斗𧒄<E69697>?|
#### Prisma Model
```prisma
model Conversation {
id String @id @default(uuid())
userId String @map("user_id")
projectId String? @map("project_id")
agentId String @map("agent_id")
title String
modelName String @default("deepseek-v3") @map("model_name")
messageCount Int @default(0) @map("message_count")
totalTokens Int @default(0) @map("total_tokens")
metadata Json?
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
project Project? @relation(fields: [projectId], references: [id], onDelete: Cascade)
messages Message[]
@@index([userId])
@@index([projectId])
@@index([agentId])
@@index([createdAt])
@@index([deletedAt])
@@map("conversations")
@@schema("aia_schema")
}
```
#### 銝𡁜𦛚閫<F0A69B9A><E996AB>
1. **憿寧𤌍<E5AFA7><EFBFBD><E594BE><EFBFBD>?* - `project_id`<EFBFBD>臭蛹蝛綽<EFBFBD><EFBFBD><EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD>撖寡<EFBFBD>
2. **霈⊥㺭<E28AA5><EFBFBD>畾?* - `message_count`<EFBFBD>䈣total_tokens`<60><EFBFBD>蝏蠘恣嚗屸<E59A97><EFBFBD><E996AC><EFBFBD>嗆凒<E59786>?
3. **璅<E79285><E288AA>㗇𥋘** - <20><EFBFBD>憭𡁶<E686AD>LLM璅<E79285>嚗Ê̌eepseek-v3/gpt-5-pro/claude-4.5蝑㚁<EFBFBD>
4. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?* - `metadata`<EFBFBD><EFBFBD>摮睃<EFBFBD><EFBFBD>滨蔭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝𧢲<EFBFBD>蝑?
---
### 3. messages - 撖寡<E69296><EFBFBD><E798A8>銵?
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE>撖寡<E69296>銝剔<E98A9D>瘥𤩺辺瘨<E8BEBA><E798A8>
#### 銵函<E98AB5><E587BD>?
| 摮埈挾<E59F88>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 瘨<><E798A8><EFBFBD><EFBFBD><E887AD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
| conversation_id | TEXT | NOT NULL, FK | <20><>撅𧼮笆霂䣺D |
| role | TEXT | NOT NULL | 閫坿𠧧嚗óser/assistant/system嚗?|
| content | TEXT | NOT NULL | 瘨<><E798A8><EFBFBD><EFBFBD>捆 |
| model | TEXT | NULL | 雿輻鍂<E8BCBB><E98D82><EFBFBD><EFBFBD>assistant瘨<74><E798A8>嚗?|
| metadata | JSONB | NULL | <20><EFBFBD><E68B99><EFBFBD><EFBFBD>?|
| tokens | INTEGER | NULL | 瘨<><E798A8>token<65>?|
| is_pinned | BOOLEAN | NOT NULL, DEFAULT false | <20>臬炏蝵桅▲ |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | <20>𥕦遣<F0A595A6>園𡢿 |
#### Prisma Model
```prisma
model Message {
id String @id @default(uuid())
conversationId String @map("conversation_id")
role String
content String @db.Text
model String?
metadata Json?
tokens Int?
isPinned Boolean @default(false) @map("is_pinned")
createdAt DateTime @default(now()) @map("created_at")
conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
@@index([conversationId])
@@index([createdAt])
@@index([isPinned])
@@map("messages")
@@schema("aia_schema")
}
```
#### 銝𡁜𦛚閫<F0A69B9A><E996AB>
1. **閫坿𠧧蝐餃<E89D90>** - `role`<EFBFBD><EFBFBD>銝槁user`<60><>assistant`<EFBFBD>飜system`
2. **<EFBFBD>芾粉<EFBFBD>?* - 瘨<><E798A8><EFBFBD><E98A9D><EFBFBD>撱箔<E692B1><E7AE94>臭耨<E887AD><EFBFBD><E5B08D><EFBFBD>`is_pinned`<EFBFBD>臭耨<EFBFBD><EFBFBD>
3. **蝥扯<E89DA5><E689AF>𣳇膄** - <20>𣳇膄撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><E798A8><EFBFBD>芸𢆡<E88AB8>𣳇膄
4. **蝵桅▲<E6A185><EFBFBD>** - <20><EFBFBD><EFBFBD><E798A8><EFBFBD><EFBFBD><EFBFBD>`is_pinned`<EFBFBD><EFBFBD>
---
### 4. general_conversations - <20>𡁶鍂撖寡<E69296>銵?
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE>銝滨<E98A9D>摰𡁻★<F0A181BB><EFBFBD><E6A183>𡁶鍂AI撖寡<E69296>
#### 銵函<E98AB5><E587BD>?
| 摮埈挾<E59F88>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 撖寡<E69296><E5AFA1><EFBFBD><E887AD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
| user_id | TEXT | NOT NULL, FK | <20><>撅䂿鍂<E482BF>弒D |
| title | TEXT | NOT NULL | 撖寡<E69296><E5AFA1><EFBFBD><EFBFBD> |
| model_name | TEXT | NOT NULL, DEFAULT 'qwen-long' | 雿輻鍂<E8BCBB><E98D82>LM璅<E79285> |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | <20>𥕦遣<F0A595A6>園𡢿 |
| updated_at | TIMESTAMPTZ | NOT NULL | <20>湔鰵<E6B994>園𡢿 |
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<E9A0A7><E887AC>斗𧒄<E69697>?|
#### Prisma Model
```prisma
model GeneralConversation {
id String @id @default(uuid())
userId String @map("user_id")
title String
modelName String @default("qwen-long") @map("model_name")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
messages GeneralMessage[]
@@index([userId])
@@index([createdAt])
@@index([updatedAt])
@@map("general_conversations")
@@schema("aia_schema")
}
```
#### 銝𡁜𦛚閫<F0A69B9A><E996AB>
1. **頧駁<E9A0A7>蝥批笆霂?* - 銝漤<E98A9D><EFBFBD><EFBFBD><EFBFBD><E6A180><EFBFBD>雿枏<E99BBF><E69E8F>?
2. **敹恍<E695B9>笔倮霂?* - <20><EFBFBD><E585B6><EFBFBD><E586BD><EFBFBD><EFBFBD>園䔮憸睃<E686B8>敹恍<E695B9><E6818D>䰻霂?
3. **<EFBFBD><EFBFBD>蝞∠<EFBFBD>** - 銝𡡞★<F0A1A19E>桀笆霂嘥<E99C82><EFBFBD>蝞∠<E89D9E>
---
### 5. general_messages - <20>𡁶鍂撖寡<E69296><EFBFBD><E798A8>銵?
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE><E79D83>𡁶鍂撖寡<E69296>銝剔<E98A9D>瘥𤩺辺瘨<E8BEBA><E798A8>
#### 銵函<E98AB5><E587BD>?
| 摮埈挾<E59F88>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 瘨<><E798A8><EFBFBD><EFBFBD><E887AD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
| conversation_id | TEXT | NOT NULL, FK | <20><>撅𧼮笆霂䣺D |
| role | TEXT | NOT NULL | 閫坿𠧧嚗óser/assistant/system嚗?|
| content | TEXT | NOT NULL | 瘨<><E798A8><EFBFBD><EFBFBD>捆 |
| metadata | JSONB | NULL | <20><EFBFBD><E68B99><EFBFBD><EFBFBD>?|
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | <20>𥕦遣<F0A595A6>園𡢿 |
#### Prisma Model
```prisma
model GeneralMessage {
id String @id @default(uuid())
conversationId String @map("conversation_id")
role String
content String @db.Text
metadata Json?
createdAt DateTime @default(now()) @map("created_at")
conversation GeneralConversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
@@index([conversationId])
@@index([createdAt])
@@map("general_messages")
@@schema("aia_schema")
}
```
#### 銝𡁜𦛚閫<F0A69B9A><E996AB>
1. **蝞<><E89D9E>𤥁挽霈?* - <20><EFBFBD>憿寧𤌍瘨<F0A48C8D><E798A8><EFBFBD><EFBFBD><EFBFBD>token蝏蠘恣<E8A098>𣬚蔭憿嗅<E686BF><E59785>?
2. **蝥扯<E89DA5><E689AF>𣳇膄** - <20>𣳇膄撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><E798A8><EFBFBD>芸𢆡<E88AB8>𣳇膄
---
## 銵典<E98AB5>蝟餃㦛
```mermaid
erDiagram
PLATFORM_USERS ||--o{ PROJECTS : "owns"
PLATFORM_USERS ||--o{ CONVERSATIONS : "owns"
PLATFORM_USERS ||--o{ GENERAL_CONVERSATIONS : "owns"
PROJECTS ||--o{ CONVERSATIONS : "contains"
CONVERSATIONS ||--o{ MESSAGES : "contains"
GENERAL_CONVERSATIONS ||--o{ GENERAL_MESSAGES : "contains"
PLATFORM_USERS {
text id PK
text email
text password
}
PROJECTS {
text id PK
text user_id FK
text name
text research_type
timestamptz created_at
timestamptz deleted_at
}
CONVERSATIONS {
text id PK
text user_id FK
text project_id FK
text agent_id
text title
text model_name
int message_count
timestamptz created_at
}
MESSAGES {
text id PK
text conversation_id FK
text role
text content
int tokens
boolean is_pinned
timestamptz created_at
}
GENERAL_CONVERSATIONS {
text id PK
text user_id FK
text title
text model_name
timestamptz created_at
}
GENERAL_MESSAGES {
text id PK
text conversation_id FK
text role
text content
timestamptz created_at
}
```
### 頝沒chema撘閧鍂
**憭㚚睸<E39A9A>喟頂嚗?*
- `projects.user_id` <20>?`platform_schema.users.id`
- `conversations.user_id` <20>?`platform_schema.users.id`
- `general_conversations.user_id` <20>?`platform_schema.users.id`
**霂湔<E99C82>嚗?* Prisma<6D>芸𢆡憭<F0A286A1><E686AD>頝沒chema憭㚚睸嚗<E79DB8><E59A97><EFBFBD>其誨<E585B6><E8AAA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Schema<6D><EFBFBD>
---
## 蝝<E89D9D>霈曇恣
### 銝駁睸蝝<E89D9D>
<EFBFBD><EFBFBD><EFBFBD>㕑”<EFBFBD><EFBFBD>id`摮埈挾<E59F88>芸𢆡<E88AB8>𥕦遣B-tree銝駁睸蝝<E89D9D><EFBCB7>?
### 憭㚚睸蝝<E89D9D>
| 銵典<E98AB5> | 蝝<E89D9D>摮埈挾 | <20><EFBFBD>?|
|------|---------|------|
| projects | user_id | <20>亥砭<E4BAA5><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD>厰★<E58EB0>?|
| conversations | user_id | <20>亥砭<E4BAA5><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD>匧笆霂?|
| conversations | project_id | <20>亥砭憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD>撖寡<E69296> |
| conversations | agent_id | <20>㗇惣<E39787><EFBFBD><EFBFBD>誘撖寡<E69296> |
| messages | conversation_id | <20>亥砭撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E39787>?|
| general_conversations | user_id | <20>亥砭<E4BAA5><EFBFBD><E586BD><EFBFBD><EFBFBD>𡁶鍂撖寡<E69296> |
| general_messages | conversation_id | <20>亥砭撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E39787>?|
### <20>園𡢿蝝<E89D9D>
| 銵典<E98AB5> | 蝝<E89D9D>摮埈挾 | <20><EFBFBD>?|
|------|---------|------|
| projects | created_at | <20>㗇𧒄<E39787><EFBFBD>摨誯★<E8AAAF>?|
| projects | deleted_at | 餈<>誘撌脣<E6928C><E884A3>日★<E697A5>?|
| conversations | created_at | <20>㗇𧒄<E39787><EFBFBD>摨誩笆霂?|
| conversations | updated_at | <20>㗇凒<E39787>唳𧒄<E594B3><EFBFBD>摨?|
| conversations | deleted_at | 餈<>誘撌脣<E6928C><E884A3>文笆霂?|
| messages | created_at | <20>㗇𧒄<E39787><EFBFBD>摨𤩺<E691A8><F0A4A9BA>?|
| general_conversations | created_at | <20>㗇𧒄<E39787><EFBFBD>摨誩笆霂?|
| general_conversations | updated_at | <20>㗇凒<E39787>唳𧒄<E594B3><EFBFBD>摨?|
| general_messages | created_at | <20>㗇𧒄<E39787><EFBFBD>摨𤩺<E691A8><F0A4A9BA>?|
### <20><EFBFBD><E89D9D>
| 銵典<E98AB5> | 蝝<E89D9D>摮埈挾 | <20><EFBFBD>?|
|------|---------|------|
| messages | is_pinned | 敹恍<E695B9><E6818D>䰻霂蔭憿嗆<E686BF><E59786>?|
---
## <20>唳旿蝐餃<E89D90>霂湔<E99C82>
### 銝駁睸蝐餃<E89D90>嚗関EXT vs UUID
**敶枏<E695B6>摰䂿緵嚗?* TEXT
```sql
id TEXT PRIMARY KEY
```
**UUID<49><44><EFBFBD>嚗?* Prisma `@default(uuid())`
```prisma
id String @id @default(uuid())
```
**霂湔<E99C82>嚗?*
- 摮睃<E691AE><E79D83><EFBFBD>嚗𡁜<E59A97>蝚虫葡敶<E695B6><EFBCB7><EFBFBD>UID嚗<44><E59A97>`"a6ce8b46-bac6-4284-a9ae-031d636086bc"`嚗?
- 隡条<E99AA1>嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD><E99A9E><EFBFBD>澆捆嚗峕<E59A97><E5B395><EFBFBD><EFBFBD>
- 蝝<E89D9D><EFBCB7><EFBFBD>嚗帋<E59A97><E5B88B><EFBFBD>UUID蝐餃<E89D90><E9A483><EFBFBD>
### <20>園𡢿蝐餃<E89D90>嚗関IMESTAMPTZ
**<2A><><EFBFBD>㗇𧒄<E39787><EFBFBD>畾萎蝙<E8908E>灼TIMESTAMPTZ`<EFBFBD><EFBFBD>嗅躹<EFBFBD><EFBFBD>𧒄<EFBFBD><EFBFBD>嚗㚁<EFBFBD>**
- <20>芸𢆡摮睃<E691AE>UTC<54>園𡢿
- <20><EFBFBD><E88880>嗅躹頧祆揢
- Prisma<6D><EFBFBD>銝槁DateTime`
### JSONB蝐餃<E89D90>
**<EFBFBD><EFBFBD><EFBFBD>** 摮睃<E691AE><E79D83><EFBFBD><E68B99><EFBFBD><EFBFBD><EFBFBD><E6A180>滨蔭
- `conversations.metadata`
- `messages.metadata`
- `general_messages.metadata`
**隡条<E99AA1>嚗?*
- <20>菜暑<E88F9C><E69A91><EFBFBD><EFBFBD><E6A183>?
- <20><EFBFBD>GIN蝝<E89D9D><EFBFBD><E59A97><EFBFBD><EFBFBD>瘛餃<E7989B>嚗?
- <20><EFBFBD>JSONB<4E><EFBFBD>蝚行䰻霂?
---
## <20>䀹凒<E480B9><E58792>
### v1.0 - 2025-11-12 - <20><EFBFBD><E598A5><EFBFBD>𧋦 <20>?
**<EFBFBD>䀹凒<EFBFBD><EFBFBD>捆嚗?*
1. 隞𥳾public` schema餈<61><EFBFBD>躬aia_schema`
2. 5銝芾”<E88ABE><EFBFBD><EFBFBD>宏嚗?
- projects
- conversations
- messages
- general_conversations
- general_messages
3. <20>沌risma銝剜溶<E5899C>鮏@@schema("aia_schema")`<60><>
4. <20><><EFBFBD>㗇㺭<E39787>?00%摰峕㟲餈<E39FB2>
**餈<><EFBFBD>𡁏𧋦嚗?* `docs/09-<2D><EFBFBD>摰墧鴌/migration-scripts/003-migrate-aia.sql`
**撉諹<E69289><E8ABB9><EFBFBD><E59786><EFBFBD>** <20>?撌脤<E6928C><EFBFBD><E99C82><EFBFBD><EFBFBD><EFBFBD>
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
- [Schema<EFBFBD>𠉛氖<EFBFBD><EFBFBD>霈曇恣](../../../09-<2D><EFBFBD>摰墧鴌/01-Schema<6D>𠉛氖<F0A0899B><EFBFBD>霈曇恣嚗?0銝迎<E98A9D>.md)
- [Schema餈<EFBFBD>宏摰峕<EFBFBD><EFBFBD><EFBFBD>](../../../09-<2D><EFBFBD>摰墧鴌/Schema餈<61>宏摰峕<E691B0><E5B395><EFBFBD>.md)
- [Prisma<EFBFBD>滨蔭摰峕<EFBFBD><EFBFBD><EFBFBD>](../../../09-<2D><EFBFBD>摰墧鴌/Prisma<6D>滨蔭摰峕<E691B0><E5B395><EFBFBD>.md)
- [敹恍<E695B9><EFBFBD><E7AC94><EFBFBD>霂閙𥁒<E99699>𠺖(../../../09-<2D><EFBFBD>摰墧鴌/敹恍<E695B9><EFBFBD><E7AC94><EFBFBD>霂閙𥁒<E99699>?md)
---
**<EFBFBD><EFBFBD>﹝蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** AI<41><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD>** 2025-11-12
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20>?撌脣<E6928C><E884A3>𣂼僎撉諹<E69289>