# ai_agent **Repository Path**: leke_code/ai_agent ## Basic Information - **Project Name**: ai_agent - **Description**: ๐Ÿค– ๅŸบไบŽ FastAPI + Deep Agents + RAG ็š„ๆ™บ่ƒฝๅฎขๆœ็ณป็ปŸ - ๐Ÿ’ฌ ๅคš่ฝฎๅฏน่ฏ๏ผšๆ”ฏๆŒไธŠไธ‹ๆ–‡ๅฏน่ฏๅކๅฒ - ๐Ÿ“š RAG ้—ฎ็ญ”๏ผšๅŸบไบŽ็Ÿฅ่ฏ†ๅบ“็š„ๆ™บ่ƒฝ้—ฎ็ญ” - โšก ๆตๅผ่พ“ๅ‡บ๏ผšSSE ๅฎžๆ—ถๆตๅผ่ฟ”ๅ›ž - ๐Ÿ” ๅ‘้‡ๆฃ€็ดข๏ผšFAISS ็›ธไผผๅบฆ/MMR ๆฃ€็ดข - ๐ŸŒ RESTful API๏ผšๅฎŒๆ•ดๆŽฅๅฃ + Gradio Web UI ๆ”ฏๆŒๆ™บ่ฐฑAI (GLM-4) / OpenAI ๆจกๅž‹ - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-09 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ๐Ÿค– AI ๆ™บ่ƒฝๅฎขๆœ็ณป็ปŸ ๅŸบไบŽ **FastAPI + Deep Agents + RAG + Weaviate** ็š„ๆ™บ่ƒฝๅฎขๆœ็ณป็ปŸ๏ผŒๆไพ› RESTful API ๆŽฅๅฃๅ’Œ Web ็•Œ้ขใ€‚ ## โœจ ๅŠŸ่ƒฝ็‰นๆ€ง ### ๆ ธๅฟƒๅŠŸ่ƒฝ - **๐Ÿ“š RAG ้—ฎ็ญ”**: ๅŸบไบŽ็”จๆˆทๆ‰‹ๅ†Œ่ฟ›่กŒๆ™บ่ƒฝ้—ฎ็ญ” - **๐Ÿ’ฌ ๅคš่ฝฎๅฏน่ฏ**: ๆ”ฏๆŒไธŠไธ‹ๆ–‡ๅฏน่ฏๅކๅฒ - **โšก ๆตๅผ่พ“ๅ‡บ**: Server-Sent Events ๅฎžๆ—ถๆตๅผ่ฟ”ๅ›ž - **๐Ÿ” ็Ÿฅ่ฏ†ๅบ“ๆœ็ดข**: ๆ”ฏๆŒ็›ธไผผๅบฆๅ’Œ MMR ๆฃ€็ดข - **๐Ÿ“Š ๅ้ฆˆ็ฎก็†**: ๆ”ถ้›†ๅ’Œๅˆ†ๆž็”จๆˆทๅ้ฆˆ - **โœ๏ธ ๆ–‡็ซ ็”Ÿๆˆ**: ๅŸบไบŽๆ™บ่ฐฑๅคงๆจกๅž‹็š„ๆ™บ่ƒฝๆ–‡็ซ ็”Ÿๆˆ๏ผˆๆ”ฏๆŒๆตๅผ/้žๆตๅผ๏ผ‰ ### ๆŠ€ๆœฏๆžถๆž„ - **FastAPI ๅŽ็ซฏ**: ้ซ˜ๆ€ง่ƒฝๅผ‚ๆญฅ API ๆก†ๆžถ - **Deep Agents**: ๅŸบไบŽ LangGraph ็š„ Agent ็ผ–ๆŽ’ - **LangChain**: ๆ ธๅฟƒ็ผ–ๆŽ’ๆก†ๆžถ - **Weaviate**: ่ฟœ็จ‹ๅ‘้‡ๆ•ฐๆฎๅบ“ๅญ˜ๅ‚จ - **Gradio**: Web ๆต‹่ฏ•็•Œ้ข - **Docker**: ๅฎนๅ™จๅŒ–้ƒจ็ฝฒ ### ๆ”ฏๆŒ็š„ๆจกๅž‹ - **LLM**: ๆ™บ่ฐฑAI (glm-4.7, glm-4-plus, glm-4-flash)ใ€OpenAI (gpt-4o, gpt-4o-mini) - **Embedding**: OpenAI (text-embedding-3-small, text-embedding-3-large)ใ€ๆ™บ่ฐฑAI (embedding-3) ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` ai_agent/ โ”œโ”€โ”€ api/ # FastAPI API ๅฑ‚ โ”‚ โ”œโ”€โ”€ main.py # ๅบ”็”จๅ…ฅๅฃ โ”‚ โ”œโ”€โ”€ api/v1/ # API ่ทฏ็”ฑ โ”‚ โ”‚ โ”œโ”€โ”€ chat.py # ๅฏน่ฏๆŽฅๅฃ โ”‚ โ”‚ โ”œโ”€โ”€ knowledge.py # ็Ÿฅ่ฏ†ๅบ“ๆŽฅๅฃ โ”‚ โ”‚ โ”œโ”€โ”€ session.py # ไผš่ฏ็ฎก็† โ”‚ โ”‚ โ”œโ”€โ”€ feedback.py # ๅ้ฆˆ็ฎก็† โ”‚ โ”‚ โ””โ”€โ”€ system.py # ็ณป็ปŸไฟกๆฏ โ”‚ โ””โ”€โ”€ middleware/ # ไธญ้—ดไปถ โ”‚ โ”œโ”€โ”€ auth.py # API Key ่ฎค่ฏ โ”‚ โ”œโ”€โ”€ logging.py # ๆ—ฅๅฟ—่ฎฐๅฝ• โ”‚ โ”œโ”€โ”€ cors.py # ่ทจๅŸŸ้…็ฝฎ โ”‚ โ””โ”€โ”€ error_handler.py # ้”™่ฏฏๅค„็† โ”‚ โ”œโ”€โ”€ core/ # ๆ ธๅฟƒไธšๅŠก้€ป่พ‘ โ”‚ โ”œโ”€โ”€ agent.py # Agent ๆ€ปๅ…ฅๅฃ๏ผˆ้—จ้ข๏ผ‰ โ”‚ โ”œโ”€โ”€ agent_manager.py # Agent ๅ•ไพ‹็ฎก็† โ”‚ โ”œโ”€โ”€ agents/ # ๆ™บ่ƒฝไฝ“ๆจกๅ— โ”‚ โ”‚ โ”œโ”€โ”€ base.py # ๆŠฝ่ฑกๅŸบ็ฑป โ”‚ โ”‚ โ”œโ”€โ”€ customer_support.py # ๅฎขๆœๆ™บ่ƒฝไฝ“ + RAG ๅทฅๅ…ท โ”‚ โ”‚ โ””โ”€โ”€ zhipu_article_agent.py # ๆ™บ่ฐฑๆ–‡็ซ ็”Ÿๆˆๆ™บ่ƒฝไฝ“ โ”‚ โ”œโ”€โ”€ vector/ # ๅ‘้‡ๅญ˜ๅ‚จๆจกๅ— โ”‚ โ”‚ โ”œโ”€โ”€ base.py # ๆŠฝ่ฑกๅŸบ็ฑป + ๅทฅๅŽ‚ โ”‚ โ”‚ โ””โ”€โ”€ weaviate_store.py # Weaviate ๅฎž็Žฐ โ”‚ โ””โ”€โ”€ llm/ # LLM ๅฐ่ฃ…ๆจกๅ— โ”‚ โ”œโ”€โ”€ base.py # ๆŠฝ่ฑกๅŸบ็ฑป + ๅทฅๅŽ‚ โ”‚ โ”œโ”€โ”€ openai_compatible.py# OpenAI ๅ…ผๅฎนๅฎž็Žฐ โ”‚ โ””โ”€โ”€ zhipu_llm.py # ๆ™บ่ฐฑ AI ๅฎž็Žฐ โ”‚ โ”œโ”€โ”€ services/ # ๆœๅŠกๅฑ‚ โ”‚ โ”œโ”€โ”€ chat_service.py # ๅฏน่ฏๆœๅŠก โ”‚ โ”œโ”€โ”€ article_service.py # ๆ–‡็ซ ็”ŸๆˆๆœๅŠก โ”‚ โ”œโ”€โ”€ knowledge_service.py # ็Ÿฅ่ฏ†ๅบ“ๆœๅŠก โ”‚ โ”œโ”€โ”€ session_service.py # ไผš่ฏๆœๅŠก โ”‚ โ””โ”€โ”€ feedback_service.py # ๅ้ฆˆๆœๅŠก โ”‚ โ”œโ”€โ”€ models/ # ๆ•ฐๆฎๆจกๅž‹ โ”‚ โ””โ”€โ”€ schemas/ # Pydantic ๆจกๅž‹ โ”‚ โ”œโ”€โ”€ chat.py โ”‚ โ”œโ”€โ”€ article.py # ๆ–‡็ซ ็”Ÿๆˆๆจกๅž‹ โ”‚ โ”œโ”€โ”€ knowledge.py โ”‚ โ”œโ”€โ”€ session.py โ”‚ โ”œโ”€โ”€ feedback.py โ”‚ โ””โ”€โ”€ system.py โ”‚ โ”œโ”€โ”€ config/ # ้…็ฝฎ็ฎก็† โ”‚ โ”œโ”€โ”€ settings.py # Pydantic Settings โ”‚ โ”œโ”€โ”€ logging_config.py # ๆ—ฅๅฟ—้…็ฝฎ โ”‚ โ”œโ”€โ”€ constants.py # ๅธธ้‡ๅฎšไน‰ โ”‚ โ””โ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ ui/ # Gradio Web UI โ”‚ โ”œโ”€โ”€ web.py โ”‚ โ””โ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ utils/ # ๅทฅๅ…ทๆจกๅ— โ”‚ โ”œโ”€โ”€ env_loader.py # ็Žฏๅขƒๅ˜้‡ๅŠ ่ฝฝ โ”‚ โ”œโ”€โ”€ build_weaviate_store.py # Weaviate ๅ‘้‡ๅบ“ๆž„ๅปบ โ”‚ โ”œโ”€โ”€ weaviate_retriever.py # Weaviate ๆฃ€็ดขๅ™จ โ”‚ โ””โ”€โ”€ weaviate_viewer.py # Weaviate GUI ๆŸฅ็œ‹ๅ™จ โ”‚ โ”œโ”€โ”€ component/ # ็ป„ไปถๆจกๅ— โ”‚ โ””โ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ docker/ # Docker ้…็ฝฎ โ”‚ โ”œโ”€โ”€ Dockerfile โ”‚ โ””โ”€โ”€ docker-compose.yml โ”‚ โ”œโ”€โ”€ docs/ # ๆ–‡ๆกฃ โ”‚ โ”œโ”€โ”€ core_analysis.md # Core ๆจกๅ—ๅˆ†ๆž โ”‚ โ”œโ”€โ”€ circular_dependency_analysis.md # ๅพช็Žฏไพ่ต–ๅˆ†ๆž โ”‚ โ”œโ”€โ”€ api.md # API ๆ–‡ๆกฃ โ”‚ โ””โ”€โ”€ deployment.md # ้ƒจ็ฝฒๆ–‡ๆกฃ โ”‚ โ”œโ”€โ”€ data/ # ๆ•ฐๆฎ็›ฎๅฝ• โ”‚ โ”œโ”€โ”€ manuals/ # ็”จๆˆทๆ‰‹ๅ†Œ โ”‚ โ””โ”€โ”€ feedback/ # ๅ้ฆˆๆ•ฐๆฎ โ”‚ โ”œโ”€โ”€ examples/ # ็คบไพ‹ไปฃ็  โ”‚ โ””โ”€โ”€ frontend_article_generation.html # ๆ–‡็ซ ็”Ÿๆˆๅ‰็ซฏ็คบไพ‹ โ”‚ โ”œโ”€โ”€ main.py # FastAPI ๅฏๅŠจๅ…ฅๅฃ โ”œโ”€โ”€ run.py # ๅ‘ฝไปค่กŒ/Web ๆจกๅผๅ…ฅๅฃ โ”œโ”€โ”€ config.yaml # ้…็ฝฎๆ–‡ไปถ โ”œโ”€โ”€ requirements.txt # ไพ่ต–ๅˆ—่กจ โ””โ”€โ”€ .env.example # ็Žฏๅขƒๅ˜้‡ๆจกๆฟ ``` ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### 1. ๅฎ‰่ฃ…ไพ่ต– ```bash pip install -r requirements.txt ``` ### 2. ้…็ฝฎ็Žฏๅขƒๅ˜้‡ ```bash cp .env.example .env ``` ็ผ–่พ‘ `.env` ๆ–‡ไปถ๏ผš ```env # ๆ™บ่ฐฑAI (LLM) ZHIPUAI_API_KEY=your_zhipu_api_key_here # OpenAI (Embedding) OPENAI_API_KEY=your_openai_api_key_here # API ่ฎค่ฏ๏ผˆๅฏ้€‰๏ผŒ็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎ่ฎพ็ฝฎ๏ผ‰ API_KEY=your_api_key_here ``` ### 3. ๆž„ๅปบๅ‘้‡ๆ•ฐๆฎๅบ“ **้ฆ–ๆฌกไฝฟ็”จๅฟ…้กปๅ…ˆๆž„ๅปบ Weaviate ๅ‘้‡ๆ•ฐๆฎๅบ“๏ผš** ```bash python -m utils.build_weaviate_store ``` **ๅผบๅˆถ้‡ๅปบ๏ผš** ```bash python -m utils.build_weaviate_store --force ``` ### 4. ๅฏๅŠจๆœๅŠก **FastAPI ๆจกๅผ๏ผˆๆŽจ่๏ผ‰๏ผš** ```bash # ๅผ€ๅ‘ๆจกๅผ๏ผˆ่‡ชๅŠจ้‡่ฝฝ๏ผ‰ python main.py --env dev --reload # ็”Ÿไบงๆจกๅผ python main.py --env prod --workers 4 ``` ่ฎฟ้—ฎ๏ผš - **API ๆ–‡ๆกฃ**: http://localhost:8000/docs - **Gradio UI**: http://localhost:8000/gradio - **ๅฅๅบทๆฃ€ๆŸฅ**: http://localhost:8000/health - **ๅ‰็ซฏ็คบไพ‹**: http://localhost:8080/frontend_article_generation.html๏ผˆ้œ€ๅ•็‹ฌๅฏๅŠจ๏ผ‰ ๅฏๅŠจๅ‰็ซฏ็คบไพ‹ๆœๅŠกๅ™จ๏ผš ```bash python -m http.server 8080 --directory examples ``` **ๅŽŸๆœ‰ๆจกๅผ๏ผˆๅ…ผๅฎน๏ผ‰๏ผš** ```bash # ๅ‘ฝไปค่กŒๆจกๅผ python run.py --mode cli # Web ็•Œ้ขๆจกๅผ๏ผˆ็‹ฌ็ซ‹็ซฏๅฃ 7860๏ผ‰ python run.py --mode web ``` ## ๐Ÿ“ก API ๆŽฅๅฃ ### ๅฏน่ฏๆŽฅๅฃ **POST** `/api/v1/chat` - ๅŒๆญฅๅฏน่ฏ ```bash curl -X POST http://localhost:8000/api/v1/chat \ -H "X-API-Key: your-api-key" \ -H "Content-Type: application/json" \ -d '{"message": "ๅฆ‚ไฝ•ๅ‘ๅธƒๆ–‡็ซ ๏ผŸ", "session_id": "user_123"}' ``` **POST** `/api/v1/chat/stream` - ๆตๅผๅฏน่ฏ (SSE) ```bash curl -X POST http://localhost:8000/api/v1/chat/stream \ -H "X-API-Key: your-api-key" \ -H "Content-Type: application/json" \ -d '{"message": "ๅฆ‚ไฝ•ๅ‘ๅธƒๆ–‡็ซ ๏ผŸ", "session_id": "user_123"}' \ --no-buffer ``` ### ๆ–‡็ซ ็”ŸๆˆๆŽฅๅฃ **POST** `/api/v1/chat/article/generate` - ้žๆตๅผๆ–‡็ซ ็”Ÿๆˆ ```bash curl -X POST http://localhost:8000/api/v1/chat/article/generate \ -H "Content-Type: application/json" \ -d '{ "prompt": "ๅ†™ไธ€็ฏ‡ๅ…ณไบŽไบบๅทฅๆ™บ่ƒฝๆœชๆฅๅ‘ๅฑ•่ถ‹ๅŠฟ็š„ๆ–‡็ซ ", "domain": "AI", "max_length": 2000, "temperature": 0.7, "style": "professional", "language": "zh-CN" }' ``` ๅ“ๅบ”็คบไพ‹๏ผš ```json { "article": "ไบบๅทฅๆ™บ่ƒฝ๏ผˆAI๏ผ‰ๆญฃๅœจๅฟซ้€Ÿๆ”นๅ˜ๆˆ‘ไปฌ็š„ไธ–็•Œ...", "word_count": 1856, "title": "ไบบๅทฅๆ™บ่ƒฝ็š„ๆœชๆฅๅ‘ๅฑ•่ถ‹ๅŠฟ", "summary": "ๆœฌๆ–‡ๆŽข่ฎจไบ†AIๆŠ€ๆœฏ็š„ๆœ€ๆ–ฐ่ฟ›ๅฑ•...", "metadata": { "model": "glm-4.7", "duration_ms": 3200, "style": "professional", "domain": "AI" } } ``` **POST** `/api/v1/chat/article/generate/stream` - ๆตๅผๆ–‡็ซ ็”Ÿๆˆ (SSE) ```bash curl -X POST http://localhost:8000/api/v1/chat/article/generate/stream \ -H "Content-Type: application/json" \ -d '{ "prompt": "ๅ†™ไธ€็ฏ‡ๅ…ณไบŽๅŒบๅ—้“พๆŠ€ๆœฏ็š„ไป‹็ปๆ–‡็ซ ", "domain": "ๅŒบๅ—้“พ", "max_length": 2000 }' --no-buffer ``` SSE ๅ“ๅบ”ๆ ผๅผ๏ผš ``` data: {"content": "ๆ–‡็ซ ็‰‡ๆฎต1", "done": false, "word_count": 50} data: {"content": "ๆ–‡็ซ ็‰‡ๆฎต2", "done": false, "word_count": 100} data: {"content": "", "done": true, "word_count": 2000} ``` #### ๆ–‡็ซ ็”Ÿๆˆๅ‚ๆ•ฐ่ฏดๆ˜Ž | ๅ‚ๆ•ฐ | ็ฑปๅž‹ | ๅฟ…ๅกซ | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | |------|------|------|--------|------| | `prompt` | string | ๆ˜ฏ | - | ๆ–‡็ซ ๆ็คบ่ฏ/ไธป้ข˜ | | `domain` | string | ๅฆ | null | ๆ–‡็ซ ้ข†ๅŸŸ๏ผšAI/ๅ‰็ซฏ/ๅŽ็ซฏ/ๆ•ฐๆฎๅบ“/ไบ‘่ฎก็ฎ—/DevOps/ๅฎ‰ๅ…จ/็งปๅŠจๅผ€ๅ‘/ๅŒบๅ—้“พ/็Ÿฅ่ฏ†ๆ–‡็Œฎ/SpringBoot/SpringCloud/ๅ…ถไป– | | `max_length` | int | ๅฆ | 2000 | ๆœ€ๅคงๅญ—ๆ•ฐ๏ผˆ100-10000๏ผ‰ | | `temperature` | float | ๅฆ | 0.7 | ๅˆ›ๆ„็จ‹ๅบฆ๏ผˆ0-1๏ผ‰ | | `style` | string | ๅฆ | professional | ๆ–‡็ซ ้ฃŽๆ ผ๏ผšprofessional/casual/academic/creative | | `language` | string | ๅฆ | zh-CN | ่ฏญ่จ€๏ผšzh-CN/en-US | | `keywords` | array | ๅฆ | null | ้œ€่ฆๅŒ…ๅซ็š„ๅ…ณ้”ฎ่ฏๅˆ—่กจ | ### ๅ…ถไป–ๆŽฅๅฃ | ๆ–นๆณ• | ่ทฏๅพ„ | ่ฏดๆ˜Ž | |------|------|------| | POST | `/api/v1/chat/article/generate` | ็”Ÿๆˆๆ–‡็ซ ๏ผˆ้žๆตๅผ๏ผ‰ | | POST | `/api/v1/chat/article/generate/stream` | ็”Ÿๆˆๆ–‡็ซ ๏ผˆๆตๅผSSE๏ผ‰ | | GET | `/api/v1/knowledge/search` | ๆœ็ดข็Ÿฅ่ฏ†ๅบ“ | | GET | `/api/v1/knowledge/manual` | ่Žทๅ–ๆ‰‹ๅ†Œ็ซ ่Š‚ | | DELETE | `/api/v1/sessions/{id}` | ๆธ…้™คไผš่ฏๅކๅฒ | | POST | `/api/v1/feedback` | ๆไบคๅ้ฆˆ | | GET | `/api/v1/system/info` | ็ณป็ปŸไฟกๆฏ | | GET | `/health` | ๅฅๅบทๆฃ€ๆŸฅ | ่ฏฆ็ป† API ๆ–‡ๆกฃ่ฏทๅ‚่€ƒ๏ผš[docs/api.md](docs/api.md) ## ๐Ÿณ Docker ้ƒจ็ฝฒ ### ไฝฟ็”จ Docker Compose๏ผˆๆŽจ่๏ผ‰ ```bash # ้…็ฝฎ็Žฏๅขƒๅ˜้‡ cp .env.example .env nano .env # ๆž„ๅปบๅ‘้‡ๅบ“ docker-compose run --rm ai-support python -m utils.build_weaviate_store # ๅฏๅŠจๆœๅŠก docker-compose up -d # ๆŸฅ็œ‹ๆ—ฅๅฟ— docker-compose logs -f ``` ่ฏฆ็ป†้ƒจ็ฝฒๆ–‡ๆกฃ่ฏทๅ‚่€ƒ๏ผš[docs/deployment.md](docs/deployment.md) ## โš™๏ธ ้…็ฝฎ่ฏดๆ˜Ž ### ็Žฏๅขƒๅ˜้‡ | ๅ˜้‡ | ่ฏดๆ˜Ž | ้ป˜่ฎคๅ€ผ | |------|------|--------| | `ZHIPUAI_API_KEY` | ๆ™บ่ฐฑAI API Key | - | | `OPENAI_API_KEY` | OpenAI API Key | - | | `API_KEY` | API ่ฎค่ฏๅฏ†้’ฅ | ๆ— ๏ผˆ่ทณ่ฟ‡่ฎค่ฏ๏ผ‰ | | `LOG_LEVEL` | ๆ—ฅๅฟ—็บงๅˆซ | INFO | | `DEBUG` | ่ฐƒ่ฏ•ๆจกๅผ | false | | `GRADIO_ENABLED` | ๅฏ็”จ Gradio UI | true | ### config.yaml ้…็ฝฎ ```yaml # LLM ้…็ฝฎ llm: provider: zhipu # zhipu, openai model: glm-4.7 temperature: 0.3 # Embedding ้…็ฝฎ embeddings: provider: openai # openai, zhipu model: text-embedding-3-small # ๆฃ€็ดขๅ™จ้…็ฝฎ retriever: search_type: mmr # similarity, mmr k: 5 # ่ฟ”ๅ›žๆ–‡ๆกฃๆ•ฐ lambda_mult: 0.5 # ๅคšๆ ทๆ€งๆƒ้‡ # Weaviate ้…็ฝฎ weaviate: url: http://101.201.32.11:8080 index_name: KnowledgeBase ``` ## ๐Ÿ“ Python API ไฝฟ็”จ ```python from core.agent import create_agent # ๅˆๅง‹ๅŒ– agent = create_agent() # ๅŒๆญฅๅฏน่ฏ response = agent.respond("ๅฆ‚ไฝ•ๆณจๅ†Œ่ดฆๅท๏ผŸ") print(response) # ๆตๅผๅฏน่ฏ for chunk in agent.respond_stream("ๅฆ‚ไฝ•ๅ‘ๅธƒๆ–‡็ซ ๏ผŸ"): print(chunk, end="", flush=True) # ๅคš่ฝฎๅฏน่ฏ response = agent.respond("ๆ€Žไนˆ็™ปๅฝ•๏ผŸ", session_id="user_123") response = agent.respond("ๅฟ˜่ฎฐๅฏ†็ ๏ผŸ", session_id="user_123") ``` ## ๐Ÿ“– ๆ–‡ๆกฃ - [Core ๆจกๅ—ๅˆ†ๆž](docs/core_analysis.md) - ๆ ธๅฟƒๆžถๆž„่ฏฆ็ป†่ฏดๆ˜Ž - [API ๆ–‡ๆกฃ](docs/api.md) - RESTful API ่ฏฆ็ป†่ฏดๆ˜Ž - [้ƒจ็ฝฒๆ–‡ๆกฃ](docs/deployment.md) - Docker ๅ’Œไบ‘ๆœๅŠกๅ™จ้ƒจ็ฝฒๆŒ‡ๅ— ## ๐Ÿ“ ๆ–‡็ซ ็”ŸๆˆๅŠŸ่ƒฝๆžถๆž„ ๆ–‡็ซ ็”ŸๆˆๅŠŸ่ƒฝ้‡‡็”จ**ๅ•ไธ€่Œ่ดฃๅŽŸๅˆ™**่ฎพ่ฎก็š„ๅˆ†ๅฑ‚ๆžถๆž„๏ผš ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ API Layer โ”‚ โ”‚ chat.py - ่ทฏ็”ฑๅฎšไน‰ใ€่ฏทๆฑ‚ๆ ก้ชŒใ€ๅ“ๅบ”ๅฐ่ฃ… โ”‚ โ”‚ POST /api/v1/chat/article/generate โ”‚ โ”‚ POST /api/v1/chat/article/generate/stream โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Service Layer โ”‚ โ”‚ article_service.py - ไธšๅŠก็ผ–ๆŽ’ใ€ๅผ‚ๅธธๅค„็†ใ€ๆ—ฅๅฟ—่ฎฐๅฝ• โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Agent Layer โ”‚ โ”‚ zhipu_article_agent.py - ๆจกๅž‹่ฐƒ็”จใ€ๆ็คบ่ฏๆž„ๅปบใ€ๅ“ๅบ”่งฃๆž โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ LLM Layer โ”‚ โ”‚ zhipu_llm.py - ๆ™บ่ฐฑ API ้€šไฟก โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๆ ธๅฟƒๆจกๅ—่ฏดๆ˜Ž | ๆจกๅ— | ่Œ่ดฃ | ๆ–‡ไปถ | |------|------|------| | **API ๅฑ‚** | ๅฎšไน‰ REST ๆŽฅๅฃใ€ๅ‚ๆ•ฐๆ ก้ชŒใ€SSE ๆตๅผๅ“ๅบ” | `api/api/v1/chat.py` | | **Service ๅฑ‚** | ไธšๅŠก้€ป่พ‘็ผ–ๆŽ’ใ€่ฐƒ็”จ Agentใ€ๅฐ่ฃ…ๅ“ๅบ” | `services/article_service.py` | | **Agent ๅฑ‚** | ๆ–‡็ซ ็”Ÿๆˆ็ญ–็•ฅใ€ๆ็คบ่ฏๅทฅ็จ‹ใ€ๆ ‡้ข˜/ๆ‘˜่ฆๆๅ– | `core/agents/zhipu_article_agent.py` | | **Schema ๅฑ‚** | ่ฏทๆฑ‚/ๅ“ๅบ”ๆ•ฐๆฎๆจกๅž‹ๅฎšไน‰ | `models/schemas/article.py` | ### ๆ”ฏๆŒ็š„ๆ–‡็ซ ้ฃŽๆ ผ - **professional**: ไธ“ไธšไธฅ่ฐจ๏ผŒ้€‚ๅˆๆญฃๅผๆ–‡ๆกฃ - **casual**: ่ฝปๆพๆ˜“ๆ‡‚๏ผŒ้€‚ๅˆๅšๅฎขๆ–‡็ซ  - **academic**: ๅญฆๆœฏ่ฎบๆ–‡้ฃŽๆ ผ๏ผŒๅŒ…ๅซ็†่ฎบๅˆ†ๆž - **creative**: ๅˆ›ๆ„ๅ†™ไฝœ๏ผŒ่ฟ็”จๆฏ”ๅ–ปๅ’Œ็‹ฌ็‰น่ง†่ง’ ### ๅ‰็ซฏ้›†ๆˆ็คบไพ‹ ๅ‰็ซฏ็คบไพ‹ไฝไบŽ `examples/frontend_article_generation.html`๏ผŒๅฑ•็คบไบ†๏ผš - ้žๆตๅผๆŽฅๅฃ่ฐƒ็”จ๏ผˆไธ€ๆฌกๆ€ง่Žทๅ–ๅฎŒๆ•ดๆ–‡็ซ ๏ผ‰ - ๆตๅผๆŽฅๅฃ่ฐƒ็”จ๏ผˆSSE ๅฎžๆ—ถๆŽฅๆ”ถๅ†…ๅฎน๏ผ‰ - ๅ‚ๆ•ฐ้…็ฝฎ็•Œ้ข๏ผˆ้ฃŽๆ ผใ€่ฏญ่จ€ใ€ๅญ—ๆ•ฐ็ญ‰๏ผ‰ - ๅ…ƒๆ•ฐๆฎๅฑ•็คบ๏ผˆๆ ‡้ข˜ใ€ๆ‘˜่ฆใ€ๅญ—ๆ•ฐใ€่€—ๆ—ถ๏ผ‰ ## ๐Ÿ”ง ๅผ€ๅ‘ ### ่ฟ่กŒๆต‹่ฏ• ```bash # ่ฟ่กŒๆ‰€ๆœ‰ๆต‹่ฏ• pytest # ่ฟ่กŒ็‰นๅฎšๆต‹่ฏ• pytest tests/test_api/ # ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š pytest --cov=. ``` ### ไปฃ็ ็ป“ๆž„ - **api/**: FastAPI ่ทฏ็”ฑๅ’Œไธญ้—ดไปถ - **services/**: ไธšๅŠก้€ป่พ‘ๆœๅŠกๅฑ‚ - **models/**: Pydantic ๆ•ฐๆฎๆจกๅž‹ - **config/**: ้…็ฝฎ็ฎก็† - **core/**: ๆ ธๅฟƒ Agentใ€ๅ‘้‡ๅญ˜ๅ‚จใ€LLM ๅฐ่ฃ… ## ๐Ÿ“„ ่ฎธๅฏ่ฏ MIT License