Files
ailine/docker/docker-compose.yml
root b5c15ef445
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 12m9s
refactor: 单图方案重构 + 动态模型选择 + chat_services优化
## 核心改动

### 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探测逻辑
2026-05-05 17:30:55 +08:00

111 lines
5.0 KiB
YAML
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.

services:
backend:
build:
context: .. # 构建上下文为项目根目录
dockerfile: docker/backend/Dockerfile
container_name: ai-backend
environment:
# =========================================================================
# ⭐ 敏感密钥配置 - 必须配置(本地:.env 文件 | CI/CDSecrets
# =========================================================================
- ZHIPUAI_API_KEY=${ZHIPUAI_API_KEY:?请配置 ZHIPUAI_API_KEY本地.env 文件 | CI/CDSecrets} # ⭐ 敏感密钥配置
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?请配置 DEEPSEEK_API_KEY本地.env 文件 | CI/CDSecrets} # ⭐ 敏感密钥配置
- LLAMACPP_API_KEY=${LLAMACPP_API_KEY:?请配置 LLAMACPP_API_KEY本地.env 文件 | CI/CDSecrets} # ⭐ 敏感密钥配置
- 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/CDSecrets} # ⭐ 敏感密钥配置
- 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/CDSecrets} # ⭐ 敏感密钥配置
- 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