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/Action | App中的一个操作 | 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 | 主要功能 |
|---|---|---|
| 代码 | GitHub | Issue/PR/Repo管理 |
| 代码 | GitLab | 类似GitHub |
| 通信 | Slack | 消息/频道 |
| 通信 | Discord | 消息/频道 |
| 邮件 | Gmail | 收发邮件 |
| 项目 | Jira | Issue/Sprint |
| 项目 | Linear | Issue管理 |
| 知识 | Notion | 页面/数据库 |
| 日历 | Google Calendar | 事件管理 |
| 存储 | Google Drive | 文件操作 |
| CRM | HubSpot | 联系人/交易 |
| 数据库 | PostgreSQL | 查询/修改 |
| AI | OpenAI | 模型调用 |
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 认证失败?¶
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 连接 - 超过后按量计费
参考资源¶
- Composio 官方文档 - 完整文档
- Composio GitHub - 源代码
- 支持的 App 列表 - 所有集成
- 框架集成指南 - 各框架使用方法
- 示例项目 - 实战代码