Files
AIclinicalresearch/docs/05-部署文档/09-Python微服务-SAE部署操作手册.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

727 lines
22 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.
# Python 敺格<E695BA><E6A0BC>?SAE <20>函蔡<E587BD><EFBFBD><E6BBA2><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦**: v1.0
**<EFBFBD>𥕦遣<EFBFBD>園𡢿**: 2024-12-24
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>凒**: AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - Python敺格<E695BA><E6A0BC><EFBFBD>extraction_service嚗?
**<EFBFBD><EFBFBD>蝐餃<EFBFBD>**: 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SAE嚗?
**<EFBFBD><EFBFBD>霂餉<EFBFBD>?*: 餈鞟輕撌亦<E6928C><EFBFBD><E692A3><EFBFBD><EFBFBD><EFBFBD>穃極蝔见<E89D94>
---
## <20><> <20><EFBFBD>
1. [<5B>滨蔭璉<E894AD><E79289><EFBFBD><E4BAA4>騟(#<23>滨蔭璉<E894AD><E79289><EFBFBD><E4BAA4>?
2. [<5B>𥕦遣SAE摨𠉛鍂嚗Áeb<65><EFBFBD><E689B9><EFBFBD>](#<23>𥕦遣sae摨𠉛鍂web<65><EFBFBD><E689B9>?
3. [<5B>函蔡<E587BD>𡡞<EFBFBD><EFBFBD>(#<23>函蔡<E587BD>𡡞<EFBFBD>霂?
4. [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>滨蔭](#<23><><EFBFBD><EFBFBD>滨蔭)
5. [撣貉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>埝䰻](#撣貉<E692A3><E8B289><EFBFBD><E6A185>埝䰻)
---
## <20>滨蔭璉<E894AD><E79289><EFBFBD><E4BAA4>?
### <20>?敹<><E695B9><EFBFBD><E99F8F>蝖株恕
<EFBFBD><EFBFBD>憪见<EFBFBD>撱搴AE摨𠉛鍂<EFBFBD><EFBFBD>霂瑞霈支誑銝贝<EFBFBD>皞𣂼歇<EFBFBD><EFBFBD><EFBFBD>撠梁貌嚗?
| 韏<><E99F8F>蝐餃<E89D90> | 蝖株恕憿?| <20><EFBFBD>雿滨蔭 |
|---------|-------|---------|
| **Docker<65>𨅯<EFBFBD>** | <20>?撌脫綫<E884AB><E7B6AB>秐ACR | [<EFBFBD>函蔡餈𥕦漲<EFBFBD><EFBFBD>.md - 2.1 ACR摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#21-acr摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>) |
| **VPC蝵𤑳<E89DB5>** | <20>?VPC ID<49><44>Switch ID | [<EFBFBD>函蔡餈𥕦漲<EFBFBD><EFBFBD>.md - 2.2 VPC蝵𤑳<E89DB5>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#22-vpc蝵𤑳<E89DB5>銝篺at蝵穃<E89DB5>) |
| **摰匧<E691B0>蝏?* | <20>?摰匧<E691B0><EFBFBD>D | [<EFBFBD>函蔡餈𥕦漲<EFBFBD><EFBFBD>.md - 2.2 VPC蝵𤑳<E89DB5>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#22-vpc蝵𤑳<E89DB5>銝篺at蝵穃<E89DB5>) |
| **OSS摮睃<E691AE>** | <20>?AccessKey<65><79>ucket<65>滨妍 | [<EFBFBD>函蔡餈𥕦漲<EFBFBD><EFBFBD>.md - 2.5 OSS撖寡情摮睃<E691AE>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#25-oss撖寡情摮睃<E691AE>) |
| **SAE<41><EFBFBD>蝛粹𡢿** | <20>?<3F><EFBFBD>蝛粹𡢿ID | [<EFBFBD>函蔡餈𥕦漲<EFBFBD><EFBFBD>.md - 2.4 SAE摨𠉛鍂](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#24-sae-serverless摨𠉛鍂) |
### <20>𣑐 <20>𨅯<EFBFBD>靽⊥<E99DBD>
```
<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>嚗ĀPC<EFBFBD><EFBFBD><EFBFBD>嚗㚁<EFBFBD>
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>𧋦嚗鯝1.0
<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>嚗?.12GB
<EFBFBD><EFBFBD>霂湔<EFBFBD>嚗䥪DF/Docx<63>𣂼<EFBFBD> + <20>唳旿皜<E697BF><E79A9C>嚗īandas/polars嚗?```
### <20><> 蝵𤑳<E89DB5><F0A491B3>滨蔭靽⊥<E99DBD>
```
VPC ID嚗鯝pc-2ze055cptkew9c38w4r06
vSwitch ID嚗鯝sw-2zevacop039bxrmj6yc0c嚗<63><EFBFBD>典躹F嚗?摰匧<E691B0><EFBFBD>D嚗窃g-2zedk6fi8sgmmcwdu7tu
<EFBFBD><EFBFBD>蝛粹𡢿嚗䬙n-beijing:test-airesearch
```
### <20><>儭?OSS<53>滨蔭靽⊥<E99DBD>
```
OSS_ACCESS_KEY_ID嚗匁TAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET嚗?iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_BUCKET嚗惨i-clinical-research
OSS_ENDPOINT嚗駅ss-cn-beijing-internal.aliyuncs.com
```
<EFBFBD>𩤃<EFBFBD> **摰匧<E691B0>霅血<E99C85>**嚗鋫ccessKey<65><EFBFBD><E88880>煺縑<E785BA><EFBFBD><EFBFBD>銁SAE<41><EFBFBD><E887AC><EFBFBD>銝剝<E98A9D>蝵殷<E89DB5>銝滩<E98A9D><E6BBA9>𣂷漱<F0A382B7>蚣it<69>𡝗<EFBFBD><F0A19D97><EFBFBD><E595A3><EFBFBD>嚗?
---
## <20>𥕦遣SAE摨𠉛鍂嚗Áeb<65><EFBFBD><E689B9><EFBFBD>
### 甇仿炊 1嚗朞<E59A97><E69C9E>兄AE<41><EFBFBD><E689B9>?
1. <20><EFBFBD> [<5B><EFBFBD>鈭烐綉<E78390>嗅蝱](https://homenew.console.aliyun.com/)
2. <20>𦦵揣撟嗉<E6929F><E59789>?**Serverless 摨𠉛鍂撘閙<E69298> SAE**
3. 蝖株恕<E6A0AA><EFBFBD>銝?**<2A>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>**
4. <20>㗇𥋘<E39787><EFBFBD>蝛粹𡢿 **test-airesearch**
---
### 甇仿炊 2嚗𡁜<E59A97>撱箏<E692B1><E7AE8F>?
#### 2.1 <20>箸𧋦靽⊥<E99DBD><E28AA5>滨蔭
<EFBFBD>孵稬 **<2A>𥕦遣摨𠉛鍂** <20>厰僼嚗<E583BC><EFBFBD>嗘誑銝衤縑<E8A1A4><EFBFBD>
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **摨𠉛鍂<F0A0899B>滨妍** | `python-extraction-test` | 撱箄悅<E7AE84>?`-test` <20>𡒊<EFBFBD><F0A1928A><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD> |
| **摨𠉛鍂蝐餃<E89D90>** | **頧駁<E9A0A7><E9A781><EFBFBD><EFBFBD><EFBFBD>?* | 瘚贝<E7989A><E8B49D><EFBFBD>雿輻鍂頧駁<E9A0A7><E9A781><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鞉𧋦 |
| **<2A>函蔡<E587BD><EFBFBD>** | **<2A>𨅯<EFBFBD>** | <20>㗇𥋘摰孵膥<E5ADB5>𨅯<EFBFBD><F0A885AF>函蔡 |
<EFBFBD>孵稬 **銝衤<E98A9D>甇?*
---
#### 2.2 摨𠉛鍂<F0A0899B>函蔡<E587BD>滨蔭
##### <20>𨅯<EFBFBD><F0A885AF>滨蔭
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **<2A>𨅯<EFBFBD><F0A885AF><EFBFBD>** | 摰孵膥<E5ADB5>𨅯<EFBFBD><F0A885AF>滚𦛚 ACR嚗<52><E59A97><EFBFBD>㗇𥋘"<22><EFBFBD>銋厰<E98A8B><E58EB0>?嚗?| |
| **<2A>𨅯<EFBFBD><F0A885AF><EFBFBD>** | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0` | <20>𩤃<EFBFBD><>◆雿輻鍂VPC<50><43><EFBFBD><EFBFBD><EFBFBD><br><3E>𩤃<EFBFBD><><EFBFBD><E29786><EFBFBD><E98984>𧋦<EFBFBD>?`:v1.0` |
| **<2A>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦** | `v1.0` | <20><EFBFBD><E7AE8F><EFBFBD>𧋦<EFBFBD><EFBFBD>銝滩<E98A9D>雿輻鍂 `:latest`<br><3E>𩤃<EFBFBD><><E68692>銝齿<E98A9D>摰𡁶<E691B0><F0A181B6>砍噡嚗玺AE隡𡁻<E99AA1>霈支蝙<E694AF>?`:latest` 撖潸稲<E6BDB8><EFBFBD>憭梯揖 |
| **<2A>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88>** | **<2A><><EFBFBD><E996AC>蝵?* | <20>𩤃<EFBFBD> **<2A>喲睸甇仿炊**嚗𡁻<E59A97>蝵唧CR霈輸䔮<E8BCB8><EFBFBD><EFBFBD><E59A97>銝𧢲䲮嚗?|
##### <20><> <20>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88><E696B9>滨蔭嚗<E894AD><E59A97><EFBFBD>格郊撉歹<E69289>
**<2A>𩤃<EFBFBD><><E68692><EFBFBD>箇緵 `insufficient_scope: authorization failed` <20>躰秤嚗<E7A7A4><E59A97>憿駁<E686BF>蝵格迨憿?*
<EFBFBD><EFBFBD> **"<22>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88>"** <20>?**"蝘<><E89D98><EFBFBD>𨅯<EFBFBD>隞枏<E99A9E>"** <20>滨蔭憿對<E686BF>
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **<2A>𨅯<EFBFBD>隞枏<E99A9E><E69E8F><EFBFBD>** | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com` | <20><E88AB8>筻egistry<72><EFBFBD>嚗䔶<E59A97><E494B6><EFBFBD><EFBFBD><EFBFBD>蝛粹𡢿/隞枏<E99A9E><E69E8F>?|
| **<2A><EFBFBD><E586BD>?* | `gofeng117@163.com` | ACR<43><EFBFBD><E9A483><EFBFBD><E586BD>?|
| **撖<><E69296>** | `fengzhibo117` | ACR<43><EFBFBD><EFBFBD><E69296> |
<EFBFBD>働 **霂湔<E99C82>**嚗?- 餈嗘<E9A488><E59798><EFBFBD><E5899B><EFBFBD>SAE<41><EFBFBD><EFBFBD><E89D98><EFBFBD>𨅯<EFBFBD>
- 撖<><E69296>隡朞◤SAE<41><EFBFBD>摮睃<E691AE>嚗䔶<E59A97>隡𡁏<E99AA1><F0A1818F>?- <20><EFBFBD><E5899B><EFBFBD>嚗靀<E59A97>函蔡餈𥕦漲<F0A595A6><EFBFBD> - 2.1 ACR摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md#21-acr摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>)
##### 摨𠉛鍂摰硺<E691B0><E7A1BA>滨蔭
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **CPU** | 1<>?| `1000 millicores` |
| **<2A><><EFBFBD>** | 2GB | `2048 MB` |
| **摰硺<E691B0><E7A1BA>?* | 1 | <20>𩤃<EFBFBD><><EFBFBD><EFBFBD>1銝芸<E98A9D>靘页<E99D98>0銝芸<E98A9D>靘?<3F>滚𦛚<E6BB9A>𨀣迫 |
##### 摨𠉛鍂霈輸䔮霈曄蔭
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **摰孵膥蝡臬藁** | `8000` | Python FastAPI<50>滚𦛚蝡臬藁 |
| **<2A>讛悅蝐餃<E89D90>** | HTTP | |
| **<2A>臬炏撘<E7828F><E69298><EFBFBD>蝵𤏸挪<F0A48FB8>?* | **<2A>?* | 隞<><E99A9E>蝵𤏸挪<F0A48FB8><EFBFBD>鋡俏ode.js<6A>𡒊垢靚<E59EA2>鍂 |
<EFBFBD>孵稬 **銝衤<E98A9D>甇?*
---
#### 2.3 <20><EFBFBD><E887AC>滨蔭
##### <20><EFBFBD><E887AC><EFBFBD>
<EFBFBD>孵稬 **瘛餃<E7989B><E9A483><EFBFBD><E887AC><EFBFBD>**嚗屸<E59A97>𣂷葵瘛餃<E7989B>隞乩<E99A9E><E4B9A9>滨蔭嚗?
| <20><EFBFBD><E3979B>?| <20><EFBFBD><E3979B>?| 霂湔<E99C82> |
|--------|--------|------|
| `LOG_LEVEL` | `INFO` | <20><EFBFBD>蝥批<E89DA5> |
| `TEMP_DIR` | `/tmp/extraction_service` | 銝湔𧒄<E6B994><F0A79284><EFBFBD><EFBFBD> |
| `TZ` | `Asia/Shanghai` | <20>嗅躹霈曄蔭 |
| `SERVICE_NAME` | `python-extraction` | <20>滚𦛚<E6BB9A><F0A69B9A><EFBFBD> |
| `SERVICE_VERSION` | `v1.0` | <20><>𧋦<EFBFBD><F0A78BA6><EFBFBD> |
| `OSS_ACCESS_KEY_ID` | `LTAI5tB2Dt3NdvBL3G7nYGv7` | OSS霈輸䔮撖<E494AE>𤨎ID |
| `OSS_ACCESS_KEY_SECRET` | `1iSN9k39RkApP93QjUhC1DcPIeMG4V` | OSS霈輸䔮撖<E494AE>𤨎Secret |
| `OSS_BUCKET` | `ai-clinical-research` | OSS Bucket<65>滨妍 |
| `OSS_ENDPOINT` | `oss-cn-beijing-internal.aliyuncs.com` | OSS<53><53><EFBFBD>Endpoint |
<EFBFBD>𩤃<EFBFBD> **瘜冽<E7989C>**嚗?- <20><EFBFBD><E887AC><EFBFBD>銝剔<E98A9D> `OSS_ACCESS_KEY_SECRET` <20><EFBFBD><E88880>煺縑<E785BA><EFBFBD>SAE隡朞䌊<E69C9E><EFBFBD>撖?- <20><><EFBFBD>厩㴓憓<E3B493><E68693><EFBFBD><EFBFBD><E8AAAF>臭誑<E887AD><EFBFBD><E585B8><EFBFBD>蝵脣<E89DB5>靽格㺿
##### <20>亙熒璉<E78692><E79289>?
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **<2A>亙熒璉<E78692><E79289>交䲮撘?* | HTTP | |
| **<2A>亙熒璉<E78692><E79289>亥楝敺?* | `/api/health` | FastAPI<50>亙熒璉<E78692><E79289>亦垢<E4BAA6>?|
| **<2A>亙熒璉<E78692><E79289>亦垢<E4BAA6>?* | `8000` | |
| **<2A><EFBFBD>撱嗉<E692B1><E59789>園𡢿** | `40` 蝘?| 蝏䠷<E89D8F><E4A0B7>𤩺<EFBFBD><F0A4A9BA><EFBFBD><E7A18B>滚𦛚<E6BB9A>臬𢆡<E887AC>蹱𧒄<E8B9B1>?|
| **璉<><E79289>仿𡢿<E4BBBF>?* | `30` 蝘?| |
| **璉<><E79289><EFBFBD><E4BAA5>?* | `10` 蝘?| |
| **<2A>亙熒<E4BA99><E78692><EFBFBD>?* | `2` 甈?| 餈䂿賒2甈⊥<E79488><E28AA5><EFBFBD>銝箏<E98A9D>摨?|
| **銝滚<E98A9D>摨琿<E691A8><E790BF>?* | `3` 甈?| 餈䂿賒3甈仃韐亥<E99F90>銝箔<E98A9D><E7AE94>亙熒 |
<EFBFBD>孵稬 **銝衤<E98A9D>甇?*
---
#### 2.4 蝵𤑳<E89DB5><F0A491B3>滨蔭
| <20>滨蔭憿?| <20>?| 霂湔<E99C82> |
|--------|---|------|
| **銝𤘪<E98A9D>蝵𤑳<E89DB5>VPC** | `vpc-2ze055cptkew9c38w4r06` | ai-clinical-vpc |
| **<2A>𡁏<EFBFBD>鈭斗揢<E69697>漓Switch** | `vsw-2zevacop039bxrmj6yc0c` | <20>舐鍂<E88890>慚 |
| **摰匧<E691B0>蝏?* | `sg-2zedk6fi8sgmmcwdu7tu` | |
| **SLB<4C><EFBFBD>霈輸䔮** | **銝漤<E98A9D>蝵?* | 隞<><E99A9E>蝵𤏸挪<F0A48FB8>?|
<EFBFBD>孵稬 **銝衤<E98A9D>甇?*
---
#### 2.5 摨𠉛鍂<F0A0899B>笔𦶢<E7AC94><EFBFBD><E586BD>滨蔭嚗<E894AD><EFBFBD><EFBFBD>雿輻鍂暺䁅恕<E48185>喳虾嚗?
| <20>滨蔭憿?| 暺䁅恕<E48185>?| 霂湔<E99C82> |
|--------|--------|------|
| **<2A>臬𢆡頞<F0A286A1>𧒄<EFBFBD>園𡢿** | 300蝘?| <20>𨅯<EFBFBD><EFBFBD>之嚗屸<E59A97><EFBFBD><E996AC><EFBFBD>踹鍳<E8B8B9>冽𧒄<E586BD>?|
| **隡㗛<E99AA1><E3979B>𨀣㦤頞<E3A6A4>𧒄** | 30蝘?| 蝏坔<E89D8F><E59D94><EFBFBD><E585B8><EFBFBD><EFBFBD>敶枏<E695B6>霂瑟<E99C82><E7919F><EFBFBD>𧒄<EFBFBD>?|
<EFBFBD>孵稬 **銝衤<E98A9D>甇?*
---
#### 2.6 蝖株恕<E6A0AA>滨蔭
1. 隞𠉛<E99A9E><EFBFBD><E79289><EFBFBD><E4BAA4><EFBFBD>蝵桅★<E6A185>臬炏甇<E7828F>
2. <20><EFBFBD>蝖株恕嚗? - <20>?<3F>𨅯<EFBFBD><F0A885AF><EFBFBD>雿輻鍂VPC<50><43><EFBFBD><EFBFBD><EFBFBD>
- <20>?摰硺<E691B0><E7A1BA>?= 1嚗<31><E59A97><EFBFBD>?嚗? - <20>?OSS<53><EFBFBD><E887AC><EFBFBD>撌脤<E6928C>蝵? - <20>?<3F>亙熒璉<E78692><E79289>亥楝敺<E6A59D>蛹 `/api/health`
3. <20>孵稬 **<2A>𥕦遣摨𠉛鍂**
---
### 甇仿炊 3嚗𡁶<E59A97><EFBFBD><E695BA>蝵脣<E89DB5><E884A3>?
<EFBFBD>函蔡餈<EFBFBD><EFBFBD>憭抒漲<EFBFBD><EFBFBD>閬?**3-5<><35><EFBFBD>**嚗玺AE隡朞䌊<E69C9E><EFBFBD>銵䔶誑銝𧢲郊撉歹<E69289>
```
1. <20><EFBFBD>Docker<65>𨅯<EFBFBD><EFBFBD>漲2-3<><33><EFBFBD>嚗屸<E59A97><E5B1B8>?.12GB嚗? <20><EFBFBD> 雿輻鍂VPC<50><43><EFBFBD>嚗屸<E59A97>笔漲颲<E6BCB2>
2. <20>臬𢆡摰孵膥嚗<E886A5>漲30蝘𡜐<E89D98>
<20><EFBFBD> <20><EFBFBD>Dockerfile銝剔<E98A9D>CMD<4D>賭誘
3. <20>亙熒璉<E78692><E79289><EFBFBD>蝥?-2<><32><EFBFBD>嚗? <20><EFBFBD> 蝑匧<E89D91>40蝘鍦<E89D98><EFBFBD>憪𧢲<E686AA><F0A7A2B2>?/api/health
4. 摨𠉛鍂餈鞱<E9A488>銝哨<E98A9D><E593A8>函蔡<E587BD>𣂼<EFBFBD>嚗? <20><EFBFBD> 摰硺<E691B0><E7A1BA><EFBFBD><E59786><EFBFBD>銝?餈鞱<E9A488>銝?
```
**摰墧𧒄<E5A2A7>烐綉<E78390>函蔡餈𥕦漲**嚗?- SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F>䀹凒霈啣<E99C88> <20>?<3F><EFBFBD>霂行<E99C82>
**<2A><EFBFBD><E4BAA6>函蔡<E587BD><EFBFBD>**嚗?- SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F><EFBFBD><E4BA99>亥砭 <20>?摰墧𧒄<E5A2A7><EFBFBD>
**憸<><E686B8><EFBFBD><EFBFBD><E4BA99><EFBFBD>捆**嚗?```log
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
```
---
## <20>函蔡<E587BD>𡡞<EFBFBD>霂?
### 甇仿炊 1嚗朞繮<E69C9E><EFBFBD>蝵𤏸挪<F0A48FB8>桀𧑐<E6A180><F0A79190>
**<EFBFBD>𩤃<EFBFBD> <20>喲睸甇仿炊嚗𡁜<E59A97>憿颱<E686BF>SAE<41><EFBFBD><E689B9>啗繮<E59597>𣇉<EFBFBD>摰𧼮<E691B0>蝵飡P**
#### <20><EFBFBD><E79195><EFBFBD>嚗?
1. SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂<F0A0899B>𡑒” <20>?<3F>孵稬 `python-extraction-test`
2. 餈𥕦<E9A488>摨𠉛鍂霂行<E99C82>憿?3. <20><EFBFBD> **摰硺<E691B0><E7A1BA>𡑒”** <20>?**<2A>箸𧋦靽⊥<E99DBD>**
4. <20><EFBFBD> **<EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>**
**憸<><E686B8><EFBFBD><EFBFBD>**嚗?```
<EFBFBD><EFBFBD><EFBFBD>IP嚗?72.17.x.x
蝡臬藁嚗?000
摰峕㟲<EFBFBD><EFBFBD>嚗冴ttp://172.17.x.x:8000
```
**<2A>𩤃<EFBFBD> <20><EFBFBD>**嚗?- <20>?銝滩<E98A9D><E6BBA9>𨀣<EFBFBD><F0A880A3><EFBFBD><EFBFBD><E59A97> `extraction-service.internal`嚗?- <20>?銝滩<E98A9D>雿輻鍂 `localhost:8000`
- <20>?敹<>◆雿輻鍂SAE<41><EFBFBD><E689B9>唳遬蝷箇<E89DB7><E7AE87><EFBFBD>IP<49><EFBFBD>
**霈啣<E99C88><E595A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗?```
# <20>?撌脰繮<E884B0><EFBFBD>蝵穃𧑐<E7A983><F0A79190>嚗?024-12-24嚗㚁<E59A97>
PYTHON_SERVICE_INTERNAL_IP=172.17.173.66:8000
PYTHON_SERVICE_URL=http://172.17.173.66:8000
```
<EFBFBD>𩤃<EFBFBD> **<2A><EFBFBD><E6BBA9><EFBFBD>**嚗?- 甇文𧑐<E69687><F0A79190><EFBFBD>銁VPC<50><43><EFBFBD><EFBFBD>航挪<E888AA>?- Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD><E996AC>蝵格迨<E6A0BC><EFBFBD>雿靝蛹<E99D9D><EFBFBD><E887AC><EFBFBD>
- 憒<><E68692>摰硺<E691B0><E7A1BA>滚鍳嚗䬠P<E4ACA0><EFBFBD><E595A3><EFBFBD>隡𡁜<E99AA1><F0A1819C><EFBFBD><E59094><EFBFBD><EFBFBD>齿鰵<E9BDBF><EFBFBD>嚗?
---
### 甇仿炊 2嚗𡁜<E59A97>摨瑟<E691A8><E7919F><EFBFBD>霂?
#### <20><EFBFBD> 1嚗帋<E59A97>SAE<41><EFBFBD><E689B9><EFBFBD>霂𤏪<E99C82><F0A48FAA><EFBFBD>嚗?
1. SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?摰硺<E691B0><E7A1BA>𡑒”
2. <20>孵稬摰硺<E691B0><E7A1BA>?**Webshell** <20>厰僼嚗<E583BC><E59A97><EFBFBD>𨀣𣈲<F0A880A3><F0A388B2><EFBFBD>
3. <20><EFBFBD><E689AF>賭誘嚗<E8AA98><EFBFBD>沌ython瘚贝<E7989A><EFBFBD><E59A97>銝箏捆<E7AE8F>其葉瘝⊥<E7989D>curl嚗㚁<E59A97>
```bash
python -c "import urllib.request; print(urllib.request.urlopen('http://localhost:8000/api/health').read().decode())"
```
<EFBFBD>𩤃<EFBFBD> **瘜冽<E7989C>**嚗𡁜<E59A97><F0A1819C>𣈯<EFBFBD><F0A388AF>?`curl: command not found`嚗諹秩<E8ABB9>𤾸捆<F0A4BEB8>其葉瘝⊥<E7989D>摰㕑<E691B0>curl撌亙<E6928C><EFBFBD>移蝞<E7A7BB><E89D9E>𨅯<EFBFBD>嚗㚁<E59A97>霂瑚蝙<E7919A><EFBFBD><E585B6><EFBFBD>Python<6F>賭誘<E8B3AD>?
#### <20><EFBFBD> 2嚗帋<E59A97><E5B88B>砍𧑐瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>蝵殷<E89DB5>
<EFBFBD>𩤃<EFBFBD> **瘜冽<E7989C>**嚗𡁶眏鈭窰ython<6F>滚𦛚隞<F0A69B9A>銁VPC<50><43><EFBFBD>嚗峕𧋦<E5B395><EFBFBD>瘜閧凒<E996A7>亥挪<E4BAA5><EFBFBD><E6AEB7><EFBFBD><EFBFBD>誑銝衤遙銝<E98199><E98A9D><EFBFBD>嚗?
**<2A>厰★A嚗𡁻<E59A97><EFBFBD>Node.js<6A>𡒊垢頧砍<E9A0A7><EFBFBD><EFBFBD><EFBFBD>**
- 敺<>ode.js<6A>𡒊垢<F0A1928A>函蔡<E587BD>𠬍<EFBFBD><F0A0AC8D><EFBFBD><E69C9E>𡒊垢<F0A1928A>湔𦻖瘚贝<E7989A>
**<2A>厰★B嚗帋葩<E5B88B><EFBFBD>蝵桀<E89DB5>蝵騌LB嚗<42><E59A97>霂訫<E99C82><E8A8AB>𣂼<EFBFBD><F0A382BC>𣳇膄嚗?*
1. SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?摨𠉛鍂霈輸䔮霈曄蔭
2. <20>孵稬 **蝏穃<E89D8F>SLB**
3. <20>𥕦遣<F0A595A6><EFBFBD>㗇𥋘<E39787><EFBFBD>SLB
4. 瘚贝<E7989A>摰峕<E691B0><E5B395>𡒊<EFBFBD><F0A1928A><EFBFBD><E596B3>又LB
**憸<><E686B8><EFBFBD><EFBFBD>**嚗?```json
{
"status": "healthy",
"checks": {
"pymupdf": {
"available": true,
"version": "1.26.7"
},
"nougat": {
"available": false,
"error": "Nougat<61><EFBFBD><EFBFBD><E98B86>撌脩宏<E884A9>支誑<E694AF><EFBFBD><E8AAA9>𨅯<EFBFBD>嚗?
},
"temp_dir": {
"path": "/tmp/extraction_service",
"writable": true
}
},
"timestamp": "2024-12-24T10:30:00Z"
}
```
---
### 甇仿炊 3嚗𡁏䰻<F0A1818F><EFBFBD><E8A781>冽𠯫敹?
1. SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F><EFBFBD><E4BA99>亥砭
2. <20>㗇𥋘 **摰墧𧒄<E5A2A7><EFBFBD>**
3. 蝖株恕<E6A0AA><EFBFBD>銝剖<E98A9D><E58996><EFBFBD>
```log
<EFBFBD>?甇<><EFBFBD>臬𢆡<E887AC><F0A286A1><EFBFBD>嚗?INFO: Started server process [1]
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
<EFBFBD>?<3F>亙熒璉<E78692><E79289>交𠯫敹梹<E695B9>瘥?0蝘雴<E89D98>甈∴<E79488>嚗?INFO: 172.17.x.x:xxxx - "GET /api/health HTTP/1.1" 200 OK
<EFBFBD>?憒<><E68692><EFBFBD>箇緵<E7AE87>躰秤嚗?ERROR: ImportError: libXXX.so: cannot open shared object file
<20>?霂湔<E99C82>蝟餌<E89D9F>靘肽<E99D98>蝻箏仃嚗峕<E59A97><E5B395>主ockerfile
```
---
### 甇仿炊 4嚗𡁶<E59A97><F0A181B6><EFBFBD><E689B9>函𠶖<E587BD>?
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F>箸𧋦靽⊥<E99DBD>
**<2A>喲睸<E596B2><E79DB8><EFBFBD>**嚗?| <20><><EFBFBD> | 甇<><EFBFBD>?| 霂湔<E99C82> |
|------|--------|------|
| **摨𠉛鍂<F0A0899B><EFBFBD>?* | 餈鞱<E9A488>銝?| 蝏輯𠧧 |
| **摰硺<E691B0><E7A1BA>?* | 1/1 | 1銝芸<E98A9D>靘贝<E99D98>銵䔶葉 |
| **<2A>亙熒摰硺<E691B0><E7A1BA>?* | 1 | <20>亙熒璉<E78692><E79289>仿<EFBFBD><EFBFBD> |
| **CPU雿輻鍂<E8BCBB>?* | < 20% | 蝛粹𤦭<E7B2B9><EFBFBD>?|
| **<2A><><EFBFBD>雿輻鍂<E8BCBB>?* | < 50% | 蝥?GB嚗㇊ython<6F><EFBFBD>+靘肽<E99D98>嚗?|
---
## <20><><EFBFBD><EFBFBD>滨蔭
### 甇仿炊 1嚗𡁏凒<F0A1818F>衹ode.js<6A>𡒊垢<F0A1928A><EFBFBD><E887AC><EFBFBD>
<EFBFBD>沐ode.js<6A>𡒊垢<F0A1928A><E59EA2>AE摨𠉛鍂銝哨<E98A9D>瘛餃<E7989B>隞乩<E99A9E><E4B9A9><EFBFBD><E887AC><EFBFBD>嚗?
```bash
# Python敺格<E695BA><E6A0BC><EFBFBD>蝵穃𧑐<E7A983><F0A79190>
EXTRACTION_SERVICE_URL=http://172.17.x.x:8000
# 瘜冽<E7989C>嚗?# 1. <20>踵揢銝箏<E98A9D><E7AE8F><EFBFBD><EFBFBD>𣇉<EFBFBD><F0A38789><EFBFBD><EFBFBD>IP
# 2. 銝滩<E98A9D><E6BBA9>惩偏<E683A9><EFBFBD><E586BD>?/
```
**<2A>滨蔭雿滨蔭**嚗?- SAE<41><EFBFBD><E689B9>?<3F>?Node.js<6A>𡒊垢摨𠉛鍂 <20>?摨𠉛鍂<F0A0899B>滨蔭 <20>?<3F><EFBFBD><E887AC><EFBFBD> <20>?瘛餃<E7989B>
**<2A>滨蔭<E6BBA8><EFBFBD>雿?*嚗?- <20>滚鍳Node.js<6A>𡒊垢摨𠉛鍂嚗𠄎AE隡朞䌊<E69C9E><EFBFBD><E588B8><EFBFBD>
---
### 甇仿炊 2嚗𡁜<E59A97>蝡臭誨<E887AD><E8AAA8><EFBFBD><EFBFBD><E99C82><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>沐ode.js<6A>𡒊垢隞<E59EA2><E99A9E>銝剜溶<E5899C><EFBFBD>霂閧垢<E996A7><EFBFBD>
```typescript
// backend/src/routes/test.ts
import { Router } from 'express';
import axios from 'axios';
const router = Router();
router.get('/test-python-service', async (req, res) => {
try {
const extractionServiceUrl = process.env.EXTRACTION_SERVICE_URL || 'http://localhost:8000';
// 1. 瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>? const healthRes = await axios.get(`${extractionServiceUrl}/api/health`);
res.json({
success: true,
message: 'Python service is healthy',
data: healthRes.data
});
} catch (error) {
res.status(500).json({
success: false,
message: 'Failed to connect to Python service',
error: error.message
});
}
});
export default router;
```
**瘚贝<E7989A><E8B49D><EFBFBD>**嚗?```bash
# 隞𤾸<E99A9E>蝡舀<E89DA1>Postman霈輸䔮
GET https://your-backend-domain.com/api/test-python-service
# 憸<><E686B8><EFBFBD><EFBFBD>嚗?{
"success": true,
"message": "Python service is healthy",
"data": { "status": "healthy", ... }
}
```
---
### 甇仿炊 3嚗𡁶垢<F0A181B6>啁垢<E59581><EFBFBD>瘚贝<E7989A>
瘚贝<EFBFBD>摰峕㟲銝𡁜𦛚瘚<EFBFBD><EFBFBD>嚗?
#### 瘚贝<E7989A><E8B49D>箸艶 1嚗䥪DF<44><46>𧋦<EFBFBD>𣂼<EFBFBD>
**瘚<><E7989A>**嚗?```
<EFBFBD>滨垢銝𠹺<EFBFBD>PDF
<20>?Node.js<6A>𡒊垢<F0A1928A>交𤣰
<20>?HTTP POST 頧砍<E9A0A7><E7A08D>?Python<6F>滚𦛚 (EXTRACTION_SERVICE_URL)
<20>?Python<6F>滚𦛚<E6BB9A>𣂼<EFBFBD><F0A382BC><EFBFBD>𧋦
<20>?餈𥪜<E9A488>JSON蝏𤘪<E89D8F>
<20>?<3F>𡒊垢憭<E59EA2><E686AD>撟嗉<E6929F><E59789>𧼮<EFBFBD>蝡?```
**瘚贝<E7989A>甇仿炊**嚗?1. <20><EFBFBD>蝡臭<E89DA1>隡牐<E99AA1>銝芸<E98A9D><E88AB8><EFBFBD>DF<44><46>辣嚗? 5MB嚗?2. <20><EFBFBD>Node.js<6A>𡒊垢<F0A1928A><EFBFBD>嚗? ```log
INFO: Calling Python service: http://172.17.x.x:8000/api/extract/pdf
INFO: Python service responded in 2.3s
```
3. <20><EFBFBD>Python<6F>滚𦛚<E6BB9A><EFBFBD>嚗? ```log
INFO: Request: POST /api/extract/pdf
INFO: File size: 1.2MB, filename: test.pdf
INFO: Using PyMuPDF extraction
INFO: Response: 200 (took 2.10s)
```
#### 瘚贝<E7989A><E8B49D>箸艶 2嚗𡁏㺭<F0A1818F><EFBFBD>瘣梹<E798A3>DC撌亙<E6928C>嚗?
**瘚<><E7989A>**嚗?```
<EFBFBD>滨垢銝𠹺<EFBFBD>Excel
<20>?<3F>𡒊垢靚<E59EA2>鍂 Python<6F>滚𦛚 /api/operations/fillna
<20>?Python雿輻鍂pandas/polars憭<73><E686AD>
<20>?餈𥪜<E9A488><EFBFBD><E79A9C><EFBFBD>𡒊<EFBFBD><F0A1928A>唳旿
```
**瘚贝<E7989A>甇仿炊**嚗?1. <20>求C璅<E79285>銝𠹺<E98A9D>Excel<65><6C>
2. <20><EFBFBD><E689AF>唳旿皜<E697BF><E79A9C><EFBFBD><EFBFBD><EFBFBD><E59A97>fillna嚗?3. 撉諹<E69289>餈𥪜<E9A488>蝏𤘪<E89D8F><F0A498AA>臬炏甇<E7828F>
---
## 撣貉<E692A3><E8B289><EFBFBD><E6A185>埝䰻
### <20><EFBFBD> 1嚗𡁻<E59A97><F0A181BB>𤩺<EFBFBD><F0A4A9BA>硋仃韐伐<E99F90>insufficient_scope: authorization failed嚗?
**<2A><>𠶖**嚗?```
Error: ImagePullBackOff
Failed to pull image: insufficient_scope: authorization failed
pull access denied, repository does not exist or may require authorization
```
**<2A>寞𧋦<E5AF9E><EFBFBD>**嚗锭AE瘝⊥<E7989D><E28AA5><EFBFBD><EFBFBD>霈輸䔮ACR蝘<52><E89D98><EFBFBD>𨅯<EFBFBD>隞枏<E99A9E>
**閫<><E996AB>甇仿炊**嚗?
**<2A><EFBFBD>1嚗𡁻<E59A97>蝵桅<E89DB5><E6A185><EFBFBD>摨栞恕霂<E68195><E99C82><EFBFBD><EFBFBD>嚗?*
1. SAE<41><EFBFBD><E689B9>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F>孵稬"<22>函蔡摨𠉛鍂"<22>?蝻𤥁<E89DBB>摨𠉛鍂"
2. <20>?**"<22>𨅯<EFBFBD><F0A885AF>滨蔭"** <20><EFBFBD>嚗峕𪄳<E5B395>?**"<22>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88>"** <20>?**"蝘<><E89D98><EFBFBD>𨅯<EFBFBD>隞枏<E99A9E>"**
3. <20>滨蔭隞乩<E99A9E>靽⊥<E99DBD>嚗? ```
<20>𨅯<EFBFBD>隞枏<E99A9E><E69E8F><EFBFBD>嚗䬙rpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com
<20><EFBFBD><E586BD><EFBFBD>gofeng117@163.com
<><E69296>嚗餎engzhibo117
```
4. 靽嘥<E99DBD><E598A5>滨蔭撟園<E6929F><E59C92><EFBFBD>蝵?
**<2A><EFBFBD>2嚗帋蝙<E5B88B>沖AM閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD><EFBFBD><E59A97>鈭抒㴓憓<E3B493><EFBFBD><EFBFBD>**
1. RAM<41><EFBFBD><E689B9>?<3F>?<3F>𥕦遣閫坿𠧧 <20>?<3F>㗇𥋘"<22><EFBFBD>鈭烐<E988AD><E78390>? <20>?<3F>𦯀縑<F0A6AF80>滚𦛚<E6BB9A>?SAE"
2. 銝箄<E98A9D><E7AE84>脫溶<E884AB><EFBFBD><E4ADBE><EFBFBD>`AliyunContainerRegistryReadOnlyAccess`
3. SAE摨𠉛鍂<F0A0899B>滨蔭 <20>?擃条漣霈曄蔭 <20>?蝏穃<E89D8F>RAM閫坿𠧧
**<2A><EFBFBD>3嚗朞挽蝵唧CR隞枏<E99A9E>銝箏<E98A9D><EFBFBD><EFBFBD><E59A97>瘚贝<E7989A><E8B49D><EFBFBD>嚗?*
<EFBFBD>𩤃<EFBFBD> 銝齿綫<E9BDBF><EFBFBD>鈭抒㴓憓<E3B493><EFBFBD><EFBFBD>摰匧<E691B0>憌𡡞埯嚗?
1. ACR<43><EFBFBD><E689B9>?<3F>?銝芯犖摰硺<E691B0> <20>?隞枏<E99A9E><E69E8F>𡑒”
2. <20><EFBFBD> `ai-clinical/python-extraction`
3. 隞枏<E99A9E>霈曄蔭 <20>?霈輸䔮<E8BCB8><EFBFBD> <20>?<3F>嫣蛹"<22><EFBFBD>"
---
### <20><EFBFBD> 2嚗𡁜<E59A97><F0A1819C>典鍳<E585B8>典仃韐伐<E99F90><E4BC90><EFBFBD><E597A1><EFBFBD>嚗?
**<2A><>𠶖**嚗?```
SAE<EFBFBD><EFBFBD><EFBFBD>唳遬蝷綽<EFBFBD>摨𠉛鍂<EFBFBD>臬𢆡憭梯揖
摰硺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```
**<2A>埝䰻甇仿炊**嚗?
**1. <20><EFBFBD><E4BAA6>函蔡<E587BD><EFBFBD>**
```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F>䀹凒霈啣<E99C88> <20>?<3F><EFBFBD>霂行<E99C82>
```
**2. 撣貉<E692A3><E8B289>躰秤<E8BAB0>𡃏圾<F0A1838F>單䲮瘜?*嚗?
| <20>躰秤靽⊥<E99DBD> | <20><EFBFBD> | 閫<><E996AB><EFBFBD><EFBFBD> |
|---------|------|---------|
| `ImagePullBackOff` + `failed to resolve reference "...:latest"` | **<2A>𨅯<EFBFBD><F0A885AF><EFBFBD><E595A3><EFBFBD>摰𡁶<E691B0><F0A181B6>砍噡** | **<2A><EFBFBD><E588B8>誩𧑐<E8AAA9><F0A79190><EFBFBD>怠偏瘛餃<E7989B> `:v1.0`**<br>摰峕㟲<E5B395><EFBFBD>嚗䫤...python-extraction:v1.0` |
| `ImagePullBackOff` + `insufficient_scope: authorization failed` | **ACR霈輸䔮<E8BCB8><E494AE><EFBFBD>銝滩雲嚗<E99BB2><E59A97>撣貉<E692A3>嚗?* | **<EFBFBD>滨蔭<EFBFBD>𨅯<EFBFBD>隞枏<EFBFBD>霈方<EFBFBD>**<br>1. SAE摨𠉛鍂<F0A0899B>滨蔭 <20>?<3F>𨅯<EFBFBD><F0A885AF>滨蔭<br>2. <20>滨蔭<E6BBA8>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88><br>3. <20><EFBFBD><E586BD><EFBFBD>`gofeng117@163.com`<br>4. 撖<><E69296>嚗䫤fengzhibo117` |
| `ImagePullBackOff` + `pull access denied` | <20>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88>憭梯揖 | 璉<><E79289>亦鍂<E4BAA6><EFBFBD>/撖<><E69296><EFBFBD>臬炏甇<E7828F> |
| `ImagePullBackOff` | <20>𨅯<EFBFBD><F0A885AF><EFBFBD><E595A3>躰秤 | 蝖株恕雿輻鍂VPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蒂-vpc<70>𡒊<EFBFBD>嚗?|
| `ImportError: libXXX.so` | 蝟餌<E89D9F>靘肽<E99D98>蝻箏仃 | 璉<><E79289>主ockerfile嚗𣬚靽嘥<E99DBD><EFBFBD><E98B86><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵峕𧒄靘肽<E99D98> |
| `OOMKilled` | <20><><EFBFBD>銝滩雲 | 憓𧼮<E68693><F0A7BCAE><EFBFBD><EFBFBD><EFBFBD>滨蔭嚗?GB <20>?4GB嚗?|
| `Health check failed` | <20>亙熒璉<E78692><E79289>交𧊋<E4BAA4><EFBFBD> | 璉<><E79289>?`/api/health` 蝡舐<E89DA1><E88890>臬炏甇<E7828F>虜 |
**3. <20><EFBFBD>摰孵膥<E5ADB5><EFBFBD>**
```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F><EFBFBD><E4BA99>亥砭 <20>?摰墧𧒄<E5A2A7><EFBFBD>
```
---
### <20><EFBFBD> 3嚗𡁜<E59A97>摨瑟<E691A8><E7919F>亙仃韐?
**<2A><>𠶖**嚗?```
摰硺<EFBFBD><EFBFBD>𡑒”<EFBFBD>曄內嚗𡁜<EFBFBD>摨瑟<EFBFBD><EFBFBD>亙仃韐?摰硺<E691B0><E7A1BA><EFBFBD><E6BB9A>滚鍳
```
**<2A>埝䰻甇仿炊**嚗?
**1. 蝖株恕<E6A0AA>滚𦛚<E6BB9A>臬炏甇<E7828F><EFBFBD>臬𢆡**
```bash
# <20><EFBFBD><E4BAA6><EFBFBD>銝剜糓<E5899C><EFBFBD>嚗?INFO: Uvicorn running on http://0.0.0.0:8000
```
**2. 蝖株恕蝡臬藁<E887AC>臬炏甇<E7828F>**
```bash
# 璉<><E79289>亙捆<E4BA99>函垢<E587BD><E59EA2><EFBFBD>蝵殷<E89DB5>8000
# 璉<><E79289><EFBFBD>摨瑟<E691A8><E7919F>亦垢<E4BAA6><E59EA2><EFBFBD>蝵殷<E89DB5>8000
```
**3. <20>见𢆡瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>亦垢<E4BAA6>?*
```bash
# <20>沒AE Webshell銝剜<E98A9D>銵䕘<E98AB5>
curl http://localhost:8000/api/health
```
**4. 靚<><EFBFBD>亙熒璉<E78692><E79289><EFBFBD><E4BA99>?*
```
<EFBFBD><EFBFBD>撱嗉<EFBFBD><EFBFBD>園𡢿嚗?0蝘?<3F>?60蝘𡜐<E89D98><EFBFBD><E68692><EFBFBD>𨅯<EFBFBD><F0A885AF><EFBFBD><E58CA7><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10蝘?<3F>?20蝘?```
---
### <20><EFBFBD> 4嚗鐭ode.js<6A>𡒊垢<F0A1928A><EFBFBD>餈墧𦻖Python<6F>滚𦛚
**<2A><>𠶖**嚗?```
<EFBFBD>𡒊垢<EFBFBD><EFBFBD>嚗鋴onnection refused
<EFBFBD>?ECONNREFUSED: connect ECONNREFUSED 172.17.x.x:8000
```
**<2A>埝䰻甇仿炊**嚗?
**1. 蝖株恕<E6A0AA><E68195><EFBFBD><EFBFBD><EFBFBD><E595A3>臬炏甇<E7828F>**
```bash
# <20>?<3F>躰秤<E8BAB0>滨蔭嚗<E894AD><E59A97>瘚讠<E7989A><E8AEA0><EFBFBD>嚗?EXTRACTION_SERVICE_URL=http://python-extraction.internal:8000
# <20>?甇<><EFBFBD>滨蔭嚗𠄎AE<41><EFBFBD><E689B9>唳遬蝷箇<E89DB7><E7AE87><EFBFBD>IP嚗?EXTRACTION_SERVICE_URL=http://172.17.10.5:8000
```
**2. 蝖株恕Python<6F>滚𦛚<E6BB9A>臬炏餈鞱<E9A488>**
```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?Python摨𠉛鍂 <20>?摰硺<E691B0><E7A1BA>𡑒”
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈鞱<EFBFBD>銝?<3F>?```
**3. 蝖株恕摰匧<E691B0><EFBFBD><E89D8F><EFBFBD>?*
```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?Python摨𠉛鍂 <20>?蝵𤑳<E89DB5><F0A491B3>滨蔭 <20>?摰匧<E691B0>蝏?<3F><EFBFBD><EFBFBD><E996AB>嚗𡁜<E59A97>霈禽PC<50><43><EFBFBD>?8000蝡臬藁
```
**4. 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>餈鮋<E9A488>𡁏<EFBFBD>?*
```bash
# <20>沐ode.js<6A>𡒊垢摰孵膥銝剜<E98A9D>銵䕘<E98AB5><E49598><EFBFBD>SAE Webshell嚗㚁<E59A97>
curl http://172.17.x.x:8000/api/health
```
---
### <20><EFBFBD> 5嚗䥪DF<44>𣂼<EFBFBD><EFBFBD>𧒄
**<2A><>𠶖**嚗?```
<EFBFBD>𡒊垢<EFBFBD><EFBFBD>嚗鑹equest timeout after 300s
Python<EFBFBD><EFBFBD>嚗䥪rocessing large PDF...
```
**<2A><EFBFBD>**嚗?- <20><>辣餈<E8BEA3>之嚗? 50MB嚗?- PDF<44><46>鉄憭折<E686AD><E68A98><EFBFBD>
**閫<><E996AB><EFBFBD><EFBFBD>**嚗?
**1. 憓𧼮<E68693><EFBFBD>𧒄<EFBFBD>園𡢿**
```bash
# Node.js<6A>𡒊垢<F0A1928A><EFBFBD><E887AC><EFBFBD>
EXTRACTION_TIMEOUT=600 # 10<31><30><EFBFBD>
```
**2. <20>𣂼<EFBFBD><F0A382BC><EFBFBD>辣憭批<E686AD>**
```python
# Python<6F>滚𦛚嚗饢ain.py
MAX_FILE_SIZE = 50 * 1024 * 1024 # 50MB
@app.post("/api/extract/pdf")
async def extract_pdf(file: UploadFile):
if file.size > MAX_FILE_SIZE:
raise HTTPException(status_code=413, detail="File too large")
```
**3. 隡睃<E99AA1><E79D83>𣂼<EFBFBD><F0A382BC><EFBFBD>**
```python
# 頝唾<E9A09D><E594BE><EFBFBD>憿萸<E686BF><E890B8><EFBFBD>蝻拙㦛<E68B99><E3A69B><EFBFBD>
```
---
### <20><EFBFBD> 6嚗𡁜<E59A97>摮䀹滯<E480B9><EFBFBD>OOM嚗?
**<2A><>𠶖**嚗?```
摰孵膥<EFBFBD>芸𢆡<EFBFBD>滚鍳
<EFBFBD><EFBFBD><EFBFBD>曄內嚗鐗illed (signal 9)
摰硺<EFBFBD><EFBFBD>烐綉嚗𡁜<EFBFBD>摮䀝蝙<EFBFBD><EFBFBD> > 95%
```
**閫<><E996AB><EFBFBD><EFBFBD>**嚗?
**1. 憓𧼮<E68693><F0A7BCAE><EFBFBD><EFBFBD><EFBFBD>滨蔭**
```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂<F0A0899B>滨蔭 <20>?閫<>
<EFBFBD><EFBFBD><EFBFBD>嚗?GB <20>?4GB
```
**2. 隡睃<E99AA1><EFBFBD><E99A9E><EFBFBD><E59A97>撘誩<E69298><E8AAA9><EFBFBD><EFBFBD>**
```python
# 銝滩<E98A9D><EFBFBD>甈⊥<E79488><EFBFBD>頧賣㟲銝芣<E98A9D>隞嗅<E99A9E><E59785><EFBFBD><EFBFBD>
with open(pdf_path, 'rb') as f:
for chunk in read_in_chunks(f):
process(chunk)
```
**3. <20>𣂼<EFBFBD>撟嗅<E6929F>霂瑟<E99C82>**
```python
# main.py
from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
# <20>𣂼<EFBFBD>撟嗅<E6929F>餈墧𦻖<E5A2A7>?app.add_middleware(ConnectionLimitMiddleware, max_connections=10)
```
---
## <20><><EFBFBD>
### A. 敹恍<E695B9>笔𦶢隞文<E99A9E><E69687>?
**<2A><EFBFBD>摨𠉛鍂靽⊥<E99DBD>**嚗?```bash
# <20><EFBFBD>鈭飈LI
aliyun sae DescribeApplicationStatus --AppId <app-id>
```
**<2A><EFBFBD>摰硺<E691B0><E7A1BA>𡑒”**嚗?```bash
# <20><EFBFBD>鈭飈LI
aliyun sae DescribeApplicationInstances --AppId <app-id>
```
**<2A>滚鍳摨𠉛鍂**嚗?```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F>滚鍳摨𠉛鍂
```
**<2A><EFBFBD>摰墧𧒄<E5A2A7><EFBFBD>**嚗?```
SAE<EFBFBD><EFBFBD><EFBFBD>?<3F>?摨𠉛鍂霂行<E99C82> <20>?<3F><EFBFBD><E4BA99>亥砭 <20>?摰墧𧒄<E5A2A7><EFBFBD>
```
---
### B. <20><EFBFBD><E887AC><EFBFBD><E3979B>滨蔭皜<E894AD><E79A9C>
| <20><EFBFBD><E3979B>?| 敹<><E695B9> | 暺䁅恕<E48185>?| 霂湔<E99C82> |
|--------|-----|--------|------|
| `LOG_LEVEL` | <20>?| `INFO` | <20><EFBFBD>蝥批<E89DA5>嚗㇄EBUG/INFO/WARNING/ERROR嚗?|
| `TEMP_DIR` | <20>?| `/tmp/extraction_service` | 銝湔𧒄<E6B994><F0A79284><EFBFBD><EFBFBD> |
| `TZ` | <20>?| `UTC` | <20>嗅躹嚗<E8BAB9>遣霈?`Asia/Shanghai`嚗?|
| `SERVICE_NAME` | <20>?| - | <20>滚𦛚<E6BB9A>滨妍嚗<E5A68D>鍂鈭擧𠯫敹埈<E695B9><EFBFBD><E99C82> |
| `SERVICE_VERSION` | <20>?| - | <20>滚𦛚<E6BB9A><F0A69B9A>𧋦嚗<F0A78BA6>鍂鈭擧𠯫敹埈<E695B9><EFBFBD><E99C82> |
| `OSS_ACCESS_KEY_ID` | <20>?| - | OSS霈輸䔮撖<E494AE>𤨎ID |
| `OSS_ACCESS_KEY_SECRET` | <20>?| - | OSS霈輸䔮撖<E494AE>𤨎Secret |
| `OSS_BUCKET` | <20>?| - | OSS Bucket<65>滨妍 |
| `OSS_ENDPOINT` | <20>?| - | OSS Endpoint嚗<74>遣霈桀<E99C88>蝵𡢅<E89DB5> |
---
### C. <20>函蔡璉<E894A1><E79289><EFBFBD><E4BAA4>?
**<2A>函蔡<E587BD>?*嚗?- [ ] 蝖株恕Docker<65>𨅯<EFBFBD>撌脫綫<E884AB><E7B6AB>秐ACR
- [ ] 蝖株恕VPC<50><43>Switch<63><68><EFBFBD><EFBFBD><EFBFBD>ID
- [ ] 蝖株恕OSS AccessKey<65><EFBFBD>
- [ ] 蝖株恕SAE<41><EFBFBD>蝛粹𡢿撌脣<E6928C>撱?
**<2A>函蔡銝?*嚗?- [ ] <20>𨅯<EFBFBD><F0A885AF><EFBFBD>雿輻鍂VPC<50><43><EFBFBD><EFBFBD><EFBFBD>
- [ ] 摰硺<E691B0><E7A1BA>?= 1嚗<31><E59A97><EFBFBD>?嚗?- [ ] 摰孵膥蝡臬藁 = 8000
- [ ] <20>亙熒璉<E78692><E79289>亥楝敺?= `/api/health`
- [ ] <20><EFBFBD><E887AC><EFBFBD><E3979B>滨蔭摰峕㟲
**<2A>函蔡<E587BD>?*嚗?- [ ] 摨𠉛鍂<F0A0899B><EFBFBD>?= 餈鞱<E9A488>銝?- [ ] <20>亙熒璉<E78692><E79289>仿<EFBFBD><EFBFBD>
- [ ] <20><EFBFBD><E4BA99>曄內<E69B84>滚𦛚甇<F0A69B9A><EFBFBD>臬𢆡
- [ ] 霈啣<E99C88><E595A3><EFBFBD><EFBFBD>IP<49><EFBFBD>
- [ ] <20>湔鰵Node.js<6A>𡒊垢<F0A1928A><EFBFBD><E887AC><EFBFBD>
---
### D. <20>鞉𧋦憸<F0A78BA6>
**瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SAE嚗?*嚗?```
<EFBFBD>聢嚗?<3F>?GB <20> 1摰硺<E691B0>
韐寧鍂嚗𡁶漲 瞼60/<2F>?```
**隡睃<E99AA1>撱箄悅**嚗?- 瘚贝<E7989A><E8B49D>嗆挾<E59786>臭誑<E887AD>见𢆡<E8A781>𨀣迫摨𠉛鍂嚗<E98D82><E59A97><E79487>銝滩恣韐對<E99F90>
- 憭𣈯𡢿<F0A388AF>硋𪂹<E7A18B><EFBFBD><E79487><EFBCB7><EFBFBD><E588BB><EFBFBD><EFBFBD><EFBFBD>?- <20>煺漣<E785BA><EFBFBD>撱箄悅雿輻鍂<E8BCBB><E98D82><EFBFBD><E58391><EFBFBD>隡䀹<E99AA1>
---
### E. <20><EFBFBD><E8A9A8><EFBFBD>
- [<5B>函蔡餈𥕦漲<F0A595A6><EFBFBD>](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md) - <20><><EFBFBD><EFBFBD>皞鞾<E79A9E><E99EBE>䰻銵?- [Python敺格<E695BA><E6A0BC>?SAE摰孵膥<E5ADB5>函蔡<E587BD><E894A1><EFBFBD>](./04-Python敺格<E695BA><E6A0BC>?SAE摰孵膥<E5ADB5>函蔡<E587BD><E894A1><EFBFBD>.md) - <20><><EFBFBD>舀沲<E88880><E6B2B2>祕閫?- [敹恍<E695B9><EFBFBD>蝵淞OP](./01-敹恍<E695B9><EFBFBD>蝵淞OP-<2D>嗅抅蝖<E68A85><E89D96>?md) - 摰峕㟲<E5B395>函蔡瘚<E894A1><E7989A>
---
**<2A><>﹝蝏湔擪**嚗?- <20>𥕦遣<F0A595A6>園𡢿嚗?024-12-24
- <20><><EFBFBD>擧凒<E693A7><EFBFBD>2024-12-24
- 銝𧢲活摰⊥䰻嚗?025-01-24
---
**<2A>函蔡摰峕<E691B0><E5B395>𠬍<EFBFBD>霂瑁扇敶蓥誑銝衤縑<E8A1A4>?*嚗?
```
<EFBFBD>函蔡<EFBFBD>園𡢿嚗?024-12-24 19:43
<EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>嚗冴ttp://172.17.173.66:8000
擐𡝗活<EFBFBD>亙熒璉<EFBFBD><EFBFBD>仿<EFBFBD><EFBFBD><EFBFBD>園𡢿嚗?024-12-24 19:44
SAE摨𠉛鍂<EFBFBD>滨妍嚗䮝ython-extraction-test
摨𠉛鍂蝐餃<EFBFBD>嚗朞蝠<EFBFBD><EFBFBD>摨𠉛鍂
<EFBFBD><EFBFBD>滨蔭嚗?<3F>?GB <20> 1摰硺<E691B0>
<EFBFBD>函蔡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>𣂼<EFBFBD>
<EFBFBD>釣嚗?- 閫<><E996AB><EFBFBD>CR<43>𨅯<EFBFBD><F0A885AF><EFBFBD><E58CA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E59A97>蝵桐<E89DB5><E6A190>𨅯<EFBFBD>隞枏<E99A9E>霈方<E99C88>嚗?- 閫<><E996AB><EFBFBD><E988AD><EFBFBD>𤩺<EFBFBD>蝑暸䔮憸矋<E686B8><E79F8B><EFBFBD><EFBFBD>鈭?v1.0<EFBFBD><EFBFBD>𧋦嚗?- 摨𠉛鍂甇<E98D82>虜餈鞱<E9A488>嚗?銝沿vicorn worker餈𤤿<E9A488>
- OpenBLAS霅血<E99C85><E8A180>臬蕭<E887AC><EFBFBD>銝滚蔣<E6BB9A><EFBFBD><E6BB9A><EFBFBD>
```
---
> **<2A>鞟內**嚗𡁻<E59A97>蝵脣<E89DB5><E884A3>𣂼<EFBFBD>嚗諹窈<E8ABB9>𦠜𧒄<F0A6A09C>湔鰵 [<5B>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md](./00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md) 銝剔<E98A9D><E58994><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?