news 2026/9/10 14:09:25

Composio Python SDK 开发指南:环境搭建、Provider 插件架构与测试体系详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Composio Python SDK 开发指南:环境搭建、Provider 插件架构与测试体系详解

Composio Python SDK 开发指南:环境搭建、Provider 插件架构与测试体系详解

【免费下载链接】composioComposio powers 1000+ toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio

导读

本指南以 python/docs/development.md 为骨架,完整讲解 Composio Python SDK 的本地开发全流程:从一条命令创建隔离开发环境,到理解以composio_PROVIDER命名的插件式 Provider 架构,再到用自动化会话运行核心包与各框架插件的测试。读完本文,你将能独立在 Composio 仓库的python/目录下搭建可复现的开发环境、定位插件代码、运行与排查测试,并顺着源码链路理解这套多 Provider 工程的设计动机。

一、开发环境搭建:从make env到可用的隔离环境

原文档指出,安装 pipenv 后运行make env即可创建全新环境,且该命令可反复用于"清理并重建"环境。需要说明的是,当前仓库的 python/Makefile 已将环境管理从 pipenv 迁移至uv(仓库根目录同时存在 python/uv.lock 与 python/pyproject.toml 的[dependency-groups]声明),但入口命令与文档保持一致:make env

查看env目标的真实实现(python/Makefile),可以看到它并非简单地创建一个虚拟环境,而是一条完整的环境装配流水线:

env: @echo "* creating new environment" @if [ -z "$$VIRTUAL_ENV" ]; \ then \ uv venv --seed --prompt composio --python 3.12; \ uv sync; \ uv sync --dev; \ make provider; \ uv pip install -e .; \ echo "* enter virtual environment with all development dependencies now"; \ else \ uv sync; \ uv pip install -e .; \ echo "* already in a virtual environment (exit first ('deactivate') to create a new environment)"; \ fi @echo "* run 'source .venv/bin/activate' to enter the development environment."

逐步拆解这条流水线,能清晰理解每个环节的作用:

步骤命令作用
1uv venv --seed --prompt composio --python 3.12以 Python 3.12 创建全新虚拟环境,shell 提示符标记为composio(与requires-python = ">=3.10,<4"兼容,见 python/pyproject.toml)
2uv sync按锁定文件安装运行时依赖(pydantic、composio-client、openai 等,见 python/pyproject.toml)
3uv sync --dev追加安装[dependency-groups].dev中的开发依赖,包括 nox、pytest、ruff、mypy、hypothesis 等(见 python/pyproject.toml)
4make provider遍历providers/*/pyproject.toml并逐个uv pip install,装上全部框架插件
5uv pip install -e .以可编辑(editable)模式安装核心 SDK,源码改动即时生效

关键设计有两个:

  1. 幂等与可重建make env的注释明确写着"enter virtual environment with all development dependencies now"。当环境已激活($VIRTUAL_ENV非空)时,它只做增量uv sync,不会重新建环境;文档所说"每次用它清理环境"对应的是先deactivate退出再运行,从而从零重建。这让make env既适合首次克隆后的一次性初始化,也适合依赖漂移时的重置。
  2. 插件单独安装make provider依赖PROVIDER_DIRS := $(patsubst %/,%,$(sort $(dir $(wildcard providers/*/pyproject.toml))))动态发现所有插件包。之所以不把它们放进根pyproject.toml,原因在 python/noxfile.py 的注释中写得很明确:crewai、langchain、llama-index 等框架库会引入互相冲突的传递依赖,必须与核心包解耦。

完成make env后,按输出提示执行source .venv/bin/activate即可进入开发环境。

二、Provider 插件架构:composio_PROVIDER命名空间与插件目录

原文档指出插件位于plugins/文件夹,并以composio_PROVIDER命名空间组织。对照当前仓库,该目录已更名为providers/(python/providers),包含 13 个框架插件:

anthropic/ autogen/ claude_agent_sdk/ crewai/ gemini/ google/ google_adk/ langchain/ langgraph/ llamaindex/ openai/ openai_agents/

每个插件都是一个独立的 Python 包,例如 python/providers/openai/pyproject.toml 声明了包名composio-openai,依赖composioopenai。这与文档描述的命名规则一致——导入时即composio_openaicomposio_anthropiccomposio_langchain等。插件目录中还提供了 python/providers/AGENTS.md 供插件开发者参考。

这种插件化设计要解决的核心问题是依赖冲突隔离:核心 SDK 不依赖任何第三方 Agent 框架,而每个框架插件各自锁定自己所需的框架版本。你在使用时会选择性地安装一个或几个插件,例如:

# 仅核心 SDK + OpenAI 插件 uv pip install composio composio-openai # 核心 SDK + LangChain 插件(LangChain 插件另依赖 langchain_openai,见 dev 组声明) uv pip install composio composio-langchain

新插件脚手架:make create-provider

除了手工创建目录,Makefile 提供了脚手架命令make create-provider name=<provider-name>(python/Makefile),底层调用 python/scripts/create-provider.sh:

# 生成标准 Provider 插件骨架 make create-provider name=myframework # 生成支持 agentic 调用的 Provider 插件 make create-provider name=myframework agentic=true # 指定输出目录 make create-provider name=myframework output=python/providers

从源码结构看,生成的插件遵循统一约定:独立的pyproject.toml(命名composio-<name>)、provider 类实现、对应的类型推断测试文件(见下文测试章节)。这也是为什么 python/noxfile.py 中type_inference会话需要按名称逐个安装全部插件。

Provider 与核心 SDK 的分工

从 python/composio/sdk.py 等核心模块的结构可以推断:核心包负责 SDK 初始化、工具获取与执行、认证等通用逻辑;插件包(如composio_openai)负责把通用工具转换成特定框架的函数调用格式。使用者通过Composio(provider=...)传入对应 Provider 实例即可让同一套工具适配不同 Agent 框架——这正是插件体系在运行时层的落点。

三、测试体系:多 Provider 依赖冲突下的测试隔离

3.1 为什么用 tox / nox 这类工具跑测试

原文档给出了关键设计理由:可选插件之间可能互相冲突,因此不能在一个共享环境里一次性安装全部插件来跑测试。tox(以及当前仓库实际使用的 nox)为每个测试环境创建独立隔离环境,从而把核心包与各插件的测试彻底分开。

这是一个从依赖图推导出的必然选择:把 crewai、langchain、llama-index 装进同一环境会引发传递依赖冲突(python/noxfile.py 明确点名了这一点)。因此 python/pyproject.toml 的dev组只放通用测试/静态检查工具(nox、pytest、ruff、mypy、hypothesis、fastapi、semver 等),框架库则留在各自插件包内。

3.2 原文档的 tox 命令与当前仓库的 nox 实现

原文档给出的命令是tox -r -e core/tox -r -e openai/tox -r -e langchain。需要说明的是,这是文档记录的历史用法:当前仓库已将测试执行器从 tox 迁移到nox + uv。搜索仓库可见 tox 字样仅残留在 python/docs/development.md 与 python/scripts/bump.py(用于跳过.tox目录);实际的测试会话全部定义在 python/noxfile.py,且 python/noxfile.py 设置了nox.options.default_venv_backend = "uv",即每个会话默认用 uv 创建独立虚拟环境。

两者理念一致:都是"多环境、隔离跑测"。当前仓库对应的命令映射如下(均为make别名,见 python/Makefile):

原文档 tox 命令当前等价命令执行内容
tox -r -e coremake tst(即nox -s tst安装核心 SDK + dev 组 + crewai/langchain/langgraph 插件,运行 python/tests 全套单元测试
tox -r -e openainox -s type_inference中的 openai 部分安装全部插件后对tests/test_type_inference_openai_agents.py等做 mypy 类型推断校验
tox -r -e langchainnox -s type_inference中的 langchain 部分同上,校验 LangChain 插件的返回类型推断

3.3 各 nox 会话详解

python/noxfile.py 定义了 8 个会话,它们是日常开发的核心工作流:

测试类

  • tst(make test):安装.+ dev 组,再额外安装crewailangchainlanggraph三个插件(python/noxfile.py),默认以pytest tests/ -v --tb=short运行全部单元测试,支持--传参指定测试路径。之所以只额外装这三个插件,是因为其余插件要么无框架测试、要么在独立会话中覆盖。
  • snt(make sanity):快速冒烟测试,默认只跑tests/test_imports.pytests/test_sdk.py,验证导入与 SDK 初始化无碍(python/noxfile.py),适合改动后秒级反馈。
  • tst_autogen:Autogen 插件因 protobuf 版本敏感,单独在一个隔离环境里跑test_provider.py中两个与skip_defaults相关的签名测试(python/noxfile.py)——这是"依赖冲突必须隔离"原则的典型例证。

静态检查类

  • fmt(make format):运行ruff check --select I --fix修复导入排序,再ruff format格式化全部源码模块(python/noxfile.py),扫描范围包括composio/providers/tests/examples/scripts/
  • chk(make check):先ruff check(配置见 python/config/ruff.toml),再对composio/providers/tests/scripts/逐个跑mypy --config-file config/mypy.ini(python/noxfile.py)。为让 mypy 能解析插件与测试中的框架导入,该会话会安装一组仅用于类型解析的 type stubs 与固定版本库(types-requeststypes-protobufanthropiccrewailangchainllama-index等,见 python/noxfile.py)。
  • chk_examples:对 python/examples 下每个.py示例单独跑一次 mypy(避免同名模块冲突),并开启--check-untyped-defs强制检查未注解函数体(python/noxfile.py)。
  • type_inference:安装全部 12 个插件后,对tests/test_type_inference*.py系列文件做 mypy 校验,验证Composio.tools.get()@overload签名能否为不同框架正确推断返回类型(python/noxfile.py)。对应测试文件见 python/tests/test_type_inference.py 及各框架的test_type_inference_<framework>.py
  • dead_code:用 vulture 以 80% 置信度扫描composio/providers/,报告可能未使用的函数/类/变量;采用报告不阻断策略(success_codes=[0, 3]),确认误报后可将符号加入 python/config/vulture_allowlist.py(python/noxfile.py)。

3.4 测试文件布局与 pytest 配置

测试全部位于 python/tests,数量超过 60 个,覆盖认证配置、连接账户、工具执行、Schema 转换、文件上传、类型推断、URL 安全等多个领域。常见模式包括:

  • Schema/类型相关test_schema_converter.pytest_strict_schema_corpus.pytest_json_schema.pytest_type_inference_*.py系列;
  • 安全相关test_url_safety.pytest_url_safety_pinning.pytest_sensitive_file_upload_paths.pytest_path_join_guardrail.py
  • Provider 相关test_provider.pytest_crewai_provider.pytest_gemini_provider.pytest_google_provider.py等。

python/pytest.ini 的关键配置:

[pytest] testpaths = tests python_files = test_*.py python_classes = Test* python_functions = test_* addopts = -v --tb=short --ignore-glob=tests/test_type_inference*.py markers = slow: marks tests as slow (deselect with '-m "not slow"') integration: marks tests as integration tests unit: marks tests as unit tests schema: marks tests as schema-related tests

值得注意的两点:addopts默认用--ignore-glob排除test_type_inference*.py(这些文件只由type_inference会话驱动,避免常规 pytest 因缺少插件类型而失败);markers定义了slow/integration/unit/schema四类标记,例如可以用pytest -m "not slow"快速跳过慢测试。

3.5 只跑某一插件的测试:最小复现路径

当只想验证某个插件时,可结合tst会话的posargs与 pytest 路径过滤,或直接激活环境后指定测试文件:

# 方式一:走 nox 会话,只跑 provider 相关测试 nox -s tst -- tests/test_provider.py # 方式二:进入 make env 创建的环境后直接跑 source .venv/bin/activate pytest tests/test_provider.py tests/test_schema_converter.py -v

若修改涉及返回类型推断,务必补跑nox -s type_inference,这是保证各框架插件类型契约不被破坏的专门门禁。

四、代码规范与发布流程的衔接

开发文档未展开的部分,可在仓库配套文档中找到闭环:

  • 代码格式与类型规范make fmt/make chk是提交前的第一道关卡,分别对应 ruff 与 mypy 检查(配置见 python/config/ruff.toml 与 python/config/mypy.ini)。
  • 发布流程:python/docs/release.md 描述了完整的 Python 包发布流程:运行python scripts/bump.py(python/scripts/bump.py)交互式选择各包的下一版本(major/minor/patch/pre/post/skip),创建 release PR,合并后发布 GitHub Release。该脚本会扫描**/pyproject.toml**/setup.py,自动跳过.venv.nox.tox等目录(python/scripts/bump.py),因此上文提到的所有插件包会一并纳入版本管理。
  • 发布前的完整性校验make clean-build清理 dist 目录、make build使用.venv/bin/python -m build逐个构建核心包与所有插件包并合并 dist(python/Makefile 与 python/Makefile)。

一个典型的开发闭环是:make env建环境 →make snt冒烟 →make fmt && make chk静态检查 → 修改代码 →make tst全量单测 →nox -s type_inference校验插件类型推断 → 按需make dead-code清理死代码 → 发布前make bump && make build

五、实践建议与注意事项

  1. 环境重建要彻底make env在已激活环境内只会增量同步;需要从零重建时先deactivate再运行,或删除.venv后重新执行,以保证--seed的 Python 3.12 基线一致。
  2. 插件依赖别装进根项目:新增框架依赖请放在对应插件的providers/<name>/pyproject.toml,而不是根 python/pyproject.toml,否则会重新引入依赖冲突——这正是本仓库插件架构的初衷。
  3. 新增插件记得补类型推断测试:参照现有test_type_inference_<framework>.py的写法,并确认type_inference会话中加入了对应安装与检查条目(python/noxfile.py)。
  4. 区分两套测试入口:常规pytest tests/默认排除类型推断测试;涉及插件返回类型时必须显式运行nox -s type_inference,二者互补而非替代。
  5. 遵循测试标记约定:为耗时用例标注@pytest.mark.slowintegration,便于pytest -m "not slow"快速迭代。

通过本文梳理,你应该已经掌握 Composio Python SDK 的开发环境装配原理、composio_PROVIDER插件架构的组织方式,以及从 tox 演进到 nox 的多环境测试体系。在此基础上,深入阅读 python/Makefile、python/noxfile.py 与 python/tests 下的具体用例,即可完全上手该仓库的日常开发。

【免费下载链接】composioComposio powers 1000+ toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 14:06:43

GrapesJS Keymaps 模块完全指南:自定义编辑器快捷键

GrapesJS Keymaps 模块完全指南&#xff1a;自定义编辑器快捷键 【免费下载链接】grapesjs Free and Open source Web Builder Framework. Next generation tool for building templates without coding 项目地址: https://gitcode.com/GitHub_Trending/gr/grapesjs 导读…

作者头像 李华
网站建设 2026/9/10 14:05:26

基于卷积神经网络的垃圾分类系统从零搭建与调参实战

简介&#xff1a;一份基于卷积神经网络的垃圾分类系统Python毕业设计资料&#xff0c;面向计算机相关专业正在准备毕业设计的学生&#xff0c;以及需要项目实战练习的初学者。项目经导师指导审定&#xff0c;评审得分98分&#xff0c;源码已本地编译调试通过&#xff0c;可稳定…

作者头像 李华
网站建设 2026/9/10 14:04:15

FDC2214与STM32高精度电容检测硬件协同设计指南

简介&#xff1a;本资源是一套面向嵌入式开发初学者与进阶工程师的STM32FDC2214高精度电容测量参考设计&#xff0c;聚焦电容式传感器在触摸检测、湿度/压力传感等场景中的工程落地。内容涵盖中文技术文档、完整Keil工程源码&#xff08;含HAL库驱动与IC通信实现&#xff09;、…

作者头像 李华
网站建设 2026/9/10 14:00:18

CANN/GE图切分保存接口

ShardGraphsToFile 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorF…

作者头像 李华
网站建设 2026/9/10 13:57:04

Ceph分布式存储系统演进与性能优化关键技术

1. Ceph存储系统的演进与核心变革Ceph作为开源的分布式存储系统&#xff0c;在过去十年间经历了从实验室项目到企业级基础设施的关键蜕变。我最早在2013年接触Ceph 0.67版本时&#xff0c;其部署还需要手动编辑大量配置文件&#xff0c;而现在的Luminous/Nautilus版本已经实现了…

作者头像 李华