# ๐Ÿ“ฆ Async Context Compression โ€” ๆœฌๅœฐ้ƒจ็ฝฒๅทฅๅ…ท (Local Deployment Tools) ## ๐ŸŽฏ ๅŠŸ่ƒฝๆฆ‚่ฟฐ ไธบ `async_context_compression` Filter ๆ’ไปถๆทปๅŠ ไบ†ๅฎŒๆ•ด็š„ๆœฌๅœฐ้ƒจ็ฝฒๅทฅๅ…ท้“พ๏ผŒๆ”ฏๆŒๅฟซ้€Ÿ่ฟญไปฃๅผ€ๅ‘ๆ— ้œ€้‡ๅฏ OpenWebUIใ€‚ ## ๐Ÿ“‹ ๆ–ฐๅขžๆ–‡ไปถ ### 1. **deploy_filter.py** โ€” Filter ๆ’ไปถ้ƒจ็ฝฒ่„šๆœฌ - **ไฝ็ฝฎ**: `scripts/deploy_filter.py` - **ๅŠŸ่ƒฝ**: ่‡ชๅŠจ้ƒจ็ฝฒ Filter ็ฑปๆ’ไปถๅˆฐๆœฌๅœฐ OpenWebUI ๅฎžไพ‹ - **็‰นๆ€ง**: - โœ… ไปŽ Python docstring ่‡ชๅŠจๆๅ–ๅ…ƒๆ•ฐๆฎ - โœ… ๆ™บ่ƒฝ็‰ˆๆœฌๅท่ฏ†ๅˆซ๏ผˆsemantic versioning๏ผ‰ - โœ… ๆ”ฏๆŒๅคšไธช Filter ๆ’ไปถ็ฎก็† - โœ… ่‡ชๅŠจๆ›ดๆ–ฐๆˆ–ๅˆ›ๅปบๆ’ไปถ - โœ… ่ฏฆ็ป†็š„้”™่ฏฏ่ฏŠๆ–ญๅ’Œ่ฟžๆŽฅๆต‹่ฏ• - โœ… ๅˆ—่กจๆŒ‡ไปคๆŸฅ็œ‹ๆ‰€ๆœ‰ๅฏ็”จ Filter - **ไปฃ็ ่กŒๆ•ฐ**: ~300 ่กŒ ### 2. **DEPLOYMENT_GUIDE.md** โ€” ๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ— - **ไฝ็ฝฎ**: `scripts/DEPLOYMENT_GUIDE.md` - **ๅ†…ๅฎน**: - ๅ‰็ฝฎๆกไปถๅ’Œๅฟซ้€Ÿๅผ€ๅง‹ - ่„šๆœฌ่ฏฆ็ป†่ฏดๆ˜Ž - API ๅฏ†้’ฅ่Žทๅ–ๆ–นๆณ• - ๆ•…้šœๆŽ’้™คๆŒ‡ๅ— - ๅˆ†ๆญฅๅทฅไฝœๆต็คบไพ‹ ### 3. **QUICK_START.md** โ€” ๅฟซ้€Ÿๅ‚่€ƒๅก็‰‡ - **ไฝ็ฝฎ**: `scripts/QUICK_START.md` - **ๅ†…ๅฎน**: - ไธ€่กŒๅ‘ฝไปค้ƒจ็ฝฒ - ๅ‰็ฝฎๆญฅ้ชค - ๅธธ่งๅ‘ฝไปค่กจๆ ผ - ๆ•…้šœ่ฏŠๆ–ญ้€ŸๆŸฅ่กจ - CI/CD ้›†ๆˆ็คบไพ‹ ### 4. **test_deploy_filter.py** โ€” ๅ•ๅ…ƒๆต‹่ฏ•ๅฅ—ไปถ - **ไฝ็ฝฎ**: `tests/scripts/test_deploy_filter.py` - **ๆต‹่ฏ•่ฆ†็›–**: - โœ… Filter ๆ–‡ไปถๅ‘็Žฐ (3 ไธชๆต‹่ฏ•) - โœ… ๅ…ƒๆ•ฐๆฎๆๅ– (3 ไธชๆต‹่ฏ•) - โœ… API ่ดŸ่ฝฝๆž„ๅปบ (4 ไธชๆต‹่ฏ•) - **ๆต‹่ฏ•้€š่ฟ‡็އ**: 10/10 โœ… ## ๐Ÿš€ ไฝฟ็”จๆ–นๅผ ### ๅŸบๆœฌ้ƒจ็ฝฒ๏ผˆไธ€่กŒๅ‘ฝไปค๏ผ‰ ```bash cd scripts python deploy_filter.py ``` ### ๅˆ—ๅ‡บๆ‰€ๆœ‰ๅฏ็”จ Filter ```bash python deploy_filter.py --list ``` ### ้ƒจ็ฝฒๆŒ‡ๅฎš Filter ```bash python deploy_filter.py folder-memory python deploy_filter.py context_enhancement_filter ``` ## ๐Ÿ”ง ๅทฅไฝœๅŽŸ็† ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 1. ๅŠ ่ฝฝ API ๅฏ†้’ฅ (.env) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 2. ๆŸฅๆ‰พ Filter ๆ’ไปถๆ–‡ไปถ โ”‚ โ”‚ - ไปŽๅ็งฐๆŽจๆ–ญๆ–‡ไปถ่ทฏๅพ„ โ”‚ โ”‚ - ๆ”ฏๆŒ hyphen-case ๅ’Œ snake_case ๆŸฅๆ‰พ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 3. ่ฏปๅ– Python ๆบไปฃ็  โ”‚ โ”‚ - ๆๅ– docstring ๅ…ƒๆ•ฐๆฎ โ”‚ โ”‚ - title, version, author, description, openwebui_id โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 4. ๆž„ๅปบ API ่ฏทๆฑ‚่ดŸ่ฝฝ โ”‚ โ”‚ - ็ป„่ฃ… manifest ๅ’Œ meta ไฟกๆฏ โ”‚ โ”‚ - ๅŒ…ๅซๅฎŒๆ•ดๆบไปฃ็ ๅ†…ๅฎน โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 5. ๅ‘้€่ฏทๆฑ‚ โ”‚ โ”‚ - POST /api/v1/functions/id/{id}/update ๏ผˆๆ›ดๆ–ฐ๏ผ‰ โ”‚ โ”‚ - POST /api/v1/functions/create ๏ผˆๅˆ›ๅปบๅค‡็”จ๏ผ‰ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 6. ๆ˜พ็คบ็ป“ๆžœๅ’Œ่ฏŠๆ–ญ โ”‚ โ”‚ - โœ… ๆ›ดๆ–ฐ/ๅˆ›ๅปบๆˆๅŠŸ โ”‚ โ”‚ - โŒ ้”™่ฏฏไฟกๆฏๅ’Œ่งฃๅ†ณๅปบ่ฎฎ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“Š ๆ”ฏๆŒ็š„ Filter ๅˆ—่กจ ่„šๆœฌ่‡ชๅŠจๅ‘็Žฐไปฅไธ‹ Filter๏ผš | Filter ๅ็งฐ | Python ๆ–‡ไปถ | ็‰ˆๆœฌ | |-----------|-----------|------| | async-context-compression | async_context_compression.py | 1.3.0+ | | chat-session-mapping-filter | chat_session_mapping_filter.py | 0.1.0+ | | context_enhancement_filter | context_enhancement_filter.py | 0.3+ | | folder-memory | folder_memory.py | 0.1.0+ | | github_copilot_sdk_files_filter | github_copilot_sdk_files_filter.py | 0.1.3+ | | markdown_normalizer | markdown_normalizer.py | 1.2.8+ | | web_gemini_multimodel_filter | web_gemini_multimodel_filter.py | 0.3.2+ | ## โš™๏ธ ๆŠ€ๆœฏ็ป†่Š‚ ### ๅ…ƒๆ•ฐๆฎๆๅ– ่„šๆœฌไปŽ Python ๆ–‡ไปถ้กถ้ƒจ็š„ docstring ไธญๆๅ–ๅ…ƒๆ•ฐๆฎ๏ผš ```python """ title: Async Context Compression id: async_context_compression author: Fu-Jie author_url: https://github.com/Fu-Jie/openwebui-extensions funding_url: https://github.com/open-webui description: Reduces token consumption... version: 1.3.0 openwebui_id: b1655bc8-6de9-4cad-8cb5-a6f7829a02ce """ ``` **ๆ”ฏๆŒ็š„ๅ…ƒๆ•ฐๆฎๅญ—ๆฎต**: - `title` โ€” Filter ๆ˜พ็คบๅ็งฐ โœ… - `id` โ€” ๅ”ฏไธ€ๆ ‡่ฏ†็ฌฆ โœ… - `author` โ€” ไฝœ่€…ๅ็งฐ โœ… - `author_url` โ€” ไฝœ่€…ไธป้กต้“พๆŽฅ โœ… - `funding_url` โ€” ้กน็›ฎ้“พๆŽฅ โœ… - `description` โ€” ๅŠŸ่ƒฝๆ่ฟฐ โœ… - `version` โ€” ่ฏญไน‰ๅŒ–็‰ˆๆœฌๅท โœ… - `openwebui_id` โ€” OpenWebUI UUID ๏ผˆๅฏ้€‰๏ผ‰ ### API ้›†ๆˆ ่„šๆœฌไฝฟ็”จ OpenWebUI REST API๏ผš ``` POST /api/v1/functions/id/{filter_id}/update - ๆ›ดๆ–ฐ็Žฐๆœ‰ Filter - HTTP 200: ๆ›ดๆ–ฐๆˆๅŠŸ - HTTP 404: Filter ไธๅญ˜ๅœจ๏ผŒ่‡ชๅŠจๅฐ่ฏ•ๅˆ›ๅปบ POST /api/v1/functions/create - ๅˆ›ๅปบๆ–ฐ Filter - HTTP 200: ๅˆ›ๅปบๆˆๅŠŸ ``` **่ฎค่ฏ**: Bearer token (API ๅฏ†้’ฅๆ–นๅผ) ## ๐Ÿ” ๅฎ‰ๅ…จๆ€ง ### API ๅฏ†้’ฅ็ฎก็† ```bash # 1. ๅˆ›ๅปบ .env ๆ–‡ไปถ echo "api_key=sk-your-key-here" > scripts/.env # 2. ๅฐ† .env ๆทปๅŠ ๅˆฐ .gitignore echo "scripts/.env" >> .gitignore # 3. ไธ่ฆๆไบค API ๅฏ†้’ฅ git add scripts/.gitignore git commit -m "chore: add .env to gitignore" ``` ### ๆœ€ไฝณๅฎž่ทต - โœ… ไฝฟ็”จ้•ฟๆœŸ่ฎค่ฏไปค็‰Œ๏ผˆ่€Œไธๆ˜ฏ็ŸญๆœŸ JWT๏ผ‰ - โœ… ๅฎšๆœŸ่ฝฎๆข API ๅฏ†้’ฅ - โœ… ้™ๅˆถๅฏ†้’ฅๆƒ้™่Œƒๅ›ด - โœ… ๅœจๅฏไฟก็ฝ‘็ปœไธญไฝฟ็”จ - โœ… ็”Ÿไบง็Žฏๅขƒไฝฟ็”จ CI/CD ็ง˜ๅฏ†็ฎก็† ## ๐Ÿงช ๆต‹่ฏ•้ชŒ่ฏ ### ่ฟ่กŒๆต‹่ฏ•ๅฅ—ไปถ ```bash pytest tests/scripts/test_deploy_filter.py -v ``` ### ๆต‹่ฏ•่ฆ†็›–่Œƒๅ›ด ``` โœ… TestFilterDiscovery (3 ไธชๆต‹่ฏ•) - test_find_async_context_compression - test_find_nonexistent_filter - test_find_filter_with_underscores โœ… TestMetadataExtraction (3 ไธชๆต‹่ฏ•) - test_extract_metadata_from_async_compression - test_extract_metadata_empty_file - test_extract_metadata_multiline_docstring โœ… TestPayloadBuilding (4 ไธชๆต‹่ฏ•) - test_build_filter_payload_basic - test_payload_has_required_fields - test_payload_with_openwebui_id โœ… TestVersionExtraction (1 ไธชๆต‹่ฏ•) - test_extract_valid_version ็ป“ๆžœ: 10/10 ้€š่ฟ‡ โœ… ``` ## ๐Ÿ’ก ๅธธ่ง็”จไพ‹ ### ็”จไพ‹ 1: ไฟฎๅค Bug ๅŽๅฟซ้€Ÿๆต‹่ฏ• ```bash # 1. ไฟฎๆ”นไปฃ็  vim plugins/filters/async-context-compression/async_context_compression.py # 2. ็ซ‹ๅณ้ƒจ็ฝฒ๏ผˆไธ้œ€่ฆ้‡ๅฏ OpenWebUI๏ผ‰ cd scripts && python deploy_filter.py # 3. ๅœจ OpenWebUI ไธญๆต‹่ฏ•ไฟฎๅค # 4. ้‡ๅค่ฟญไปฃ๏ผˆ่ฟ”ๅ›žๆญฅ้ชค 1๏ผ‰ ``` ### ็”จไพ‹ 2: ๅผ€ๅ‘ๆ–ฐ็š„ Filter ```bash # 1. ๅˆ›ๅปบๆ–ฐ Filter ็›ฎๅฝ• mkdir plugins/filters/my-new-filter # 2. ็ผ–ๅ†™ไปฃ็ ๏ผˆๅŒ…ๅซๅฟ…่ฆ็š„ docstring ๅ…ƒๆ•ฐๆฎ๏ผ‰ cat > plugins/filters/my-new-filter/my_new_filter.py << 'EOF' """ title: My New Filter author: Your Name version: 1.0.0 description: Filter description """ class Filter: # ... implementation ... EOF # 3. ้ฆ–ๆฌก้ƒจ็ฝฒ๏ผˆๅˆ›ๅปบ๏ผ‰ cd scripts && python deploy_filter.py my-new-filter # 4. ๅœจ OpenWebUI UI ๆต‹่ฏ• # 5. ้‡ๅคๆ›ดๆ–ฐ cd scripts && python deploy_filter.py my-new-filter ``` ### ็”จไพ‹ 3: ็‰ˆๆœฌๆ›ดๆ–ฐๅ’Œๅ‘ๅธƒ ```bash # 1. ๆ›ดๆ–ฐ็‰ˆๆœฌๅท vim plugins/filters/async-context-compression/async_context_compression.py # ไฟฎๆ”น: version: 1.3.0 โ†’ version: 1.4.0 # 2. ้ƒจ็ฝฒๆ–ฐ็‰ˆๆœฌ cd scripts && python deploy_filter.py # 3. ๆต‹่ฏ•้€š่ฟ‡ๅŽๆไบค git add plugins/filters/async-context-compression/ git commit -m "feat(filters): update async-context-compression to 1.4.0" git push ``` ## ๐Ÿ”„ CI/CD ้›†ๆˆ ### GitHub Actions ็คบไพ‹ ```yaml name: Deploy Filter on Release on: release: types: [published] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.12' - name: Deploy Filter run: | cd scripts python deploy_filter.py async-context-compression env: api_key: ${{ secrets.OPENWEBUI_API_KEY }} ``` ## ๐Ÿ“š ๅ‚่€ƒๆ–‡ๆกฃ - [ๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ—](DEPLOYMENT_GUIDE.md) - [ๅฟซ้€Ÿๅ‚่€ƒๅก็‰‡](QUICK_START.md) - [ๆต‹่ฏ•ๅฅ—ไปถ](../tests/scripts/test_deploy_filter.py) - [ๆ’ไปถๅผ€ๅ‘ๆŒ‡ๅ—](../docs/development/plugin-guide.md) - [OpenWebUI ๆ–‡ๆกฃ](https://docs.openwebui.com/) ## ๐ŸŽ“ ๅญฆไน ่ต„ๆบ ### ๆžถๆž„็†่งฃ ``` OpenWebUI ็ณป็ปŸ่ฎพ่ฎก โ†“ Filter ๆ’ไปถ็ฑปๅž‹ๅฎšไน‰ โ†“ REST API ๆŽฅๅฃ (/api/v1/functions) โ†“ ๆœฌๅœฐ้ƒจ็ฝฒ่„šๆœฌๅฎž็Žฐ (deploy_filter.py) โ†“ ๅ…ƒๆ•ฐๆฎๆๅ–ๅ’ŒๆŠ•้€’ ``` ### ่ฐƒ่ฏ•ๆŠ€ๅทง 1. **ๅฏ็”จ่ฏฆ็ป†ๆ—ฅๅฟ—**: ```bash python deploy_filter.py 2>&1 | tee deploy.log ``` 2. **ๆต‹่ฏ• API ่ฟžๆŽฅ**: ```bash curl -X GET http://localhost:3003/api/v1/functions \ -H "Authorization: Bearer $API_KEY" ``` 3. **้ชŒ่ฏ .env ๆ–‡ไปถ**: ```bash grep "api_key=" scripts/.env ``` ## ๐Ÿ“ž ๆ•…้šœๆŽ’้™ค | ้—ฎ้ข˜ | ่ฏŠๆ–ญ | ่งฃๅ†ณๆ–นๆกˆ | |------|------|----------| | Connection error | OpenWebUI ๅœฐๅ€/็ซฏๅฃไธๅฏน | ๆฃ€ๆŸฅ localhost:3003๏ผ›ไฟฎๆ”น URL ๅฆ‚้œ€่ฆ | | .env not found | ๆœชๅˆ›ๅปบ้…็ฝฎๆ–‡ไปถ | `echo "api_key=sk-..." > scripts/.env` | | Filter not found | ๆ’ไปถๅ็งฐ้”™่ฏฏ | ่ฟ่กŒ `python deploy_filter.py --list` | | Status 401 | API ๅฏ†้’ฅๆ— ๆ•ˆ/่ฟ‡ๆœŸ | ๆ›ดๆ–ฐ `.env` ไธญ็š„ๅฏ†้’ฅ | | Status 500 | ๆœๅŠกๅ™จ้”™่ฏฏ | ๆฃ€ๆŸฅ OpenWebUI ๆœๅŠกๆ—ฅๅฟ— | ## โœจ ็‰น่‰ฒๅŠŸ่ƒฝ | ็‰นๆ€ง | ๆ่ฟฐ | |------|------| | ๐Ÿ” ่‡ชๅŠจๅ‘็Žฐ | ่‡ชๅŠจๆŸฅๆ‰พๆ‰€ๆœ‰ Filter ๆ’ไปถ | | ๐Ÿ“Š ๅ…ƒๆ•ฐๆฎๆๅ– | ไปŽไปฃ็ ่‡ชๅŠจๆๅ–็‰ˆๆœฌๅ’Œๅ…ƒๆ•ฐๆฎ | | โ™ป๏ธ ่‡ชๅŠจๆ›ดๆ–ฐ | ๆ™บ่ƒฝๅค„็†ๆ›ดๆ–ฐๆˆ–ๅˆ›ๅปบ | | ๐Ÿ›ก๏ธ ้”™่ฏฏๅค„็† | ่ฏฆ็ป†็š„้”™่ฏฏๆ็คบๅ’Œ่ฏŠๆ–ญไฟกๆฏ | | ๐Ÿš€ ๅฟซ้€Ÿ่ฟญไปฃ | ็ง’็บง้ƒจ็ฝฒ๏ผŒๆ— ้œ€้‡ๅฏ | | ๐Ÿงช ๅฎŒๆ•ดๆต‹่ฏ• | 10 ไธชๅ•ๅ…ƒๆต‹่ฏ•่ฆ†็›–ๆ ธๅฟƒๅŠŸ่ƒฝ | --- **ๆœ€ๅŽๆ›ดๆ–ฐ**: 2026-03-09 **ไฝœ่€…**: Fu-Jie **้กน็›ฎ**: [openwebui-extensions](https://github.com/Fu-Jie/openwebui-extensions)