Files
AIclinicalresearch/docs/_templates/数据库设计-模板.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.5 KiB
Raw Blame History

[璅<E79285><E288AA>滨妍] - <20>唳旿摨栞挽霈?

*Schema嚗? xxx_schema
銵冽㺭<EFBFBD>𧶏<EFBFBD> X銝? *靘肽<EFBFBD>嚗? platform_schema.users嚗<73><E59A97><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> YYYY-MM-DD


<EFBFBD><EFBFBD> Schema霂湔<E99C82>

*Schema<EFBFBD>𥕦遣嚗?

CREATE SCHEMA IF NOT EXISTS xxx_schema;

*<EFBFBD>諹提<EFBFBD><EFBFBD>凒嚗?

  • <EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD>唳旿
  • <EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>唳旿
  • ...

*靘肽<EFBFBD><EFBFBD>喟頂嚗?

  • 靘肽<EFBFBD> platform_schema.users<EFBFBD><EFBFBD>瑚縑<EFBFBD><EFBFBD>
  • 靘肽<EFBFBD> platform_schema.xxx<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD> ER<45><EFBFBD><E6A998><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>?
<0A>? users (憭㚚<E686AD>)   <20>?
<0A><EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A082><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
         <20>?1:N
         <20>?
<0A>𢞖<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<0A>? 銝餉”           <20>?
<0A><EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A082><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
         <20>?1:N
         <20>?
<0A>𢞖<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<0A>? 摮鞱”           <20>?
<0A><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?

<EFBFBD><EFBFBD> 銵函<E98AB5><E587BD><EFBFBD>挽霈?

1. xxx_table_name嚗<65><EFBFBD>讛膩嚗?

<EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EFBFBD>舘”<E88898><E2809D><EFBFBD>?

*摮埈挾霂湔<EFBFBD>嚗?

CREATE TABLE xxx_schema.xxx_table_name (
  -- 銝駁睸
  id SERIAL PRIMARY KEY,
  
  -- 憭㚚睸
  user_id INTEGER REFERENCES platform_schema.users(id) ON DELETE CASCADE,
  
  -- 銝𡁜𦛚摮埈挾
  field_name VARCHAR(200) NOT NULL,
  description TEXT,
  status VARCHAR(20) DEFAULT 'active',
  
  -- <20>園𡢿<E59C92><EFBFBD><EFBFBD>◆嚗?
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW(),
  
  -- 蝝<E89D9D>
  INDEX idx_xxx_user_id (user_id),
  INDEX idx_xxx_status (status)
);

*摮埈挾霂西圾嚗?

摮埈挾<EFBFBD>? 蝐餃<EFBFBD> 蝥行<EFBFBD> 霂湔<EFBFBD>
id SERIAL PK 銝駁睸
user_id INTEGER FK, NOT NULL <EFBFBD><EFBFBD>ID
field_name VARCHAR(200) NOT NULL 摮埈挾霂湔<EFBFBD>
description TEXT - 霂衣<EFBFBD><EFBFBD>讛膩
status VARCHAR(20) DEFAULT 'active' <EFBFBD><EFBFBD><EFBFBD><EFBFBD>active/inactive/deleted
created_at TIMESTAMP NOT NULL <EFBFBD>𥕦遣<EFBFBD>園𡢿
updated_at TIMESTAMP NOT NULL <EFBFBD>湔鰵<EFBFBD>園𡢿

*銝𡁜𦛚閫<EFBFBD><EFBFBD>嚗?

  • 瘥譍葵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憭𡁜<EFBFBD>撱旗銝芾扇敶?
  • status摮埈挾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>active, inactive, deleted
  • 頧臬<EFBFBD><EFBFBD><EFBFBD>銝滨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>芯耨<EFBFBD>零tatus銝榛eleted

2. xxx_table_name_2嚗<32>洵鈭䔶葵銵剁<E98AB5>

<EFBFBD><EFBFBD>憭滢<EFBFBD><EFBFBD><EFBFBD>蝏𤘪<EFBFBD>嚗?


<EFBFBD><EFBFBD><E89D9D>霈曇恣

<EFBFBD><EFBFBD><EFBFBD>

-- <20><EFBFBD>ID蝝<E89D9D><EFBFBD><E59A97><EFBFBD><EFBFBD>憿餃<E686BF><E89D9D>嚗?
CREATE INDEX idx_xxx_user_id ON xxx_schema.xxx_table_name(user_id);

-- <20><EFBFBD><E59786>揣撘𤏪<E69298>撣貊鍂蝑偦<E89D91><EFBFBD>畾蛛<E795BE>
CREATE INDEX idx_xxx_status ON xxx_schema.xxx_table_name(status);

-- <20>𥕦遣<F0A595A6>園𡢿蝝<E89D9D><EFBFBD><EFBFBD><EFBFBD>摨誩<E691A8>畾蛛<E795BE>
CREATE INDEX idx_xxx_created_at ON xxx_schema.xxx_table_name(created_at DESC);

憭滚<EFBFBD><EFBFBD>

-- <20><EFBFBD>+<2B><EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>䰻霂?
CREATE INDEX idx_xxx_user_status ON xxx_schema.xxx_table_name(user_id, status);

<EFBFBD><EFBFBD> 憭㚚睸蝥行<E89DA5>

靘肽<EFBFBD><EFBFBD>喟頂

-- 靘肽<E99D98><E882BD><EFBFBD>銵?
ALTER TABLE xxx_schema.xxx_table_name
  ADD CONSTRAINT fk_xxx_users
  FOREIGN KEY (user_id) REFERENCES platform_schema.users(id)
  ON DELETE CASCADE;  -- <20><EFBFBD><E586BD>𣳇膄<F0A3B387>嗥漣<E597A5>𥪜<EFBFBD><F0A5AA9C>?

-- 璅<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>?
ALTER TABLE xxx_schema.child_table
  ADD CONSTRAINT fk_child_parent
  FOREIGN KEY (parent_id) REFERENCES xxx_schema.parent_table(id)
  ON DELETE CASCADE;

憭㚚睸蝑𣇉裦

  • <EFBFBD>?ON DELETE CASCADE嚗𡁶鍂<EFBFBD><EFBFBD><EFBFBD>斗𧒄嚗諹䌊<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>娍㺭<EFBFBD>?
  • <EFBFBD>𩤃<EFBFBD> 頝沒chema憭㚚睸嚗𡁜蘨<EFBFBD><EFBFBD><EFBFBD>?platform_schema嚗䔶<E59A97><E494B6><EFBFBD><E8B3A2><EFBFBD>隞碶<E99A9E><E7A2B6>⊥芋<E28AA5>?

<EFBFBD><EFBFBD> <20>唳旿餈<E697BF>宏嚗<E5AE8F><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD><EFBFBD>𡝗㺭<EFBFBD>?

-- 憒<><E68692><EFBFBD><EFBFBD><EFBFBD><E996AC>憪见<E686AA><E8A781>唳旿
INSERT INTO xxx_schema.xxx_table_name (field_name, status) VALUES
  ('蝷箔<E89DB7>1', 'active'),
  ('蝷箔<E89DB7>2', 'active');

<EFBFBD><EFBFBD>𡁏𧋦

-- 憒<><E68692><EFBFBD><EFBFBD><EFBFBD><E996AC><EFBFBD>扯”餈<E2809D><EFBFBD>唳旿
-- migrations/xxx_migration.sql

<EFBFBD><EFBFBD> <20>唳旿<E594B3><EFBFBD>隡?

銵典<EFBFBD> <EFBFBD>摯霈啣<EFBFBD><EFBFBD>? 憓鮋鵭<EFBFBD>笔漲
xxx_table_name 10銝?撟? 銝剔<EFBFBD>
xxx_table_name_2 100銝?撟? 擃?

<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>鈭钅★

*<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> ON DELETE 蝑𣇉裦
  • <EFBFBD><EFBFBD>N+1<>亥砭<E4BAA5><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><E8A9A8><EFBFBD>

*<EFBFBD><EFBFBD>嚗?

*API霈曇恣嚗?


<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> YYYY-MM-DD
蝏湔擪鈭綽<EFBFBD> <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>