LangManus:一个基于 LangChain + LangGraph 的开源 Manus Agent

一个由社区驱动的 AI 自动化框架,它建立在开源社区的杰出工作之上。我们的目标是将语言模型与专门的工具结合起来,用于诸如网络搜索、爬取和 Python 代码执行等任务,同时回馈社区。

演示

任务:计算 DeepSeek R1 在 HuggingFace 上的影响力指数。这个指数可以通过使用诸如关注者、下载量和点赞数等因素的加权总和来设计。

LangManus 的全自动计划和解决方案

  1. 通过在线搜索收集关于 "DeepSeek R1"、"HuggingFace" 和相关主题的最新信息。
  2. 与一个 Chromium 实例交互,访问 HuggingFace 官方网站,搜索 "DeepSeek R1" 并检索最新数据,包括关注者、点赞数、下载量和其他相关指标。
  3. 使用搜索引擎和网络爬取查找计算模型影响力的公式。
  4. 使用 Python 根据收集的数据计算 DeepSeek R1 的影响力指数。
  5. 向用户展示一份综合报告。

目录

快速开始

# 克隆仓库
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 相关领域的技术。

架构

LangManus 实现了分层多代理系统,其中 Supervisor 协调专门的 Agent 来完成复杂的任务:

该系统由以下 Agent 协同工作组成:

  1. Coordinator - 处理初始交互和路由任务的入口点
  2. Planner - 分析任务并创建执行策略
  3. Supervisor - 监督和管理其他 Agent 的执行
  4. Researcher - 收集和分析信息
  5. Coder - 处理代码生成和修改
  6. Browser - 执行网页浏览和信息检索
  7. Reporter - 生成工作流结果的报告和摘要

特性

核心能力

工具和集成

开发特性

工作流管理

为什么选择 LangManus?

我们相信开源协作的力量。如果没有像以下项目这样的出色工作,这个项目是不可能实现的:

我们致力于回馈社区,并欢迎各种形式的贡献 - 无论是代码、文档、错误报告还是功能建议。

设置

前提条件

安装

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.exampleconf.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 和格式化检查。要设置它:

  1. 使 pre-commit 脚本可执行:
chmod +x pre-commit
  1. 安装 pre-commit hook:
ln -s ../../pre-commit .git/hooks/pre-commit

pre-commit hook 将自动:

使用方法

基本执行

要使用默认设置运行 LangManus:

uv run main.py

API 服务

LangManus 提供了一个基于 FastAPI 的 API 服务,支持流式传输:

# 启动 API 服务
make serve
# 或者直接运行
uv run server.py

API 服务暴露以下端点:

{
    "messages": [{ "role": "user", "content": "你的查询内容" }],
    "debug": false
}
*   返回一个 Server-Sent Events (SSE) 流,包含 Agent 的响应

高级配置

可以通过 src/config 目录中的各种配置文件来自定义 LangManus:

Agent 提示系统

LangManus 在 src/prompts 目录中使用复杂的提示系统来定义 Agent 的行为和职责:

核心 Agent 角色

提示系统架构

提示系统使用模板引擎 (src/prompts/template.py),该引擎:

每个 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 浏览器访问

这将:

  1. 构建并启动 LangManus 后端容器
  2. 构建并启动 LangManus Web UI 容器
  3. 使用共享网络将它们连接起来

在启动服务之前,请确保已准备好包含必要 API 密钥的 .env 文件。

开发

测试

运行测试套件:

# 运行所有测试
make test
# 运行特定的测试文件
pytest tests/integration/test_workflow.py
# 运行并生成覆盖率报告
make coverage

代码质量

# 运行 linting
make lint
# 格式化代码
make format

常见问题

请参考 FAQ.md 获取更多详情。

贡献

我们欢迎各种形式的贡献!无论是修复拼写错误、改进文档还是添加新功能,我们都感谢你的帮助。请参阅我们的 Contributing Guide 了解如何开始。

许可证

本项目是开源的,并在 MIT License 下可用。

致谢

特别感谢所有使 LangManus 成为可能的开源项目和贡献者。我们站在巨人的肩膀上。

特别是,我们要对以下项目表示深切的感谢:

这些令人惊叹的项目构成了 LangManus 的基础,并展示了开源协作的力量。