diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4f6c16c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,74 @@ +# Git +.git +.gitignore +.github + +# Docker +Dockerfile +docker-compose.yml +.dockerignore +DOCKER_README.md +run_in_docker.sh + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +.pytest_cache/ +.coverage +htmlcov/ + +# 虚拟环境 +venv/ +ENV/ +env/ +.env + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +.DS_Store + +# 临时文件 +temp_* +*.tmp +*.log +*.bak + +# 缓存 +.cache/ +.npm/ +.yarn/ + +# 大型数据文件 +*.csv +*.sqlite +*.db +*.hdf5 +*.h5 +*.parquet +*.feather +*.pkl +*.pickle + +# 数据目录 +data/ \ No newline at end of file diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..b1e2e82 --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,298 @@ +# OWL项目Docker使用指南 + +本文档提供了如何使用Docker运行OWL项目的详细说明。 + +## 前提条件 + +- 安装 [Docker](https://docs.docker.com/get-docker/) +- 安装 [Docker Compose](https://docs.docker.com/compose/install/) (推荐v2.x版本) +- 获取必要的API密钥(OpenAI API等) + +## 技术说明 + +本Docker配置使用了以下技术来确保OWL项目在容器中正常运行: + +- **Xvfb**:虚拟帧缓冲区,用于在无显示器的环境中模拟X服务器 +- **Playwright**:用于自动化浏览器操作,配置为无头模式 +- **共享内存**:增加了共享内存大小,以提高浏览器性能 +- **BuildKit**:使用Docker BuildKit加速构建过程 +- **缓存优化**:使用持久化卷缓存pip和Playwright依赖 +- **跨平台兼容**:提供了适用于Windows和macOS/Linux的脚本 + +## Docker Compose版本说明 + +本项目使用的docker-compose.yml文件兼容Docker Compose v2.x版本。如果您使用的是较旧的Docker Compose v1.x版本,可能需要手动添加版本号: + +```yaml +version: '3' + +services: + # ...其余配置保持不变 +``` + +## 快速开始 + +### 0. 检查环境 + +首先,运行检查脚本确保您的环境已准备好: + +#### 在macOS/Linux上检查 + +```bash +# 先给脚本添加执行权限 +chmod +x check_docker.sh + +# 运行检查脚本 +./check_docker.sh +``` + +#### 在Windows上检查 + +```cmd +check_docker.bat +``` + +如果检查脚本发现任何问题,请按照提示进行修复。 + +### 1. 配置环境变量 + +复制环境变量模板文件并填写必要的API密钥: + +```bash +cp owl/.env_template owl/.env +``` + +然后编辑 `owl/.env` 文件,填写必要的API密钥,例如: + +``` +OPENAI_API_KEY=your_openai_api_key +GOOGLE_API_KEY=your_google_api_key +SEARCH_ENGINE_ID=your_search_engine_id +``` + +### 2. 快速构建Docker镜像 + +#### 在macOS/Linux上构建 + +使用提供的Shell脚本,可以加速Docker镜像的构建: + +```bash +# 先给脚本添加执行权限 +chmod +x build_docker.sh + +# 运行构建脚本 +./build_docker.sh +``` + +#### 在Windows上构建 + +使用提供的批处理文件: + +```cmd +build_docker.bat +``` + +或者使用标准方式构建并启动: + +```bash +# 使用BuildKit加速构建 +set DOCKER_BUILDKIT=1 +set COMPOSE_DOCKER_CLI_BUILD=1 +docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1 + +# 启动容器 +docker-compose up -d +``` + +### 3. 交互式使用容器 + +容器启动后,会自动进入交互式shell环境,并显示欢迎信息和可用脚本列表: + +```bash +# 进入容器(如果没有自动进入) +docker-compose exec owl bash +``` + +在容器内,您可以直接运行任何可用的脚本: + +```bash +# 运行默认脚本 +xvfb-python run.py + +# 运行DeepSeek示例 +xvfb-python run_deepseek_example.py + +# 运行脚本并传递查询参数 +xvfb-python run.py "什么是人工智能?" +``` + +### 4. 使用外部脚本运行查询 + +#### 在macOS/Linux上运行 + +```bash +# 先给脚本添加执行权限 +chmod +x run_in_docker.sh + +# 默认使用 run.py 脚本 +./run_in_docker.sh "你的问题" + +# 指定使用特定脚本 +./run_in_docker.sh run_deepseek_example.py "你的问题" +``` + +#### 在Windows上运行 + +```cmd +REM 默认使用 run.py 脚本 +run_in_docker.bat "你的问题" + +REM 指定使用特定脚本 +run_in_docker.bat run_deepseek_example.py "你的问题" +``` + +**可用脚本**: +- `run.py` - 默认脚本,使用OpenAI GPT-4o模型 +- `run_deepseek_example.py` - 使用DeepSeek模型 +- `run_gaia_roleplaying.py` - GAIA基准测试脚本 + +## 目录挂载 + +Docker Compose配置中已经设置了以下挂载点: + +- `./owl/.env:/app/owl/.env`:挂载环境变量文件,方便修改API密钥 +- `./data:/app/data`:挂载数据目录,用于存储和访问数据文件 +- `playwright-cache`:持久化卷,用于缓存Playwright浏览器 +- `pip-cache`:持久化卷,用于缓存pip包 + +## 环境变量 + +您可以通过以下两种方式设置环境变量: + +1. 修改 `owl/.env` 文件 +2. 在 `docker-compose.yml` 文件的 `environment` 部分添加环境变量 + +## 构建优化 + +本Docker配置包含多项构建优化: + +1. **使用国内镜像源**:使用清华大学镜像源加速pip包下载 +2. **层优化**:减少Dockerfile中的层数,提高构建效率 +3. **缓存利用**: + - 启用pip缓存,避免重复下载依赖包 + - 使用Docker BuildKit内联缓存 + - 合理安排Dockerfile指令顺序,最大化利用缓存 +4. **BuildKit**:启用Docker BuildKit加速构建 +5. **持久化缓存**: + - 使用Docker卷缓存pip包(`pip-cache`) + - 使用Docker卷缓存Playwright浏览器(`playwright-cache`) + - 本地缓存目录(`.docker-cache`) + +### 缓存清理 + +如果需要清理缓存,可以使用以下命令: + +```bash +# 清理Docker构建缓存 +docker builder prune + +# 清理Docker卷(会删除所有未使用的卷,包括缓存卷) +docker volume prune + +# 清理本地缓存目录 +rm -rf .docker-cache +``` + +## 跨平台兼容性 + +本项目提供了适用于不同操作系统的脚本: + +1. **检查脚本**: + - `check_docker.sh`(macOS/Linux):检查Docker环境 + - `check_docker.bat`(Windows):检查Docker环境 + +2. **构建脚本**: + - `build_docker.sh`(macOS/Linux):构建Docker镜像 + - `build_docker.bat`(Windows):构建Docker镜像 + +3. **运行脚本**: + - `run_in_docker.sh`(macOS/Linux):运行Docker容器中的脚本 + - `run_in_docker.bat`(Windows):运行Docker容器中的脚本 + +这些脚本会自动检测操作系统类型,并使用适当的命令。 + +## 故障排除 + +### 容器无法启动 + +检查日志以获取更多信息: + +```bash +docker-compose logs +``` + +### API密钥问题 + +确保您已经在 `owl/.env` 文件中正确设置了所有必要的API密钥。 + +### Docker Compose警告 + +如果您看到关于`version`属性过时的警告: + +``` +WARN[0000] docker-compose.yml: the attribute `version` is obsolete +``` + +这是因为您使用的是Docker Compose v2.x,它不再需要显式指定版本号。我们已经从配置文件中移除了这个属性,所以您不会再看到这个警告。 + +### 浏览器相关问题 + +如果遇到浏览器相关的问题,可以尝试以下解决方案: + +1. 确保在Docker容器中使用`xvfb-python`命令运行Python脚本 +2. 检查是否正确安装了Xvfb和相关依赖 +3. 增加共享内存大小(在docker-compose.yml中已设置为2GB) + +### 构建速度慢 + +如果构建速度慢,可以尝试以下解决方案: + +1. 确保启用了Docker BuildKit(`DOCKER_BUILDKIT=1`) +2. 确保启用了pip缓存(已在docker-compose.yml中配置) +3. 使用`--build-arg BUILDKIT_INLINE_CACHE=1`参数构建(已在构建脚本中配置) +4. 如果是首次构建,下载依赖包可能需要较长时间,后续构建会更快 + +### Windows特有问题 + +如果在Windows上遇到问题: + +1. 确保使用管理员权限运行命令提示符或PowerShell +2. 如果遇到路径问题,尝试使用正斜杠(/)而不是反斜杠(\) +3. 如果遇到Docker Compose命令问题,尝试使用`docker compose`(无连字符) + +### 内存不足 + +如果遇到内存不足的问题,可以在 `docker-compose.yml` 文件中调整资源限制: + +```yaml +services: + owl: + # 其他配置... + deploy: + resources: + limits: + cpus: '4' # 增加CPU核心数 + memory: 8G # 增加内存限制 +``` + +## 自定义Docker镜像 + +如果需要自定义Docker镜像,可以修改 `Dockerfile` 文件,然后重新构建: + +```bash +# macOS/Linux +./build_docker.sh + +# Windows +build_docker.bat +``` \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..63c96b5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +FROM python:3.10-slim + +WORKDIR /app + +# 设置pip镜像源以加速下载 +RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple + +# 优化apt安装,减少层数 +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + software-properties-common \ + git \ + ffmpeg \ + libsm6 \ + libxext6 \ + # 添加xvfb和相关依赖 + xvfb \ + xauth \ + x11-utils \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# 先复制并安装requirements.txt,利用Docker缓存机制 +COPY requirements.txt . +# 启用pip缓存以加速构建 +RUN pip install -r requirements.txt + +# 安装 Playwright 依赖(使用国内镜像源) +ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright +ENV PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright +RUN pip install playwright && \ + playwright install --with-deps chromium + +# 复制项目文件 +COPY owl/ ./owl/ +COPY licenses/ ./licenses/ +COPY assets/ ./assets/ +COPY README.md . +COPY README_zh.md . + +# 设置环境变量文件 +COPY owl/.env_template ./owl/.env + +# 设置工作目录 +WORKDIR /app/owl + +# 创建启动脚本 +RUN echo '#!/bin/bash\nxvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" python "$@"' > /usr/local/bin/xvfb-python && \ + chmod +x /usr/local/bin/xvfb-python + +# 创建欢迎脚本 +RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境!"\necho ""\necho "可用的脚本:"\nls -1 *.py | grep -v "__" | sed "s/^/- /"\necho ""\necho "运行示例:"\necho " xvfb-python run.py # 运行默认脚本"\necho " xvfb-python run_deepseek_example.py # 运行DeepSeek示例"\necho ""\necho "或者使用自定义查询:"\necho " xvfb-python run.py \"你的问题\""\necho ""' > /usr/local/bin/owl-welcome && \ + chmod +x /usr/local/bin/owl-welcome + +# 容器启动命令(改为交互式shell) +CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"] \ No newline at end of file diff --git a/build_docker.bat b/build_docker.bat new file mode 100644 index 0000000..78a8e8b --- /dev/null +++ b/build_docker.bat @@ -0,0 +1,24 @@ +@echo off +echo 在Windows上构建Docker镜像... + +REM 设置Docker BuildKit环境变量 +set DOCKER_BUILDKIT=1 +set COMPOSE_DOCKER_CLI_BUILD=1 + +echo 启用Docker BuildKit加速构建... + +REM 创建缓存目录 +if not exist ".docker-cache\pip" mkdir .docker-cache\pip + +REM 构建Docker镜像 +docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1 + +if %ERRORLEVEL% EQU 0 ( + echo Docker镜像构建成功! + echo 可以使用以下命令启动容器: + echo docker-compose up -d +) else ( + echo Docker镜像构建失败,请检查错误信息。 +) + +pause \ No newline at end of file diff --git a/build_docker.sh b/build_docker.sh new file mode 100755 index 0000000..c26b501 --- /dev/null +++ b/build_docker.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# 检测操作系统类型 +OS_TYPE=$(uname -s) +echo "检测到操作系统: $OS_TYPE" + +# 设置Docker BuildKit环境变量 +export DOCKER_BUILDKIT=1 +export COMPOSE_DOCKER_CLI_BUILD=1 + +echo "启用Docker BuildKit加速构建..." + +# 创建缓存目录 +mkdir -p .docker-cache/pip + +# 根据操作系统类型执行不同的命令 +if [[ "$OS_TYPE" == "Darwin" ]]; then + # macOS + echo "在macOS上构建Docker镜像..." + docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1 +elif [[ "$OS_TYPE" == "Linux" ]]; then + # Linux + echo "在Linux上构建Docker镜像..." + docker-compose build --parallel --build-arg BUILDKIT_INLINE_CACHE=1 +elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + # Windows + echo "在Windows上构建Docker镜像..." + docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1 +else + echo "未知操作系统,尝试使用标准命令构建..." + docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1 +fi + +# 检查构建结果 +if [ $? -eq 0 ]; then + echo "Docker镜像构建成功!" + echo "可以使用以下命令启动容器:" + echo "docker-compose up -d" +else + echo "Docker镜像构建失败,请检查错误信息。" +fi \ No newline at end of file diff --git a/check_docker.bat b/check_docker.bat new file mode 100644 index 0000000..7671715 --- /dev/null +++ b/check_docker.bat @@ -0,0 +1,60 @@ +@echo off +echo 检查Docker环境... + +REM 检查Docker是否安装 +where docker >nul 2>nul +if %ERRORLEVEL% NEQ 0 ( + echo 错误: Docker未安装 + echo 在Windows上安装Docker的方法: + echo 1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop + echo 2. 安装并启动Docker Desktop + pause + exit /b 1 +) + +echo Docker已安装 + +REM 检查Docker Compose是否安装 +where docker-compose >nul 2>nul +if %ERRORLEVEL% NEQ 0 ( + echo 警告: Docker Compose未找到,尝试使用新的docker compose命令 + docker compose version >nul 2>nul + if %ERRORLEVEL% NEQ 0 ( + echo 错误: Docker Compose未安装 + echo Docker Desktop for Windows应该已包含Docker Compose + echo 请确保Docker Desktop已正确安装 + pause + exit /b 1 + ) else ( + echo 使用新的docker compose命令 + ) +) else ( + echo Docker Compose已安装 +) + +REM 检查Docker是否正在运行 +docker info >nul 2>nul +if %ERRORLEVEL% NEQ 0 ( + echo 错误: Docker未运行 + echo 请启动Docker Desktop应用程序 + pause + exit /b 1 +) + +echo Docker正在运行 + +REM 检查是否有.env文件 +if not exist "owl\.env" ( + echo 警告: 未找到owl\.env文件 + echo 请运行以下命令创建环境变量文件: + echo copy owl\.env_template owl\.env + echo 然后编辑owl\.env文件,填写必要的API密钥 +) else ( + echo 环境变量文件已存在 +) + +echo 所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器 +echo 请运行以下命令构建Docker镜像: +echo build_docker.bat + +pause \ No newline at end of file diff --git a/check_docker.sh b/check_docker.sh new file mode 100755 index 0000000..e76ffda --- /dev/null +++ b/check_docker.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +# 检测操作系统类型 +OS_TYPE=$(uname -s) +echo "检测到操作系统: $OS_TYPE" + +# 检查Docker是否安装 +if ! command -v docker &> /dev/null; then + echo "错误: Docker未安装" + + if [[ "$OS_TYPE" == "Darwin" ]]; then + echo "在macOS上安装Docker的方法:" + echo "1. 访问 https://docs.docker.com/desktop/install/mac-install/ 下载Docker Desktop" + echo "2. 安装并启动Docker Desktop" + elif [[ "$OS_TYPE" == "Linux" ]]; then + echo "在Linux上安装Docker的方法:" + echo "1. 运行以下命令:" + echo " sudo apt-get update" + echo " sudo apt-get install docker.io docker-compose" + echo "2. 启动Docker服务:" + echo " sudo systemctl start docker" + echo " sudo systemctl enable docker" + elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + echo "在Windows上安装Docker的方法:" + echo "1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop" + echo "2. 安装并启动Docker Desktop" + fi + + exit 1 +fi + +echo "Docker已安装" + +# 检查Docker Compose是否安装 +if ! command -v docker-compose &> /dev/null; then + echo "错误: Docker Compose未安装" + + if [[ "$OS_TYPE" == "Darwin" ]]; then + echo "Docker Desktop for Mac已包含Docker Compose" + elif [[ "$OS_TYPE" == "Linux" ]]; then + echo "在Linux上安装Docker Compose的方法:" + echo "1. 运行以下命令:" + echo " sudo apt-get install docker-compose" + elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + echo "Docker Desktop for Windows已包含Docker Compose" + fi + + exit 1 +fi + +echo "Docker Compose已安装" + +# 检查Docker是否正在运行 +if ! docker info &> /dev/null; then + echo "错误: Docker未运行" + + if [[ "$OS_TYPE" == "Darwin" ]]; then + echo "请启动Docker Desktop应用程序" + elif [[ "$OS_TYPE" == "Linux" ]]; then + echo "请运行以下命令启动Docker服务:" + echo "sudo systemctl start docker" + elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + echo "请启动Docker Desktop应用程序" + fi + + exit 1 +fi + +echo "Docker正在运行" + +# 检查是否有足够的磁盘空间 +FREE_SPACE=$(df -h . | awk 'NR==2 {print $4}') +echo "可用磁盘空间: $FREE_SPACE" + +# 检查是否有.env文件 +if [ ! -f "owl/.env" ]; then + echo "警告: 未找到owl/.env文件" + echo "请运行以下命令创建环境变量文件:" + echo "cp owl/.env_template owl/.env" + echo "然后编辑owl/.env文件,填写必要的API密钥" +else + echo "环境变量文件已存在" +fi + +echo "所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器" +echo "请运行以下命令构建Docker镜像:" + +if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + echo "build_docker.bat" +else + echo "./build_docker.sh" +fi \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..749b2e6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,52 @@ +services: + owl: + build: + context: . + dockerfile: Dockerfile + args: + # 构建参数 + BUILDKIT_INLINE_CACHE: 1 + # 使用BuildKit加速构建 + cache_from: + - python:3.10-slim + volumes: + # 挂载.env文件,方便配置API密钥 + - ./owl/.env:/app/owl/.env + # 可选:挂载数据目录 + - ./data:/app/data + # 挂载缓存目录,避免重复下载 + - playwright-cache:/root/.cache/ms-playwright + - pip-cache:/root/.pip/cache + environment: + # 可以在这里设置环境变量,覆盖.env文件中的设置 + - OPENAI_API_KEY=${OPENAI_API_KEY} + # 添加显示相关的环境变量 + - DISPLAY=:99 + - PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright + # 设置Python不生成.pyc文件,减少磁盘IO + - PYTHONDONTWRITEBYTECODE=1 + # 设置Python不缓冲输出,方便查看日志 + - PYTHONUNBUFFERED=1 + # 设置终端颜色 + - TERM=xterm-256color + # 启用pip缓存 + - PIP_CACHE_DIR=/root/.pip/cache + ports: + # 如果项目有Web界面,可以映射端口 + - "8000:8000" + # 使用交互模式运行容器 + stdin_open: true + tty: true + # 添加共享内存大小,提高浏览器性能 + shm_size: 2gb + # 设置资源限制 + deploy: + resources: + limits: + cpus: '2' + memory: 4G + +# 定义持久化卷,用于缓存 +volumes: + playwright-cache: + pip-cache: \ No newline at end of file diff --git a/owl/run_qwq_demo.py b/owl/run_qwq_demo.py new file mode 100644 index 0000000..a20910e --- /dev/null +++ b/owl/run_qwq_demo.py @@ -0,0 +1,92 @@ + +from dotenv import load_dotenv +load_dotenv() + +from camel.models import ModelFactory +from camel.toolkits import * +from camel.types import ModelPlatformType, ModelType +from camel.configs import ChatGPTConfig + +from typing import List, Dict + +from retry import retry +from loguru import logger + +from utils import OwlRolePlaying, run_society +import os + + + + +def construct_society(question: str) -> OwlRolePlaying: + r"""Construct the society based on the question.""" + + user_role_name = "user" + assistant_role_name = "assistant" + + user_model = ModelFactory.create( + model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, + model_type="qwq-32b", + api_key=os.getenv("QWEN_API_KEY"), + url="https://dashscope.aliyuncs.com/compatible-mode/v1", + model_config_dict={"temperature": 0.4, "max_tokens": 4096}, + ) + + assistant_model = ModelFactory.create( + model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, + model_type="qwq-32b", + api_key=os.getenv("QWEN_API_KEY"), + url="https://dashscope.aliyuncs.com/compatible-mode/v1", + model_config_dict={"temperature": 0.4, "max_tokens": 4096}, + ) + + + tools_list = [ + *WebToolkit( + headless=False, + web_agent_model=assistant_model, + planning_agent_model=assistant_model + ).get_tools(), + *DocumentProcessingToolkit().get_tools(), + *VideoAnalysisToolkit(model=assistant_model).get_tools(), # This requires OpenAI Key + *AudioAnalysisToolkit().get_tools(), # This requires OpenAI Key + *CodeExecutionToolkit().get_tools(), + *ImageAnalysisToolkit(model=assistant_model).get_tools(), + *SearchToolkit(model=assistant_model).get_tools(), + *ExcelToolkit().get_tools() + ] + + user_role_name = 'user' + user_agent_kwargs = dict(model=user_model) + assistant_role_name = 'assistant' + assistant_agent_kwargs = dict(model=assistant_model, + tools=tools_list) + + task_kwargs = { + 'task_prompt': question, + 'with_task_specify': False, + } + + society = OwlRolePlaying( + **task_kwargs, + user_role_name=user_role_name, + user_agent_kwargs=user_agent_kwargs, + assistant_role_name=assistant_role_name, + assistant_agent_kwargs=assistant_agent_kwargs, + ) + + return society + + +# Example case +question = "What was the volume in m^3 of the fish bag that was calculated in the University of Leicester paper `Can Hiccup Supply Enough Fish to Maintain a Dragon’s Diet?` " + +society = construct_society(question) +answer, chat_history, token_count = run_society(society) + +logger.success(f"Answer: {answer}") + + + + + diff --git a/run_in_docker.bat b/run_in_docker.bat new file mode 100644 index 0000000..1025b97 --- /dev/null +++ b/run_in_docker.bat @@ -0,0 +1,61 @@ +@echo off +setlocal enabledelayedexpansion + +REM 检查参数 +if "%~1"=="" ( + echo 用法: run_in_docker.bat [脚本名称] "你的问题" + echo 例如: run_in_docker.bat run.py "什么是人工智能?" + echo 或者: run_in_docker.bat run_deepseek_example.py "什么是人工智能?" + echo 如果不指定脚本名称,默认使用 run.py + exit /b 1 +) + +REM 判断第一个参数是否是脚本名称 +set SCRIPT_NAME=%~1 +set QUERY=%~2 + +if "!SCRIPT_NAME:~-3!"==".py" ( + REM 如果提供了第二个参数,则为查询内容 + if "!QUERY!"=="" ( + echo 请提供查询参数,例如: run_in_docker.bat !SCRIPT_NAME! "你的问题" + exit /b 1 + ) +) else ( + REM 如果第一个参数不是脚本名称,则默认使用 run.py + set QUERY=!SCRIPT_NAME! + set SCRIPT_NAME=run.py +) + +REM 检查脚本是否存在 +if not exist "owl\!SCRIPT_NAME!" ( + echo 错误: 脚本 'owl\!SCRIPT_NAME!' 不存在 + echo 可用的脚本有: + dir /b owl\*.py | findstr /v "__" + exit /b 1 +) + +echo 使用脚本: !SCRIPT_NAME! +echo 查询内容: !QUERY! + +REM 确保Docker容器正在运行 +docker-compose ps | findstr "owl.*Up" > nul +if errorlevel 1 ( + echo 启动Docker容器... + docker-compose up -d + + REM 等待容器启动 + echo 等待容器启动... + timeout /t 5 /nobreak > nul +) + +REM 在容器中运行指定的脚本,传递查询参数 +echo 在Docker容器中运行脚本... +docker-compose exec -T owl xvfb-python !SCRIPT_NAME! "!QUERY!" + +if errorlevel 0 ( + echo 查询完成! +) else ( + echo 查询执行失败,请检查错误信息。 +) + +pause \ No newline at end of file diff --git a/run_in_docker.sh b/run_in_docker.sh new file mode 100755 index 0000000..bf86b5d --- /dev/null +++ b/run_in_docker.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# 检测操作系统类型 +OS_TYPE=$(uname -s) +echo "检测到操作系统: $OS_TYPE" + +# 检查是否提供了查询参数 +if [ $# -lt 1 ]; then + echo "用法: ./run_in_docker.sh [脚本名称] '你的问题'" + echo "例如: ./run_in_docker.sh run.py '什么是人工智能?'" + echo "或者: ./run_in_docker.sh run_deepseek_example.py '什么是人工智能?'" + echo "如果不指定脚本名称,默认使用 run.py" + exit 1 +fi + +# 判断第一个参数是否是脚本名称 +if [[ $1 == *.py ]]; then + SCRIPT_NAME="$1" + # 如果提供了第二个参数,则为查询内容 + if [ $# -ge 2 ]; then + QUERY="$2" + else + echo "请提供查询参数,例如: ./run_in_docker.sh $SCRIPT_NAME '你的问题'" + exit 1 + fi +else + # 如果第一个参数不是脚本名称,则默认使用 run.py + SCRIPT_NAME="run.py" + QUERY="$1" +fi + +# 根据操作系统类型设置脚本路径检查方式 +if [[ "$OS_TYPE" == "Darwin" ]] || [[ "$OS_TYPE" == "Linux" ]]; then + # macOS 或 Linux + if [ ! -f "owl/$SCRIPT_NAME" ]; then + echo "错误: 脚本 'owl/$SCRIPT_NAME' 不存在" + echo "可用的脚本有:" + ls -1 owl/*.py | grep -v "__" + exit 1 + fi +else + # Windows + if [ ! -f "owl/$SCRIPT_NAME" ]; then + echo "错误: 脚本 'owl/$SCRIPT_NAME' 不存在" + echo "可用的脚本有:" + find owl -name "*.py" | grep -v "__" | sed 's/\\/\//g' + exit 1 + fi +fi + +echo "使用脚本: $SCRIPT_NAME" +echo "查询内容: $QUERY" + +# 确保Docker容器正在运行 +CONTAINER_RUNNING=$(docker-compose ps | grep -c "owl.*Up" || true) +if [ "$CONTAINER_RUNNING" -eq 0 ]; then + echo "启动Docker容器..." + docker-compose up -d + + # 等待容器启动 + echo "等待容器启动..." + sleep 5 +fi + +# 直接在容器中运行指定的脚本,传递查询参数 +echo "在Docker容器中运行脚本..." + +# 根据操作系统类型执行不同的命令 +if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then + # Windows可能需要特殊处理引号 + winpty docker-compose exec -T owl xvfb-python $SCRIPT_NAME "$QUERY" +else + # macOS 或 Linux + docker-compose exec -T owl xvfb-python $SCRIPT_NAME "$QUERY" +fi + +# 检查命令执行结果 +if [ $? -eq 0 ]; then + echo "查询完成!" +else + echo "查询执行失败,请检查错误信息。" +fi \ No newline at end of file