All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 12m9s
## 核心改动 ### 1. 单图方案重构 - 删除了多图(self.graphs),改为单图(self.graph) - 新增 MainGraphState.current_model 字段用于运行时注入模型 - llm_call 节点改为动态选择模型(create_dynamic_llm_call_node) ### 2. chat_services 优化 - 添加 _cached_services 缓存,避免重复初始化 - 新增 get_cached_chat_services() 函数,用于单图注入 - 新增 _check_http_service_available() 统一HTTP探测逻辑 - 减少重复代码,LocalVLLMChatProvider和LocalSmallModelProvider共用探测方法 ### 3. AIAgentService 重构 - initialize() 只构建一次图,传入 chat_services 字典 - 新增 _resolve_model() 模型回退逻辑 - 新增 _build_invocation() 统一构建调用参数 - process_message() 和 process_message_stream() 改为注入 current_model - 流式处理代码拆分,增加可读性 ### 4. 新增和删除文件 - 新增:backend/app/main_graph/main_graph_builder.py(图构建) - 新增:backend/app/main_graph/subgraph_wrapper.py(子图封装) - 新增:tools/test/test_tavily_search.py(测试) - 删除:backend/app/main_graph/graph.py(旧图) - 删除:backend/app/main_graph/utils/main_graph_builder.py(旧构建器) - 删除:backend/app/main_graph/utils/__init__.py ### 5. 其他更新 - README.md:新增模型服务使用情况详解章节 - backend/app/model_services/__init__.py:新增 get_cached_chat_services 导出 ## 方案优势 - 内存优化:N张图 → 1张图 - 灵活性:运行时动态选择模型,支持同会话不同模型 - 性能:模型服务缓存,初始化仅一次 - 可维护性:减少重复代码,统一HTTP探测逻辑
111 lines
5.0 KiB
YAML
111 lines
5.0 KiB
YAML
services:
|
||
backend:
|
||
build:
|
||
context: .. # 构建上下文为项目根目录
|
||
dockerfile: docker/backend/Dockerfile
|
||
container_name: ai-backend
|
||
environment:
|
||
# =========================================================================
|
||
# ⭐ 敏感密钥配置 - 必须配置(本地:.env 文件 | CI/CD:Secrets)
|
||
# =========================================================================
|
||
- ZHIPUAI_API_KEY=${ZHIPUAI_API_KEY:?请配置 ZHIPUAI_API_KEY(本地:.env 文件 | CI/CD:Secrets)} # ⭐ 敏感密钥配置
|
||
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?请配置 DEEPSEEK_API_KEY(本地:.env 文件 | CI/CD:Secrets)} # ⭐ 敏感密钥配置
|
||
- LLAMACPP_API_KEY=${LLAMACPP_API_KEY:?请配置 LLAMACPP_API_KEY(本地:.env 文件 | CI/CD:Secrets)} # ⭐ 敏感密钥配置
|
||
- SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY:-} # 硅基流动API密钥(可选,本地服务故障时降级使用)
|
||
|
||
# =========================================================================
|
||
# PostgreSQL 数据库配置
|
||
# =========================================================================
|
||
- DB_HOST=115.190.121.151
|
||
- DB_PORT=5432
|
||
- DB_USER=postgres
|
||
- DB_PASSWORD=${DB_PASSWORD:?请配置 DB_PASSWORD(本地:.env 文件 | CI/CD:Secrets)} # ⭐ 敏感密钥配置
|
||
- DB_NAME=langgraph_db
|
||
|
||
# =========================================================================
|
||
# Qdrant 向量数据库配置(URL + API密钥 配对)
|
||
# =========================================================================
|
||
- QDRANT_URL=http://115.190.121.151:6333
|
||
- QDRANT_API_KEY=${QDRANT_API_KEY:?请配置 QDRANT_API_KEY(本地:.env 文件 | CI/CD:Secrets)} # ⭐ 敏感密钥配置
|
||
- QDRANT_COLLECTION_NAME=mem0_user_memories
|
||
|
||
# =========================================================================
|
||
# llama.cpp 服务配置(URL + API密钥 配对)
|
||
# =========================================================================
|
||
# 主 LLM 服务 (Gemma-4-E2B GGUF) - Docker host 端口 18000
|
||
- VLLM_BASE_URL=http://host.docker.internal:18000/v1
|
||
# Embedding 服务 (Qwen3-Embedding-0.6B GGUF) - Docker host 端口 18001
|
||
- LLAMACPP_EMBEDDING_URL=http://host.docker.internal:18001/v1
|
||
# Reranker 服务 (bge-reranker-v2-m3) - Docker host 端口 18002
|
||
- LLAMACPP_RERANKER_URL=http://host.docker.internal:18002/v1
|
||
|
||
# =========================================================================
|
||
# RAG 索引构建配置(非敏感)
|
||
# =========================================================================
|
||
- RAG_COLLECTION_NAME=rag_documents
|
||
- RAG_CHUNK_SIZE=500
|
||
- RAG_CHUNK_OVERLAP=50
|
||
- RAG_PARENT_CHUNK_SIZE=1000
|
||
- RAG_CHILD_CHUNK_SIZE=200
|
||
- RAG_PARENT_CHUNK_OVERLAP=100
|
||
- RAG_CHILD_CHUNK_OVERLAP=20
|
||
- RAG_STRATEGY=parent-child
|
||
- RAG_STORAGE_TYPE=postgres
|
||
|
||
# =========================================================================
|
||
# 日志调试配置(可通过 .env 覆盖)
|
||
# =========================================================================
|
||
- LOG_LEVEL=${LOG_LEVEL:-DEBUG}
|
||
- DEBUG=${DEBUG:-true}
|
||
- ENABLE_GRAPH_TRACE=${ENABLE_GRAPH_TRACE:-true}
|
||
|
||
# =========================================================================
|
||
# 应用行为配置
|
||
# =========================================================================
|
||
- BACKEND_PORT=8079
|
||
- MEMORY_SUMMARIZE_INTERVAL=${MEMORY_SUMMARIZE_INTERVAL:-10}
|
||
- FASTEMBED_CACHE_PATH=${FASTEMBED_CACHE_PATH:-/app/fastembed_cache}
|
||
|
||
# =========================================================================
|
||
# Tavily 搜索配置(可选,有 API Key 时优先使用)
|
||
# =========================================================================
|
||
- TAVILY_API_KEY=${TAVILY_API_KEY:-}
|
||
- TAVILY_MAX_RESULTS=${TAVILY_MAX_RESULTS:-5}
|
||
|
||
# =========================================================================
|
||
# 前端通信地址(Docker 内部网络)
|
||
# =========================================================================
|
||
- API_URL=http://backend:8079/chat
|
||
|
||
volumes:
|
||
- ../data/user_docs:/app/data/user_docs # 挂载文档目录
|
||
- ../logs:/app/logs
|
||
networks:
|
||
- ai-network
|
||
# ⭐ 移除对 postgres 和 qdrant 的依赖(使用远程服务)
|
||
restart: unless-stopped
|
||
ports:
|
||
- "8079:8079"
|
||
|
||
frontend:
|
||
build:
|
||
context: ..
|
||
dockerfile: docker/frontend/Dockerfile
|
||
container_name: ai-frontend
|
||
environment:
|
||
# Docker 内部网络使用服务名 'backend' 解析后端服务
|
||
- API_URL=http://backend:8079/chat
|
||
# volumes:
|
||
# - ../frontend/src:/app/src # 挂载源代码目录,修改立即生效
|
||
ports:
|
||
- "8501:8501"
|
||
networks:
|
||
- ai-network
|
||
depends_on:
|
||
- backend
|
||
restart: unless-stopped
|
||
|
||
networks:
|
||
ai-network:
|
||
driver: bridge
|