
使用 ai-sdk/gmicloud 在 AI SDK 中接入 GMI Cloud 开源权重模型推理【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/aiai-sdk/gmicloud是 AI SDKTypeScript AI Toolkit生态中的 GMI Cloud 官方接入包它让开发者通过 GMI Cloud 的 GPU 推理平台调用 DeepSeek、Qwen、Kimi、GLM、MiniMax 等开源权重模型底层走 OpenAI 兼容的 Chat Completions 协议。本文从该包的 CHANGELOG 版本演进出发结合包内源码、测试与文档完整讲解安装配置、模型调用、底层实现原理与 GMI 特有的错误诊断解包机制读完即可在自己的 TypeScript / Next.js 项目中直接接入 GMI Cloud。版本演进脉络CHANGELOG 里的关键信号阅读 packages/gmicloud/CHANGELOG.md 可以得到两个明确信息1. 包的诞生3.0.0 主版本。3.0.0 是唯一带 Major Changes 的版本其变更记录明确写着74556f7: feat(gmicloud): add GMI Cloud provider with OpenAI-compatible chat completions and unwrapped error diagnostics这句话概括了本包的全部技术主题新增 GMI Cloud Provider、走 OpenAI 兼容的 Chat Completions 协议、并对后端错误诊断做了解包处理。后续所有能力都围绕这三件事展开。2. 3.0.1 到 3.0.18 全部是依赖升级的 Patch。当前最新版本为 3.0.18此区间内没有任何 API 或行为变化仅滚动升级三个底层依赖包ai-sdk/provider从 4.0.10 一路升至 4.0.13ai-sdk/openai-compatible从 3.0.30 升至 3.0.47ai-sdk/provider-utils从 5.0.27 升至 5.0.39这从侧面印证本包是一个轻量适配层自身的公共 API 自 3.0.0 发布以来保持稳定你可以放心升级 Patch 版本获得底层修复而无需改动业务代码。这些依赖声明同样可以在 packages/gmicloud/package.json 的dependencies中看到。安装与 Provider 实例配置安装GMI Cloud provider 位于ai-sdk/gmicloud模块中安装命令npm i ai-sdk/gmicloud仓库使用 pnpm workspace 管理包内脚本见 packages/gmicloud/package.json提供test:node/test:edge双环境测试、buildtsup 打包与type-check等能力。包本身sideEffects: false支持 Tree Shakingengines要求 Node.js 22peer 依赖zod^3.25.76 || ^4.1.8。默认 Provider 实例包从入口 packages/gmicloud/src/index.ts 导出默认实例gmicloud与工厂函数createGmicloud。直接使用默认实例即可import { gmicloud } from ai-sdk/gmicloud;默认实例的 API Key 从环境变量GMI_CLOUD_APIKEY读取这与 GMI 官方 SDK 包的环境变量命名保持一致该行为由 gmicloud-provider.ts 中的loadApiKey实现读取失败时会给出明确的 GMI Cloud API key 描述错误。自定义 Provider 实例需要自定义配置时使用createGmicloud工厂函数import { createGmicloud } from ai-sdk/gmicloud; const gmicloud createGmicloud({ apiKey: process.env.GMI_CLOUD_APIKEY ?? , });createGmicloud接受的可选配置项如下与官方文档 content/providers/01-ai-sdk-providers/100-gmicloud.mdx 及源码 gmicloud-provider.ts 一致配置项类型默认值说明apiKeystring环境变量GMI_CLOUD_APIKEY通过Authorization: Bearer key头发送baseURLstringhttps://api.gmi-serving.com/v1API 请求的 URL 前缀可用于代理或自建网关headersRecordstring, string无追加到每次请求的自定义请求头fetchFetchFunction全局 fetch自定义 fetch 实现可拦截请求或用于测试一个值得注意的细节baseURL在工厂内部经过withoutTrailingSlash处理gmicloud-provider.ts末尾多余的斜杠会被去掉避免拼接 URL 时出现双斜杠。请求头则通过withUserAgentSuffix自动附加ai-sdk/gmicloud/版本号的 User-Agent 后缀便于 GMI 服务端识别 SDK 版本。语言模型调用OpenAI 兼容 Chat Completions基础文本生成GMI Cloud 通过 Chat Completions 接口提供文本生成能力直接配合ai包的generateText使用import { gmicloud } from ai-sdk/gmicloud; import { generateText } from ai; const { text } await generateText({ model: gmicloud(deepseek-ai/DeepSeek-V4-Flash-0731), prompt: What is the capital of France?, });模型 ID 与模型目录GMI Cloud 提供持续演进的开源权重模型目录因此模型 ID 被类型化为string不会写死枚举。从 gmicloud-chat-options.ts 的源码注释可以看到完整目录可通过GET https://api.gmi-serving.com/v1/models获取当前源码中示例收录的模型包括deepseek-ai/DeepSeek-V4-Flash-0731Qwen/Qwen3.8-Maxmoonshotai/kimi-k3zai-org/GLM-5.2-FP8MiniMaxAI/MiniMax-M3类型定义中(string {})的存在意味着你可以在编译期放心传入目录中出现的任何新模型 ID无需等待包发版。不支持的能力Embedding 与图像模型GMI Cloud 当前只提供文本生成。调用provider.embeddingModel(...)或provider.imageModel(...)会直接抛出NoSuchModelError源码见 gmicloud-provider.ts提示对应modelType不可用。集成时请避免在代码里对这些能力做分支直接只用chat/languageModel路径即可。Provider 的完整调用面从 gmicloud-provider.ts 的接口定义可以看到GmicloudProvider遵循 AI SDK 的ProviderV4规范支持三种等价调用方式gmicloud(deepseek-ai/DeepSeek-V4-Flash-0731); // 直接调用 gmicloud.languageModel(deepseek-ai/DeepSeek-V4-Flash-0731); gmicloud.chat(deepseek-ai/DeepSeek-V4-Flash-0731);三者都会创建同一个GmicloudChatLanguageModel实例其中provider标识为gmicloud.chat。底层实现复用 OpenAI 兼容适配层GMI Cloud 的 API 与 OpenAI Chat Completions 高度兼容因此本包没有重复实现协议解析而是直接复用ai-sdk/openai-compatible包的能力。gmicloud-chat-language-model.ts 展示了核心继承关系export class GmicloudChatLanguageModel extends OpenAICompatibleChatLanguageModel implements LanguageModelV4从源码注释看唯一的自定义点就是错误结构error structure——GMI 的边缘网关会把后端引擎的诊断信息嵌套在error.details里而 OpenAI 兼容层的默认错误处理会丢弃这部分信息所以本包必须重写它。创建模型时gmicloud-provider.ts向兼容层传入的配置包括provider: gmicloud.chat模型标识url: ({ path }) baseURL path按 baseURL 拼接请求路径headers: getHeadersBearer 鉴权 自定义头 User-AgenterrorStructure: gmicloudErrorStructureGMI 专属错误解析结构includeUsage: true请求中携带 usage 统计另外该类还实现了WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE两个静态方法说明模型可以被序列化进 AI SDK 的 workflow 编排系统中如持久化、跨进程传输集成复杂工作流时无需额外处理。错误诊断解包机制把真实报错从 details 里挖出来这是 3.0.0 变更记录中 unwrapped error diagnostics 的落点也是本包最具价值的设计。问题背景GMI Cloud 的边缘网关在请求被后端引擎拒绝时error.message只返回一句通用横幅例如Backend request failed with status 400而真正的原因如参数校验失败被嵌套在error.details字段的 JSON 字符串中。如果不做处理开发者拿到的错误信息毫无排查价值。实现原理错误解析结构定义在 gmicloud-error.tsSchema 校验L5-L13用 zod 定义gmicloudErrorDataSchema声明error.message为必填字符串error.details为可选字符串解包逻辑L17-L31unwrapDetailsMessage先做空值判断再通过secureJsonParseprovider-utils 提供的安全 JSON 解析尝试解析details从中提取内层error.message兜底策略只有当内层 message 是合法 JSON、且为非空字符串时才替换外层横幅否则回退到外层的error.message暴露结果最终AI_APICallError.message携带的是引擎的真实原因。实际效果经过解包后错误信息从Backend request failed with status 400变为可直接定位问题的The request is invalid: Invalid max_tokens value, the valid range of max_tokens is [1, 393216]. Please check the request body, required fields, and request format.这一行为在 gmicloud-error.test.ts 中通过 7 个用例覆盖测试数据均为 2026 年 8 月从api.gmi-serving.com/v1/chat/completions逐字捕获的真实响应体max_tokens 越界解包出max_tokens合法范围[1, 393216]的提示思考模式 tool_choice 冲突解包出Thinking mode does not support this tool_choice图片输入不被支持解包出messages[0]: unknown variant image_url, expected text再次印证该平台仅支持文本消息details 缺失回退到外层 bannerdetails 不是合法 JSON如 nginx 返回的 HTML回退到外层 bannerdetails 无内层 message回退到外层 banner纯文本 404 响应schema 校验失败交回上层按状态码处理不会误解析。这套解析 → 解包 → 兜底的阶梯式设计保证了任何异常形态的错误响应都不会让解析器本身崩溃同时把最可能有用的信息优先呈现给开发者。测试与验证双重环境覆盖包的测试脚本同时运行 Node 与 Edge 两套环境test:node/test:edge分别使用 vitest.node.config.js 与 vitest.edge.config.js。gmicloud-provider.test.ts 对工厂函数做了四组断言直接印证了上文所述行为默认端点与默认 Key 环境变量未传参数时URL 拼接为https://api.gmi-serving.com/v1/chat/completionsloadApiKey以GMI_CLOUD_APIKEY为环境变量名被调用请求头包含Bearer mock-api-key与ai-sdk/gmicloud/0.0.0-testUser-Agent错误结构与 usageprovider.chat(...)创建的模型携带gmicloudErrorStructure且includeUsage为true自定义 baseURL传入https://example.com/gmi后请求 URL 变为https://example.com/gmi/chat/completions不支持的能力embeddingModel/imageModel均抛出NoSuchModelError。你可以在仓库中运行pnpm --filter ai-sdk/gmicloud test复现以上全部验证。总结与使用建议结合 CHANGELOG 与源码使用ai-sdk/gmicloud时有几点值得记住包很薄依赖很稳3.0.0 之后全部为依赖升级 Patch公共 API 稳定可以放心跟随升级模型 ID 是字符串以GET /v1/models的目录为准新模型无需升级 SDK 即可接入只用文本生成Embedding、图像模型在当前版本会直接抛错不要设计相关分支错误信息优先看解包后的 messageGMI 的真实错误原因已经替你从details中挖出排障时直接读AI_APICallError.message即可代理与测试友好baseURL、headers、fetch三个配置项足以应对自建网关、附加鉴权与请求拦截/测试场景。该包的官方使用文档位于仓库 content/providers/01-ai-sdk-providers/100-gmicloud.mdx包发布时prepack脚本会将其同步进docs/目录随包分发见 packages/gmicloud/package.json 的prepack配置感兴趣可以对照阅读。【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考