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,17 +1,17 @@
# ASL模å<C2A1>— - 路由问题修å¤<C3A5>报åŠ
**日期**: 2025-11-18
**问题**: 点击"设置与启动"按钮后页面显示空白
**状态**: ✅ 已修复
**问题**: 点击"设置与å<C5BD>¯åŠ?按é®å<C2AE>Žé¡µé<C2B5>¢æ˜¾ç¤ºç©ºç™?
**状�*: �已修�
---
## ðŸ<C3B0> 问题æ<CB9C><C3A6>è¿°
### 用户å<C2B7><C3A5>馈
1. ❌ 点击左侧"设置与启动"按钮
2. ❌ 页面显示空白
3. ❌ 浏览器控制台警告:`Warning: [antd: Spin] tip only work in nest or fullscreen pattern.`
1. â<EFBFBD>?点击左侧"设置与å<C5BD>¯åŠ?按钮
2. â<EFBFBD>?页é<C2B5>¢æ˜¾ç¤ºç©ºç™½
3. â<EFBFBD>?æµ<C3A6>览器控制å<C2B6>°è­¦åŠï¼š`Warning: [antd: Spin] tip only work in nest or fullscreen pattern.`
---
@@ -19,29 +19,29 @@
### 根本原因
发现了**2个问题**
å<EFBFBD>现äº?*2个问é¢?*ï¼?
#### 问题1: Spin组件的tip属性警告 ⚠️
#### 问题1: Spin组件的tip属性警å?âš ï¸<C3AF>
**ä½<C3A4>ç½®**: `frontend-v2/src/framework/layout/MainLayout.tsx:30`
```typescript
// ❌ 错误代码
<Spin size="large" tip="加载中..." />
// â<EFBFBD>?错误代ç <C3A7>
<Spin size="large" tip="加载�.." />
```
**原因**: Ant Design `Spin` 组件的 `tip` 属性只能在以下模式使用:
**原因**: Ant Design çš?`Spin` 组件çš?`tip` 属性å<C2A7>ªèƒ½åœ¨ä»¥ä¸æ¨¡å¼<C3A5>使用ï¼?
- `nest` 模å¼<C3A5>(嵌套在内容中)
- `fullscreen` 模å¼<C3A5>(全å±<C3A5>显示)
当前使用的是普通模式,不支持 `tip` 属性。
当å‰<EFBFBD>使用的是普通模å¼<EFBFBD>,ä¸<EFBFBD>支æŒ?`tip` 属性ã€?
#### 问题2: 嵌套路由配置错误 ❌
#### 问题2: 嵌套路由é…<C3A9>置错误 â<>?
**ä½<C3A4>ç½®**: `frontend-v2/src/modules/asl/index.tsx`
```typescript
// ❌ 错误代码
// â<EFBFBD>?错误代ç <C3A7>
<Routes>
{aslRoutes.map((route, index) => (
<Route
@@ -56,35 +56,35 @@
**原因**:
- `aslRoutes` 是一个å¤<C3A5>æ<EFBFBD>的嵌套路由结构
- `map` 方法只能渲染第一层路由,无法处理 `children` 属性
- `map` æ¹æ³•å<EFBFBD>ªèƒ½æ¸²æŸ“第一å±è·¯ç”±ï¼Œæ— æ³•处ç<EFBFBD> `children` 属æ€?
- 导致 `ASLLayout` çš„å­<C3A5>路由无法正常渲染
- 结果:页面显示空白
- 结果:页é<EFBFBD>¢æ˜¾ç¤ºç©ºç™?
**路由结构**:
```
ASLLayout (父路由)
└── screening/title (子路由)
ASLLayout (父路�
└── screening/title (å­<EFBFBD>è·¯ç”?
├── settings
├── workbench
└── results
```
这种嵌套结构需要在 JSX 中显式声明。
è¿™ç§<EFBFBD>嵌套结构需è¦<EFBFBD>在 JSX 中显å¼<C3A5>声明ã€?
---
## ✅ 修复方案
## âœ?ä¿®å¤<C3A5>æ¹æ¡ˆ
### 修复1: 移除Spin的tip属性
### ä¿®å¤<EFBFBD>1: 移除Spinçš„tip属æ€?
**文件**: `frontend-v2/src/framework/layout/MainLayout.tsx`
```typescript
// ✅ 修复后
// âœ?ä¿®å¤<C3A5>å<EFBFBD>?
<Spin size="large" />
```
**效果**: 警告消失,加载动画正常显示
**效果**: 警告消失,加载动画正常显�
---
@@ -93,12 +93,12 @@ ASLLayout (父路由)
**文件**: `frontend-v2/src/modules/asl/index.tsx`
```typescript
// ✅ 修复后
// âœ?ä¿®å¤<C3A5>å<EFBFBD>?
import { Suspense, lazy } from 'react';
import { Routes, Route, Navigate } from 'react-router-dom';
import { Spin } from 'antd';
// 懒加载组件
// 懒加载组�
const ASLLayout = lazy(() => import('./components/ASLLayout'));
const TitleScreeningSettings = lazy(() => import('./pages/TitleScreeningSettings'));
const TitleScreeningWorkbench = lazy(() => import('./pages/ScreeningWorkbench'));
@@ -114,12 +114,12 @@ const ASLModule = () => {
}
>
<Routes>
{/* 父路由: ASLLayout 布局 */}
{/* 父路� ASLLayout 布局 */}
<Route path="" element={<ASLLayout />}>
{/* 默认重定向到设置页 */}
{/* 默认é‡<EFBFBD>定å<EFBFBD>到设置é¡?*/}
<Route index element={<Navigate to="screening/title/settings" replace />} />
{/* 标题摘要初筛子路由 */}
{/* 标题æ˜è¦<EFBFBD>åˆ<EFBFBD>ç­å­<EFBFBD>è·¯ç”?*/}
<Route path="screening/title">
<Route index element={<Navigate to="settings" replace />} />
<Route path="settings" element={<TitleScreeningSettings />} />
@@ -136,11 +136,11 @@ export default ASLModule;
```
**改进**:
- ✅ 使用嵌套的 `<Route>` 标签显式声明层级关系
- `ASLLayout` 作为父路由
- `screening/title` 作为中间层
- `settings/workbench/results` 作为叶子路由
- ✅ 两个 `<Navigate>` 实现自动重定向
- âœ?使用嵌套çš?`<Route>` 标签显å¼<C3A5>声明å±çº§å…³ç³»
- �`ASLLayout` 作为父路�
- �`screening/title` 作为中间�
- âœ?`settings/workbench/results` 作为å<EFBFBD>¶å­<EFBFBD>路由
- âœ?两个 `<Navigate>` 实现自动é‡<EFBFBD>定å<EFBFBD>?
---
@@ -149,8 +149,8 @@ export default ASLModule;
**删除**: `frontend-v2/src/modules/asl/routes.tsx`
**原因**:
- 路由配置已经直接在 `index.tsx` 中实现
- `routes.tsx` 文件不再被引用
- 路由é…<EFBFBD>置已ç»<EFBFBD>ç´æŽ¥åœ?`index.tsx` 中实çŽ?
- `routes.tsx` æ‡ä»¶ä¸<EFBFBD>å†<EFBFBD>被引ç”?
- é<>¿å…<C3A5>维护两份路由é…<C3A9>ç½®
---
@@ -161,47 +161,47 @@ export default ASLModule;
```
1. 点击"AI智能æ‡çŒ®"
→ 进入 /literature
�进入 /literature
2. ASLModule 接收路径 ""
→ 渲染 ASLLayout(左侧导航 + Outlet
�渲染 ASLLayout(左侧导�+ Outlet�
3. index route 触å<C2A6>
<Navigate to="screening/title/settings" replace />
�<Navigate to="screening/title/settings" replace />
4. 路径å<E2809E>˜ä¸º /literature/screening/title/settings
ASLLayout 保持显示
Outlet 渲染 TitleScreeningSettings 组件
â†?ASLLayout ä¿<EFBFBD>æŒ<EFBFBD>显示
�Outlet 渲染 TitleScreeningSettings 组件
5. 用户看到完整页面:
┌─────────────────────────────────────────┐
│ 左侧导航 │ 设置与启动页面
(ASL) (PICOS + Excel上传)
└─────────────────────────────────────────┘
5. 用户çœåˆ°å®Œæ•´é¡µé<EFBFBD>¢ï¼?
┌─────────────────────────────────────────�
â”?左侧导航 â”? 设置与å<C5BD>¯åЍ页é<C2B5>? â”?
�(ASL) � (PICOS + Excel上传) �
└─────────────────────────────────────────�
```
### 路由匹é…<C3A9>æµè¯•
| 路径 | 匹é…<C3A9>结果 | 显示组件 |
|------|---------|---------|
| `/literature` | index route | Navigate settings |
| `/literature/screening/title` | index route | Navigate settings |
| `/literature/screening/title/settings` | | TitleScreeningSettings |
| `/literature/screening/title/workbench` | | TitleScreeningWorkbench |
| `/literature/screening/title/results` | | TitleScreeningResults |
| `/literature` | index route | Navigate �settings |
| `/literature/screening/title` | index route | Navigate �settings |
| `/literature/screening/title/settings` | �| TitleScreeningSettings |
| `/literature/screening/title/workbench` | �| TitleScreeningWorkbench |
| `/literature/screening/title/results` | �| TitleScreeningResults |
---
## 📊 ä¿®å¤<C3A5>效果
### 修复前 ❌
### ä¿®å¤<EFBFBD>å‰?â<>?
- 页é<C2B5>¢ç©ºç™½
- 控制台警告
- 控制å<EFBFBD>°è­¦å?
- 路由无法正确渲染
### 修复后 ✅
### ä¿®å¤<EFBFBD>å<EFBFBD>?âœ?
- 左侧导航正常显示
- "设置与启动"页面完整渲染
- "设置与å<EFBFBD>¯åŠ?页é<C2B5>¢å®Œæ•´æ¸²æŸ“
- PICOS表å<C2A8>•å<E280A2>¯ä»¥æ­£å¸¸å¡«å†™
- 无控制å<C2B6>°è­¦åŠ
@@ -223,17 +223,17 @@ export default ASLModule;
const Parent = () => (
<div>
<Sidebar />
<Outlet /> {/* 子路由渲染位置 */}
<Outlet /> {/* å­<EFBFBD>路由渲染ä½<EFBFBD>ç½?*/}
</div>
);
```
3. **不能用 `map` 渲染嵌套路由**:
3. **ä¸<EFBFBD>能ç”?`map` 渲染嵌套路由**:
```tsx
// ❌ 错误
// â<EFBFBD>?错误
{routes.map(r => <Route key={r.path} {...r} />)}
// ✅ 正确
// �正确
<Route path="parent" element={<Parent />}>
<Route path="child" element={<Child />} />
</Route>
@@ -243,51 +243,51 @@ const Parent = () => (
1. **`tip` 属性的é™<C3A9>制**:
```tsx
// ❌ 普通模式不支持 tip
<Spin size="large" tip="加载中..." />
// â<EFBFBD>?普通模å¼<C3A5>ä¸<C3A4>支æŒ<C3A6> tip
<Spin size="large" tip="加载�.." />
// ✅ 方案1: 移除 tip
// âœ?æ¹æ¡ˆ1: 移除 tip
<Spin size="large" />
// ✅ 方案2: 使用 fullscreen
<Spin size="large" tip="加载中..." fullscreen />
// âœ?æ¹æ¡ˆ2: 使用 fullscreen
<Spin size="large" tip="加载�.." fullscreen />
// ✅ 方案3: 自定义文本
// âœ?æ¹æ¡ˆ3: 自定义文æœ?
<div>
<Spin size="large" />
<div className="mt-2">...</div>
<div className="mt-2">加载�..</div>
</div>
```
---
## ✅ 验收清单
## âœ?验收清å<E280A6>
- [x] 点击"AI智能文献"能进入模块
- [x] 左侧导航正常显示7个菜单
- [x] 点击"AI智能æ‡çŒ®"能è¿å…¥æ¨¡å<C2A1>?
- [x] 左侧导航正常显示7个è<EFBFBD>œå<EFBFBD>?
- [x] ‡é¢˜æ˜è¦<C3A8>åˆ<C3A5>ç­"展开3个å­<C3A5>è<EFBFBD>œå<C593>
- [x] 默认显示"设置与启动"页面
- [x] PICOS表单完整显示6-8行TextArea
- [x] 无浏览器控制台警告/错误
- [x] 点击其他子菜单可以正常跳转
- [x] 默认显示"设置与å<C5BD>¯åŠ?页é<C2B5>¢
- [x] PICOS表å<EFBFBD>•完整显示ï¼?-8行TextAreaï¼?
- [x] æ— æµ<EFBFBD>览器控制å<EFBFBD>°è­¦å?错误
- [x] ç¹å‡»å…¶ä»å­<EFBFBD>è<EFBFBD>œå<EFBFBD>•å<EFBFBD>¯ä»¥æ­£å¸¸è·³è½?
---
## 🎉 ä¿®å¤<C3A5>完æˆ<C3A6>
**ä¿®å¤<C3A5>æ‡ä»¶**:
1. `MainLayout.tsx` - 移除Spin的tip属性
2. `asl/index.tsx` - 重写嵌套路由
3. ✅ 删除 `asl/routes.tsx`
1. �`MainLayout.tsx` - 移除Spin的tip属�
2. âœ?`asl/index.tsx` - é‡<EFBFBD>写嵌套路由
3. �删除 `asl/routes.tsx`
**ä¿®å¤<C3A5>æ—¶é—´**: 15分éŸ
**问题复杂度**: ⭐⭐⭐ (中等)
**修复质量**: ⭐⭐⭐⭐⭐ (完美)
**问题å¤<EFBFBD>æ<EFBFBD>åº?*: â­<C3A2>â­<C3A2>â­?(中等)
**ä¿®å¤<EFBFBD>è´¨é‡<EFBFBD>**: â­<C3A2>â­<C3A2>â­<C3A2>â­<C3A2>â­?(完美)
---
**ä¿®å¤<C3A5>完æˆ<C3A6>æ—¶é—´**: 2025-11-18 22:15
**下一步**: 继续 Week 2 Day 2 开发
**下一æ­?*: ç»§ç»­ Week 2 Day 2 å¼€å<EFBFBD>?