Selectools
用纯 Python 构建、编排并部署带安全控制的多智能体应用。
- Star 数
- ★ 11
- 最近更新
- 3 天前
- License
- Apache-2.0
- 主语言
- Python
- FA 评分
- 65/100 · 存在缺口
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台OpenAI API · Claude API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- Python 后端团队要把 OpenAI 或 Anthropic 的工具调用助手接入现有服务,并需要 trace、重试、预算限制和流式输出。
- 不适合
- 仍在使用 Python 3.9 且无法升级环境的团队
- 希望开箱即用、不愿配置可选依赖与外部服务的用户
- 源码审查
- 65/100 · 存在缺口
这个 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 认证。
- Python 后端团队要把 OpenAI 或 Anthropic 的工具调用助手接入现有服务,并需要 trace、重试、预算限制和流式输出。
- 需要将规划、写作和审核分别交给多个智能体,并以 AgentGraph.chain() 或显式有向图编排执行顺序的应用团队。
- 拥有本地文档库的内部知识助手,想用 RAGAgent、向量存储、BM25 与向量融合检索回答问题。
- 处理发邮件、创建资源或删除类工具的业务系统,需要 ToolPolicy、审批回调、guardrail 和 AuditLogger 记录执行边界。
- 需要将 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?
查看各维度的扣分理由
证据显示:工具执行有审批机制(ToolConfig.require_approval),shell 工具使用 shell=False 且 shlex 解析,SSRF 防护覆盖浏览器工具和 webhook,有审计日志和 PII 处理选项。扣分:rollback 仅提及会话存储和检查点,未明确工具执行的回滚机制;发布者身份未验证,但未因此扣分。
证据显示:README 和 CHANGELOG 描述一致,测试文件存在且使用 FakeProvider,CI 配置了多 Python 版本测试。扣分:未提供依赖可用性证明(如锁文件),失败消息仅部分提及(如 GuardrailError 带 trace)。
证据显示:README 明确目标用户为开发者,提供多种构建方式(单代理、图、部署),支持多种 provider,有环境适配(Python 3.10+,可选依赖)。扣分:能力边界在 README 中未完全明确(如 beta 模块列表),触发精度(如 guardrail 触发条件)在文档中未详细说明。
证据显示:README 结构清晰,有安装说明(pip install),命名稳定(@stable 标记),有示例和 FAQ(examples 目录),已知限制(如 beta 模块),Apache-2.0 许可证,版本变更日志(CHANGELOG.md),维护责任(NichevLabs 联系方式)。扣分:无重大扣分,但安装说明未覆盖所有可选依赖的安装方式。
证据显示:输出可用性高(AgentResult 结构化),边际价值明显(多代理、RAG、guardrails),成本效益有成本跟踪功能。扣分:成本效益未提供实际基准数据,仅提及性能基准文档。
证据显示:README 中的声明(如测试数量、模型数量)在 CHANGELOG 和 pyproject 中有部分佐证,但未提供独立验证。扣分:事实与推断未明确分离,如“50 evaluators”等数字未在源码中直接验证。
- 发布者身份未验证,需谨慎对待供应链风险。
- 依赖版本范围较宽,建议使用锁文件确保可复现性。
- 部分安全功能(如 guardrails)依赖启发式模式,可能被绕过。
- rollback 能力有限,工具执行副作用可能无法完全回滚。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
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 查看 ↗ -
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 查看 ↗ -
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?
如何控制调用成本或失控循环?
它会执行危险工具吗?
是否提供生产部署接口?
selectools serve agent.yaml 支持 HTTP 与 SSE;AgentAPI 可构建含聊天、流式响应、会话 CRUD 和 bearer 认证的 Starlette ASGI 应用。