OpenManus 开发实战图文教程

OpenManus 开发实战图文教程

将自然语言转化为可执行工作流的 AI 智能体框架

文章目录

  • [OpenManus 开发实战图文教程](#OpenManus 开发实战图文教程)
    • [1. 什么是 OpenManus](#1. 什么是 OpenManus)
      • [1.1 简介](#1.1 简介)
      • [1.2 核心能力](#1.2 核心能力)
      • [1.3 应用场景](#1.3 应用场景)
      • [1.4 为什么选择 OpenManus?](#1.4 为什么选择 OpenManus?)
    • [2. 核心架构](#2. 核心架构)
      • [2.1 六层架构设计](#2.1 六层架构设计)
      • [2.2 智能体继承体系](#2.2 智能体继承体系)
      • [2.3 工具系统架构](#2.3 工具系统架构)
    • [3. 快速开始](#3. 快速开始)
      • [3.1 环境准备](#3.1 环境准备)
      • [3.2 第一个示例](#3.2 第一个示例)
      • [3.3 浏览器自动化示例](#3.3 浏览器自动化示例)
    • [4. 核心概念](#4. 核心概念)
      • [4.1 Think-Act 循环](#4.1 Think-Act 循环)
      • [4.2 浏览器自动化原理](#4.2 浏览器自动化原理)
      • [4.3 内存系统](#4.3 内存系统)
      • [4.4 沙箱环境(Daytona)](#4.4 沙箱环境(Daytona))
    • [5. 实战案例](#5. 实战案例)
      • [5.1 案例 1:网站 SEO 审查](#5.1 案例 1:网站 SEO 审查)
      • [5.2 案例 2:竞品分析报告](#5.2 案例 2:竞品分析报告)
      • [5.3 案例 3:数据采集与可视化](#5.3 案例 3:数据采集与可视化)
    • [6. 进阶技巧](#6. 进阶技巧)
      • [6.1 提高任务成功率](#6.1 提高任务成功率)
        • [技巧 1:提供清晰的任务描述](#技巧 1:提供清晰的任务描述)
        • [技巧 2:合理设置步数限制](#技巧 2:合理设置步数限制)
        • [技巧 3:分步骤处理复杂任务](#技巧 3:分步骤处理复杂任务)
      • [6.2 错误处理与调试](#6.2 错误处理与调试)
      • [6.3 自定义工具](#6.3 自定义工具)
      • [6.4 性能优化建议](#6.4 性能优化建议)
        • [建议 1:使用缓存避免重复查询](#建议 1:使用缓存避免重复查询)
        • [建议 2:并行执行多个任务](#建议 2:并行执行多个任务)
        • [建议 3:选择合适的 LLM 模型](#建议 3:选择合适的 LLM 模型)
    • [7. 常见问题](#7. 常见问题)
      • [Q1: 为什么 Agent 一直点击错误的元素?](#Q1: 为什么 Agent 一直点击错误的元素?)
      • [Q2: 日期选择器无法正确操作怎么办?](#Q2: 日期选择器无法正确操作怎么办?)
      • [Q3: 如何降低 API 调用成本?](#Q3: 如何降低 API 调用成本?)
      • [Q4: 本地浏览器和沙箱浏览器有什么区别?](#Q4: 本地浏览器和沙箱浏览器有什么区别?)
      • [Q5: 如何提高执行速度?](#Q5: 如何提高执行速度?)
      • [Q6: 如何处理超时错误?](#Q6: 如何处理超时错误?)
    • 总结
      • [🎯 核心优势](#🎯 核心优势)
      • [📈 学习路径](#📈 学习路径)
      • [🚀 下一步行动](#🚀 下一步行动)
      • [📚 参考资源](#📚 参考资源)
    • 附录
      • [A. 常用工具速查表](#A. 常用工具速查表)
      • [B. 配置参数说明](#B. 配置参数说明)
      • [C. 常见错误码](#C. 常见错误码)

1. 什么是 OpenManus

1.1 简介

OpenManus 是由 MetaGPT 团队在 2025 年 7 月推出的开源通用 AI 智能体框架。它的核心理念是**"无堡垒、纯开放"**,能够将自然语言需求直接转化为可执行的工作流。

1.2 核心能力

复制代码
🌐 浏览器自动化 → 自动访问网站、填写表单、提取信息
💻 代码执行 → 生成并运行 Python 代码
📊 数据分析 → 处理数据、生成可视化图表
📝 文件操作 → 读写文件、整理文档

1.3 应用场景

场景一:数据采集与可视化

复制代码
"收集最近一周的比特币价格,生成走势图并导出为 HTML"

场景二:电商运营

复制代码
"给三款新品写多平台文案,分析竞品价格,检测合规性"

场景三:市场研究

复制代码
"分析比亚迪和小鹏汽车在欧洲市场的竞争情况,生成报告"

1.4 为什么选择 OpenManus?

  • 开箱即用:丰富的工具库,支持浏览器、搜索、代码执行等
  • 安全可靠:通过沙箱环境隔离执行,保护系统安全
  • 高效低成本:使用文本描述而非视觉模型,降低 API 成本
  • 灵活扩展:支持自定义工具和多智能体协作
  • 易于使用:简洁的 API 设计,快速上手

2. 核心架构

2.1 六层架构设计

OpenManus 采用清晰的分层架构,每层负责特定的功能:

层级 名称 功能
第 1 层 用户交互层 CLI、Web API、可视化界面
第 2 层 应用入口层 单智能体、多智能体协作、远程工具接入
第 3 层 智能体层 BaseAgent → ReActAgent → Manus 四级继承
第 4 层 工具层 浏览器、搜索、代码执行、文件操作等工具
第 5 层 流程控制层 PlanningFlow 自动任务拆分和执行
第 6 层 基础设施层 Docker、Redis、FAISS、LLM 适配器

2.2 智能体继承体系

复制代码
# 四级继承设计,逐步增强能力
​
BaseAgent          # 基础智能体
    - 提供:状态管理、内存管理、执行循环
    ↓
ReActAgent         # 推理-行动智能体
    - 实现:Think-Act 推理模式
    ↓
ToolCallAgent      # 工具调用智能体
    - 支持:工具调用决策和执行
    ↓
Manus              # 主要通用智能体
    - 集成:浏览器能力和完整工具集

2.3 工具系统架构

复制代码
┌──────────────────────────────────────┐
│ 基础工具                             │
│ • WebSearch: 多引擎搜索(Baidu→DuckDuckGo→Google→Bing)│
│ • BrowserUseTool: 浏览器自动化        │
│ • PythonExecute: 代码执行             │
│ • StrReplaceEditor: 文件编辑          │
└──────────────────────────────────────┘
​
┌──────────────────────────────────────┐
│ 沙箱工具 (Daytona)                   │
│ • SandboxBrowserTool: 沙箱浏览器      │
│ • SandboxFilesTool: 沙箱文件操作      │
│ • SandboxShellTool: 沙箱命令执行      │
│ • SandboxVisionTool: 沙箱视觉识别     │
└──────────────────────────────────────┘
​
┌──────────────────────────────────────┐
│ 数据分析工具                         │
│ • 数据可视化: 图表生成                │
│ • 爬虫工具: 网页内容提取              │
└──────────────────────────────────────┘

3. 快速开始

3.1 环境准备

复制代码
# 安装 OpenManus
pip install openmanus
​
# (可选)安装 Daytona 沙箱环境
pip install daytona

3.2 第一个示例

复制代码
import asyncio
from openmanus import Manus
​
async def main():
    """
    你的第一个 OpenManus 程序
    """
    # 创建 Agent 实例
    agent = await Manus.create()
    
    # 执行任务
    result = await agent.run("搜索 OpenManus 的最新进展")
    
    print(result)
​
# 运行
asyncio.run(main())

输出示例:

复制代码
OpenManus 最新进展:

1. MetaGPT 团队在 2025 年 7 月发布了 OpenManus 2.0 版本
2. 新增了多智能体协作功能
3. 优化了浏览器自动化性能
4. 支持 10+ 种 LLM 模型
...

3.3 浏览器自动化示例

复制代码
import asyncio
from openmanus import Manus

async def search_flight():
    """
    查询机票 - 完整示例
    """
    agent = await Manus.create()
    
    # 执行任务
    result = await agent.run("""
    查询 2025年1月30日从上海到北京的机票。
    具体要求:
    1. 选择单程
    2. 找出价格最低的三个航班
    3. 包括航班号、起飞时间、到达时间、价格
    4. 按价格从低到高排序
    """)
    
    print(result)

# 运行
asyncio.run(search_flight())

4. 核心概念

4.1 Think-Act 循环

OpenManus 的核心执行流程是 Think-Act 循环

复制代码
┌─────────────────────────────────────┐
│      用户输入任务                    │
└──────────────┬──────────────────────┘
               │
               ↓
┌─────────────────────────────────────┐
│   【Think 阶段】                     │
│   • LLM 分析当前状态                 │
│   • 查看内存中的历史消息              │
│   • 决定下一步使用哪个工具            │
└──────────────┬──────────────────────┘
               │
               ↓
┌─────────────────────────────────────┐
│   【Act 阶段】                       │
│   • 执行选定的工具                   │
│   • 获取执行结果                     │
│   • 将结果添加到内存                 │
└──────────────┬──────────────────────┘
               │
               ↓
         ┌─────┴─────┐
         │  回到Think │◄────┐
         └─────┬─────┘     │
               │           │
               ↓           │
    ┌─────────────────┐   │
    │ 任务完成或      │   │
    │ 达到步数上限    │───┘
    └─────────────────┘

4.2 浏览器自动化原理

OpenManus 使用文本描述而非视觉模型来识别页面元素,这样可以大幅降低成本:

复制代码
页面元素示例:
URL: https://flights.ctrip.com
Title: 携程机票预订

交互元素列表:
[0]<button>酒店</button>
[1]<button>机票</button>
[2]<button>火车票</button>
[37]<input>出发地</input>
[39]<input>目的地</input>
[40]<input>出发日期</input>
[43]<button>搜索</button>

元素格式说明:
[index]<type>text</type>
  - index: 元素的唯一标识符(从 0 开始)
  - type: HTML 元素类型(button, input, a 等)
  - text: 元素的描述性文本

LLM 根据这些文本描述选择要操作的元素

工作流程:

  1. 访问网页:浏览器自动加载页面
  2. 元素识别:遍历 DOM 树,识别所有可交互元素
  3. 生成描述:为每个元素生成文本描述和索引
  4. LLM 决策:根据描述选择要操作的元素索引
  5. 执行操作:通过索引精确点击或输入

4.3 内存系统

OpenManus 使用内存系统记录完整的对话历史和工具执行结果:

复制代码
# 内存结构
Memory:
  - messages: List[Message]

Message:
  - role: "user" | "assistant" | "tool" | "system"
  - content: 消息内容
  - tool_calls: 工具调用列表(assistant)
  - base64_image: 页面截图(tool)

# 示例
messages = [
    Message(
        role="user",
        content="查询机票"
    ),
    Message(
        role="assistant",
        content="我需要先访问携程网站",
        tool_calls=[{"name": "browser_use", "arguments": "..."}]
    ),
    Message(
        role="tool",
        content="已成功访问网站",
        base64_image="..."
    )
]

4.4 沙箱环境(Daytona)

当你让 AI 执行代码时,可能会带来安全风险。Daytona 沙箱的作用是:

核心特性:

  • 🔒 隔离执行:代码在远程容器中运行,不影响宿主机
  • 🛡️ 安全防护:即使代码有恶意行为,也无法访问本地系统
  • 🎯 资源管理:自动清理临时文件和资源
  • 👁️ 实时监控:通过 VNC 可以实时查看执行过程

工作原理:

复制代码
用户请求 → OpenManus → 代码生成 → Daytona 容器 → 安全执行 → 返回结果
                     ↓
                隔离环境
                - 独立的文件系统
                - 受限的网络访问
                - 资源限制
                - 自动清理

使用示例:

复制代码
from openmanus import SandboxManus

async def use_sandbox():
    """使用沙箱 Agent 执行任务"""
    
    # 创建 SandboxManus
    agent = await SandboxManus.create()
    
    # 在沙箱中执行任务
    result = await agent.run("""
    1. 访问 http://example.com
    2. 提取页面内容
    3. 将结果保存到 /workspace/result.md
    """)
    
    # 获取 VNC URL(可以实时查看沙箱桌面)
    print(f"VNC URL: {agent.vnc_url}")
    
    # 清理资源
    await agent.cleanup()
    
    return result

5. 实战案例

5.1 案例 1:网站 SEO 审查

复制代码
import asyncio
from openmanus import Manus

async def seo_audit():
    """
    对网站进行 SEO 审查
    """
    agent = await Manus.create()
    
    result = await agent.run("""
    对 http://class.wucai.com 进行 SEO 审查,提供详细的优化报告。
    
    检查内容包括:
    1. 页面标题和描述
    2. 关键词使用情况
    3. 图片 alt 属性
    4. 链接结构
    5. 页面加载速度(如果可以检测)
    6. 移动端适配情况
    
    最后提供可操作的优化建议。
    """)
    
    return result

# 执行
result = asyncio.run(seo_audit())
print(result)

输出示例:

复制代码
SEO 审查报告

网站:http://class.wucai.com

✅ 优点:
- 页面标题清晰
- 关键词使用合理

⚠️ 需要改进:
- 缺少 meta description
- 部分图片缺少 alt 属性
- 内部链接结构可以优化

📋 优化建议:
1. 添加 meta description 标签
2. 为所有图片添加 alt 属性
3. 优化内部链接结构
...

5.2 案例 2:竞品分析报告

复制代码
import asyncio
from openmanus import Manus

async def competitive_analysis():
    """
    生成竞品分析报告
    """
    agent = await Manus.create()
    
    result = await agent.run("""
    写一份关于 2025 年中国新能源汽车出海欧洲的竞品分析报告。
    
    重点分析比亚迪和小鹏汽车:
    1. 在欧洲的市场份额和销量数据
    2. 主要车型和定价策略
    3. 市场推广策略
    4. 用户评价和品牌认知度
    5. 面临的挑战和机遇
    
    最后给出 SWOT 分析和战略建议。
    """)
    
    return result

# 执行
result = asyncio.run(competitive_analysis())
print(result)

执行流程分解:

复制代码
Step 1: 搜索 "比亚迪 欧洲市场 销量"
  → 工具: web_search
  → 结果: 获得销量数据

Step 2: 访问相关网页获取详细信息
  → 工具: browser_use (go_to_url)
  → 结果: 访问官方数据页面

Step 3: 提取具体数据
  → 工具: browser_use (extract_content)
  → 结果: 提取销量数字

Step 4: 搜索 "小鹏汽车 欧洲市场"
  → 工具: web_search
  → 结果: 获得小鹏汽车信息

Step 5-20: 持续收集信息
  → 多次搜索和访问网页
  → 收集定价、车型、评价等信息

Step 21: 生成分析报告
  → 工具: python_execute
  → 结果: 使用 Python 生成可视化图表

Step 22-25: 完善报告
  → 整合所有信息
  → 生成最终报告

5.3 案例 3:数据采集与可视化

复制代码
import asyncio
from openmanus import Manus

async def data_visualization():
    """
    采集数据并生成可视化
    """
    agent = await Manus.create()
    
    result = await agent.run("""
    1. 访问 https://api.coinmarketcap.com/v1/ticker/bitcoin/
    2. 提取比特币价格数据
    3. 使用 Python 生成价格走势图
    4. 保存为 HTML 文件
    """)
    
    return result

# 执行
result = asyncio.run(data_visualization())
print(result)

Agent 会自动生成类似下面的 Python 代码:

复制代码
import requests
import pandas as pd
import matplotlib.pyplot as plt

# 获取数据
response = requests.get('https://api.coinmarketcap.com/v1/ticker/bitcoin/')
data = response.json()

# 提取价格
prices = [float(coin['price_usd']) for coin in data]
dates = [coin['last_updated'] for coin in data]

# 创建 DataFrame
df = pd.DataFrame({
    '日期': dates,
    '价格': prices
})

# 创建图表
plt.figure(figsize=(12, 6))
plt.plot(df['日期'], df['价格'], linewidth=2)
plt.title('比特币价格走势', fontsize=16)
plt.xlabel('时间', fontsize=12)
plt.ylabel('价格 (USD)', fontsize=12)
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('bitcoin_price.png', dpi=300)

# 生成 HTML 报告
html = f"""
<!DOCTYPE html>
<html>
<head>
    <title>比特币价格走势</title>
    <style>
        body {{
            font-family: Arial, sans-serif;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }}
        h1 {{
            color: #333;
            text-align: center;
        }}
        .chart {{
            text-align: center;
            margin: 30px 0;
        }}
        img {{
            max-width: 100%;
            border: 1px solid #ddd;
            border-radius: 8px;
        }}
    </style>
</head>
<body>
    <h1>比特币价格走势分析</h1>
    <div class="chart">
        <img src="bitcoin_price.png" alt="比特币价格走势图" />
    </div>
</body>
</html>
"""

with open('bitcoin_price.html', 'w', encoding='utf-8') as f:
    f.write(html)

print("✅ 数据采集和可视化完成!")
print("📊 图表已保存为: bitcoin_price.png")
print("📄 HTML 报告已保存为: bitcoin_price.html")

6. 进阶技巧

6.1 提高任务成功率

技巧 1:提供清晰的任务描述
复制代码
# ❌ 模糊的描述
"帮我查一下机票"

# ✅ 清晰的描述
result = await agent.run("""
查询 2025 年 1 月 30 日从上海到北京的机票。
具体要求:
1. 选择单程
2. 找出价格最低的 3 个航班
3. 包括航班号、起飞时间、到达时间、价格
4. 按价格从低到高排序
""")
技巧 2:合理设置步数限制
复制代码
from openmanus import Manus

agent = await Manus.create()
agent.max_steps = 25  # 增加步数限制(默认为 20)
技巧 3:分步骤处理复杂任务
复制代码
async def complex_task():
    agent = await Manus.create()
    
    # 步骤 1:收集数据
    data = await agent.run("搜索并收集比亚迪在欧洲市场的销量数据")
    
    # 步骤 2:分析数据
    analysis = await agent.run(f"""
    基于以下数据进行分析:
    {data}
    
    分析内容包括:
    1. 销量趋势
    2. 主要竞争对手
    3. 市场机会
    """)
    
    # 步骤 3:生成报告
    report = await agent.run(f"""
    根据分析结果生成一份完整的报告:
    {analysis}
    
    报告格式:
    1. 执行摘要
    2. 数据分析
    3. 结论和建议
    """)
    
    return report

6.2 错误处理与调试

启用详细日志
复制代码
import logging

# 启用详细日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

agent = await Manus.create()

# 执行任务时,会输出详细的日志
result = await agent.run("查询机票")

# 日志示例:
# 2025-01-30 10:00:00 - Manus - INFO - Manus's thoughts: 我需要先访问携程网站
# 2025-01-30 10:00:01 - Manus - INFO - Manus selected 1 tools to use
# 2025-01-30 10:00:02 - Manus - INFO - Activating tool: 'browser_use'
# 2025-01-30 10:00:05 - Manus - INFO - Tool 'browser_use' completed
保存截图用于调试
复制代码
# 工具返回结果中包含 base64 编码的截图
result = await agent.browser_tool.execute(
    action="go_to_url",
    url="https://www.example.com"
)

if hasattr(result, "base64_image"):
    # 保存截图
    import base64
    with open("screenshot.png", "wb") as f:
        f.write(base64.b64decode(result.base64_image))
    print("✅ 截图已保存为: screenshot.png")
查看内存状态
复制代码
# 查看当前内存中的所有消息
print("\n=== 内存状态 ===\n")
for i, msg in enumerate(agent.memory.messages):
    print(f"[{i}] {msg.role}: {msg.content[:100]}...")
    if msg.tool_calls:
        print(f"    工具调用: {len(msg.tool_calls)} 个")

6.3 自定义工具

你可以创建自定义工具来扩展 OpenManus 的能力:

复制代码
from openmanus.tools import BaseTool, ToolResult

class CustomSearchTool(BaseTool):
    """自定义搜索工具"""
    
    def __init__(self):
        super().__init__(
            name="custom_search",
            description="使用自定义搜索引擎进行搜索"
        )
    
    async def execute(self, **kwargs) -> ToolResult:
        query = kwargs.get("query")
        
        # 调用自定义搜索 API
        results = self._call_custom_api(query)
        
        return ToolResult(content=str(results))
    
    def _call_custom_api(self, query: str):
        """实现你的自定义搜索逻辑"""
        # 这里可以调用你的自定义搜索 API
        return [
            {
                "title": f"搜索结果: {query}",
                "url": "https://example.com",
                "snippet": f"这是关于 {query} 的搜索结果"
            }
        ]


# 使用自定义工具
from openmanus import Manus

async def use_custom_tool():
    agent = await Manus.create()
    
    # 添加自定义工具
    agent.available_tools.add(CustomSearchTool())
    
    # 现在可以使用自定义工具了
    result = await agent.run("使用 custom_search 搜索相关信息")
    
    return result

6.4 性能优化建议

建议 1:使用缓存避免重复查询
复制代码
from functools import lru_cache

@lru_cache(maxsize=100)
async def cached_search(query: str):
    """带缓存的搜索函数"""
    agent = await Manus.create()
    return await agent.run(f"搜索:{query}")

# 第一次查询会执行完整的搜索
result1 = await cached_search("OpenManus")

# 第二次查询会使用缓存,更快
result2 = await cached_search("OpenManus")
建议 2:并行执行多个任务
复制代码
import asyncio
from openmanus import Manus

async def parallel_tasks():
    """并行执行多个任务"""
    
    # 创建多个 Agent 实例
    agent1 = await Manus.create()
    agent2 = await Manus.create()
    agent3 = await Manus.create()
    
    # 并行执行多个搜索
    tasks = [
        agent1.run("搜索比亚迪信息"),
        agent2.run("搜索小鹏信息"),
        agent3.run("搜索特斯拉信息")
    ]
    
    results = await asyncio.gather(*tasks)
    
    return results

# 执行
results = asyncio.run(parallel_tasks())
for i, result in enumerate(results):
    print(f"\n=== 任务 {i+1} 结果 ===\n{result}\n")
建议 3:选择合适的 LLM 模型
复制代码
# 简单任务使用快速模型
agent_fast = await Manus.create(model="qwen-turbo")

# 复杂任务使用强大模型
agent_powerful = await Manus.create(model="qwen-max")

# 平衡性能和成本
agent_balanced = await Manus.create(model="qwen-plus")

7. 常见问题

Q1: 为什么 Agent 一直点击错误的元素?

现象: Agent 反复点击同一个按钮,无法完成任务。

原因:

  • 页面元素识别不准确
  • 任务描述不够清晰
  • 动态加载的元素没有被正确识别

解决方案:

复制代码
# 方法 1:提供更详细的任务描述
result = await agent.run("""
访问携程网站,找到航班查询页面。
注意:
- 不要点击酒店或火车票标签
- 只点击机票标签(通常是第二个按钮)
- 在出发地输入框中输入"上海"
- 点击搜索按钮
""")

# 方法 2:增加步数限制
agent = await Manus.create()
agent.max_steps = 25  # 从 20 增加到 25

# 方法 3:分步骤执行
step1 = await agent.run("访问携程网站,点击机票标签")
step2 = await agent.run("在出发地输入框中输入'上海'")
step3 = await agent.run("点击搜索按钮")

Q2: 日期选择器无法正确操作怎么办?

现象: 点击日期输入框后,无法正确选择日期。

原因: 日期选择器是动态生成的 DOM 元素,可能没有被正确识别。

解决方案:

复制代码
# 方法 1:使用具体的日期格式
result = await agent.run("""
在出发日期输入框中输入"2025-01-30"
使用 send_keys 而不是 click 操作
""")

# 方法 2:尝试使用坐标点击
result = await agent.run("""
点击出发日期输入框
等待日历弹出
使用坐标点击日历中的日期
""")

# 方法 3:使用浏览器的日期输入功能
result = await agent.run("""
找到出发日期输入框
直接输入日期"20250130"
""")

# 方法 4:如果以上方法都不行,可以尝试
result = await agent.run("""
保存当前页面截图
分析截图中的日期选择器
使用坐标点击具体的日期
""")

Q3: 如何降低 API 调用成本?

OpenManus 已经通过以下方式优化成本:

  1. 使用文本描述而非视觉模型:大幅降低成本
  2. 智能工具选择:避免不必要的工具调用
  3. 结果缓存:避免重复查询

用户可以进一步优化:

复制代码
# 优化 1:减少不必要的工具调用
# ❌ 不好的做法
result = await agent.run("""
1. 访问网站
2. 等待 10 秒
3. 再次访问网站
4. 等待 10 秒
5. 提取内容
""")

# ✅ 好的做法
result = await agent.run("""
访问网站,等待加载完成后提取内容。
""")

# 优化 2:使用缓存
from functools import lru_cache

@lru_cache(maxsize=100)
async def cached_search(query: str):
    agent = await Manus.create()
    return await agent.run(f"搜索:{query}")

# 优化 3:选择合适的模型
# 简单任务使用快速模型
agent = await Manus.create(model="qwen-turbo")

# 优化 4:提供清晰的任务描述
# 避免 Agent 进行不必要的尝试
result = await agent.run("""
访问 https://www.example.com
提取页面中所有的链接和标题
""")

Q4: 本地浏览器和沙箱浏览器有什么区别?

特性 本地浏览器 (BrowserUseTool) 沙箱浏览器 (SandboxBrowserTool)
运行位置 本地电脑 Daytona 云端
使用的 Agent Manus SandboxManus
可视化方式 直接看到浏览器窗口 通过 VNC URL 查看
资源占用 占用本地资源 不占用本地资源
安全性 较低 高(完全隔离)
适用场景 简单任务、快速测试 复杂任务、需要安全性

选择建议:

  • 使用本地浏览器
    • 简单的任务
    • 需要快速测试
    • 不涉及敏感数据
    • 需要实时查看操作
  • 使用沙箱浏览器
    • 执行未知代码
    • 处理敏感数据
    • 需要隔离环境
    • 长时间运行的任务

Q5: 如何提高执行速度?

复制代码
# 方法 1:并行执行多个任务
import asyncio

async def parallel_tasks():
    agent = await Manus.create()
    
    tasks = [
        agent.run("搜索比亚迪信息"),
        agent.run("搜索小鹏信息"),
        agent.run("搜索特斯拉信息")
    ]
    
    results = await asyncio.gather(*tasks)
    return results

# 方法 2:使用更快的模型
agent = await Manus.create(model="qwen-turbo")

# 方法 3:减少不必要的步骤
# 提供清晰的任务描述,避免重复操作
result = await agent.run("""
访问网站,直接提取所有产品信息,不要多次刷新。
""")

# 方法 4:使用缓存
from functools import lru_cache

@lru_cache(maxsize=100)
async def cached_operation(query: str):
    agent = await Manus.create()
    return await agent.run(f"操作:{query}")

Q6: 如何处理超时错误?

复制代码
# 方法 1:增加超时时间
agent = await Manus.create()
agent.timeout = 600  # 设置为 600 秒

# 方法 2:分步骤执行
# 将长任务拆分为多个短任务
step1 = await agent.run("访问网站并等待加载")
step2 = await agent.run("提取第一页内容")
step3 = await agent.run("提取第二页内容")

# 方法 3:使用异步重试
import asyncio

async def retry_operation(max_retries=3):
    for i in range(max_retries):
        try:
            agent = await Manus.create()
            result = await agent.run("你的任务")
            return result
        except Exception as e:
            print(f"第 {i+1} 次尝试失败: {e}")
            if i < max_retries - 1:
                await asyncio.sleep(5)  # 等待 5 秒后重试
    return None

总结

OpenManus 是一个功能强大的 AI 智能体框架,通过以下核心特性实现了"手脑并用"的能力:

🎯 核心优势

  • 开箱即用:丰富的工具库,支持浏览器、搜索、代码执行等
  • 安全可靠:通过沙箱环境隔离执行,保护系统安全
  • 高效低成本:使用文本描述替代视觉模型,降低 API 成本
  • 灵活扩展:支持自定义工具和多智能体协作
  • 易于使用:简洁的 API 设计,快速上手

📈 学习路径

复制代码
初学者:
  1. 理解 Think-Act 循环
  2. 学会使用基本工具
  3. 完成简单的任务(如网页浏览)

进阶者:
  1. 深入理解浏览器自动化
  2. 学习使用沙箱环境
  3. 处理复杂任务和错误

高级用户:
  1. 开发自定义工具
  2. 实现多智能体协作
  3. 优化性能和成本

🚀 下一步行动

  1. 实践项目:选择一个实际需求,用 OpenManus 实现
  2. 深入源码:阅读 OpenManus 的源代码,理解实现细节
  3. 贡献社区:分享你的经验和工具,帮助他人学习

📚 参考资源

资源 链接
GitHub 仓库 https://github.com/FoundationAgents/OpenManus
官方文档 https://openmanus.readthedocs.io
社区论坛 https://discuss.openmanus.dev
示例代码 https://github.com/FoundationAgents/OpenManus/tree/main/examples

附录

A. 常用工具速查表

工具名称 功能 参数示例
web_search 网络搜索 query="OpenManus 教程", num_results=5
browser_use 浏览器操作 action="click_element", index=0
python_execute 执行 Python 代码 code="print('Hello')"
str_replace_editor 文件编辑 file="test.txt", old_text="...", new_text="..."
ask_human 询问用户 question="请确认"
terminate 终止任务 无参数

B. 配置参数说明

复制代码
# 配置示例 (config.toml)
[llm]
model = "qwen-max"
api_key = "your-api-key"
temperature = 0.7

[agent]
max_steps = 20
timeout = 300

[daytona]
api_key = "dtn-xxx"

[browser]
headless = false
timeout = 30000

C. 常见错误码

错误码 说明 解决方案
E001 元素未找到 检查元素索引,增加等待时间
E002 超时 增加 timeout 参数
E003 API 调用失败 检查 API key 和网络连接
E004 步数超限 增加 max_steps

祝你学习愉快!如果有任何问题,欢迎随时提问。 🚀

转载声明:本文原创,转载请注明出处。

相关推荐
8Qi83 小时前
Hello-Agents学习笔记--旅行助手智能体案例
人工智能·llm·agent·智能体·tavily
Ho1aAs3 小时前
『OpenClaw安全』CVE-2026-25253:ClawJacked One-Click RCE
安全·web安全·网络安全·ai·智能体·agent安全·openclaw
杨超越luckly3 小时前
AI Agent应用指南 :自动化构建品牌数据库:提示词 + API + 结构化输出
大数据·数据库·人工智能·自动化·ai agent
Bruce_Liuxiaowei4 小时前
不止于聊天:OpenClaw Dashboard 是智能体系统的总控台
人工智能·智能体·openclaw
键盘侠伍十七21 小时前
AI Agent Planning & Orchestration
人工智能·agent·智能体
GJGCY1 天前
2026 RPA平台技术路径对比:AI融合、扩展性与信创适配实测
人工智能·ai·rpa·智能体·数字员工
arvin_xiaoting1 天前
OpenClaw Agent与Sub-agent架构深度分析:关系、通信与权限隔离
java·linux·架构·多智能体·ai agent·openclaw·sub-agent
GJGCY1 天前
2026年企业级RPA架构对比:非侵入式部署与AI融合谁更具落地深度?
人工智能·ai·rpa·智能体
键盘侠伍十七1 天前
OpenClaw 架构深度解析
人工智能·ai·语言模型·agent·智能体·openclaw