展示 HN: Ratel,为代理提供无限的工具和技能,而不增加上下文负担
您的 AI 代理支付了它从未使用的工具费用。Ratel 解决了这个问题。 文档 • 技能 • Discord 介绍 AI 代理的上下文工程层。仅选择与每次对话相关的工具和技能,恢复因工具过载而失去的准确性,并降低每次调用的费用。无需向量数据库,无需基础设施。 成本:系统提示中的每个工具模式、每个技能和不断增长的指令列表都是您在每次调用中支付的令牌。将所有内容提前发送,您就要为它们全部支付,每次对话都是如此。 准确性:随着上下文的增长,模型会变得更糟。如果一个回合用上了不需要的工具、技能和指令,模型就会选择错误的选项而偏离任务。Ratel 解决了这两个问题:它将您的工具和技能索引到一个目录中,代理根据需求逐渐披露,寻找每次对话所需的匹配能力,而不是一开始就加载所有内容。在本地、开源和前沿模型设置中,Ratel 减少了令牌使用,并恢复了因工具过载而失去的准确性,无需向量数据库。完整结果:benchmark.ratel.sh 快速入门指南:快速入门 · TypeScript SDK · Python SDK 示例:Vercel AI SDK · Pydantic AI TypeScript 首先安装 SDK:pnpm add @ratel-ai/sdk 然后创建并使用您的目录: import { readFile } from 'node:fs/promises'; import { SkillCatalog, ToolCatalog, getSkillContentTool, invokeToolTool, searchCapabilitiesTool } from '@ratel-ai/sdk'; const catalog = new ToolCatalog(); catalog.register({ id: 'read_file', name: 'read_file', description: '从本地磁盘读取文件。', inputSchema: { type: 'object', properties: { path: { type: 'string' } } }, outputSchema: { type: 'object', properties: { contents: { type: 'string' } } }, execute: async ({ path }) => ({ contents: await readFile(path, 'utf8') }) }); const skills = new SkillCatalog(); skills.register({ id: 'inspect-local-file', name: 'inspect-local-file', description: '在回答有关该文件的问题之前,检查本地文件。', tools: ['read_file'], body: '读取请求的文件,然后将您的答案建立在其内容上。' }); // 在您的代理框架中使用以下工具 const search = searchCapabilitiesTool(catalog, skills); const invoke = invokeToolTool(catalog); const loadSkill = getSkillContentTool(skills); Python 首先安装 SDK:pip install ratel-ai 然后创建并使用您的目录: from ratel_ai import ( ExecutableTool, Skill, SkillCatalog, ToolCatalog, get_skill_content_tool, invoke_tool_tool, search_capabilities_tool, ) catalog = ToolCatalog() catalog.register( ExecutableTool( id='read_file', name='read_file', description='从本地磁盘读取文件。', input_schema={ 'properties': { 'path': { 'type': 'string' }}}, execute=lambda args: { 'contents': open(args['path']).read() }, )) skills = SkillCatalog() skills.register( Skill( id='inspect-local-file', name='inspect-local-file', description='在回答有关该文件的问题之前,检查本地文件。', tools=['read_file'], body='读取请求的文件,然后将您的答案建立在其内容上。', )) # 在您的代理框架中使用以下工具 search = search_capabilities_tool(catalog, skills) invoke = invoke_tool_tool(catalog) load_skill = get_skill_content_tool(skills) 工作原理 当您的代理需要行动时,它会调用 search_capabilities。Ratel 会搜索单独的工具和技能索引,并返回来自每个索引的聚焦结果。可通过 ID 调用工具;技能指令在代理加载相关剧本时才进入上下文,并通过 get_skill_content 加载。索引默认使用 BM25 算法,该算法与大多数搜索引擎背后的相同,应用于具有模式意识的工具元数据,以及技能名称、描述和标签。检索快速且确定。语义和混合排名根据目录或每次调用进行选择;SDK 调用者注册(嵌入)并异步搜索密集索引,使用过程内模型或与 OpenAI 兼容的嵌入端点。 完整文档 相关项目 相关开源项目扩展并验证该库: 项目 仓库 是什么 ratel-local ratel-ai/ratel-mcp 针对您的编码代理的本地发行版:Ratel 在您的 MCP 设置之前。 ratel-bench ratel-ai/ratel-bench benchmark.ratel.sh 背后的基准工具。 仓库布局 src/ ├── core/ # ratel-ai-core — Rust 检索引擎 ├── sdk/ts/ # @ratel-ai/sdk — TypeScript SDK (NAPI-bound) ├── sdk/python/ # ratel-ai — Python SDK (PyO3-bound) └── telemetry/ # OTel 约定 + 辅助包 protocol/ # catalog-source wire contract examples/ # 端到端 SDK 示例 docs/ ├── adr/ # 架构决策记录 └── assets/ # 图像和其他静态资产 构建和测试 前提条件:Rust stable, Node 24+, pnpm 10.28+. Python SDK:Python 3.9+ 和 uv . cargo build --workspace && cargo test --workspace # Rust pnpm install && pnpm -r build && pnpm -r test
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡