claude agent sdk 使用本地模型

模型与算力

讲清 Claude Agent SDK 怎么把请求转到本地自托管模型上:从兼容层选型、base_url 指向、上下文与工具调用适配,到跑通后的验收顺序。

你可能已经在本地把某个开源模型跑起来了,Ollama 或 vLLM 的接口都能通,但一接到 Claude Agent SDK 上就各种不通:要么连不上,要么工具调用直接哑掉,要么长任务跑到一半上下文炸了。这篇不讲该不该自建,只讲怎么把这个 SDK 接到你自己的推理服务上,以及接完之后按什么顺序验一遍才算真的能用。

你可能已经在本地把某个开源模型跑起来了,Ollama 或 vLLM 的接口都能通,但一接到 Claude Agent SDK 上就各种不通:要么连不上,要么工具调用直接哑掉,要么长任务跑到一半上下文炸了。这篇不讲该不该自建,只讲怎么把这个 SDK 接到你自己的推理服务上,以及接完之后按什么顺序验一遍才算真的能用。

先摆正一个预期:Agent SDK 本身不关心你的模型跑在哪,它只关心对面那个 HTTP 端点回的东西对不对。所以绝大多数「接不上」的问题,根子在协议对不上或者字段丢在中间层,而不在模型本身。下面按排查顺序走。

先想清楚中间隔了哪一层

Agent SDK 走的是 Anthropic 风格的 Messages 接口,而本地推理框架多数只原生提供 OpenAI 兼容接口。两边对不上时,中间要么加一层转换网关,要么直接选本身就带 Anthropic 兼容端点的推理服务。判断顺序是先确认你的推理框架支持哪种协议,再决定是换框架、加转换层,还是只在 SDK 侧改 base_url 和鉴权头。

  • 先查你的推理框架文档里有没有 Anthropic 兼容端点,有的话最省事,直接改 base_url;
  • 没有的话看它是否有社区维护的转换插件,能用就别自己写;
  • 两种情况都不满足,才考虑在前端加一层自建网关,把 Messages 请求翻译成 OpenAI 格式再转发;
  • 如果只有单轮问答、不用工具调用和流式,那根本不必上 Agent SDK,直接用普通客户端更省事。

配置怎么落:端点和密钥两件事

配置层面其实只有两件事:base_url 指向哪里,鉴权头怎么写。但这两件事最容易配错,而且错的方式很隐蔽——不会直接报错,而是表现成「一部分请求通、一部分超时」。所以改完先别急着跑 Agent 流程,用一条最小请求确认返回结构对得上,再去接工具。

base_url
直接指向你本地服务的地址,不要把官方域名和本地地址混着配
鉴权头
按你本地服务实际要求来;本地常常不校验 key,但 SDK 通常要求一个非空值,随便填个占位串,不要留空
模型名
填你本地服务里真实注册的那个标识,填官方模型别名一般会直接返回未找到模型
代理开关
如果你本机原本配了系统级代理,记得把本地地址加进不走代理的名单,否则请求会被绕出去
  1. 最小连通验证只发一条不含工具、不含历史的普通对话请求,确认能拿到结构完整的回复。这一步能过,说明协议和鉴权没问题。
  2. 流式验证再开流式模式发一次同样的请求,看事件是否能正常分块返回。流式挂了说明转换层没做事件透传。
  3. 错误码验证故意把一个模型名改成不存在的,看返回的错误结构是否规范。错误结构不规范会让 SDK 后续重试逻辑乱掉。

真正卡人的是上下文和工具调用

到这一步你大概能连上了,但 Agent 一跑长任务就出问题。原因是 Agent 的多轮循环会不断把历史堆回去,而本地模型的可用上下文往往比你预期短。跑长任务前先估算每轮增长的 token 量,必要时在 SDK 侧做历史裁剪,比如只保留最近若干轮加一条摘要。

工具调用是最大的分水岭。参数格式、并行调用、调用失败后的重试行为,各家本地模型差异很大。先拿一个只有单个工具的最小例子验证,通了再往上加。模型自身能力不够时会表现为「工具参数编造」或「反复调同一个工具」,这通常不是 SDK 的问题,而是模型与提示词的问题,先换提示词再考虑换模型。

现象优先怀疑下一步动作
请求直接超时地址或代理配置检查 base_url 和代理绕过名单
回复结构缺字段转换层字段丢失对照 /stacks/frameworks 的支持范围
工具调用返回空模型不支持或提示词太弱换单工具最小例子单独测
长任务中途断上下文超长或超时设置做历史裁剪,调大超时阈值
并发一高就排队本地服务并发上限按 /models/deploy 的算例重设并发数

跑通之后按这个顺序验收

很多人的验收方式就是「随便问一句能回就算好了」,这在本地模型上完全不成立。要按从简单到复杂的顺序逐步加压,每一步都记录延迟和失败率,差值大就说明转换层有问题。失败率高的地方优先怀疑上下文长度和超时设置,而不是模型质量。

  1. 单轮无工具对话确认基础链路和返回结构正常,这是所有后续步骤的基线。
  2. 单工具调用只挂一个工具,验证参数能被正确解析并且调用结果能被模型消化。
  3. 两到三个工具的串行调用验证多轮工具链是否稳定,观察每轮之间上下文的增长速度。
  4. 长任务多轮循环跑一个需要多轮往复的任务,看上下文是否稳定、是否出现中途截断。

延迟对比上,先用 /tools/speed-test 量出你本地服务的基线延迟,再对比 SDK 链路的整体延迟,两者差值大就说明中间层拖了后腿。显存与并发怎么配才不炸,去 /models/deploy 按你的模型和量化档位算一遍再定并发数,别照搬官方服务的并发习惯。

下一步把你本地推理框架的协议支持情况、常用中转与自托管方案放在一起对照,能省掉大量试错。先到 /stacks/frameworks 确认你的框架在这份清单里的位置,再决定改哪儿。

常见问题

本地模型没有 Anthropic 风格的接口,还能用这个 SDK 吗?

可以,但要在中间加一层协议转换,把 Anthropic 风格的请求翻译成你本地服务的 OpenAI 兼容接口。已有现成的转换网关可挑,也可以自己写一层薄代理。要注意工具调用和流式这两块最容易翻译不全,先拿最小例子验证再上业务。

接上之后工具调用一直失败,是 SDK 的问题吗?

多数不是。先看本地模型本身有没有稳定的 function calling 能力,很多小参数模型这块很弱。再看提示词里工具描述是否够明确、参数 schema 是否过于复杂。排查顺序是:换一个最简单的单工具例子试,能通就说明是复杂度和模型能力问题。

本地服务要不要开鉴权?SDK 那边怎么配?

内网自用可以不开,但 SDK 一般要求提供一个非空的 key 值,随便填个占位串就行。如果服务暴露在局域网之外,务必加上鉴权和访问控制,否则等于把推理资源对外开放。配置完先用一条最小请求确认能返回正常结构。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。