logo
0
0
WeChat Login
Zhang Wenhu<wenhulove333@163.com>
llm:适配openai接口规范

Agent with Human-in-the-Loop

一个带人工干预的自主 Agent 框架。

环境配置

安装 uv

# Windows (使用 PowerShell) iwr https://astral.sh/uv/install.ps1 | iex # macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh

LLM 配置

支持两种接口规范:Anthropic 和 OpenAI

# 默认使用 Anthropic 接口规范 # 可以是任何实现了 Anthropic 接口规范的模型 # 例如:Anthropic Claude、Azure Claude 等 export LLM_API_SPEC="anthropic" export LLM_API_KEY="sk-ant-api03-xxx" export LLM_MODEL="claude-3-opus-20240229" export LLM_BASE_URL="https://api.anthropic.com/v1" # 可选 # 使用 OpenAI 接口规范 # 可以是任何实现了 OpenAI 接口规范的模型 # 例如:OpenAI GPT、Azure OpenAI、DeepSeek、GLM 等 export LLM_API_SPEC="openai" export LLM_API_KEY="sk-xxx" export LLM_MODEL="gpt-4" export LLM_BASE_URL="https://api.openai.com/v1" # 可选

安装项目

# 克隆仓库后,在项目根目录执行 uv venv --clear .venv\Scripts\activate # Windows PowerShell # 或 source .venv/bin/activate # macOS/Linux uv pip install -e .

运行

# 启动交互式 Agent agent # 直接执行任务 agent --task "你的任务" # 查看可用工具 agent --tools

运行单元测试

# 运行所有测试 pytest tests/ # 运行特定测试文件 pytest tests/test_tools.py

项目结构

├── src/ │ └── agent/ │ ├── __init__.py │ ├── __main__.py # 主入口点 │ ├── agent.py # 核心 Agent 逻辑 │ ├── llm_client.py # LLM 客户端 │ ├── prompts.py # 提示词模板 │ ├── tool_registry.py # 工具注册表 │ ├── types.py # 类型定义 │ ├── logging.py # 日志管理 │ └── tools/ # 工具集 │ ├── __init__.py │ ├── browser_manager.py # 浏览器管理 │ ├── browser_tools.py # 浏览器工具 │ ├── file_tools.py # 文件操作工具 │ ├── format_tools.py # 格式工具 │ ├── system_tools.py # 系统工具 │ └── web_search_tools.py # Web搜索工具 ├── tests/ # 测试文件 ├── pyproject.toml # 项目配置 ├── setup.py # 安装配置 └── README.md # 项目说明

架构说明

┌─────────────────────────────────────────────────────────────┐ │ User │ │ (通过 CLI 发送任务) │ └──────────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Agent Controller │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 任务接收与解析 │ │ │ │ • 执行循环 (Plan → Execute → Observe → Decide) │ │ │ │ • 状态管理 │ │ │ │ • 干预触发与恢复 │ │ │ └─────────────────────────────────────────────────────┘ │ └──────────────────────────┬──────────────────────────────────┘ │ ┌─────────────────┼─────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │Tool Registry│ │ LLM API │ │ Memory │ │ (工具管理) │ │ (调用大模型) │ │ (历史记录) │ └─────────────┘ └─────────────┘ └─────────────┘

核心特性

  • 自主执行: Agent 自动规划并执行任务
  • 人工干预: 需要确认时暂停等待用户反馈
  • 模块化设计: 清晰的代码结构,便于扩展和维护
  • 多种 LLM 支持: 兼容 OpenAI、Anthropic、MiniMax、DeepSeek、GLM 等模型
  • 丰富的工具集: 内置文件操作、命令执行、系统信息、Web搜索、浏览器自动化等工具
  • 实时反馈: 工具执行结果实时反馈给大模型
  • 历史消息保留: 保留完整的对话历史,便于上下文理解
  • 工作空间管理: 自动创建和管理工作目录,确保任务执行环境的一致性

工具集

文件操作工具

  • read_file: 读取文件内容
  • write_file: 写入文件
  • edit_file: 编辑文件内容
  • list_dir: 列出目录
  • create_dir: 创建目录
  • delete_file: 删除文件(需确认)
  • search_files: 搜索文件

系统工具

  • exec_command: 执行命令
  • async_exec_command: 异步执行命令(用于长期运行的命令)
  • async_kill_command: 杀掉异步执行的命令
  • get_system_info: 获取系统信息
  • request_human_input: 请求人类输入
  • exit_agent: 退出Agent

Web搜索工具

  • web_search: 轻量级Web搜索,使用DDGS(DuckDuckGo Search)获取网页信息

浏览器工具(重量级,仅在需要自动化操控浏览器时使用)

  • browser_init: 初始化浏览器
  • browser_navigate: 导航到指定URL
  • browser_click: 点击页面元素
  • browser_fill: 填写表单
  • browser_screenshot: 截图页面
  • browser_get_text: 获取页面元素文本
  • browser_get_elements: 获取多个页面元素
  • browser_scroll: 滚动页面
  • browser_close: 关闭浏览器

格式工具

  • beautify_markdown: 美化Markdown格式

使用方法

交互模式

# 启动交互式 Agent agent # 在交互模式中,您可以: # 1. 输入任务描述 # 2. 使用 :tools 查看可用工具 # 3. 使用 :state 查看当前状态 # 4. 使用 :quit 退出

命令行模式

# 直接执行任务 agent --task "你的任务" # 查看可用工具 agent --tools

示例任务

示例1: 文件操作

agent --task "创建一个名为 test.txt 的文件,内容为 'Hello, Agent!'"

示例2: 系统命令

agent --task "查看当前目录下的文件列表"

示例3: Web搜索

agent --task "搜索 Python 3.10 的新特性"

示例4: 浏览器自动化

agent --task "打开百度首页,搜索 'Python',并获取搜索结果"

About

No description, topics, or website provided.
Language
Python100%