跳转至

Composio 工具集成

为什么要学

AI Agent 需要与外部世界交互——发邮件、操作 GitHub、查询数据库等。但为每个工具手写集成代码极其繁琐。Composio 解决了这个问题:

  • 150+ 预置工具:GitHub、Slack、Gmail、Notion、Jira、数据库等一键可用
  • OAuth 管理:自动处理复杂的认证流程
  • 框架无关:支持 LangChain、CrewAI、AutoGen、OpenAI 等所有主流框架
  • 类型安全:每个工具有完整的参数描述和验证
  • 生产就绪:处理好了速率限制、错误重试等细节

一句话:给你的 AI Agent 装上"万能工具箱"。

核心概念

白话解释

  • Composio = AI Agent 的"工具商店 + 自动连接器"
  • Tool(工具)= 一个具体操作(如"发送邮件"、"创建GitHub Issue")
  • Integration(集成)= 一个服务的连接配置(如连接到你的 Gmail 账号)
  • Action(动作)= Tool 的具体执行实例
  • Entity(实体)= 使用工具的用户/Agent

核心概念对照表

概念说明类比
App一个外部服务(GitHub/Slack等)手机上的一个App
Tool/ActionApp中的一个操作App里的一个功能按钮
Integration认证+配置的连接"登录"这个App
Entity使用者身份用户账号
Trigger事件触发器"有新消息时通知我"
Connection已建立的服务连接"已登录"状态

安装配置

安装

pip install composio-core

# 带框架支持
pip install composio-openai      # OpenAI
pip install composio-langchain   # LangChain
pip install composio-crewai      # CrewAI
pip install composio-autogen     # AutoGen

# CLI工具
pip install composio-cli

初始化

# 登录Composio
composio login

# 查看可用App
composio apps

# 连接GitHub(会弹出OAuth页面)
composio add github

# 连接Gmail
composio add gmail

# 查看已连接的服务
composio connections

代码配置

from composio_openai import ComposioToolSet, App, Action

# 初始化工具集
toolset = ComposioToolSet(api_key="your-composio-api-key")

# 或使用环境变量
# export COMPOSIO_API_KEY="..."
toolset = ComposioToolSet()

快速上手

基础用法:OpenAI + GitHub

from openai import OpenAI
from composio_openai import ComposioToolSet, App

openai_client = OpenAI()
toolset = ComposioToolSet()

# 获取GitHub相关工具
tools = toolset.get_tools(apps=[App.GITHUB])

# 让AI使用工具
response = openai_client.chat.completions.create(
    model="gpt-4o-mini",
    tools=tools,
    messages=[
        {"role": "user", "content": "在我的repo 'my-project'中创建一个issue,标题是'添加单元测试',内容是'需要为核心模块添加pytest单元测试'"}
    ]
)

# 执行工具调用
result = toolset.handle_tool_call(response)
print(result)

使用特定 Action

from composio_openai import Action

# 只使用特定操作(更精确)
tools = toolset.get_tools(actions=[
    Action.GITHUB_CREATE_ISSUE,
    Action.GITHUB_LIST_REPOS,
    Action.GITHUB_CREATE_PR
])

response = openai_client.chat.completions.create(
    model="gpt-4o-mini",
    tools=tools,
    messages=[
        {"role": "user", "content": "列出我的GitHub仓库"}
    ]
)

result = toolset.handle_tool_call(response)

与 LangChain 集成

from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain.prompts import ChatPromptTemplate
from composio_langchain import ComposioToolSet, App

toolset = ComposioToolSet()
tools = toolset.get_tools(apps=[App.GITHUB, App.SLACK])

llm = ChatOpenAI(model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个项目管理助手,可以操作GitHub和Slack"),
    ("user", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

agent = create_openai_functions_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

result = executor.invoke({
    "input": "在Slack的#dev频道发送消息:今天的代码审查已完成"
})

进阶用法

1. 多用户场景

from composio_openai import ComposioToolSet

# 为不同用户创建工具集
toolset = ComposioToolSet(entity_id="user-alice")
alice_tools = toolset.get_tools(apps=[App.GMAIL])

toolset = ComposioToolSet(entity_id="user-bob")
bob_tools = toolset.get_tools(apps=[App.GMAIL])

# 每个用户使用自己的OAuth连接

2. 触发器(Triggers)

from composio_openai import ComposioToolSet, App

toolset = ComposioToolSet()

# 监听GitHub新issue事件
listener = toolset.create_trigger_listener()

@listener.callback(filters={"trigger_name": "github_issue_opened"})
def handle_new_issue(event):
    print(f"新Issue: {event.payload['title']}")
    # 自动用AI分析和分类issue
    # ...

listener.listen()

3. 自定义工具

from composio import Action, action

@action(toolname="my_calculator")
def calculate(expression: str) -> str:
    """
    计算数学表达式

    :param expression: 数学表达式,如 "2 + 3 * 4"
    :return: 计算结果
    """
    try:
        result = eval(expression)  # 实际使用应更安全
        return str(result)
    except Exception as e:
        return f"计算错误: {e}"

# 注册自定义工具
toolset = ComposioToolSet()
tools = toolset.get_tools(actions=[calculate])

4. CrewAI 集成

from crewai import Agent, Task, Crew
from composio_crewai import ComposioToolSet, App

toolset = ComposioToolSet()

# 获取工具
github_tools = toolset.get_tools(apps=[App.GITHUB])
slack_tools = toolset.get_tools(apps=[App.SLACK])

# 创建Agent
developer = Agent(
    role="开发助手",
    goal="管理GitHub仓库和代码审查",
    tools=github_tools,
    llm="gpt-4o-mini"
)

communicator = Agent(
    role="沟通助手",
    goal="在Slack上同步项目状态",
    tools=slack_tools,
    llm="gpt-4o-mini"
)

# 创建任务
task1 = Task(
    description="检查最近的PR并总结状态",
    agent=developer
)

task2 = Task(
    description="将PR状态总结发送到Slack #dev频道",
    agent=communicator
)

crew = Crew(agents=[developer, communicator], tasks=[task1, task2])
result = crew.kickoff()

5. 支持的主要 App 列表

类别App主要功能
代码GitHubIssue/PR/Repo管理
代码GitLab类似GitHub
通信Slack消息/频道
通信Discord消息/频道
邮件Gmail收发邮件
项目JiraIssue/Sprint
项目LinearIssue管理
知识Notion页面/数据库
日历Google Calendar事件管理
存储Google Drive文件操作
CRMHubSpot联系人/交易
数据库PostgreSQL查询/修改
AIOpenAI模型调用

6. 错误处理与重试

from composio_openai import ComposioToolSet

toolset = ComposioToolSet()

# 执行操作并处理错误
try:
    result = toolset.execute_action(
        action=Action.GITHUB_CREATE_ISSUE,
        params={
            "owner": "my-org",
            "repo": "my-project",
            "title": "Bug fix needed",
            "body": "详细描述..."
        },
        entity_id="user-001"
    )

    if result["success"]:
        print(f"Issue创建成功: {result['data']['url']}")
    else:
        print(f"失败: {result['error']}")

except Exception as e:
    print(f"执行错误: {e}")

7. 工具过滤与优化

# 使用tags过滤工具(减少token消耗)
tools = toolset.get_tools(
    apps=[App.GITHUB],
    tags=["issues"]  # 只获取issue相关的工具
)

# 使用use_case描述来智能选择工具
tools = toolset.get_tools(
    apps=[App.GITHUB, App.SLACK, App.GMAIL],
    use_case="我需要创建GitHub issue并通过Slack通知团队"
)

常见问题

Q1: OAuth 认证失败?

# 重新连接
composio remove github
composio add github

# 检查连接状态
composio connections
composio whoami

Q2: 工具太多导致 token 超限?

  • 使用 actions 而非 apps 指定具体操作
  • 使用 tags 过滤
  • 使用 use_case 让 Composio 智能选择

Q3: 如何在服务器上使用(无浏览器)?

# 使用API Key直接连接(无需OAuth弹窗)
toolset = ComposioToolSet()
connection = toolset.initiate_connection(
    app=App.GITHUB,
    entity_id="server-bot",
    auth_config={"api_key": "ghp_xxx"}  # 使用token
)

Q4: 生产环境部署注意事项?

  • 使用环境变量管理 API keys
  • 每个用户使用独立 entity_id
  • 设置速率限制
  • 监控工具调用日志
  • 对敏感操作添加人工确认环节

Q5: 免费额度是多少?

Composio 提供免费层: - 每月 1000 次 Action 执行 - 基本的 App 连接 - 超过后按量计费

参考资源