Files
AIclinicalresearch/docs/04-开发规范/02-API设计规范.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
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.
# API霈曇恣閫<E681A3><E996AB>
> **<2A><>𧋦嚗?* v2.0
> **<2A><><EFBFBD>擧凒<E693A7><EFBFBD>** 2025-11-06
> **API憌擧聢嚗?* RESTful API
> **<2A><EFBFBD>URL嚗?* `http://localhost:3001/api/v1`
> **<2A><><EFBFBD><E98D82>凒嚗?* 撟喳蝱撅?+ <20><EFBFBD>撅?+ 銝𡁜𦛚璅<E79285>撅?
---
## <20><> 霈曇恣<E69B87><EFBFBD>
### API First<73><EFBFBD>
- <20>?<3F><>挽霈PI嚗<49><E59A97>摰䂿緵<E482BF><EFBFBD>
- <20>?API<50><EFBFBD><E887AC>𡒊垢<F0A1928A><E59EA2><EFBFBD>蝥?
- <20>?API<50>䀹凒<E480B9><E58792><EFBFBD><E996AC><EFBFBD>祆綉<E7A586>?
- <20>?<3F><><EFBFBD>𡅅PI<50><EFBFBD><E8B3AA><EFBFBD>獢?
### RESTful霈曇恣
- <20>?雿輻鍂HTTP<54><EFBFBD>銵函內<E587BD><EFBFBD>嚗𠃑ET<45><54>OST<53><54>UT<55><54>ELETE嚗?
- <20>?URL銵函內韏<E585A7><E99F8F>嚗䔶<E59A97>銵函內<E587BD><EFBFBD>
- <20>?雿輻鍂憭齿㺭<E9BDBF><EFBFBD>銵函內韏<E585A7><E99F8F><EFBFBD><EFBFBD><EFBFBD>
- <20>?撋<><E6928B><EFBFBD><E99F8F>銝滩<E98A9D>餈?撅?
- <20>?雿輻鍂HTTP<54><EFBFBD><E59786><EFBFBD>銵函內蝏𤘪<E89D8F>
### <20><EFBFBD><EFBFBD><E996AB>
- <20>?URL雿輻鍂撠誩<E692A0>摮埈<E691AE><E59F88><EFBFBD>摮㛖泵嚗ɑebab-case嚗?
- <20>?<3F>亥砭<E4BAA5><E7A0AD>㺭雿輻鍂撽澆陸<E6BE86><EFBFBD>嚗ẾamelCase嚗?
- <20>?JSON摮埈挾雿輻鍂撽澆陸<E6BE86><EFBFBD>嚗ẾamelCase嚗?
---
## <20>㴓 URL霈曇恣閫<E681A3><E996AB>
### 頝臬<E9A09D><E887AC><EFBFBD>
```
/api/v{version}/{module}/{resource}/{id?}/{action?}
蝷箔<EFBFBD>嚗?
/api/v1/literature/projects # <20><EFBFBD><E79195><EFBFBD>讃憿寧𤌍<E5AFA7>𡑒”
/api/v1/literature/projects/123 # <20><EFBFBD>ID=123<32><33><EFBFBD>?
/api/v1/literature/projects/123/export # 撖澆枂憿寧𤌍嚗<F0A48C8D>𢆡雿頣<E99BBF>
```
### 璅<E79285><E288AA><EFBFBD>
| 璅<E79285> | 頝舐眏<E88890><EFBFBD> | 蝷箔<E89DB7> |
|------|---------|------|
| 霈方<E99C88> | `/auth` | `/api/v1/auth/login` |
| <20><EFBFBD> | `/users` | `/api/v1/users/me` |
| AI<41><EFBFBD> | `/chat` | `/api/v1/chat/conversations` |
| <20><EFBFBD>雿?| `/agents` | `/api/v1/agents` |
| AI<41><49>讃 | `/literature` | `/api/v1/literature/projects` |
| <20><EFBFBD>摨?| `/knowledge-bases` | `/api/v1/knowledge-bases` |
| <20>唳旿皜<E697BF><E79A9C> | `/data-cleaning` | `/api/v1/data-cleaning/projects` |
| 蝏蠘恣<E8A098><E681A3><EFBFBD> | `/analysis` | `/api/v1/analysis/projects` |
| 蝏蠘恣撌亙<E6928C> | `/tools` | `/api/v1/tools` |
| 蝔蹂辣摰⊥䰻 | `/review` | `/api/v1/review/tasks` |
| LLM蝵穃<E89DB5> | `/llm` | `/api/v1/llm/chat` |
| 蝞∠<E89D9E>蝡?| `/admin` | `/api/v1/admin/users` |
### 韏<><E99F8F><EFBFBD><EFBFBD>
**<EFBFBD>?甇<>蝷箔<E89DB7>嚗?*
```
GET /api/v1/literature/projects # <20><EFBFBD><E79195>𡑒”
GET /api/v1/literature/projects/:id # <20><EFBFBD>霂行<E99C82>
POST /api/v1/literature/projects # <20>𥕦遣
PUT /api/v1/literature/projects/:id # <20>湔鰵
DELETE /api/v1/literature/projects/:id # <20>𣳇膄
GET /api/v1/literature/projects/:id/items # <20><EFBFBD>憿寧𤌍銝讠<E98A9D><E8AEA0><EFBFBD>
POST /api/v1/literature/projects/:id/items/import # 撖澆<E69296><E6BE86><EFBFBD>
POST /api/v1/literature/projects/:id/screening/execute # <20><EFBFBD>蝑偦<E89D91>?
```
**<EFBFBD>?<3F>躰秤蝷箔<E89DB7>嚗?*
```
POST /api/v1/literature/getProjects # 雿輻鍂<E8BCBB><EFBFBD>
POST /api/v1/literature/createProject # 雿輻鍂<E8BCBB><EFBFBD>
GET /api/v1/literature/project # <20>閙㺭敶<E695B6>
GET /api/v1/literatureProjectList # 撽澆陸<E6BE86><EFBFBD>
```
---
## <20>圲 HTTP<54><EFBFBD><EFBFBD><E996AB>
### <20><EFBFBD>雿輻鍂
| <20><EFBFBD> | <20><EFBFBD>?| <20>臬炏撟<E7828F><E6929F> | <20>臬炏摰匧<E691B0> |
|------|------|---------|---------|
| **GET** | <20><EFBFBD><EFBFBD><E99F8F> | <20>?| <20>?|
| **POST** | <20>𥕦遣韏<E981A3><E99F8F> | <20>?| <20>?|
| **PUT** | 摰峕㟲<E5B395>湔鰵韏<E9B0B5><E99F8F> | <20>?| <20>?|
| **PATCH** | <20><EFBFBD><E585B8>湔鰵韏<E9B0B5><E99F8F> | <20>?| <20>?|
| **DELETE** | <20>𣳇膄韏<E88684><E99F8F> | <20>?| <20>?|
### <20><EFBFBD>蝷箔<E89DB7>
```http
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡑒
GET /api/v1/literature/projects
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GET /api/v1/literature/projects/123
# <EFBFBD>𥕦<EFBFBD><EFBFBD>
POST /api/v1/literature/projects
Content-Type: application/json
{ "name": "<EFBFBD><EFBFBD>?, "description": "..." }
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PUT /api/v1/literature/projects/123
Content-Type: application/json
{ "name": "<EFBFBD>", "description": "..." }
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PATCH /api/v1/literature/projects/123
Content-Type: application/json
{ "name": "<EFBFBD><EFBFBD><EFBFBD>? }
# <EFBFBD>𣳇<EFBFBD><EFBFBD>
DELETE /api/v1/literature/projects/123
```
---
## <20><> <20><EFBFBD><E59786><EFBFBD><EFBFBD><E996AB>
### <20><><EFBFBD><EFBFBD><EFBFBD><E59786><EFBFBD>
| <20><EFBFBD><E59786><EFBFBD> | <20><EFBFBD> | 雿輻鍂<E8BCBB>箸艶 |
|--------|------|---------|
| **200** | OK | <20>𣂼<EFBFBD>餈𥪜<E9A488><F0A5AA9C>唳旿 |
| **201** | Created | <20>𣂼<EFBFBD><F0A382BC>𥕦遣韏<E981A3><E99F8F> |
| **204** | No Content | <20>𣂼<EFBFBD><EFBFBD><E99BBF>餈𥪜<E9A488><F0A5AA9C>唳旿嚗<E697BF><E59A97><EFBFBD>𣳇膄嚗?|
| **400** | Bad Request | 霂瑟<E99C82><E7919F><EFBFBD><EFBFBD>躰秤 |
| **401** | Unauthorized | <20>芾恕霂<E68195><E99C82>瘝⊥<E7989D>Token<65>巁oken餈<6E><E9A488>嚗?|
| **403** | Forbidden | <20><EFBFBD><E4ADBE><EFBFBD>撌脰恕霂<E68195><E99C82><EFBFBD><EFBFBD><EFBFBD>銝滩雲嚗?|
| **404** | Not Found | 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?|
| **409** | Conflict | 韏<><E99F8F><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD><E6BB9A>𥕦遣嚗?|
| **422** | Unprocessable Entity | 霂凋<E99C82><E5878B>躰秤嚗<E7A7A4><E59A97>撉諹<E69289>憭梯揖嚗?|
| **429** | Too Many Requests | 霂瑟<E99C82><EFBFBD><E9A488>憸𤑳<E686B8><EFBFBD><E59A97><EFBFBD><E7989A> |
| **500** | Internal Server Error | <20>滚𦛚<E6BB9A><EFBFBD>霂?|
### <20><EFBFBD><E59786><EFBFBD>雿輻鍂蝷箔<E89DB7>
```typescript
// 200 OK - <20>𣂼<EFBFBD><F0A382BC><EFBFBD><E79195>唳旿
res.status(200).json({ success: true, data: projects });
// 201 Created - <20>𣂼<EFBFBD><F0A382BC>𥕦遣韏<E981A3><E99F8F>
res.status(201).json({ success: true, data: newProject });
// 204 No Content - <20>𣂼<EFBFBD><F0A382BC>𣳇膄嚗<E88684><E59A97><EFBFBD><EFBFBD>捆餈𥪜<E9A488>嚗?
res.status(204).send();
// 400 Bad Request - <20><><EFBFBD>躰秤
res.status(400).json({
success: false,
error: { code: 'INVALID_PARAMS', message: '<27><><EFBFBD>躰秤' }
});
// 401 Unauthorized - <20>芾恕霂?
res.status(401).json({
success: false,
error: { code: 'UNAUTHORIZED', message: '霂瑕<E99C82><E79195><EFBFBD>' }
});
// 403 Forbidden - <20><EFBFBD><E4ADBE>?
res.status(403).json({
success: false,
error: { code: 'FORBIDDEN', message: '<27><EFBFBD>霈輸䔮' }
});
// 404 Not Found - 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?
res.status(404).json({
success: false,
error: { code: 'NOT_FOUND', message: '韏<><E99F8F>銝滚<E98A9D><E6BB9A>? }
});
// 422 Unprocessable Entity - 撉諹<E69289>憭梯揖
res.status(422).json({
success: false,
error: {
code: 'VALIDATION_ERROR',
message: '<EFBFBD><EFBFBD><EFBFBD>',
details: [...]
}
});
```
---
## <20><> <20><EFBFBD><E6BB9A><EFBFBD><EFBFBD><E996AB>
### 蝏煺<E89D8F><E785BA><EFBFBD><E6BB9A><EFBFBD> 潃?敹<><EFBFBD><EFBFBD>
**<EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD>嚗?*
```json
{
"success": true,
"data": {
// 摰鮋<E691B0><E9AE8B>唳旿
},
"message": "<22><EFBFBD><E6BBA2>𣂼<EFBFBD>"
}
```
**<EFBFBD>躰秤<EFBFBD><EFBFBD>嚗?*
```json
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "<22>躰秤靽⊥<E99DBD>",
"details": [...] // <20><EFBFBD><EFBFBD>霂衣<E99C82><E8A1A3>躰秤靽⊥<E99DBD>
}
}
```
### <20>𡑒”<F0A19192>唳旿<E594B3><EFBFBD>
```json
{
"success": true,
"data": {
"items": [
{ "id": 1, "name": "憿寧𤌍1" },
{ "id": 2, "name": "憿寧𤌍2" }
],
"pagination": {
"page": 1,
"pageSize": 10,
"total": 100,
"totalPages": 10,
"hasNext": true,
"hasPrev": false
}
},
"message": "<22><EFBFBD><E79195>𣂼<EFBFBD>"
}
```
### 撉諹<E69289><E8ABB9>躰秤<E8BAB0><EFBFBD>
```json
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "<22><>㺭撉諹<E69289>憭梯揖",
"details": [
{
"field": "email",
"message": "<22>桃拳<E6A183><EFBFBD>銝齿迤蝖?
},
{
"field": "password",
"message": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6?
}
]
}
}
```
---
## <20><> 霈方<E99C88>銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD>?
### JWT霈方<E99C88>
**1. <20><EFBFBD><E9A483><EFBFBD>Token**
```http
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
# Response
{
"success": true,
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 604800, // 7<EFBFBD>𡜐<EFBFBD>
"user": {
"id": 123,
"email": "user@example.com",
"name": "<EFBFBD>",
"role": "user"
}
}
}
```
**2. 雿輻鍂Token霈輸䔮API**
```http
GET /api/v1/literature/projects
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
**3. Token餈<6E><E9A488><EFBFBD><E686AD>**
```http
# Token<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?01
{
"success": false,
"error": {
"code": "TOKEN_EXPIRED",
"message": "Token<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
}
}
# refreshToken<EFBFBD>
POST /api/v1/auth/refresh
Content-Type: application/json
{
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
```
### <20><><EFBFBD><EFBFBD><EFBFBD>
| 蝡舐<E89DA1>蝐餃<E89D90> | <20><><EFBFBD>恕霂?| 閫坿𠧧閬<F0A0A7A7><E996AC> |
|---------|---------|---------|
| <20><EFBFBD>蝡舐<E89DA1> | <20>?| <20>?|
| <20><EFBFBD>蝡舐<E89DA1> | <20>?| user |
| 蝞∠<E89D9E>蝡舐<E89DA1> | <20>?| admin |
**蝷箔<E89DB7>嚗?*
```typescript
// <20><EFBFBD>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD><EFBFBD>霈方<E99C88>嚗?
POST /api/v1/auth/login
POST /api/v1/auth/register
// <20><EFBFBD>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD>恕霂<E68195><E99C82>user閫坿𠧧嚗?
GET /api/v1/literature/projects
POST /api/v1/literature/projects
// 蝞∠<E89D9E>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD>恕霂<E68195><E99C82>admin閫坿𠧧嚗?
GET /api/v1/admin/users
POST /api/v1/admin/users/:id/disable
```
---
## <20><> <20><>△閫<E296B3><E996AB>
### 霂瑟<E99C82><E7919F><EFBFBD>
```
GET /api/v1/literature/projects?page=1&pageSize=20&sortBy=createdAt&sortOrder=desc
Query<EFBFBD><EFBFBD>㺭嚗?
- page: 憿萇<E686BF><EFBFBD><E59A97>霈?嚗?
- pageSize: 瘥誯△<E8AAAF><EFBFBD><EFBFBD><E59A97>霈?0嚗峕<E59A97>憭?00嚗?
- sortBy: <20><EFBFBD>摮埈挾嚗<E68CBE><E59A97>霈勺reatedAt嚗?
- sortOrder: <20><EFBFBD><E98DA6><EFBFBD>嚗Òsc/desc嚗屸<E59A97>霈千esc嚗?
```
### <20><EFBFBD><E6BB9A><EFBFBD>
```json
{
"success": true,
"data": {
"items": [...],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 100,
"totalPages": 5,
"hasNext": true,
"hasPrev": false
}
}
}
```
---
## <20><> 蝑偦<E89D91><EFBFBD><E58A90>𦦵揣閫<E68FA3><E996AB>
### 蝑偦<E89D91><EFBFBD><E58CA7>?
```
GET /api/v1/literature/projects?status=active&keyword=撉刻捶<E588BB>𤩺𠹭
Query<EFBFBD><EFBFBD>㺭嚗?
- status: <20><EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>active/inactive嚗?
- keyword: <20>喲睸霂齿<E99C82><E89D9D><EFBD87>𦦵揣name<6D>𩥇escription摮埈挾嚗?
- userId: <20><EFBFBD>ID蝑偦<E89D91><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1>
- startDate/endDate: <20><EFBFBD><E4BAA4><EFBFBD>凒蝑偦<E89D91>?
```
### <20>𦦵揣<F0A6A6B5><EFBFBD>
```json
{
"success": true,
"data": {
"items": [...],
"pagination": {...},
"filters": {
"status": "active",
"keyword": "撉刻捶<E588BB>𤩺𠹭"
}
}
}
```
---
## <20>𩤃<EFBFBD> <20>躰秤<E8BAB0><E7A7A4>挽霈?
### <20><><EFBFBD><EFBFBD>躰秤<E8BAB0>?
| <20>躰秤<E8BAB0>?| HTTP<54><EFBFBD>?| 霂湔<E99C82> |
|--------|---------|------|
| `VALIDATION_ERROR` | 422 | <20><>㺭撉諹<E69289>憭梯揖 |
| `UNAUTHORIZED` | 401 | <20>芾恕霂?|
| `TOKEN_EXPIRED` | 401 | Token餈<6E><E9A488> |
| `FORBIDDEN` | 403 | <20><EFBFBD><E4ADBE>?|
| `NOT_FOUND` | 404 | 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?|
| `ALREADY_EXISTS` | 409 | 韏<><E99F8F>撌脣<E6928C><E884A3>?|
| `QUOTA_EXCEEDED` | 429 | <20><EFBFBD><EFBFBD><E9A09E> |
| `INTERNAL_ERROR` | 500 | <20>滚𦛚<E6BB9A><EFBFBD>霂?|
### 銝𡁜𦛚<F0A1819C>躰秤<E8BAB0>?
```typescript
// 璅<E79285><E288AA><EFBFBD><E5ADB5>躰秤<E8BAB0><E7A7A4><EFBFBD><EFBFBD><EFBFBD><E6BBA8><EFBFBD>嚗?
ASL_IMPORT_FAILED // AI<41><49>讃嚗𡁜紡<F0A1819C>亙仃韐?
ASL_SCREENING_IN_PROGRESS // AI<41><49>讃嚗𡁶<E59A97><F0A181B6><EFBFBD>銵䔶葉
PKB_QUOTA_EXCEEDED // <20><EFBFBD>摨橒<E691A8><E6A992><EFBFBD><EFBFBD><E9A09E>
LLM_QUOTA_EXCEEDED // LLM嚗𡁻<E59A97>憸肽<E686B8><E882BD>?
```
---
## <20><> <20><EFBFBD>隡睃<E99AA1><EFBFBD><E996AB>
### 1. <20><>△敹<E296B3>
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵冽𦻖<EFBFBD><EFBFBD><EFBFBD>憿餅𣈲<EFBFBD><EFBFBD><EFBFBD>憿蛛<EFBFBD>
- 暺䁅恕pageSize=10
- <20><>憭吠ageSize=100
- 蝳<>迫銝<E8BFAB>甈⊥<E79488><EFBFBD><E689AF>𧼮<EFBFBD><F0A7BCAE>冽㺭<E586BD>?
```
### 2. 摮埈挾餈<E68CBE>
```
GET /api/v1/users/me?fields=id,name,email
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摮埈挾嚗<EFBFBD><EFBFBD>撠烐㺭<EFBFBD><EFBFBD>颲?
```
### 3. 蝻枏<E89DBB>蝑𣇉裦
```http
# <EFBFBD>?
Cache-Control: public, max-age=300
# ETag
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
# 𥪜<EFBFBD>304 Not Modified
```
---
## <20>?璉<><E79289><EFBFBD><E4BAA4>?
**霈曇恣<E69B87>蚊PI<50><EFBFBD>憿餅<E686BF><E9A485><EFBFBD>**
- [ ] URL蝚血<E89D9A>RESTful閫<6C><E996AB><EFBFBD><EFBFBD><EFBFBD>霂?憭齿㺭嚗?
- [ ] 雿輻鍂甇<E98D82><EFBFBD><EFBC86>TTP<54><EFBFBD>嚗𠃑ET/POST/PUT/DELETE嚗?
- [ ] 雿輻鍂甇<E98D82><EFBFBD><EFBC86>TTP<54><EFBFBD><E59786><EFBFBD>
- [ ] <20><EFBFBD><E6BB9A><EFBFBD>蝚血<E89D9A>蝏煺<E89D8F><EFBFBD><E996AB>嚗ìuccess + data/error嚗?
- [ ] <20><><EFBFBD>恕霂<E68195><E99C82><EFBFBD>亙藁璉<E89781><E79289>仔WT Token
- [ ] <20><><EFBFBD><E996AC><EFBFBD><EFBFBD><E99E9F>亙藁璉<E89781><E79289>亦鍂<E4BAA6><EFBFBD><E79181>?
- [ ] <20>𡑒”<F0A19192>亙藁<E4BA99><EFBFBD><E88880><EFBFBD>
- [ ] <20>𡑒”<F0A19192>亙藁<E4BA99><EFBFBD><E88880><EFBFBD>
- [ ] <20>躰秤<E8BAB0><EFBFBD><E6BB9A><EFBFBD><EFBFBD>𡒊<F0A1928A><EFBC86><EFBFBD>霂舐<E99C82><E88890><EFBFBD>霂臭縑<E887AD>?
- [ ] <20><><EFBFBD>𡅅PI<50><EFBFBD><E8B3A3><EFBFBD>﹝霂湔<E99C82>
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
**<EFBFBD><EFBFBD>嚗?*
- [API頝舐眏<EFBFBD><EFBFBD>](./04-API頝舐眏<E88890><EFBFBD>.md) 潃?<3F><EFBFBD><E4BAA6><EFBFBD><EFBFBD>𡅅PI蝡舐<E89DA1>
**璅⊥踎嚗?*
- [API霈曇恣璅⊥踎](../_templates/API霈曇恣-璅⊥踎.md)
**<EFBFBD><EFBFBD><EFBFBD>𡑒挽霈∴<EFBFBD>**
- [撟喳蝱<E596B3><EFBFBD><EFBFBD>(../01-撟喳蝱<E596B3><EFBFBD>撅?README.md)
- [<5B>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>(../02-<2D>𡁶鍂<F0A181B6><EFBFBD>撅?README.md)
- [銝𡁜𦛚璅<E79285><EFBFBD>(../03-銝𡁜𦛚璅<E79285>/README.md)
---
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD>** 2025-11-06
**蝏湔擪鈭綽<E988AD>** <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>
**<EFBFBD><EFBFBD>𧋦嚗?* v2.0