Selectools
用纯 Python 构建、编排并部署带安全控制的多智能体应用。
按维度查看评分与理由
证据显示:工具执行有审批机制(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 能力有限,工具执行副作用可能无法完全回滚。
这个 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 有哪些优点和局限?
- 以 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?
运行 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 与同类方案有什么区别?
仓库将其与 LangChain/LangGraph 对比:Selectools 以 AgentGraph.chain(a, b, c).run(prompt) 和 @step 加 | 表达图与流水线,并内置评测与 trace;LangChain/LangGraph 的对应示例使用 StateGraph/compile() 和 LCEL Runnable。是否迁移仍取决于现有 LangChain 依赖与所需集成。
常见问题
能否不使用 OpenAI?
如何控制调用成本或失控循环?
它会执行危险工具吗?
是否提供生产部署接口?
selectools serve agent.yaml 支持 HTTP 与 SSE;AgentAPI 可构建含聊天、流式响应、会话 CRUD 和 bearer 认证的 Starlette ASGI 应用。