@agentskit/adapters

中文文档
0.19.2发布于 2026/10/26MITTypeScriptESM + CJS构建来源已验证近 30 天下载 1.4万

(原始内容存档于2012-10-12). Professor 适配器 for AgentsKit.

中文使用文档
文档目录25 节
  1. 已核实的证据
  2. 如何适应生态系统
  3. 为什么适配器
  4. 门户和多式联运
  5. 安装
  6. 快速实例
  7. 嵌入(用于RAG)
  8. 特征
  9. CLI 支持的适配器
  10. exec-text 对 exec-json : 每个协议可以返回的内容
  11. 克劳德代码
  12. 即时序列化
  13. LangChain桥:使用任何适配器作为LangChain聊天模式
  14. 连续担保
  15. 高序适配器
  16. 生态系统
  17. 测试适配器
  18. mockAdapter - 决定性对策
  19. recordingAdapter + 键 inMemorySink - 抓住真正的电话
  20. replayAdapter ——重放被捕获的固定装置
  21. 贡献者
  22. 许可证
  23. 文档
  24. 成熟性和相容性
  25. 捐款

@ agentskit/ 适应器

简介 : major-package

AgentsKit

连接到任何LLM提供者——并在它们之间互换——而不触碰你的应用代码.

npm version npm downloads bundle size license stability GitHub stars

标记 : ai • 妇女 agents • 妇女 llm • 妇女 agentskit • 妇女 openai • 妇女 anthropic • 妇女 claude • 妇女 gemini • 妇女 chatgpt • 妇女 ollama • 妇女 embeddings • 妇女 providers

已核实的证据

如何适应生态系统

@agentskit/适应器是提供者层:互换OpenAI,Anthropic,双子座,Ollama,本地模型,以及嵌入提供者而不重写您的代理.

  • 探员Kit:与本回购中的其他包一起作曲,从可互换的小零件来构建代理.
  • 书记官处: 查找已使用此图层的即时代理和模板 登记. agentskit.io。 。 。 .
  • 游戏本: 学习本层背后的生产模式 游戏本. agentskit.io。 。 。 .

文档 : 软件包指南 • 妇女 代理交接

为什么适配器

  • 供应商独立性 – 通过更改一行从 OpenAI 切换到 Anthropic 到本地 Ollama 模式; 您的钩子、 运行时间和工具保持不变
  • 目录中25个本地适配器 – Anthropic, OpenAI, 双子座, Ollama, DeepSeek, Grok, Kimi, Mistral, Cohere, College, Groq, Fireworks, OpenRouter, Hugging Face, LM Studio, vLLM, lama.cpp, LangChain, Vercel AI SDK 以及其他兼容供应商
  • 内嵌函数 – 相同的适配器模式覆盖了文本嵌入, 这样您就可以再利用提供者配置用于聊天和RAG
  • 本地单行AI —— 说 ollama({ model: 'llama3.1' }) 没有 API 密钥的全线下线代理
  • CLI 支持的代理人 —— 说 @agentskit/adapters/cli 规范文本、JSON和基于非加太语的当地LLM cLI
  • 朗彩桥 —— 说 @agentskit/adapters/langchain-bridge 将任何适配器转换为 LangChain BaseChatModel 页:1 createAgent

门户和多式联运

openaiCompatible({ model, baseUrl, path, headers, fetch }) 支持自定义 与 OpenAI 兼容的终点; apiKey 是可选的,而且信头会覆盖默认值. openRouter 别名 openrouter· ; cloudflareAiGateway 财务报告和审定财务报表 workersAi 供应 Cloudflare REST URL 没有运行时间绑定. 提供了目录 URL 变量 明确通过 env,包括: CLOUDFLARE_ACCOUNT_ID。 。 。 .

兼容OpenAI、Anthropic、双子座/Vertex和Ollama序列器读取 message.parts. 不支持的来源/模式 CapabilityUnsupportedError 与 code: CAPABILITY_UNSUPPORTED 当启用多模式输入时。 模型 没有多式联运能力,则返回文本部分和短附件标记, 省略二进制数据与数据 URL, 并记录每个请求最多一个警告 . OpenAI和Anthropic助手二进制部分也使用此文本倒置. 明确 capabilities.multiModal 优于模型名称的热力学 (GPT-4/5, o-series, vision, 双子座和克洛德3+名, 包括提供者前缀). 为能力不同的定制模型或供应商明确规定. 见 测试模式矩阵 财务报告和审定财务报表 配置指南。 。 。 . 这些都是本地的有线格式测试;现场提供者的验收仍未核实.

安装

npm install @agentskit/adapters

以下运行时间示例也需要 @agentskit/runtime。RAG 实例 需求 @agentskit/rag, (中文(简体) ), @agentskit/memory选择 vectra 端点( e)npm install @agentskit/rag @agentskit/memory vectra) (中文(简体) ).

快速实例

import { anthropic } from '@agentskit/adapters'
import { createRuntime } from '@agentskit/runtime'

// Switch provider by swapping one import
const adapter = anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4-6' })
// const adapter = openai({ apiKey: process.env.OPENAI_API_KEY, model: 'gpt-4o' })
// const adapter = ollama({ model: 'llama3.1' })

const runtime = createRuntime({ adapter })
const result = await runtime.run('Summarize the latest AI news')
console.log(result.content)

嵌入(用于RAG)

对向量嵌入使用相同的包- 有线 openaiEmbedder, (中文(简体) ), geminiEmbedder,或 ollamaEmbedder 输入 @agentskit/rag数字 :

import { openaiEmbedder } from '@agentskit/adapters'
import { createRAG } from '@agentskit/rag'
import { fileVectorMemory } from '@agentskit/memory'

const rag = createRAG({
  embed: openaiEmbedder({ apiKey: process.env.OPENAI_API_KEY! }),
  store: fileVectorMemory({ path: './vectors' }),
})

特征

  • 提供商:Anthropic,OpenAI,双子座,Ollama,DeepSeek,Grok,Kimi,Mistral,Cohere,同心,Groq,Fireworks,OpenRouter,Hugging Face,LM Studio,vLLLM,llama.cpp,LangChain,LangGraph,Vercel AI SDK,通用 ReadableStream
  • 嵌入器 : openaiEmbedder, (中文(简体) ), geminiEmbedder, (中文(简体) ), ollamaEmbedder, (中文(简体) ), deepseekEmbedder, (中文(简体) ), grokEmbedder, (中文(简体) ), kimiEmbedder, (中文(简体) ), createOpenAICompatibleEmbedder
  • 获取备份适配器运行于共享 Adapter 合同v1套套件(ADR 0001);SDK后置适配器有针对供应商的合同和复原力覆盖面
  • 自定义适配器作者通过 createAdapter()
  • 高序适配器: createRouter (费用/相关性/分类), createEnsembleAdapter (退出+合并), createFallbackAdapter (下个指令)

CLI 支持的适配器

只有节点 @agentskit/adapters/cli 子路径运行一个明确选中的 无外壳的 LLM 可执行文件 :

import { createCliAdapter, getCliProviderManifest, resolveCliManifest } from '@agentskit/adapters/cli'

const manifest = getCliProviderManifest('codex')
if (!manifest) throw new Error('provider manifest is unavailable')
const adapter = createCliAdapter(resolveCliManifest(manifest, { mode: 'review-safe' }))

一般工厂是 createCliAdapter (单位:千美元)exec-text, (中文(简体) ), createJsonCliAdapter (单位:千美元)exec-json),以及 createAcpCliAdapter (ACP v1 超过) JSON线). 内置清单包括了Codex、Claude代码(文本和JSON) 输出),Grok CLI,和OpenCode. resolveCliManifest 保持命令、 argv、 协议、 提供者 id,以及 模式明确; diagnoseCliProviderManifest 核实可用性 可选版本模式. review-safe 是默认值: 没有 shell, 自动 安装、本地登录、MCP、插件或终端工具。 使用 trusted-local 当开发商有意想要CLI本地化时 认证与环境. requiredCapabilities 检查之前 产卵,以及 onDiagnostic 接收已编辑的退出、超时、中止和 输出限制数据。 结构化输出失败关闭; 超时、 中止、 输出 限制,而非零出站则产生终端适配器出错. 流程终止 等待适配器完成,包括输入或输出失败时. restricted-environment 是一个明确的环境允许列表模式;不是 oS、文件系统、进程或网络沙盒。 使用 @agentskit/sandbox 当 a 需要真正的隔离边界.

exec-text 对 exec-json: 每个协议可以返回的内容

协议决定哪个流块可以生成一个表单 。 选一个 以你需要的东西来显示,而不是用CLI的名称:

议定书工厂弹出不详
exec-textcreateCliAdaptertext (流出), donestructuredOutput, (中文(简体) ), reasoning, (中文(简体) ), tool_call, 使用量
exec-jsoncreateJsonCliAdaptertext, (中文(简体) ), reasoning, (中文(简体) ), tool_call, (中文(简体) ), usage, (中文(简体) ), done流程(每个流程一个响应)
acpcreateAcpCliAdaptertext, (中文(简体) ), reasoning (流出), done工具调用( 已拒绝)、 MCP、 插件、 终端

validateCliProviderManifest 拒绝一份声称拥有 协议无法交付,以及 requiredCapabilities 产卵前失败 同样的原因 实践中: claude-code 财务报告和审定财务报表 codex 清单为 exec-text 并且只提供纯文本。 用于工具调用、使用或 claude 代码使用中的结构化输出 claude-code-json 换句话说.

该表在编译时执行. CliProviderManifest 工会 歧视 protocol, (中文(简体) ), capabilities 输入为 CliCapabilitiesFor<protocol>,以及 getCliProviderManifest('claude-code') 返回时 CliProviderManifestFor<'exec-text'>,因此此选项不进行打字检查 :

const manifest = getCliProviderManifest('claude-code')!
resolveCliManifest(manifest, { requiredCapabilities: { tools: true } })
//                                                    ^^^^^ not assignable: exec-text has no tools/structuredOutput

克劳德代码

有两个第一人名单 claude 可执行文件 :

  • claude-code —— 说 claude -p, (中文(简体) ), exec-text。将最后的答案流为文本.
  • claude-code-json —— 说 claude -p --output-format json, (中文(简体) ), exec-json参数 输入结果信封 text, (中文(简体) ), tool_call,以及 usage 块与 session_id, (中文(简体) ), total_cost_usd, (中文(简体) ), duration_ms,以及 num_turns 作为元数据. is_error 或无success 子类型未关闭 .
import { createJsonCliAdapter, getCliProviderManifest, resolveCliManifest } from '@agentskit/adapters/cli'

const manifest = getCliProviderManifest('claude-code-json')
if (!manifest) throw new Error('provider manifest is unavailable')
const adapter = createJsonCliAdapter(resolveCliManifest(manifest, { mode: 'trusted-local' }))

请求提出时 context.tools,工具列表和一个 { text?, toolCalls } 答复合同附于克洛德密码系统 快速通过 --append-system-prompt· ; claude-code-json 承认对象 (栅栏或赤裸地) result 字符串和发送 tool_call 块. 流言蜚语的结果不变 text。 。 。 . structured_output 从 --json-schema 同样的荣耀 工具 执行本身仍然是消费者的责任:适配器永远不会 启用 Claude Code 自己的工具, MCP, 或插件 .

即时序列化

createCliAdapter 财务报告和审定财务报表 createJsonCliAdapter 默认写入原始 AdapterRequest 作为JSON在stdin上的一行。 这个合同是正确的 目的创建的 CLI, 但代理化的 CLI 读取 stdin 是一个用户提示, 而 Claude 代码拒绝一个包含 systemPrompt 作为明显的 即时注射尝试。 因此,第一当事方名单使用两个 导出序列器 :

  • serializeCliPrompt (使用时间: codex)写有标签的块:

    [system]
    You are a reviewer.
    
    [user]
    review this
    
  • serializeCliMessages 加号 claudeCodeRequestArgs (使用时间: claude-code 财务报告和审定财务报表 claude-code-json) 只将对话写入 stdin( 一个单一用户) 电文是写光的),通过系统即时和工具合同 结束 --append-system-prompt校对:Soup 用户内部的相同指示, 即使标签 [system] 标记为注射尝试,而通过系统 标出请求 context.tools 回来像一个 tool_call 块.

名单可以声明 serializeRequest, (中文(简体) ), requestArgs (因请求而异) argv, 后附 args, (中文(简体) ), parseOutput,以及 parse· ; resolveCliManifest 把他们送到工厂. buildCliSystemPrompt(request) 返回时 其他带有系统即时旗的CLI的系统即时加工具合同.

使用 buildArgs(request) 仅针对在 argv 中需要提示的 CLI; 是 并且仍然使用直接无壳产卵。 设定 serializeRequest: () => '' 当提供者不消耗Stdin。 对于 JSONL或事件包装输出, parseOutput(stdout) 能够解码原始 stdout 在正常时间之前 parse(value) 调用运行. 对于为文件写最后回复的CLI, outputFile 读取文件 在进程完成后,以相同的字节限制并中止处理.

LangChain桥:使用任何适配器作为LangChain聊天模式

langchain() 财务报告和审定财务报表 langgraph() 揭发一个LangChain可诉 AdapterFactory编辑 @agentskit/adapters/langchain-bridge 子路径去 其它方式: adapterToLangChainModel(adapter) 覆盖任意 AdapterFactory (mock, Ollama,一个CLI后卫的适配器,.)作为一个真实的 BaseChatModel,这样它就可以 替换 ChatAnthropic编号 :ChatOpenAI 内 createAgent, (中文(简体) ), AgentNode,或平原 链条。 这需要 @langchain/core (可选的同伴依赖性).

import { createAgent } from 'langchain'
import { tool } from '@langchain/core/tools'
import { mockAdapter } from '@agentskit/adapters'
import { adapterToLangChainModel } from '@agentskit/adapters/langchain-bridge'

const add = tool(async ({ a, b }) => String(a + b), {
  name: 'add',
  description: 'Add two numbers',
  schema: { type: 'object', properties: { a: { type: 'number' }, b: { type: 'number' } }, required: ['a', 'b'] },
})
const model = adapterToLangChainModel(mockAdapter({ response: [/* ... */] }), { modelName: 'mock' })
const agent = createAgent({ model, tools: [add] })
  • bindTools() 转发 LangChain 工具( 结构化工具, OpenAI 格式) 定义、可运行的工具)作为 AgentsKit ToolDefinition开始 context.tools· ; tool_choice 土地在 context.metadata.toolChoice。 。 。 .
  • 系统消息成为两个 system 信息、信息和 context.systemPrompt· ; AI 信件保留 tool_calls; 保存工具消息 tool_call_id。 。 。 .
  • tool_call 块变成 AIMessage.tool_calls (args分析 从JSON), usage 块变成 usage_metadata, (中文(简体) ), reasoning 块块 : additional_kwargs.reasoning, (中文(简体) ), error 块掷出,和 .stream() 产量 AIMessageChunk编号与 tool_call_chunks。 。 。 .
  • 每个反应都是真实的 AIMessage编号 :AIMessageChunk 比如说 wrapModelCall 中间软件和 responseFormat 携手合作。 默认 profile 报告 toolCalling 并且没有本地人 structuredOutput这样 createAgent 使用工具策略,任何工具调用适配器都可以使用 满足。 过 profile: { structuredOutput: true } 仅用于适配器 尊重JSON提供方的计划.

连续担保

  • 流终止一次 done 或者说 error; 终端错误带有 Error 内 metadata.error。 。 。 .
  • 获取重试使用 @agentskit/net 备份和 Retry-After 解析 fetchWithRetry 和适配器 retry 选项保留3尝试默认值. readSSELines 仍为已贬值的相容性包装; 新解析器应消耗 parseSSE 活动直接.
  • SSE 事件数据保存白空并加入多个 data: 带有新行的字段。 NDJSON读取器冲出最后的UTF-8块并接受最后一个没有新行的记录.
  • 在其本土完成标记前关闭的提供商溪被作为短道速滑处理,不成功.
  • abort(reason) 向活动获取读取器和 SDK 请求并用相同的错误语义终止 .
  • 本地工具历史保存调用/结果关联 。 必要时将并行工具结果编码为单一提供者转弯.
  • 当协议支持时, 身份证书会留在提供者头; 双子座 API 密钥永远不会被放置在请求的 URL 中.
  • vercelAI 消耗 Vercel AI SDK UI 消息流 v1 协议,包括其所需的响应头和 [DONE] 标记.

高序适配器

import { createRouter, anthropic, openai } from '@agentskit/adapters'

// Auto-pick cheapest capable candidate per request.
const router = createRouter({
  candidates: [
    { id: 'haiku', adapter: anthropic({ model: 'claude-haiku-4-5' }), cost: 0.25 },
    { id: 'sonnet', adapter: anthropic({ model: 'claude-sonnet-4-6' }), cost: 3 },
    { id: 'gpt-mini', adapter: openai({ model: 'gpt-4o-mini' }), cost: 0.15 },
  ],
})

见 适配器路由器, (中文(简体) ), 组合,以及 后退链。 。 。 .

生态系统

软件包作用
@ agentskit/ 核心Adapter, (中文(简体) ), EmbedFn,类型
@ agentskit/ 运行时间无头 createRuntime
@ agentskit/ 擦伤createRAG + 嵌入器
@ agentskit/ 记忆矢量 + 聊天内存后端

测试适配器

三个内置的公用设备 让你测试特工 却没碰到真正的LLM.

mockAdapter - 决定性对策

import { mockAdapter } from '@agentskit/adapters'

const adapter = mockAdapter({
  response: [
    { type: 'text', content: 'Hello!' },
    { type: 'done' },
  ],
})

传递一个函数来使响应请求意识,或者通过数组以返回每个调用上的不同块(顺序模式). 使用可选 history 数组,可以捕捉每个断言请求.

recordingAdapter + 键 inMemorySink - 抓住真正的电话

import { recordingAdapter, inMemorySink, anthropic } from '@agentskit/adapters'

const sink = inMemorySink()
const adapter = recordingAdapter(
  anthropic({ apiKey: process.env.ANTHROPIC_API_KEY!, model: 'claude-sonnet-4-6' }),
  sink,
)
// Runs the real LLM and captures every chunk to sink.fixture

replayAdapter ——重放被捕获的固定装置

import { replayAdapter } from '@agentskit/adapters'
import fixture from './fixture.json'

const adapter = replayAdapter(fixture) // no network calls

典型的工作流程:记录一次 dev → 承诺 JSON 固定 → 在 CI 中重放.

贡献者

AgentsKit contributors

许可证

麻省理工学院——见 自由主义。 。 。 .

文档

完整文档 • 妇女 GitHub 图像

成熟性和相容性

  • 稳定性: β 语录 看到了吗 文件/服务.md
  • 为了将来的冻结,执行被硬化了,但促销仍然需要90天的β窗口,两条被放出的小线,被接受的包裹RFC,以及ADR 0024所要求的寄存证据.
  • 节点.js 20+ 财务报告和审定财务报表 类型脚本 严格模式
  • 发表于 @agentskit/adapters

捐款

见 捐款额 单曲 自由主义。 。 。 .

版本与发布记录

@agentskit/adapters 共发布 44 个版本,首次发布于 2026/04/06;过去 12 个月发布了 44 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.19.2latest2026/10/2611 天前
0.19.12026/10/2412 天前
0.19.02026/10/1026 天前
0.18.12026/10/031 个月前
0.18.02026/10/031 个月前
0.17.42026/09/291 个月前

关于 @agentskit/adapters 的常见问题

@agentskit/adapters 是什么?

(原始内容存档于2012-10-12). Professor 适配器 for AgentsKit.

如何安装 @agentskit/adapters?

在项目目录运行 npm install @agentskit/adapters,或使用 pnpm add / yarn add / bun add。

@agentskit/adapters 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@agentskit/adapters 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@agentskit/adapters 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.19。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@agentskit/adapters 可以商用吗?

@agentskit/adapters 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@agentskit/adapters 的下载量有多少?

根据 npm 官方下载统计,@agentskit/adapters 在 2026/10/05 – 2026/11/03 这 30 天内被下载 13,991 次,日均约 466 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@agentskit/adapters 还在维护吗?

最新版本 0.19.2 发布于 2026/10/26(11 天前);至今共发布 44 个版本,其中过去 12 个月发布了 44 个;首次发布于 2026/04/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。