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%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,28 +1,23 @@
# **<2A><><EFBFBD><EFBFBD>函蔡銵亙<E98AB5><E4BA99><EFBFBD><EFBFBD>嚗𡁜銵交<E98AB5><E4BAA4>𡒊<EFBFBD>蝻嗪<E89DBB>**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦: v1.0
目标: 解决 5 个独立模块集成时的网络连通性、发布效率和成本问题。
<EFBFBD><EFBFBD>: 閫<><E996AB> 5 銝芰𡠺蝡𧢲芋<F0A7A2B2><EFBFBD><E783BE>鞉𧒄<E99E89><F0A79284><EFBFBD>蝏𡏭<E89D8F><F0A18FAD>𡁏<EFBFBD><EFBFBD><E689BC><EFBFBD><EFBFBD><E692A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鞉𧋦<E99E89><EFBFBD><E6A185>?
## **<2A><> <20>喲睸<E596B2><EFBFBD> 1嚗锭AE <20><><EFBFBD>蝵𤏸挪<F0A48FB8>?(靚<>鍂 DeepSeek/OpenAI)**
## **🛑 关键问题 1SAE 的外网访问 (调用 DeepSeek/OpenAI)**
现状:部署在 VPC 内的 SAE 默认无法访问公网。
后果:后端调用 DeepSeek 接口会超时Python 服务无法下载公网 PDF。
### **方案 ANAT 网关 (标准生产方案,推荐)**
* **操作**:在 VPC 控制台创建一个 **公网 NAT 网关**,并绑定一个 **EIP**。配置 SNAT 条目,允许交换机内的实例访问公网。
* **成本**NAT 网关租赁费 \+ EIP 流量费/带宽费。
* **优点**:稳定,无需修改应用配置。
<EFBFBD>啁𠶖嚗𡁻<EFBFBD>蝵脣銁 VPC <20><><EFBFBD> SAE 暺䁅恕<E48185><EFBFBD>霈輸䔮<E8BCB8><EFBFBD><E7A589>?
<EFBFBD><EFBFBD>嚗𡁜<EFBFBD>蝡航<EFBFBD><EFBFBD>?DeepSeek <20>亙藁隡朞<E99AA1><E69C9E><EFBFBD>Python <20>滚𦛚<E6BB9A><EFBFBD>銝贝蝸<E8B49D><EFBFBD> PDF<44>?
### **<2A><EFBFBD> A嚗鐭AT 蝵穃<E89DB5> (<28><><EFBFBD><EFBFBD>煺漣<E785BA><EFBFBD>嚗峕綫<E5B395>?**
* **<2A><EFBFBD>**嚗𡁜銁 VPC <20><EFBFBD><E689B9><EFBFBD>撱箔<E692B1>銝?**<2A><EFBFBD> NAT 蝵穃<E89DB5>**嚗<>僎蝏穃<E89D8F><EFBFBD>銝?**EIP**<2A><><EFBFBD>蝵?SNAT <20>∠𤌍嚗<F0A48C8D><E59A97>霈訾漱<E8A8BE><EFBCB8><E3A6A4><EFBFBD>摰硺<E691B0>霈輸䔮<E8BCB8><EFBFBD><E7A589>?
* **<2A>鞉𧋦**嚗鐭AT 蝵穃<E89DB5>蝘蠘<E89D98>韐?\+ EIP 瘚<><E7989A>韐?撣血捐韐嫘<E99F90>?
* **隡条<E99AA1>**嚗𡁶迅摰𡄯<E691B0><F0A184AF>𣳇<EFBFBD>靽格㺿摨𠉛鍂<F0A0899B>滨蔭<E6BBA8>?
### **<2A><EFBFBD> B嚗锭AE 蝏穃<E89D8F><E7A983><EFBFBD> IP (<28><><EFBFBD><EFBFBD>)**
* **操作**:在 SAE 应用配置 \-\> 网络配置 中,查看是否支持开启 **公网访问** 或绑定 EIP
* **注意**SAE 某些旧版本或特定地域可能不支持直接绑定 EIP。如果不支持必须用方案 A。
## **🛠️ 关键问题 2跳板机配置 (如何直连 RDS)**
为了方便开发人员使用 Navicat/DBeaver 管理 RDS 数据,利用 **Dify ECS** 作为跳板机。
* **<EFBFBD><EFBFBD>**嚗𡁜銁 SAE 摨𠉛鍂<F0A0899B>滨蔭 \-\> 蝵𤑳<E89DB5><F0A491B3>滨蔭 銝哨<E98A9D><E593A8><EFBFBD><E4BAA6>臬炏<E887AC><EFBFBD><EFBFBD><E69298>?**<2A><EFBFBD>霈輸䔮** <20>𣇉<EFBFBD>摰?EIP<EFBFBD>?
* **瘜冽<EFBFBD>**嚗锭AE <20>𣂷<EFBFBD><F0A382B7><EFBFBD><E68A92><EFBFBD><E7A586><EFBFBD><E5ADB5><EFBFBD><E595A3><EFBFBD>銝齿𣈲<E9BDBF><F0A388B2><EFBFBD><EFBFBD>摰?EIP<49><50><EFBFBD><EFBFBD><EFBFBD><E99D9D><EFBFBD><EFBFBD><E59A97>憿餌鍂<E9A48C><EFBFBD> A<>?
## **<2A><>儭?<3F>喲睸<E596B2><EFBFBD> 2嚗朞歲<E69C9E>踵㦤<E8B8B5>滨蔭 (憒<><E68692><EFBFBD><EFBFBD> RDS)**
銝箔<EFBFBD><EFBFBD>嫣噶撘<EFBFBD><EFBFBD>睲犖<EFBFBD>䀝蝙<EFBFBD>?Navicat/DBeaver 蝞∠<E89D9E> RDS <20>唳旿嚗<E697BF><EFBFBD>?**Dify ECS** 雿靝蛹頝單踎<E596AE><EFBFBD>?
### **<2A><EFBFBD>甇仿炊**
1. **<EFBFBD>砍𧑐蝏<EFBFBD><EFBFBD><EFBFBD>** (撱箇<E692B1> SSH <20><EFBFBD>):
@@ -32,17 +27,16 @@
2. **Navicat 餈墧𦻖<E5A2A7>滨蔭**:
* 銝餅㦤: localhost
* 蝡臬藁: 5433
* 用户/密码: RDS 的账号密码
* *原理:流量通过 ECS 转发到内网 RDS。*
* <EFBFBD><EFBFBD>/撖<><E69296>: RDS <20><><EFBFBD><EFBFBD><E79195>?
* *<EFBFBD><EFBFBD>嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ECS 頧砍<E9A0A7><E7A08D><EFBFBD>蝵?RDS<EFBFBD>?
## **🚀 关键问题 3一键发布脚本 (NoOps 神器)**
为 1-2 人团队定制的极简发布脚本。保存为 deploy.sh。
## **<EFBFBD><EFBFBD> <20>喲睸<E596B2><EFBFBD> 3嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD><E692A3><EFBFBD>?(NoOps 蟡𧼮膥)**
銝?1-2 鈭箏𣪧<E7AE8F><EFBFBD><E7AC94><EFBFBD><E597A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A983>𡁏𧋦<F0A1818F><F0A78BA6><EFBFBD>摮䀝蛹 deploy.sh<73>?
\#\!/bin/bash
set \-e
\# \================= 配置区 \=================
\# \================= <EFBFBD>滨蔭<EFBFBD>?\=================
ACR\_REGISTRY="registry.cn-hangzhou.aliyuncs.com"
NAMESPACE="clinical-research"
TIMESTAMP=$(date \+%Y%m%d%H%M)
@@ -55,7 +49,7 @@ function build\_and\_push() {
SERVICE\_NAME=$1
DIR\_NAME=$2
echo \-e "${GREEN}\>\>\> 开始构建 $SERVICE\_NAME ...${NC}"
echo \-e "${GREEN}\>\>\> <EFBFBD>憪𧢲<EFBFBD>撱?$SERVICE\_NAME ...${NC}"
\# 餈𥕦<E9A488><F0A595A6><EFBFBD>
cd $DIR\_NAME
@@ -64,26 +58,26 @@ function build\_and\_push() {
IMAGE\_URL="$ACR\_REGISTRY/$NAMESPACE/$SERVICE\_NAME:$TIMESTAMP"
docker build \-t $IMAGE\_URL .
\# 2\. 推送镜像
\# 2\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
echo \-e "${GREEN}\>\>\> <20><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD> ACR ...${NC}"
docker push $IMAGE\_URL
\# 3\. 输出更新指引 (如果安装了 aliyun-cli 可以自动更新,否则手动)
echo \-e "${GREEN}\>\>\> $SERVICE\_NAME 镜像已就绪:${NC}"
\# 3\. 颲枏枂<EFBFBD>湔鰵<EFBFBD><EFBFBD><EFBFBD> (憒<><E68692>摰㕑<E691B0>鈭?aliyun-cli <20>臭誑<E887AD>芸𢆡<E88AB8>湔鰵嚗<E9B0B5><EFBFBD><EFBFBD><E8B9B1>?
echo \-e "${GREEN}\>\>\> <EFBFBD>?$SERVICE\_NAME <EFBFBD>𨅯<EFBFBD>撌脣停蝏?${NC}"
echo $IMAGE\_URL
echo "霂瑕銁 SAE <20><EFBFBD><E689B9><EFBFBD> \[$SERVICE\_NAME\] <20><><EFBFBD><EFBFBD><EFBFBD><E8AE90>祆凒<E7A586>唬蛹: $TIMESTAMP"
\# 回到根目录
\# <EFBFBD>𧼮<EFBFBD><EFBFBD>寧𤌍敶?
cd ..
echo "----------------------------------------"
}
\# \================= 主流程 \=================
\# \================= 銝餅<EFBFBD>蝔?\=================
\# 1\. 部署 Python 微服务
\# 1\. <EFBFBD>函蔡 Python 敺格<EFBFBD><EFBFBD>?
\# build\_and\_push "extraction-service" "extraction\_service"
\# 2\. 部署 Node.js 后端 (记得先同步 Prisma)
\# 2\. <EFBFBD>函蔡 Node.js <EFBFBD>𡒊垢 (霈啣<E99C88><E595A3><EFBFBD><EFBFBD>甇?Prisma)
\# cp \-r prisma backend/prisma
build\_and\_push "backend-service" "backend"
\# rm \-rf backend/prisma
@@ -93,22 +87,21 @@ build\_and\_push "backend-service" "backend"
echo \-e "${GREEN}<7D><> <20><><EFBFBD><EFBFBD>撱箔遙<E7AE94><EFBFBD><E288AA><EFBFBD>${NC}"
## **🔐 关键问题 4OSS 权限与路径规划**
为了防止文件混乱,建议在 Bucket 内划分明确的目录结构,并通过 IAM Policy 限制权限(可选)。
## **<EFBFBD><EFBFBD> <20>喲睸<E596B2><EFBFBD> 4嚗鐾SS <20><><EFBFBD>銝舘楝敺<E6A59D><E695BA><EFBFBD>?*
銝箔<EFBFBD><EFBFBD>脫迫<EFBFBD><EFBFBD>辣瘛瑚僚嚗<EFBFBD>遣霈桀銁 Bucket <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝖桃<E89D96><E6A183><EFBFBD>蝏𤘪<E89D8F><EFBFBD><EFBFBD><EFBFBD> IAM Policy <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E39A81>?
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝏𤘪<EFBFBD>**:
clinical-research-files/
├── pkb/ \# 个人知识库文件
│ └── {userId}/ \# 按用户隔离
├── asl/ \# 文献筛选文件
│ └── {projectId}/ \# 按项目隔离
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> pkb/ \# 銝芯犖<EFBFBD><EFBFBD>摨𤘪<EFBFBD>隞?
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> {userId}/ \# <EFBFBD>厩鍂<EFBFBD><EFBFBD>蝳?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> asl/ \# <EFBFBD><EFBFBD>讃蝑偦<EFBFBD><EFBFBD>隞?
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> {projectId}/ \# <EFBFBD>厰★<EFBFBD><EFBFBD>蝳?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> dc/ \# <20>唳旿皜<E697BF><E79A9C><EFBFBD><EFBFBD>
│ └── {tempId}/ \# 临时上传
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> {tempId}/ \# 銝湔𧒄銝𠹺<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> system/ \# 蝟餌<E89D9F><EFBFBD><E99F8F>
**摨𠉛鍂隞<E98D82><E99A9E><EFBFBD><EFBFBD>**:
* **私有读写**: Bucket 权限设为 **Private**
* **前端访问**: 后端使用 ossClient.signatureUrl() 生成带有效期的 URL (如 1 小时) 返回给前端。**严禁前端直接通过公网 URL 访问。**
* **<EFBFBD><EFBFBD>霂餃<EFBFBD>**: Bucket <EFBFBD><EFBFBD><EFBFBD>霈曆蛹 **Private**<EFBFBD>?
* **<EFBFBD>滨垢霈輸䔮**: <EFBFBD>𡒊垢雿輻鍂 ossClient.signatureUrl() <EFBFBD><EFBFBD><EFBFBD>撣行<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?URL (憒?1 撠𤩺𧒄) 餈𥪜<E9A488>蝏坔<E89D8F>蝡胯<E89DA1>?*銝亦<E98A9D><E4BAA6>滨垢<E6BBA8>湔𦻖<E6B994><EFBFBD><E69C9E><EFBFBD> URL 霈輸䔮<E8BCB8>?*