1 line
38 KiB
JSON
1 line
38 KiB
JSON
{"repo": "apprentice217/ai-router", "files": {"README.md": {"2068f591a9ba2965fd903e341df0c468351e220d": {"t": 1785746572.0467246, "n": 12871, "h": "7d02c0f101b45828", "c": "# AI-Router ð\n\n<p align=\"center\">\n <strong>äŒäžçº§ AI çœå
³å¹³å° | Enterprise-Level AI Gateway</strong>\n</p>\n\n<p align=\"center\">\n ç»äžæ¥å£è°çšå€äžªäž»æµ AI æš¡åïŒæ¯ææºèœè·¯ç±ãèªåšæ
é蜬移ã宿¶çæ§\n</p>\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/badge/Python-3.12-blue\" alt=\"Python\"/>\n <img src=\"https://img.shields.io/badge/FastAPI-0.104+-brightgreen\" alt=\"FastAPI\"/>\n <img src=\"https://img.shields.io/badge/Vue-3.5-green\" alt=\"Vue\"/>\n <img src=\"https://img.shields.io/badge/Docker-latest-blue\" alt=\"Docker\"/>\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\"/>\n</p>\n\n---\n\n## ð 项ç®ç®ä»\n\nAI-Router æ¯äžäžªåè [OpenRouter.ai](https://openrouter.ai/) 讟计ç**äŒäžçº§ AI çœå
³å¹³å°**ïŒæäŸç»äžç API æ¥å£æ¥è®¿é®å€äžªäž»æµ AI æš¡åïŒéä¹åé®ãæºè°±AIãDeepSeekãOpenAI çïŒïŒå®ç°æºèœè·¯ç±ãèªåšæ
é蜬移ãå®åççæ§äœç³»å Python SDK æ¯æã\n\n### ð¯ æ žå¿ä»·åŒ\n\n| ç¹æ§ | 诎æ | ä»·åŒ |\n|------|------|------|\n| ð **峿å³çš** | å
Œå®¹ OpenAI SDK æ ŒåŒïŒäžè¡ä»£ç åæ¢æš¡å | é¶åŠä¹ ææ¬ |\n| ð¡ïž **é«å¯çšè®Ÿè®¡** | æºèœéè¯ + å¥åº·æ£æ¥ + èªåš Fallback | 99.9% å¯çšæ§ |\n| ð¯ **æºèœè·¯ç±** | æ¯æ auto æš¡åŒïŒææ¬/é床äŒå
ïŒ | ææ¬éäœ 30%+ |\n| ð **å
šéŸè·¯çæ§** | Prometheus + Grafana + TraceId 远螪 | ç§çº§å®äœé®é¢ |\n| ð **åŒåè
å奜** | Python SDK + å®æŽææ¡£ + 瀺äŸä»£ç | 5 åéäžæ |\n| ð° **æ¶èéæ** | 宿¶ç»è®¡ Token æ¶èäžèŽ¹çš | ææ¬å¯æ§ |\n\n---\n\n## âš åèœç¹æ§\n\n### æ žå¿åèœ\n\n- **ð€ 倿š¡åæ¥å
¥**ïŒæ¯æéä¹åé®ãæºè°±AIãDeepSeek çäž»æµå€§æš¡å\n- **ð¬ åšçº¿å¯¹è¯**ïŒæ¯ææµåŒååºãå€èœ®å¯¹è¯ãäžäžæç®¡ç\n- **ð API Key 管ç**ïŒåå»ºãæ¥çãæ€é API KeyïŒæ¯æè°çšç»è®¡\n- **ð Token ç»è®¡**ïŒå®æ¶ç»è®¡æ¯æ¬¡è¯·æ±ç Token æ¶è\n- **ðŒïž AI ç»åŸ**ïŒæ¯æéä¹äžçžãæºè°± CogView çæçåŸæš¡å\n- **ð³ åšçº¿å
åŒ**ïŒStripe æ¯ä»éæïŒæ¯æäœé¢ç®¡ç\n\n### é«çº§ç¹æ§\n\n- **ð æºèœè·¯ç±**ïŒææ¬äŒå
/ é床äŒå
/ 蜮询çç¥\n- **â»ïž èªåš Fallback**ïŒæš¡åæ
éèªåšåæ¢å°å€çšæš¡å\n- **â±ïž æºèœéè¯**ïŒææ°éé¿éè¯çç¥\n- **ð å®å
šé²æ€**ïŒIP é»ååã请æ±éæµãTraceId 远螪\n- **ð æä»¶ç³»ç»**ïŒWeb æçŽ¢ãPDF è§£æãåŸçè¯å«\n- **ðïž BYOK æ¯æ**ïŒçšæ·èªåžŠ API KeyïŒçŽè¿æš¡å\n\n### çæ§åèŠ\n\n- **ð 宿¶çæ§**ïŒQPSãæåçãé误çãå»¶è¿ååž\n- **ð Prometheus ææ **ïŒå®æŽçäžå¡ææ 富åº\n- **ð Grafana 倧ç**ïŒé¢çœ®çæ§ä»ªè¡šç\n\n---\n\n## ð ïž ææ¯æ \n\n### åç«¯ææ¯\n\n| ææ¯ | çæ¬ | 诎æ |\n|------|------|------|\n| Python | 3.12+ | çŒçšè¯èš |\n| FastAPI | 0.104+ | åŒæ¥ Web æ¡æ¶ |\n| SQLAlchemy | 2.0+ | ORM æ¡æ¶ |\n| Pydantic | 2.0+ | æ°æ®éªè¯ |\n| httpx | 0.25+ | åŒæ¥ HTTP 客æ·ç«¯ |\n| aiomysql | 0.2.0+ | åŒæ¥ MySQL é©±åš |\n| Redis | 7+ | çŒå / Session / ååžåŒé |\n| LangChain | 0.1+ | AI æš¡åéææ¡æ¶ |\n| Stripe | 10+ | åšçº¿æ¯ä» |\n| Prometheus | 2.48+ | ææ æ¶é |\n\n### åç«¯ææ¯\n\n| ææ¯ | çæ¬ | 诎æ |\n|------|------|------|\n| Vue | 3.5.17 | åç«¯æ¡æ¶ |\n| Vite | 7.0.0 | æå»ºå·¥å
· |\n| Ant Design Vue | 4.2.6 | UI ç»ä»¶åº |\n| Pinia | 3.0.3 | ç¶æç®¡ç |\n| ECharts | 5.5.0 | åŸè¡šç»ä»¶ |\n| Axios | 1.11.0 | HTTP 客æ·ç«¯ |\n| TypeScript | 5.8.0 | ç±»åå®å
š |\n\n### åºç¡è®Ÿæœ\n\n| ç»ä»¶ | 诎æ |\n|------|------|\n| Docker + Docker Compose | 容åšåéšçœ² |\n| Nginx | åå代ç / èŽèœœåè¡¡ |\n| Prometheus | ææ ååš |\n| Grafana | çæ§å¯è§å |\n\n---\n\n## ðïž ç³»ç»æ¶æ\n\n```\nâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nâ 客æ·ç«¯å± â\nâ ââââââââââââ ââââââââââââ ââââââââââââ ââââââââââââ â\nâ â Java SDK â â å端åºçš â â HTTP API â â å
¶ä»SDK â â\nâ ââââââ¬ââââââ ââââââ¬ââââââ ââââââ¬ââââââ ââââââ¬ââââââ â\nââââââââââŒââââââââââââââŒââââââââââââââŒââââââââââââââŒâââââââââââââââ\n â â â â\n ⌠⌠⌠âŒ\nâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nâ API çœå
³å± â\nâ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â\nâ â è®€è¯ & éŽæå± â â\nâ â ⢠API Key éªè¯ ⢠æéæ£æ¥ ⢠é
颿§å¶ â â\nâ ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ â\nâ â â\nâ ââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââ â\nâ â æºèœè·¯ç±å± â â\nâ â â¢ ææ¬äŒå
è·¯ç± â¢ é床äŒå
è·¯ç± â¢ å¥åº·æ£æ¥ â â\nâ â ⢠èªåš Fallback ⢠èŽèœœåè¡¡ â¢ æš¡åæ å° â â\nâ ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ â\nâ â â\nâ ââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââ â\nâ â æš¡åè°çšå± (Spring AI) â â\nâ â ⢠ç»äžæ¥å£å°è£
⢠æµåŒååº â¢ æºèœéè¯ â â\nâ â ⢠è¶
æ¶æ§å¶ ⢠ååºçŒå ⢠é误å€ç â â\nâ âââââââââ¬âââââââââââââââââ¬âââââââââââââââââ¬ââââââââââââââââ â\nââââââââââââŒâââââââââââââââââŒâââââââââââââââââŒâââââââââââââââââââââ\n â â â\n ⌠⌠âŒ\n ââââââââââââ ââââââââââââ ââââââââââââ\n â éä¹åé® â â æºè°±AI â â DeepSeek â ...æŽå€æš¡å\n ââââââââââââ ââââââââââââ ââââââââââââ\n```\n\n---\n\n## ð 项ç®ç»æ\n\n```\nai-router/\nâââ frontend/ # åç«¯é¡¹ç® (Vue.js)\nâ âââ src/\nâ â âââ api/ # API æ¥å£å®ä¹\nâ â âââ components/ # å
Œ
±ç»ä»¶\nâ â âââ layouts/ # åžå±ç»ä»¶\nâ â âââ pages/ # 页é¢\nâ â â âââ admin/ # 管çå页é¢\nâ â â âââ user/ # çšæ·é¡µé¢\nâ â âââ router/ # è·¯ç±é
眮\nâ â âââ stores/ # Pinia ç¶æç®¡ç\nâ âââ Dockerfile # å端 Docker é
眮\nâ âââ package.json\nâââ python-backend/ # Python å端项ç®\nâ âââ app/\nâ â âââ adapter/ # æš¡åéé
åš\nâ â â âââ dashscope_adapter.py # éä¹åé®éé
åš\nâ â â âââ deepseek_adapter.py # DeepSeek éé
åš\nâ â â âââ openai_adapter.py # OpenAI éé
åš\nâ â â âââ zhipu_adapter.py # æºè°±AI éé
åš\nâ â â âââ adapter_factory.py # éé
åšå·¥å\nâ â âââ api/ # API è·¯ç± (Controllers)\nâ â â âââ apikey.py # API Key 管ç\nâ â â âââ chat.py # å¯¹è¯æ¥å£ (OpenAI å
Œå®¹)\nâ â â âââ image.py # AI ç»åŸæ¥å£\nâ â â âââ ...\nâ â âââ models/ # æ°æ®æš¡å\nâ â â âââ schemas/ # Pydantic æ°æ®æš¡å\nâ â â âââ db/ # æ°æ®åºå®äœ\nâ â âââ services/ # äžå¡é»èŸ\nâ â â âââ chat_service.py # å¯¹è¯æå¡\nâ â â âââ routing_service.py # è·¯ç±æå¡\nâ â â âââ health_service.py # å¥åº·æ£æ¥æå¡\nâ â â âââ billing_service.py # 计莹æå¡\nâ â âââ strategy/ # è·¯ç±çç¥\nâ â âââ middleware/ # äžéŽä»¶ (讀è¯ãéæµç)\nâ â âââ task/ # åŒæ¥ä»»å¡ (å¥åº·æ£æ¥ç)\nâ â âââ utils/ # å·¥å
·ç±»\nâ âââ Dockerfile # å端 Docker é
眮\nâ âââ requirements.txt # Python äŸèµ\nâ âââ run.py # å¯åšèæ¬\nâ âââ main.py # FastAPI äž»æä»¶\nâââ yu-ai-router-sdk/ # Python SDK\nâ âââ yu_ai_router_sdk/\nâ â âââ client.py # 客æ·ç«¯\nâ â âââ models.py # æ°æ®æš¡å\nâ â âââ config.py # é
眮\nâ âââ examples/ # 瀺äŸä»£ç \nâ âââ pyproject.toml # Python 项ç®é
眮\nâââ sql/ # SQL èæ¬\nâ âââ create_table.sql # 建衚è¯å¥\nâââ grafana/ # Grafana é
眮\nâ âââ provisioning/\nâ â âââ dashboards/ # çæ§ä»ªè¡šæ¿\nâ â âââ datasources/ # æ°æ®æºé
眮\nâââ docker-compose.yml # Docker Compose é
眮\nâââ prometheus.yml # Prometheus é
眮\nâââ README.md # é¡¹ç®ææ¡£\n```\n\n---\n\n## ð å¿«éåŒå§\n\n### ç¯å¢èŠæ±\n\n- Python 3.12+\n- Node.js 22+\n- MySQL 8.0+\n- Redis 7.0+\n\n### æ¬å°åŒå\n\n#### 1. å
é项ç®\n\n```bash\ngit clone https://github.com/your-repo/ai-router.git\ncd ai-router\n```\n\n#### 2. åå§åæ°æ®åº\n\n```bash\n# æ§è¡ SQL èæ¬åå»ºæ°æ®åºå衚\nmysql -u root -p < sql/create_table.sql\n```\n\n#### 3. é
眮 Python å端\n\nè¿å
¥å端ç®åœå¹¶å建èæç¯å¢ïŒ\n\n```bash\ncd python-backend\npython -m venv venv\nsource venv/bin/activate # Windows: venv\\Scripts\\activate\npip install -r requirements.txt\n```\n\né
眮ç¯å¢åéïŒå建 `.env` æä»¶ïŒ\n\n```bash\n# æ°æ®åºé
眮\nDATABASE_URL=mysql+aiomysql://root:123456@localhost:3306/yu_ai_router\nREDIS_URL=redis://localhost:6379\n\n# AI æš¡åé
眮\nDASHSCOPE_API_KEY=your-qwen-api-key\nDEEPSEEK_API_KEY=your-deepseek-api-key\nZHIPU_API_KEY=your-zhipu-api-key\nOPENAI_API_KEY=your-openai-api-key\n\n# Stripe é
眮\nSTRIPE_API_KEY=your-stripe-api-key\n```\n\n#### 4. å¯åšå端æå¡\n\n```bash\npython run.py\n```\n\nè®¿é® APIïŒhttp://localhost:8123/api\n\n#### 5. å¯åšå端\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n访é®å端页é¢ïŒhttp://localhost:5173\n\n---\n\n## ð³ Docker éšçœ²\n\n### äžé®éšçœ²ïŒæšèïŒ\n\n```bash\ndocker-compose up -d\n```\n\næå¡è®¿é®å°åïŒ\n\n| æå¡ | å°å |\n|------|------|\n| åç«¯é¡µé¢ | http://localhost |\n| å端 API | http://localhost:8123/api |\n| Prometheus | http://localhost:9090 |\n| Grafana | http://localhost:3000 (admin/admin) |\n\n### åç¬æå»º\n\n```bash\n# æå»ºå端éå\ncd python-backend\ndocker build -t ai-router-backend .\n\n# æå»ºå端éå\ncd ../frontend\ndocker build -t ai-router-frontend .\n```\n\n---\n\n## ð¡ API 䜿çš\n\n### å¯¹è¯æ¥å£ïŒå
Œå®¹ OpenAI æ ŒåŒïŒ\n\n```bash\ncurl -X POST \"http://localhost:8123/api/v1/chat/completions\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer sk-your-api-key\" \\\n -d '{\n \"model\": \"qwen-plus\",\n \"messages\": [\n {\"role\": \"user\", \"content\": \"äœ å¥œ\"}\n ],\n \"stream\": true\n }'\n```\n\n### æ¯æçæš¡å\n\n| æš¡åæ è¯ | æäŸå | 诎æ |\n|----------|--------|------|\n| `qwen-plus` | éä¹åé® | å¢åŒºçïŒæ§èœæŽåŒº |\n| `qwen-turbo` | éä¹åé® | å¿«éçïŒååºæŽå¿« |\n| `qwen-max` | éä¹åé® | æè°çïŒæ¯ææ·±åºŠæè |\n| `glm-4.7` | æºè°±AI | 髿ºèœæè°æš¡å |\n| `glm-4.6` | æºè°±AI | è¶
区æ§èœæš¡å |\n| `glm-4.7-flash` | æºè°±AI | å
莹暡å |\n| `deepseek-chat` | DeepSeek | å¯¹è¯æš¡å |\n| `deepseek-reasoner` | DeepSeek | æ¯ææ·±åºŠæè |\n| `deepseek-coder` | DeepSeek | ä»£ç æš¡å |\n\n### æºèœè·¯ç±\n\n```bash\n# äœ¿çš auto æš¡åŒïŒèªåšéæ©æäŒæš¡å\ncurl -X POST \"http://localhost:8123/api/v1/chat/completions\" \\\n -H \"Authorization: Bearer sk-your-api-key\" \\\n -d '{\n \"model\": \"auto\",\n \"messages\": [{\"role\": \"user\", \"content\": \"äœ å¥œ\"}],\n \"routing_strategy\": \"cost_first\"\n }'\n```\n\nè·¯ç±çç¥ïŒ\n- `cost_first`ïŒææ¬äŒå
ïŒéæ©æäŸ¿å®çå¥åº·æš¡å\n- `latency_first`ïŒé床äŒå
ïŒéæ©ååºæå¿«çæš¡å\n- `round_robin`ïŒèœ®è¯¢ææå¥åº·æš¡å\n\n---\n\n## ðŠ Python SDK\n\n### å®è£
\n\n```bash\npip install yu-ai-router-sdk\n```\n\nææ¬å°å®è£
ïŒ\n\n```bash\ncd yu-ai-router-sdk\npip install -e .\n```\n\n### 䜿çšç€ºäŸ\n\n```python\nfrom yu_ai_router_sdk import AIRouter\n\n# å建客æ·ç«¯\nclient = AIRouter(\n api_key=\"sk-your-api-key\",\n base_url=\"http://localhost:8123/api\"\n)\n\n# 忥è°çš\nresponse = client.chat(\"äœ å¥œ\")\nprint(response)\n\n# æå®æš¡å\nresponse = client.chat(\"äœ å¥œ\", model=\"qwen-plus\")\nprint(response)\n\n# æµåŒè°çš\nfor chunk in client.chat_stream(\"讲äžäžªæ
äº\"):\n print(chunk, end=\"\", flush=True)\n\n# æå®è·¯ç±çç¥\nresponse = client.chat(\n \"äœ å¥œ\",\n model=\"auto\",\n routing_strategy=\"cost_first\"\n)\nprint(response)\n```\n\n---\n\n## ð çæ§ææ \n\n### Prometheus ææ \n\n| ææ åç§° | ç±»å | 诎æ |\n|----------|------|------|\n| `ai_gateway_requests_total` | Counter | è¯·æ±æ»æ° |\n| `ai_gateway_request_duration` | Histogram | 请æ±å»¶è¿ååž |\n| `ai_gateway_tokens_total` | Counter | Token æ¶èæ»æ° |\n| `ai_gateway_model_health` | Gauge | æš¡åå¥åº·ç¶æ |\n\n### Grafana 仪衚ç\n\né¡¹ç®æäŸé¢çœ®ç Grafana 仪衚çïŒ`grafana-dashboard.json`ïŒïŒå
å«ïŒ\n\n- 宿¶ QPS æ²çº¿\n- åæš¡åæåç/é误ç\n- Token æ¶èè¶å¿\n- å¹³åå»¶è¿ååž\n- æš¡åå¥åº·ç¶æ\n\n---\n\n## ð§ é
眮诎æ\n\n### åºçšé
眮\n\nåš `python-backend/.env` æä»¶äžé
眮ïŒ\n\n```bash\n# æå¡åšé
眮\nHOST=0.0.0.0\nPORT=8123\n\n# æ°æ®åºé
眮\nDATABASE_URL=mysql+aiomysql://root:123456@localhost:3306/yu_ai_router\n\n# Redis é
眮\nREDIS_URL=redis://localhost:6379\n\n# AI æš¡å API Key\nDASHSCOPE_API_KEY=your-qwen-api-key\nDEEPSEEK_API_KEY=your-deepseek-api-key\nZHIPU_API_KEY=your-zhipu-api-key\nOPENAI_API_KEY=your-openai-api-key\n\n# è·¯ç±çç¥\nDEFAULT_ROUTING_STRATEGY=cost_first\nFALLBACK_ENABLED=true\nRETRY_TIMES=3\n\n# Stripe æ¯ä»\nSTRIPE_API_KEY=your-stripe-api-key\n```\n\n### ç¯å¢åé\n\n| åéå | 诎æ | é»è®€åŒ |\n|--------|------|--------|\n| `DATABASE_URL` | æ°æ®åºè¿æ¥ | - |\n| `REDIS_URL` | Redis å°å | redis://localhost:6379 |\n| `DASHSCOPE_API_KEY` | éä¹åé® Key | - |\n| `DEEPSEEK_API_KEY` | DeepSeek Key | - |\n| `ZHIPU_API_KEY` | æºè°± AI Key | - |\n| `OPENAI_API_KEY` | OpenAI Key | - |\n| `DEFAULT_ROUTING_STRATEGY` | é»è®€è·¯ç±çç¥ | cost_first |\n| `FALLBACK_ENABLED` | å¯çšèªåš Fallback | true |\n| `RETRY_TIMES` | éè¯æ¬¡æ° | 3 |\n\n---\n\n## ðïž æ°æ®åºè®Ÿè®¡\n\n### æ žå¿è¡š\n\n| 衚å | 诎æ |\n|------|------|\n| `user` | çšæ·è¡š |\n| `api_key` | API Key 衚 |\n| `model_provider` | æš¡åæäŸè
衚 |\n| `model` | æš¡å衚 |\n| `request_log` | è¯·æ±æ¥å¿è¡š |\n| `plugin_config` | æä»¶é
眮衚 |\n| `user_provider_key` | çšæ·èªåžŠå¯é¥è¡šïŒBYOKïŒ |\n\n---\n\n## ð å®å
šç¹æ§\n\n- **API Key 讀è¯**ïŒææ API 请æ±éæºåžŠææç API Key\n- **请æ±éæµ**ïŒæ¯æ API Key 级å«å IP 级å«çéæµ\n- **IP é»åå**ïŒå¯é
眮 IP é»ååïŒé²æ¢æ¶æè¯·æ±\n- **TraceId 远螪**ïŒå
šéŸè·¯è¿œèžªïŒäŸ¿äºé®é¢ææ¥\n- **HTTPS æ¯æ**ïŒå»ºè®®ç产ç¯å¢å¯çš HTTPS\n\n---\n\n## ð åŒå计å\n\n- [x] åºç¡åèœïŒçšæ·ç³»ç»ã对è¯ãAPI Key 管çïŒ\n- [x] 倿š¡åæ¥å
¥ïŒéä¹åé®ãæºè°±AIãDeepSeekãOpenAIïŒ\n- [x] æºèœè·¯ç±äž Fallback\n- [x] 请æ±éæµäž IP é»åå\n- [x] Python SDK\n- [x] Prometheus + Grafana çæ§\n- [x] Stripe åšçº¿æ¯ä»\n- [x] AI ç»åŸåèœ\n- [x] æä»¶ç³»ç»ïŒWeb æçŽ¢ãPDF è§£æïŒ\n- [x] BYOKïŒçšæ·èªåžŠå¯é¥ïŒ\n- [ ] Function Calling æ¯æ\n- [ ] Go/Node.js SDK\n\n---\n\n## ð€ èŽ¡ç®æå\n\n欢è¿èŽ¡ç®ä»£ç ïŒè¯·éµåŸªä»¥äžæ¥éª€ïŒ\n\n1. Fork æ¬ä»åº\n2. åå»ºç¹æ§åæ¯ (`git checkout -b feature/AmazingFeature`)\n3. æäº€æŽæ¹ (`git commit -m 'Add some AmazingFeature'`)\n4. æšéå°åæ¯ (`git push origin feature/AmazingFeature`)\n5. åèµ· Pull Request\n\n---\n\n## ð åŒæºåè®®\n\næ¬é¡¹ç®éçš MIT åè®®åŒæºïŒè¯Šè§ [LICENSE](LICENSE) æä»¶ã\n\n---\n\n## ð èŽè°¢\n\n- [FastAPI](https://fastapi.tiangolo.com/) - åŒæ¥ Web æ¡æ¶\n- [LangChain](https://www.langchain.com/) - AI æš¡åéææ¡æ¶\n- [OpenRouter](https://openrouter.ai/) - 产å讟计åè\n- [Ant Design Vue](https://antdv.com/) - UI ç»ä»¶åº\n- [Prometheus](https://prometheus.io/) - çæ§ææ æ¶é\n- [Grafana](https://grafana.com/) - å¯è§å仪衚æ¿\n\n---\n\n<p align=\"center\">\n Made with â€ïž by AI Router Contributors\n</p>\n"}, "0e9fd3aa182d290a25ab7d2d8c442d65467aeaba": {"t": 1785765870.811875, "n": 12871, "h": "7d02c0f101b45828", "c": "# AI-Router ð\n\n<p align=\"center\">\n <strong>äŒäžçº§ AI çœå
³å¹³å° | Enterprise-Level AI Gateway</strong>\n</p>\n\n<p align=\"center\">\n ç»äžæ¥å£è°çšå€äžªäž»æµ AI æš¡åïŒæ¯ææºèœè·¯ç±ãèªåšæ
é蜬移ã宿¶çæ§\n</p>\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/badge/Python-3.12-blue\" alt=\"Python\"/>\n <img src=\"https://img.shields.io/badge/FastAPI-0.104+-brightgreen\" alt=\"FastAPI\"/>\n <img src=\"https://img.shields.io/badge/Vue-3.5-green\" alt=\"Vue\"/>\n <img src=\"https://img.shields.io/badge/Docker-latest-blue\" alt=\"Docker\"/>\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\"/>\n</p>\n\n---\n\n## ð 项ç®ç®ä»\n\nAI-Router æ¯äžäžªåè [OpenRouter.ai](https://openrouter.ai/) 讟计ç**äŒäžçº§ AI çœå
³å¹³å°**ïŒæäŸç»äžç API æ¥å£æ¥è®¿é®å€äžªäž»æµ AI æš¡åïŒéä¹åé®ãæºè°±AIãDeepSeekãOpenAI çïŒïŒå®ç°æºèœè·¯ç±ãèªåšæ
é蜬移ãå®åççæ§äœç³»å Python SDK æ¯æã\n\n### ð¯ æ žå¿ä»·åŒ\n\n| ç¹æ§ | 诎æ | ä»·åŒ |\n|------|------|------|\n| ð **峿å³çš** | å
Œå®¹ OpenAI SDK æ ŒåŒïŒäžè¡ä»£ç åæ¢æš¡å | é¶åŠä¹ ææ¬ |\n| ð¡ïž **é«å¯çšè®Ÿè®¡** | æºèœéè¯ + å¥åº·æ£æ¥ + èªåš Fallback | 99.9% å¯çšæ§ |\n| ð¯ **æºèœè·¯ç±** | æ¯æ auto æš¡åŒïŒææ¬/é床äŒå
ïŒ | ææ¬éäœ 30%+ |\n| ð **å
šéŸè·¯çæ§** | Prometheus + Grafana + TraceId 远螪 | ç§çº§å®äœé®é¢ |\n| ð **åŒåè
å奜** | Python SDK + å®æŽææ¡£ + 瀺äŸä»£ç | 5 åéäžæ |\n| ð° **æ¶èéæ** | 宿¶ç»è®¡ Token æ¶èäžèŽ¹çš | ææ¬å¯æ§ |\n\n---\n\n## âš åèœç¹æ§\n\n### æ žå¿åèœ\n\n- **ð€ 倿š¡åæ¥å
¥**ïŒæ¯æéä¹åé®ãæºè°±AIãDeepSeek çäž»æµå€§æš¡å\n- **ð¬ åšçº¿å¯¹è¯**ïŒæ¯ææµåŒååºãå€èœ®å¯¹è¯ãäžäžæç®¡ç\n- **ð API Key 管ç**ïŒåå»ºãæ¥çãæ€é API KeyïŒæ¯æè°çšç»è®¡\n- **ð Token ç»è®¡**ïŒå®æ¶ç»è®¡æ¯æ¬¡è¯·æ±ç Token æ¶è\n- **ðŒïž AI ç»åŸ**ïŒæ¯æéä¹äžçžãæºè°± CogView çæçåŸæš¡å\n- **ð³ åšçº¿å
åŒ**ïŒStripe æ¯ä»éæïŒæ¯æäœé¢ç®¡ç\n\n### é«çº§ç¹æ§\n\n- **ð æºèœè·¯ç±**ïŒææ¬äŒå
/ é床äŒå
/ 蜮询çç¥\n- **â»ïž èªåš Fallback**ïŒæš¡åæ
éèªåšåæ¢å°å€çšæš¡å\n- **â±ïž æºèœéè¯**ïŒææ°éé¿éè¯çç¥\n- **ð å®å
šé²æ€**ïŒIP é»ååã请æ±éæµãTraceId 远螪\n- **ð æä»¶ç³»ç»**ïŒWeb æçŽ¢ãPDF è§£æãåŸçè¯å«\n- **ðïž BYOK æ¯æ**ïŒçšæ·èªåžŠ API KeyïŒçŽè¿æš¡å\n\n### çæ§åèŠ\n\n- **ð 宿¶çæ§**ïŒQPSãæåçãé误çãå»¶è¿ååž\n- **ð Prometheus ææ **ïŒå®æŽçäžå¡ææ 富åº\n- **ð Grafana 倧ç**ïŒé¢çœ®çæ§ä»ªè¡šç\n\n---\n\n## ð ïž ææ¯æ \n\n### åç«¯ææ¯\n\n| ææ¯ | çæ¬ | 诎æ |\n|------|------|------|\n| Python | 3.12+ | çŒçšè¯èš |\n| FastAPI | 0.104+ | åŒæ¥ Web æ¡æ¶ |\n| SQLAlchemy | 2.0+ | ORM æ¡æ¶ |\n| Pydantic | 2.0+ | æ°æ®éªè¯ |\n| httpx | 0.25+ | åŒæ¥ HTTP 客æ·ç«¯ |\n| aiomysql | 0.2.0+ | åŒæ¥ MySQL é©±åš |\n| Redis | 7+ | çŒå / Session / ååžåŒé |\n| LangChain | 0.1+ | AI æš¡åéææ¡æ¶ |\n| Stripe | 10+ | åšçº¿æ¯ä» |\n| Prometheus | 2.48+ | ææ æ¶é |\n\n### åç«¯ææ¯\n\n| ææ¯ | çæ¬ | 诎æ |\n|------|------|------|\n| Vue | 3.5.17 | åç«¯æ¡æ¶ |\n| Vite | 7.0.0 | æå»ºå·¥å
· |\n| Ant Design Vue | 4.2.6 | UI ç»ä»¶åº |\n| Pinia | 3.0.3 | ç¶æç®¡ç |\n| ECharts | 5.5.0 | åŸè¡šç»ä»¶ |\n| Axios | 1.11.0 | HTTP 客æ·ç«¯ |\n| TypeScript | 5.8.0 | ç±»åå®å
š |\n\n### åºç¡è®Ÿæœ\n\n| ç»ä»¶ | 诎æ |\n|------|------|\n| Docker + Docker Compose | 容åšåéšçœ² |\n| Nginx | åå代ç / èŽèœœåè¡¡ |\n| Prometheus | ææ ååš |\n| Grafana | çæ§å¯è§å |\n\n---\n\n## ðïž ç³»ç»æ¶æ\n\n```\nâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nâ 客æ·ç«¯å± â\nâ ââââââââââââ ââââââââââââ ââââââââââââ ââââââââââââ â\nâ â Java SDK â â å端åºçš â â HTTP API â â å
¶ä»SDK â â\nâ ââââââ¬ââââââ ââââââ¬ââââââ ââââââ¬ââââââ ââââââ¬ââââââ â\nââââââââââŒââââââââââââââŒââââââââââââââŒââââââââââââââŒâââââââââââââââ\n â â â â\n ⌠⌠⌠âŒ\nâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nâ API çœå
³å± â\nâ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â\nâ â è®€è¯ & éŽæå± â â\nâ â ⢠API Key éªè¯ ⢠æéæ£æ¥ ⢠é
颿§å¶ â â\nâ ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ â\nâ â â\nâ ââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââ â\nâ â æºèœè·¯ç±å± â â\nâ â â¢ ææ¬äŒå
è·¯ç± â¢ é床äŒå
è·¯ç± â¢ å¥åº·æ£æ¥ â â\nâ â ⢠èªåš Fallback ⢠èŽèœœåè¡¡ â¢ æš¡åæ å° â â\nâ ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ â\nâ â â\nâ ââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââ â\nâ â æš¡åè°çšå± (Spring AI) â â\nâ â ⢠ç»äžæ¥å£å°è£
⢠æµåŒååº â¢ æºèœéè¯ â â\nâ â ⢠è¶
æ¶æ§å¶ ⢠ååºçŒå ⢠é误å€ç â â\nâ âââââââââ¬âââââââââââââââââ¬âââââââââââââââââ¬ââââââââââââââââ â\nââââââââââââŒâââââââââââââââââŒâââââââââââââââââŒâââââââââââââââââââââ\n â â â\n ⌠⌠âŒ\n ââââââââââââ ââââââââââââ ââââââââââââ\n â éä¹åé® â â æºè°±AI â â DeepSeek â ...æŽå€æš¡å\n ââââââââââââ ââââââââââââ ââââââââââââ\n```\n\n---\n\n## ð 项ç®ç»æ\n\n```\nai-router/\nâââ frontend/ # åç«¯é¡¹ç® (Vue.js)\nâ âââ src/\nâ â âââ api/ # API æ¥å£å®ä¹\nâ â âââ components/ # å
Œ
±ç»ä»¶\nâ â âââ layouts/ # åžå±ç»ä»¶\nâ â âââ pages/ # 页é¢\nâ â â âââ admin/ # 管çå页é¢\nâ â â âââ user/ # çšæ·é¡µé¢\nâ â âââ router/ # è·¯ç±é
眮\nâ â âââ stores/ # Pinia ç¶æç®¡ç\nâ âââ Dockerfile # å端 Docker é
眮\nâ âââ package.json\nâââ python-backend/ # Python å端项ç®\nâ âââ app/\nâ â âââ adapter/ # æš¡åéé
åš\nâ â â âââ dashscope_adapter.py # éä¹åé®éé
åš\nâ â â âââ deepseek_adapter.py # DeepSeek éé
åš\nâ â â âââ openai_adapter.py # OpenAI éé
åš\nâ â â âââ zhipu_adapter.py # æºè°±AI éé
åš\nâ â â âââ adapter_factory.py # éé
åšå·¥å\nâ â âââ api/ # API è·¯ç± (Controllers)\nâ â â âââ apikey.py # API Key 管ç\nâ â â âââ chat.py # å¯¹è¯æ¥å£ (OpenAI å
Œå®¹)\nâ â â âââ image.py # AI ç»åŸæ¥å£\nâ â â âââ ...\nâ â âââ models/ # æ°æ®æš¡å\nâ â â âââ schemas/ # Pydantic æ°æ®æš¡å\nâ â â âââ db/ # æ°æ®åºå®äœ\nâ â âââ services/ # äžå¡é»èŸ\nâ â â âââ chat_service.py # å¯¹è¯æå¡\nâ â â âââ routing_service.py # è·¯ç±æå¡\nâ â â âââ health_service.py # å¥åº·æ£æ¥æå¡\nâ â â âââ billing_service.py # 计莹æå¡\nâ â âââ strategy/ # è·¯ç±çç¥\nâ â âââ middleware/ # äžéŽä»¶ (讀è¯ãéæµç)\nâ â âââ task/ # åŒæ¥ä»»å¡ (å¥åº·æ£æ¥ç)\nâ â âââ utils/ # å·¥å
·ç±»\nâ âââ Dockerfile # å端 Docker é
眮\nâ âââ requirements.txt # Python äŸèµ\nâ âââ run.py # å¯åšèæ¬\nâ âââ main.py # FastAPI äž»æä»¶\nâââ yu-ai-router-sdk/ # Python SDK\nâ âââ yu_ai_router_sdk/\nâ â âââ client.py # 客æ·ç«¯\nâ â âââ models.py # æ°æ®æš¡å\nâ â âââ config.py # é
眮\nâ âââ examples/ # 瀺äŸä»£ç \nâ âââ pyproject.toml # Python 项ç®é
眮\nâââ sql/ # SQL èæ¬\nâ âââ create_table.sql # 建衚è¯å¥\nâââ grafana/ # Grafana é
眮\nâ âââ provisioning/\nâ â âââ dashboards/ # çæ§ä»ªè¡šæ¿\nâ â âââ datasources/ # æ°æ®æºé
眮\nâââ docker-compose.yml # Docker Compose é
眮\nâââ prometheus.yml # Prometheus é
眮\nâââ README.md # é¡¹ç®ææ¡£\n```\n\n---\n\n## ð å¿«éåŒå§\n\n### ç¯å¢èŠæ±\n\n- Python 3.12+\n- Node.js 22+\n- MySQL 8.0+\n- Redis 7.0+\n\n### æ¬å°åŒå\n\n#### 1. å
é项ç®\n\n```bash\ngit clone https://github.com/your-repo/ai-router.git\ncd ai-router\n```\n\n#### 2. åå§åæ°æ®åº\n\n```bash\n# æ§è¡ SQL èæ¬åå»ºæ°æ®åºå衚\nmysql -u root -p < sql/create_table.sql\n```\n\n#### 3. é
眮 Python å端\n\nè¿å
¥å端ç®åœå¹¶å建èæç¯å¢ïŒ\n\n```bash\ncd python-backend\npython -m venv venv\nsource venv/bin/activate # Windows: venv\\Scripts\\activate\npip install -r requirements.txt\n```\n\né
眮ç¯å¢åéïŒå建 `.env` æä»¶ïŒ\n\n```bash\n# æ°æ®åºé
眮\nDATABASE_URL=mysql+aiomysql://root:123456@localhost:3306/yu_ai_router\nREDIS_URL=redis://localhost:6379\n\n# AI æš¡åé
眮\nDASHSCOPE_API_KEY=your-qwen-api-key\nDEEPSEEK_API_KEY=your-deepseek-api-key\nZHIPU_API_KEY=your-zhipu-api-key\nOPENAI_API_KEY=your-openai-api-key\n\n# Stripe é
眮\nSTRIPE_API_KEY=your-stripe-api-key\n```\n\n#### 4. å¯åšå端æå¡\n\n```bash\npython run.py\n```\n\nè®¿é® APIïŒhttp://localhost:8123/api\n\n#### 5. å¯åšå端\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n访é®å端页é¢ïŒhttp://localhost:5173\n\n---\n\n## ð³ Docker éšçœ²\n\n### äžé®éšçœ²ïŒæšèïŒ\n\n```bash\ndocker-compose up -d\n```\n\næå¡è®¿é®å°åïŒ\n\n| æå¡ | å°å |\n|------|------|\n| åç«¯é¡µé¢ | http://localhost |\n| å端 API | http://localhost:8123/api |\n| Prometheus | http://localhost:9090 |\n| Grafana | http://localhost:3000 (admin/admin) |\n\n### åç¬æå»º\n\n```bash\n# æå»ºå端éå\ncd python-backend\ndocker build -t ai-router-backend .\n\n# æå»ºå端éå\ncd ../frontend\ndocker build -t ai-router-frontend .\n```\n\n---\n\n## ð¡ API 䜿çš\n\n### å¯¹è¯æ¥å£ïŒå
Œå®¹ OpenAI æ ŒåŒïŒ\n\n```bash\ncurl -X POST \"http://localhost:8123/api/v1/chat/completions\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer sk-your-api-key\" \\\n -d '{\n \"model\": \"qwen-plus\",\n \"messages\": [\n {\"role\": \"user\", \"content\": \"äœ å¥œ\"}\n ],\n \"stream\": true\n }'\n```\n\n### æ¯æçæš¡å\n\n| æš¡åæ è¯ | æäŸå | 诎æ |\n|----------|--------|------|\n| `qwen-plus` | éä¹åé® | å¢åŒºçïŒæ§èœæŽåŒº |\n| `qwen-turbo` | éä¹åé® | å¿«éçïŒååºæŽå¿« |\n| `qwen-max` | éä¹åé® | æè°çïŒæ¯ææ·±åºŠæè |\n| `glm-4.7` | æºè°±AI | 髿ºèœæè°æš¡å |\n| `glm-4.6` | æºè°±AI | è¶
区æ§èœæš¡å |\n| `glm-4.7-flash` | æºè°±AI | å
莹暡å |\n| `deepseek-chat` | DeepSeek | å¯¹è¯æš¡å |\n| `deepseek-reasoner` | DeepSeek | æ¯ææ·±åºŠæè |\n| `deepseek-coder` | DeepSeek | ä»£ç æš¡å |\n\n### æºèœè·¯ç±\n\n```bash\n# äœ¿çš auto æš¡åŒïŒèªåšéæ©æäŒæš¡å\ncurl -X POST \"http://localhost:8123/api/v1/chat/completions\" \\\n -H \"Authorization: Bearer sk-your-api-key\" \\\n -d '{\n \"model\": \"auto\",\n \"messages\": [{\"role\": \"user\", \"content\": \"äœ å¥œ\"}],\n \"routing_strategy\": \"cost_first\"\n }'\n```\n\nè·¯ç±çç¥ïŒ\n- `cost_first`ïŒææ¬äŒå
ïŒéæ©æäŸ¿å®çå¥åº·æš¡å\n- `latency_first`ïŒé床äŒå
ïŒéæ©ååºæå¿«çæš¡å\n- `round_robin`ïŒèœ®è¯¢ææå¥åº·æš¡å\n\n---\n\n## ðŠ Python SDK\n\n### å®è£
\n\n```bash\npip install yu-ai-router-sdk\n```\n\nææ¬å°å®è£
ïŒ\n\n```bash\ncd yu-ai-router-sdk\npip install -e .\n```\n\n### 䜿çšç€ºäŸ\n\n```python\nfrom yu_ai_router_sdk import AIRouter\n\n# å建客æ·ç«¯\nclient = AIRouter(\n api_key=\"sk-your-api-key\",\n base_url=\"http://localhost:8123/api\"\n)\n\n# 忥è°çš\nresponse = client.chat(\"äœ å¥œ\")\nprint(response)\n\n# æå®æš¡å\nresponse = client.chat(\"äœ å¥œ\", model=\"qwen-plus\")\nprint(response)\n\n# æµåŒè°çš\nfor chunk in client.chat_stream(\"讲äžäžªæ
äº\"):\n print(chunk, end=\"\", flush=True)\n\n# æå®è·¯ç±çç¥\nresponse = client.chat(\n \"äœ å¥œ\",\n model=\"auto\",\n routing_strategy=\"cost_first\"\n)\nprint(response)\n```\n\n---\n\n## ð çæ§ææ \n\n### Prometheus ææ \n\n| ææ åç§° | ç±»å | 诎æ |\n|----------|------|------|\n| `ai_gateway_requests_total` | Counter | è¯·æ±æ»æ° |\n| `ai_gateway_request_duration` | Histogram | 请æ±å»¶è¿ååž |\n| `ai_gateway_tokens_total` | Counter | Token æ¶èæ»æ° |\n| `ai_gateway_model_health` | Gauge | æš¡åå¥åº·ç¶æ |\n\n### Grafana 仪衚ç\n\né¡¹ç®æäŸé¢çœ®ç Grafana 仪衚çïŒ`grafana-dashboard.json`ïŒïŒå
å«ïŒ\n\n- 宿¶ QPS æ²çº¿\n- åæš¡åæåç/é误ç\n- Token æ¶èè¶å¿\n- å¹³åå»¶è¿ååž\n- æš¡åå¥åº·ç¶æ\n\n---\n\n## ð§ é
眮诎æ\n\n### åºçšé
眮\n\nåš `python-backend/.env` æä»¶äžé
眮ïŒ\n\n```bash\n# æå¡åšé
眮\nHOST=0.0.0.0\nPORT=8123\n\n# æ°æ®åºé
眮\nDATABASE_URL=mysql+aiomysql://root:123456@localhost:3306/yu_ai_router\n\n# Redis é
眮\nREDIS_URL=redis://localhost:6379\n\n# AI æš¡å API Key\nDASHSCOPE_API_KEY=your-qwen-api-key\nDEEPSEEK_API_KEY=your-deepseek-api-key\nZHIPU_API_KEY=your-zhipu-api-key\nOPENAI_API_KEY=your-openai-api-key\n\n# è·¯ç±çç¥\nDEFAULT_ROUTING_STRATEGY=cost_first\nFALLBACK_ENABLED=true\nRETRY_TIMES=3\n\n# Stripe æ¯ä»\nSTRIPE_API_KEY=your-stripe-api-key\n```\n\n### ç¯å¢åé\n\n| åéå | 诎æ | é»è®€åŒ |\n|--------|------|--------|\n| `DATABASE_URL` | æ°æ®åºè¿æ¥ | - |\n| `REDIS_URL` | Redis å°å | redis://localhost:6379 |\n| `DASHSCOPE_API_KEY` | éä¹åé® Key | - |\n| `DEEPSEEK_API_KEY` | DeepSeek Key | - |\n| `ZHIPU_API_KEY` | æºè°± AI Key | - |\n| `OPENAI_API_KEY` | OpenAI Key | - |\n| `DEFAULT_ROUTING_STRATEGY` | é»è®€è·¯ç±çç¥ | cost_first |\n| `FALLBACK_ENABLED` | å¯çšèªåš Fallback | true |\n| `RETRY_TIMES` | éè¯æ¬¡æ° | 3 |\n\n---\n\n## ðïž æ°æ®åºè®Ÿè®¡\n\n### æ žå¿è¡š\n\n| 衚å | 诎æ |\n|------|------|\n| `user` | çšæ·è¡š |\n| `api_key` | API Key 衚 |\n| `model_provider` | æš¡åæäŸè
衚 |\n| `model` | æš¡å衚 |\n| `request_log` | è¯·æ±æ¥å¿è¡š |\n| `plugin_config` | æä»¶é
眮衚 |\n| `user_provider_key` | çšæ·èªåžŠå¯é¥è¡šïŒBYOKïŒ |\n\n---\n\n## ð å®å
šç¹æ§\n\n- **API Key 讀è¯**ïŒææ API 请æ±éæºåžŠææç API Key\n- **请æ±éæµ**ïŒæ¯æ API Key 级å«å IP 级å«çéæµ\n- **IP é»åå**ïŒå¯é
眮 IP é»ååïŒé²æ¢æ¶æè¯·æ±\n- **TraceId 远螪**ïŒå
šéŸè·¯è¿œèžªïŒäŸ¿äºé®é¢ææ¥\n- **HTTPS æ¯æ**ïŒå»ºè®®ç产ç¯å¢å¯çš HTTPS\n\n---\n\n## ð åŒå计å\n\n- [x] åºç¡åèœïŒçšæ·ç³»ç»ã对è¯ãAPI Key 管çïŒ\n- [x] 倿š¡åæ¥å
¥ïŒéä¹åé®ãæºè°±AIãDeepSeekãOpenAIïŒ\n- [x] æºèœè·¯ç±äž Fallback\n- [x] 请æ±éæµäž IP é»åå\n- [x] Python SDK\n- [x] Prometheus + Grafana çæ§\n- [x] Stripe åšçº¿æ¯ä»\n- [x] AI ç»åŸåèœ\n- [x] æä»¶ç³»ç»ïŒWeb æçŽ¢ãPDF è§£æïŒ\n- [x] BYOKïŒçšæ·èªåžŠå¯é¥ïŒ\n- [ ] Function Calling æ¯æ\n- [ ] Go/Node.js SDK\n\n---\n\n## ð€ èŽ¡ç®æå\n\n欢è¿èŽ¡ç®ä»£ç ïŒè¯·éµåŸªä»¥äžæ¥éª€ïŒ\n\n1. Fork æ¬ä»åº\n2. åå»ºç¹æ§åæ¯ (`git checkout -b feature/AmazingFeature`)\n3. æäº€æŽæ¹ (`git commit -m 'Add some AmazingFeature'`)\n4. æšéå°åæ¯ (`git push origin feature/AmazingFeature`)\n5. åèµ· Pull Request\n\n---\n\n## ð åŒæºåè®®\n\næ¬é¡¹ç®éçš MIT åè®®åŒæºïŒè¯Šè§ [LICENSE](LICENSE) æä»¶ã\n\n---\n\n## ð èŽè°¢\n\n- [FastAPI](https://fastapi.tiangolo.com/) - åŒæ¥ Web æ¡æ¶\n- [LangChain](https://www.langchain.com/) - AI æš¡åéææ¡æ¶\n- [OpenRouter](https://openrouter.ai/) - 产å讟计åè\n- [Ant Design Vue](https://antdv.com/) - UI ç»ä»¶åº\n- [Prometheus](https://prometheus.io/) - çæ§ææ æ¶é\n- [Grafana](https://grafana.com/) - å¯è§å仪衚æ¿\n\n---\n\n<p align=\"center\">\n Made with â€ïž by AI Router Contributors\n</p>\n"}}}} |