Selectools

用纯 Python 构建、编排并部署带安全控制的多智能体应用。

Star 数
★ 11
最近更新
3 天前
License
Apache-2.0
主语言
Python

30 秒速览

运行形态
代码库 / SDK命令行工具自托管服务
可在哪里用
通用 · 跨平台OpenAI API · Claude API
费用
软件免费,模型调用费用自付
上手难度
中 · 需要几步配置
开始前需要
Python 3.10+Shell / 命令行网络访问本地文件系统MCP Server
典型场景
Python 后端团队要把 OpenAI 或 Anthropic 的工具调用助手接入现有服务,并需要 trace、重试、预算限制和流式输出。
不适合
  • 仍在使用 Python 3.9 且无法升级环境的团队
  • 希望开箱即用、不愿配置可选依赖与外部服务的用户

这个 Agent 能做什么,适合哪些场景?

Selectools 是一个 Python 3.10+ 的 AI 智能体框架,核心接口包括 Agent、AgentGraph、Pipeline 与多种模式化智能体。它可通过 OpenAI、Azure OpenAI、Anthropic、Gemini、Ollama 和 LiteLLMProvider 调用模型,并支持 FallbackProvider 与 RouterProvider。一次 agent.run() 会产出 AgentResult,其中包含内容、结构化解析结果、用量和执行 trace;astream() 则提供流式 StreamChunk 与最终结果。框架包含工具调用、四阶段 guardrail、JSONL 审计日志、会话与记忆、混合 RAG、MCP 和评测组件。它既可作为库嵌入 Python 服务,也可用 selectools serve agent.yaml 部署 HTTP/SSE 服务,或通过 AgentAPI 构建 Starlette ASGI 应用。

开发者将带有 @tool 的 Python 函数、Provider 和 AgentConfig 传给 Agent。Agent.run() 或 Agent.ask() 向模型发起调用、处理原生工具调用,并可在执行前后经过 input、output、tool_args、tool_results 四个 guardrail 阶段;结果以 AgentResult 返回,trace 记录模型调用和工具执行。AgentGraph 可按节点与边运行多个智能体,Pipeline、@step、parallel() 与 branch() 可组合普通同步或异步步骤。RAGAgent 可从目录创建检索智能体;HybridSearcher 将 BM25 与向量检索融合,并可使用重排序。selectools serve agent.yaml 可提供 HTTP 与 SSE 流式接口,AgentAPI 则提供 POST /v1/chat、会话 CRUD 与可选 bearer 认证。

  1. Python 后端团队要把 OpenAI 或 Anthropic 的工具调用助手接入现有服务,并需要 trace、重试、预算限制和流式输出。
  2. 需要将规划、写作和审核分别交给多个智能体,并以 AgentGraph.chain() 或显式有向图编排执行顺序的应用团队。
  3. 拥有本地文档库的内部知识助手,想用 RAGAgent、向量存储、BM25 与向量融合检索回答问题。
  4. 处理发邮件、创建资源或删除类工具的业务系统,需要 ToolPolicy、审批回调、guardrail 和 AuditLogger 记录执行边界。
  5. 需要将 Python 智能体公开为 REST/SSE 接口,并要求会话隔离、会话存储或 Starlette ASGI 部署的工程团队。

如何安装或部署这个 Agent?

运行 pip install selectools。运行环境需为 Python 3.10+。如需调用云端模型,在项目根目录的 .env 中配置相应凭据,例如 OPENAI_API_KEY=sk-...;也可使用 ANTHROPIC_API_KEY 或 GEMINI_API_KEY。可选功能使用额外依赖安装,例如 pip install selectools[rag]、pip install selectools[observe]、pip install selectools[mcp]。

如何使用这个 Agent?

可先用无需 API key 的 LocalProvider:from selectools import Agent, AgentConfig, tool,再从 selectools.providers.stubs 导入 LocalProvider。用 @tool(description="...") 定义函数,然后创建 Agent(tools=[你的工具], provider=LocalProvider(), config=AgentConfig(max_iterations=3)),调用 result = agent.ask("你的请求") 并读取 result.content。使用 OpenAI 时改用 OpenAIProvider,并配置 OPENAI_API_KEY。部署 YAML 定义的智能体时可运行 selectools serve agent.yaml;用 AgentAPI(agent, auth_key="secret") 可将单个智能体包装为 Starlette ASGI 应用。

这个 Agent 有哪些优点和局限?

优点
  • 以 AgentGraph、Pipeline 和 | 运算符提供纯 Python 的多智能体图与步骤组合,不要求专用 DSL 或编译步骤。
  • 结构化输出同时支持本地校验,以及 OpenAI/Azure 和 Gemini 的原生 JSON Schema 约束,并以 structured_status 表达结果状态。
  • 安全控制覆盖输入、输出、工具参数和工具结果四个阶段;AuditLogger 可写入带隐私控制与轮转的 JSONL 记录。
  • 可在同一框架内使用六类模型提供方、故障回退、成本路由,以及 AgentAPI 的 REST/SSE 服务边界。
局限
  • 最低运行版本是 Python 3.10;Python 3.9 用户需固定在 selectools<1.0 或迁移运行环境。
  • 不同功能依赖可选安装包和外部服务,例如 RAG、Redis、PostgreSQL、Supabase、MongoDB、DynamoDB、MCP 或可观测性后端。
  • 云端 Provider 需要相应 API 凭据和网络连接;模型能力与原生结构化输出支持会因提供方而异。
  • 部分模块仍标记为 beta,包括 RAG/embeddings、MCP、A2A、评测目录、统一记忆、调度器和较新的后端,1.x 中仍可能演进。

这个 Agent 与同类方案有什么区别?

仓库将其与 LangChain/LangGraph 对比:Selectools 以 AgentGraph.chain(a, b, c).run(prompt) 和 @step 加 | 表达图与流水线,并内置评测与 trace;LangChain/LangGraph 的对应示例使用 StateGraph/compile() 和 LCEL Runnable。是否迁移仍取决于现有 LangChain 依赖与所需集成。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
Selectools 当前 65 · 存在缺口 代码库 / SDK免费 + 模型费 ★ 11 3 天前 Python OpenAI API · Claude API
Octomind 70 · 存在缺口 命令行工具免费版 + 付费版 ★ 557 1 天前 Rust OpenAI API · Claude API
DSPy-Go 49 · 缺口较多 命令行工具免费 + 模型费 ★ 203 4 天前 Go OpenAI API · Claude API
npcpy 智能体开发框架 43 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 1.5k 4 天前 Python Codex · Claude Code · OpenAI API · Claude API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
存在缺口
65/ 100 五分制 3.3 / 5
本评测基于 2026年8月9日 的源码;此后该项目发布了 1 个正式版本,尚未复审。分数与结论只代表评测时的版本。 最近版本 ↓
信任安全 18/29
可靠稳定 9/14
适用触发 12/18
规范维护 12/18
有效结果 9/13
证据核验 5/8
查看各维度的扣分理由
信任安全18 / 29 · 3.1/5

证据显示:工具执行有审批机制(ToolConfig.require_approval),shell 工具使用 shell=False 且 shlex 解析,SSRF 防护覆盖浏览器工具和 webhook,有审计日志和 PII 处理选项。扣分:rollback 仅提及会话存储和检查点,未明确工具执行的回滚机制;发布者身份未验证,但未因此扣分。

可靠稳定9 / 14 · 3.2/5

证据显示:README 和 CHANGELOG 描述一致,测试文件存在且使用 FakeProvider,CI 配置了多 Python 版本测试。扣分:未提供依赖可用性证明(如锁文件),失败消息仅部分提及(如 GuardrailError 带 trace)。

适用触发12 / 18 · 3.3/5

证据显示:README 明确目标用户为开发者,提供多种构建方式(单代理、图、部署),支持多种 provider,有环境适配(Python 3.10+,可选依赖)。扣分:能力边界在 README 中未完全明确(如 beta 模块列表),触发精度(如 guardrail 触发条件)在文档中未详细说明。

规范维护12 / 18 · 3.3/5

证据显示:README 结构清晰,有安装说明(pip install),命名稳定(@stable 标记),有示例和 FAQ(examples 目录),已知限制(如 beta 模块),Apache-2.0 许可证,版本变更日志(CHANGELOG.md),维护责任(NichevLabs 联系方式)。扣分:无重大扣分,但安装说明未覆盖所有可选依赖的安装方式。

有效结果9 / 13 · 3.5/5

证据显示:输出可用性高(AgentResult 结构化),边际价值明显(多代理、RAG、guardrails),成本效益有成本跟踪功能。扣分:成本效益未提供实际基准数据,仅提及性能基准文档。

证据核验5 / 8 · 3.1/5

证据显示:README 中的声明(如测试数量、模型数量)在 CHANGELOG 和 pyproject 中有部分佐证,但未提供独立验证。扣分:事实与推断未明确分离,如“50 evaluators”等数字未在源码中直接验证。

风险与缓解建议
  • 发布者身份未验证,需谨慎对待供应链风险。
  • 依赖版本范围较宽,建议使用锁文件确保可复现性。
  • 部分安全功能(如 guardrails)依赖启发式模式,可能被绕过。
  • rollback 能力有限,工具执行副作用可能无法完全回滚。
证据充分度:低 评估于 2026年8月9日 审查版本 77fa691ad9c2 评估后仓库已有新提交,评分可能未覆盖最新改动
查看完整评分方法 →

最近版本

来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。

  1. v1.4.0 v1.4.0 — StreamEnd, Provider State & New SDK Majors
    发布说明摘录
    Streamed turns now report usage and can carry opaque provider state for verbatim replay (#182); temperature becomes optional for reasoning models; and the supported SDK ranges widen to openai 2.x/3.x and anthropic 1.x. Added - **StreamEnd: usage and provider state at the end of a native stream (#182).** Providers may yield one selectools.types.StreamEnd as the last item of stream() / astream(). Its usage is counted into agent.usage, passed to on_llm_end / on_usage, and recorded on the LLM_CALL trace …
    在 GitHub 查看 ↗
  2. v1.3.0 v1.3.0 — Streaming Contracts
    发布说明摘录
    Makes final_turn_only structured output safe to rely on across upgrades (#174): behaviors that streaming chat integrators previously had to learn by reading the source are now documented, tested public contracts — enforced on every consumption surface: astream() chunks, the stream_handler callback in run()/arun(), and the selectools.serve SSE stream. The contract tests (tests/agent/test_structured_streaming_contract.py) pin every clause, so a refactor that breaks integrators breaks CI. The streaming contract …
    在 GitHub 查看 ↗
  3. v1.2.0 v1.2.0 — Tool-Boundary Guardrails Complete & Structured Synthesis Follow-ups
    发布说明摘录
    Second 1.x minor, closing the loop on v1.1.0's guardrail and structured-output work from real tool-heavy agentic chat usage (#164–#167). All additive; the frozen 1.0 API is unchanged. Every feature went through a high-effort adversarial multi-agent review before merge — 28 verified findings fixed with red-first regression tests. Tool-results guardrails (#165 → #168) tool_args (v1.1) gated what goes INTO a tool; tool_results gates what comes OUT — external API responses, retrieved RAG chunks, oversized blobs — before it re-enters the model context: ```python config = AgentConfig( …
    在 GitHub 查看 ↗

常见问题

能否不使用 OpenAI?
可以。文档列出 Azure OpenAI、Anthropic、Gemini、Ollama 和 LiteLLMProvider;FallbackProvider 可按优先级切换提供方。
如何控制调用成本或失控循环?
AgentConfig 提供 max_total_tokens、max_cost_usd 和迭代上限;RouterProvider 可按复杂度选择模型层级,工具结果还可启用压缩。
它会执行危险工具吗?
工具可配合 ToolPolicy 的 allow/review/deny 规则、审批回调和四阶段 guardrail 使用;工具执行行为仍由应用注册的工具函数及其权限决定。
是否提供生产部署接口?
提供。selectools serve agent.yaml 支持 HTTP 与 SSE;AgentAPI 可构建含聊天、流式响应、会话 CRUD 和 bearer 认证的 Starlette ASGI 应用。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents