LangManus: An Open-Source Manus Agent with LangChain + LangGraph
LangManus:一个基于 LangChain + LangGraph 的开源 Manus Agent
一个由社区驱动的 AI 自动化框架,它建立在开源社区的杰出工作之上。我们的目标是将语言模型与专门的工具结合起来,用于诸如网络搜索、爬取和 Python 代码执行等任务,同时回馈社区。
演示
任务:计算 DeepSeek R1 在 HuggingFace 上的影响力指数。这个指数可以通过使用诸如关注者、下载量和点赞数等因素的加权总和来设计。
LangManus 的全自动计划和解决方案:
- 通过在线搜索收集关于 "DeepSeek R1"、"HuggingFace" 和相关主题的最新信息。
- 与一个 Chromium 实例交互,访问 HuggingFace 官方网站,搜索 "DeepSeek R1" 并检索最新数据,包括关注者、点赞数、下载量和其他相关指标。
- 使用搜索引擎和网络爬取查找计算模型影响力的公式。
- 使用 Python 根据收集的数据计算 DeepSeek R1 的影响力指数。
- 向用户展示一份综合报告。
目录
快速开始
# 克隆仓库
git clone https://github.com/langmanus/langmanus.git
cd langmanus
# 安装依赖, uv 会处理 python 解释器和 venv 的创建
uv sync
# Playwright 安装,默认使用 Chromium 进行浏览器操作
uv run playwright install
# 配置环境
# Windows: 复制 .env.example .env
cp .env.example .env
# 编辑 .env 文件,填入你的 API 密钥
# 运行项目
uv run main.py
项目声明
本项目是一个学术驱动的开源项目,由一群前同事在业余时间开发,旨在探索和交流 Multi-Agent 和 DeepResearch 相关领域的技术。
- 项目目的 :本项目的主要目的是学术研究、参与 GAIA 排行榜,并计划在未来发表相关论文。
- 独立性声明 :本项目完全独立,与我们的本职工作无关,不代表我们所在公司或任何组织的立场或观点。
- 无关联声明 :本项目与 Manus(无论是公司、组织还是其他实体)无任何关联。
- 澄清声明 :我们未在任何社交媒体平台上宣传过本项目,任何与本项目相关的不实报道均与本项目的学术精神无关。
- 贡献管理 :Issue 和 PR 将在我们空闲时间处理,可能存在延迟,敬请谅解。
- 免责声明 :本项目基于 MIT 协议开源,使用者需自行承担使用风险。我们对因使用本项目产生的任何直接或间接后果不承担责任。
架构
LangManus 实现了分层多代理系统,其中 Supervisor 协调专门的 Agent 来完成复杂的任务:
该系统由以下 Agent 协同工作组成:
- Coordinator - 处理初始交互和路由任务的入口点
- Planner - 分析任务并创建执行策略
- Supervisor - 监督和管理其他 Agent 的执行
- Researcher - 收集和分析信息
- Coder - 处理代码生成和修改
- Browser - 执行网页浏览和信息检索
- Reporter - 生成工作流结果的报告和摘要
特性
核心能力
- 🤖 LLM 集成
- 它支持通过 litellm 集成大多数模型。
- 支持 Qwen 等开源模型
- OpenAI 兼容的 API 接口
- 用于不同任务复杂度的多层 LLM 系统
工具和集成
- 🔍 搜索和检索
- 通过 Tavily API 进行网络搜索
- 使用 Jina 进行神经搜索
- 高级内容提取
开发特性
- 🐍 Python 集成
- 内置 Python REPL
- 代码执行环境
- 使用 uv 进行包管理
工作流管理
- 📊 可视化和控制
- 工作流图可视化
- 多 Agent 编排
- 任务委派和监控
为什么选择 LangManus?
我们相信开源协作的力量。如果没有像以下项目这样的出色工作,这个项目是不可能实现的:
- Qwen 开源 LLM
- Tavily 搜索能力
- Jina 爬虫搜索技术
- Browser-use 控制浏览器
- 以及许多其他的开源贡献者
我们致力于回馈社区,并欢迎各种形式的贡献 - 无论是代码、文档、错误报告还是功能建议。
设置
前提条件
- uv 包管理器
安装
LangManus 利用 uv 作为包管理器来简化依赖管理。按照以下步骤设置虚拟环境并安装必要的依赖项:
# 步骤 1: 通过 uv 创建和激活一个虚拟环境
uv python install 3.12
uv venv --python 3.12
source .venv/bin/activate # 在 Windows 上: .venv\Scripts\activate
# 步骤 2: 安装项目依赖
uv sync
完成这些步骤,你将确保你的环境配置正确并准备好进行开发。
配置
LangManus 使用三层 LLM 系统,分别用于推理、基本任务和视觉语言任务。配置通过项目根目录下的 conf.yaml
文件完成。你可以复制 conf.yaml.example
到 conf.yaml
来开始配置:
cp conf.yaml.example conf.yaml
# 设置为 true 将读取 conf.yaml 配置,设置为 false 将使用原始 .env 配置。默认为 false(与现有配置兼容)
USE_CONF: true
# LLM 配置
## 遵循 litellm 配置参数:https://docs.litellm.ai/docs/providers。可以点击特定的提供商文档查看补全参数示例
REASONING_MODEL:
model: "volcengine/ep-xxxx"
api_key: $REASONING_API_KEY # 支持通过 $ENV_KEY 引用.env 文件中的环境变量 ENV_KEY
api_base: $REASONING_BASE_URL
BASIC_MODEL:
model: "azure/gpt-4o-2024-08-06"
api_base: $AZURE_API_BASE
api_version: $AZURE_API_VERSION
api_key: $AZURE_API_KEY
VISION_MODEL:
model: "azure/gpt-4o-2024-08-06"
api_base: $AZURE_API_BASE
api_version: $AZURE_API_VERSION
api_key: $AZURE_API_KEY
你可以在项目根目录下创建一个 .env
文件,并配置以下环境变量。你可以复制 .env.example
文件作为模板来开始:
cp .env.example .env
# 工具 API 密钥
TAVILY_API_KEY=your_tavily_api_key
JINA_API_KEY=your_jina_api_key # 可选
# 浏览器配置
CHROME_INSTANCE_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome # 可选, Chrome 可执行文件的路径
CHROME_HEADLESS=False # 可选,默认为 False
CHROME_PROXY_SERVER=http://127.0.0.1:10809 # 可选,默认为 None
CHROME_PROXY_USERNAME= # 可选,默认为 None
CHROME_PROXY_PASSWORD= # 可选,默认为 None
注意:
- 系统对不同类型的任务使用不同的模型:
- 推理 LLM 用于复杂的决策和分析。
- 基本 LLM 用于简单的文本任务。
- 视觉语言 LLM 用于涉及图像理解的任务。
- 所有 LLM 的配置都可以独立定制。
- Jina API 密钥是可选的。提供你自己的密钥可以获得更高的速率限制 (可以在 jina.ai 获取此密钥)。
- Tavily 搜索的默认配置是最多返回 5 个结果 (可以在 app.tavily.com 获取此密钥)。
配置 Pre-commit Hook
LangManus 包含一个 pre-commit hook,它在每次提交之前运行 linting 和格式化检查。要设置它:
- 使 pre-commit 脚本可执行:
chmod +x pre-commit
- 安装 pre-commit hook:
ln -s ../../pre-commit .git/hooks/pre-commit
pre-commit hook 将自动:
- 运行 linting 检查 (
make lint
) - 格式化代码 (
make format
) - 将任何重新格式化的文件添加回暂存区
- 如果存在任何 linting 或格式化错误,则阻止提交
使用方法
基本执行
要使用默认设置运行 LangManus:
uv run main.py
API 服务
LangManus 提供了一个基于 FastAPI 的 API 服务,支持流式传输:
# 启动 API 服务
make serve
# 或者直接运行
uv run server.py
API 服务暴露以下端点:
POST /api/chat/stream
: 用于 LangGraph 调用的聊天端点,支持流式传输- 请求体:
{
"messages": [{ "role": "user", "content": "你的查询内容" }],
"debug": false
}
* 返回一个 Server-Sent Events (SSE) 流,包含 Agent 的响应
高级配置
可以通过 src/config
目录中的各种配置文件来自定义 LangManus:
env.py
: 配置 LLM 模型、API 密钥和基本 URLtools.py
: 调整工具特定的设置(例如,Tavily 搜索结果限制)agents.py
: 修改团队组成和 Agent 系统提示
Agent 提示系统
LangManus 在 src/prompts
目录中使用复杂的提示系统来定义 Agent 的行为和职责:
核心 Agent 角色
- Supervisor (
src/prompts/supervisor.md
): 协调团队并通过分析请求并确定哪个专家应该处理它们来委派任务。对任务完成和工作流程转换做出决定。 - Researcher (
src/prompts/researcher.md
): 专门通过网络搜索和数据收集来收集信息。使用 Tavily 搜索和网络爬取功能,同时避免数学计算或文件操作。 - Coder (
src/prompts/coder.md
): 专业软件工程师角色,专注于 Python 和 bash 脚本编写。处理:- Python 代码执行和分析
- Shell 命令执行
- 技术问题解决和实施
- File Manager (
src/prompts/file_manager.md
): 处理所有文件系统操作,重点是以 markdown 格式正确格式化和保存内容。 - Browser (
src/prompts/browser.md
): Web 交互专家,处理:- 网站导航
- 页面交互(点击、输入、滚动)
- 从网页中提取内容
提示系统架构
提示系统使用模板引擎 (src/prompts/template.py
),该引擎:
- 加载特定于角色的 markdown 模板
- 处理变量替换(例如,当前时间、团队成员信息)
- 为每个 Agent 格式化系统提示
每个 Agent 的提示都在一个单独的 markdown 文件中定义,从而可以轻松修改行为和职责,而无需更改底层代码。
Docker
LangManus 可以在 Docker 容器中运行。默认情况下,API 服务在端口 8000 上提供。
在运行 Docker 之前,需要在 .env
文件中准备环境变量。
docker build -t langmanus .
docker run --name langmanus -d --env-file .env -e CHROME_HEADLESS=True -p 8000:8000 langmanus
你也可以只用 Docker 运行 CLI。
docker build -t langmanus .
docker run --rm -it --env-file .env -e CHROME_HEADLESS=True langmanus uv run python main.py
Web UI
LangManus 提供了一个默认的 Web UI。
请参考 langmanus/langmanus-web-ui 项目以获取更多详情。
Docker Compose (包含后端和前端)
LangManus 提供了一个 docker-compose 设置,可以轻松地将后端和前端一起运行:
# 启动后端和前端
docker-compose up -d
# 后端将在 http://localhost:8000 上可用
# 前端将在 http://localhost:3000 上可用,可以通过 Web 浏览器访问
这将:
- 构建并启动 LangManus 后端容器
- 构建并启动 LangManus Web UI 容器
- 使用共享网络将它们连接起来
在启动服务之前,请确保已准备好包含必要 API 密钥的 .env
文件。
开发
测试
运行测试套件:
# 运行所有测试
make test
# 运行特定的测试文件
pytest tests/integration/test_workflow.py
# 运行并生成覆盖率报告
make coverage
代码质量
# 运行 linting
make lint
# 格式化代码
make format
常见问题
请参考 FAQ.md 获取更多详情。
贡献
我们欢迎各种形式的贡献!无论是修复拼写错误、改进文档还是添加新功能,我们都感谢你的帮助。请参阅我们的 Contributing Guide 了解如何开始。
许可证
本项目是开源的,并在 MIT License 下可用。
致谢
特别感谢所有使 LangManus 成为可能的开源项目和贡献者。我们站在巨人的肩膀上。
特别是,我们要对以下项目表示深切的感谢:
- LangChain,他们出色的框架为我们的 LLM 交互和链条提供动力
- LangGraph,它支持我们复杂的多 Agent 编排
- Browser-use,控制浏览器
这些令人惊叹的项目构成了 LangManus 的基础,并展示了开源协作的力量。