supeng 13 ساعت پیش
والد
کامیت
0004abf541
5فایلهای تغییر یافته به همراه100 افزوده شده و 15 حذف شده
  1. 58 5
      .env.example
  2. 32 1
      DEPLOY.md
  3. 2 2
      Dockerfile.frontend
  4. 8 3
      docker-compose.yml
  5. 0 4
      examples/content_finder/server.py

+ 58 - 5
.env.example

@@ -1,10 +1,63 @@
-# Docker Compose 环境变量配置
-# 用于 content-finder 服务
+# ============================================
+# Agent 项目环境变量配置
+# ============================================
+# 用途:
+# 1. Docker 部署:docker-compose 读取此文件
+# 2. 本地开发:各子项目的 load_dotenv() 读取此文件
+# ============================================
 
 
+# --------------------------------------------
+# 全局配置
+# --------------------------------------------
+
+# KnowHub API 地址
+KNOWHUB_API=http://43.106.118.91:9999
+
+# Browser Use API Key(如果使用浏览器工具)
+BROWSER_USE_API_KEY=
+
+# --------------------------------------------
 # LLM 配置(必填)
 # LLM 配置(必填)
+# --------------------------------------------
+
+# OpenRouter API Key(必填)
 OPEN_ROUTER_API_KEY=your-api-key-here
 OPEN_ROUTER_API_KEY=your-api-key-here
 
 
-# 模型配置(可选,有默认值)
-MODEL=anthropic/claude-sonnet-4.6
+# 阿里云 API(可选)
+ALI_API_KEY=
+ALI_BASE_URL=
+
+# --------------------------------------------
+# Content Finder 配置
+# --------------------------------------------
+
+# 模型配置
+MODEL=anthropic/claude-sonnet-4.5
 TEMPERATURE=0.3
 TEMPERATURE=0.3
-MAX_ITERATIONS=30
+MAX_ITERATIONS=200
+
+# 存储路径
+# Docker 部署时:使用容器内路径(/app/.trace, /app/.output)
+# 本地开发时:使用相对路径(.trace, .output 或 .cache/traces, .cache/output)
+TRACE_DIR=.trace
+OUTPUT_DIR=.output
+
+# Skills 配置
+SKILLS_DIR=./skills
+# 留空则加载所有 skills,指定则只加载指定的 skills
+ENABLED_SKILLS=
+
+# 服务端口
+PORT=8080
+
+# 并发控制
+MAX_CONCURRENT_TASKS=3
+
+# --------------------------------------------
+# 定时任务配置(可选)
+# --------------------------------------------
+
+# 外部 API 地址(用于获取 query)
+SCHEDULE_QUERY_API=http://your-api.com/content-finder/get-query
+# 外部 API 超时时间(秒)
+SCHEDULE_QUERY_API_TIMEOUT=10.0

+ 32 - 1
DEPLOY.md

@@ -9,6 +9,30 @@ cp .env.example .env
 vim .env  # 填写 OPEN_ROUTER_API_KEY
 vim .env  # 填写 OPEN_ROUTER_API_KEY
 ```
 ```
 
 
+`.env` 文件说明:
+
+```bash
+# ============================================
+# Agent 项目环境变量配置
+# ============================================
+
+# 全局配置
+KNOWHUB_API=http://43.106.118.91:9999
+BROWSER_USE_API_KEY=
+
+# LLM 配置(必填)
+OPEN_ROUTER_API_KEY=your-api-key-here  # 必须填写
+
+# Content Finder 配置
+MODEL=anthropic/claude-sonnet-4.6
+TEMPERATURE=0.3
+MAX_ITERATIONS=30
+MAX_CONCURRENT_TASKS=3
+
+# 定时任务(可选)
+SCHEDULE_QUERY_API=http://your-api.com/get-query
+```
+
 `.env` 文件内容:
 `.env` 文件内容:
 ```bash
 ```bash
 OPEN_ROUTER_API_KEY=your-api-key-here
 OPEN_ROUTER_API_KEY=your-api-key-here
@@ -166,7 +190,14 @@ cd Agent
 
 
 # 4. 配置环境变量
 # 4. 配置环境变量
 cp .env.example .env
 cp .env.example .env
-vim .env
+vim .env  # 必须填写 OPEN_ROUTER_API_KEY
+
+# .env 文件内容示例:
+# OPEN_ROUTER_API_KEY=sk-or-v1-xxx  # 必填
+# MODEL=anthropic/claude-sonnet-4.6
+# TEMPERATURE=0.3
+# MAX_ITERATIONS=30
+# MAX_CONCURRENT_TASKS=3
 
 
 # 5. 启动服务
 # 5. 启动服务
 docker-compose up -d
 docker-compose up -d

+ 2 - 2
Dockerfile.frontend

@@ -1,5 +1,5 @@
 # Stage 1: 构建前端
 # Stage 1: 构建前端
-FROM node:20-alpine AS builder
+FROM registry.cn-hangzhou.aliyuncs.com/stuuudy/node:20-alpine AS builder
 
 
 WORKDIR /app
 WORKDIR /app
 
 
@@ -16,7 +16,7 @@ COPY frontend/react-template/ .
 RUN vite build
 RUN vite build
 
 
 # Stage 2: nginx 托管
 # Stage 2: nginx 托管
-FROM nginx:alpine
+FROM registry.cn-hangzhou.aliyuncs.com/stuuudy/nginx:alpine
 
 
 # 安装 curl(用于健康检查)
 # 安装 curl(用于健康检查)
 RUN apk add --no-cache curl
 RUN apk add --no-cache curl

+ 8 - 3
docker-compose.yml

@@ -5,7 +5,7 @@ services:
     build:
     build:
       context: .
       context: .
       dockerfile: Dockerfile.content-finder
       dockerfile: Dockerfile.content-finder
-    container_name: agent-content-finder
+    container_name: content-finder-agent
     restart: unless-stopped
     restart: unless-stopped
     ports:
     ports:
       - "8080:8080"
       - "8080:8080"
@@ -19,8 +19,13 @@ services:
       - MAX_ITERATIONS=${MAX_ITERATIONS:-30}
       - MAX_ITERATIONS=${MAX_ITERATIONS:-30}
       - TRACE_DIR=/app/.trace
       - TRACE_DIR=/app/.trace
       - OUTPUT_DIR=/app/.output
       - OUTPUT_DIR=/app/.output
+      - SKILLS_DIR=./skills
+      - ENABLED_SKILLS=${ENABLED_SKILLS:-}
       - PORT=8080
       - PORT=8080
       - MAX_CONCURRENT_TASKS=${MAX_CONCURRENT_TASKS:-3}
       - MAX_CONCURRENT_TASKS=${MAX_CONCURRENT_TASKS:-3}
+      - SCHEDULE_QUERY_API=${SCHEDULE_QUERY_API:-}
+      - SCHEDULE_QUERY_API_TIMEOUT=${SCHEDULE_QUERY_API_TIMEOUT:-10.0}
+      - KNOWHUB_API=${KNOWHUB_API:-http://43.106.118.91:9999}
     healthcheck:
     healthcheck:
       test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
       test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
       interval: 30s
       interval: 30s
@@ -34,7 +39,7 @@ services:
     build:
     build:
       context: .
       context: .
       dockerfile: Dockerfile.api-server
       dockerfile: Dockerfile.api-server
-    container_name: agent-api-server
+    container_name: content-finder-agent-api-server
     restart: unless-stopped
     restart: unless-stopped
     ports:
     ports:
       - "8000:8000"
       - "8000:8000"
@@ -53,7 +58,7 @@ services:
     build:
     build:
       context: .
       context: .
       dockerfile: Dockerfile.frontend
       dockerfile: Dockerfile.frontend
-    container_name: agent-frontend
+    container_name: content-finder-agent-frontend
     restart: unless-stopped
     restart: unless-stopped
     ports:
     ports:
       - "3000:3000"
       - "3000:3000"

+ 0 - 4
examples/content_finder/server.py

@@ -133,14 +133,10 @@ async def scheduled_task():
             logger.warning("未配置 SCHEDULE_QUERY_API,跳过定时任务")
             logger.warning("未配置 SCHEDULE_QUERY_API,跳过定时任务")
             return
             return
 
 
-        api_key = os.getenv("SCHEDULE_QUERY_API_KEY", "")
         timeout = float(os.getenv("SCHEDULE_QUERY_API_TIMEOUT", "10.0"))
         timeout = float(os.getenv("SCHEDULE_QUERY_API_TIMEOUT", "10.0"))
 
 
         async with httpx.AsyncClient() as client:
         async with httpx.AsyncClient() as client:
             headers = {}
             headers = {}
-            if api_key:
-                headers["Authorization"] = f"Bearer {api_key}"
-
             logger.info(f"调用外部 API: {query_api}")
             logger.info(f"调用外部 API: {query_api}")
             response = await client.get(
             response = await client.get(
                 query_api,
                 query_api,