恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

自定义提供商指南:用 AnyLanguageModel 协议接入你自己的 AI 服务

  • 首页
  • 资讯中心
  • /
  • 自定义提供商指南:用 AnyLanguageModel 协议接入你自己的 AI 服务

相关资讯

打开vs2019,视图上找不到unity资源管理器...如何解决? 2026/8/18 14:59:09
APNG4Android Glide 插件进阶:DecoderOption 开关与 Jetpack Compose 支持 2026/8/18 14:59:09
几十G测试数据难处理?试试Visual ADP一键搞定 2026/8/18 14:54:09

最新资讯

shopify_theme 上传命令详解:本地主题一键同步到 Shopify 店铺的 5 个技巧
Nabla互操作实战:Vulkan与CUDA、OptiX内存共享的完整指南
车道线检测 检测图像中的直线 建立车道线检测
使用OpenCV和Dlib进行人脸特征提取 基于人工智能的课堂人脸考勤系统 人脸考勤系统 使用深度学习模型进行活体检测和专注度检测 使用Qt Designer设计界面
供电成为GPU瓶颈
不装软件就能改矢量图?SVG-Edit 浏览器 SVG 编辑器上手避坑指南

今日推荐

数据缺失处理:从MCAR、MAR到MNAR的机制解析与多重插补实践
MAGS-SLAM:多智能体协同3D高斯泼溅SLAM系统解析
LLM智能体记忆管理:基于关键词门控的混合激活机制CAMeR详解

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

自定义提供商指南:用 AnyLanguageModel 协议接入你自己的 AI 服务

发布时间:2026/8/18 14:59:09
自定义提供商指南:用 AnyLanguageModel 协议接入你自己的 AI 服务 自定义提供商指南用 AnyLanguageModel 协议接入你自己的 AI 服务【免费下载链接】AnyLanguageModelAn API-compatible, drop-in replacement for Apples Foundation Models framework with support for custom language model providers.项目地址: https://gitcode.com/gh_mirrors/an/AnyLanguageModelAnyLanguageModel 是一个 API 兼容的 Swift 框架可以无缝替代 Apple 的 Foundation Models 框架让你通过同一个LanguageModel协议接入自定义 AI 服务提供商。无论你想接入自建的大模型网关、企业内部 AI 平台还是某个冷门的模型服务只要实现一个协议就能立刻获得会话管理、工具调用、流式输出等全套能力。这篇自定义提供商指南将带你用最简单的方式完成接入。为什么你需要自定义 AI 服务提供商市面上的 AI 服务五花八门有的厂商提供专有 API有的公司内部搭建了统一的大模型网关还有些开源项目需要自定义协议对接。AnyLanguageModel 内置了 OpenAI、Anthropic、Gemini、Ollama、MLX 等主流提供商但总有一些需求是内置能力覆盖不到的。这时候LanguageModel协议就是为你准备的扩展点——你只需要写一份适配代码就能让任何 AI 服务融入 AnyLanguageModel 的统一生态。认识 LanguageModel 协议接入自定义 AI 服务的核心自定义提供商的关键就是实现LanguageModel协议。它定义了任何一个语言模型都必须具备的能力协议成员作用UnavailableReason声明模型不可用时的原因类型availability报告模型当前是否可用prewarm请求前的预热准备有默认实现respond同步生成一次完整响应streamResponse以流式方式逐块返回响应logFeedbackAttachment记录用户反馈有默认实现好消息是协议为大部分方法提供了默认实现你真正需要动手实现的只有respond和streamResponse两个方法工作量比想象中小得多。快速接入自定义 AI 服务4 步完整教程下面我们用一个极简的自定义提供商为例演示接入全流程。为了直观这里直接参考了项目测试中使用的MockLanguageModel的写法。第 1 步声明模型类型与不可用原因struct MyCustomProvider: LanguageModel { enum UnavailableReason: Hashable, Sendable { case custom(String) } var availability: AvailabilityUnavailableReason { .available } // ... }如果你的服务永远可用也可以像内置的OpenAILanguageModel一样把UnavailableReason设为Never此时协议会自动提供默认的availability连这段代码都可以省略。第 2 步实现 respond 方法func respondContent( within session: LanguageModelSession, to prompt: Prompt, generating type: Content.Type, includeSchemaInPrompt: Bool, options: GenerationOptions ) async throws - LanguageModelSession.ResponseContent where Content: Generable { // 调用你的 AI 服务 API把 prompt 发过去 let text try await myService.generate(prompt.description) // 返回统一格式的响应 return LanguageModelSession.Response( content: text as! Content, rawContent: GeneratedContent(text), transcriptEntries: [] ) }如果你希望支持生成结构化数据比如要求模型输出一个符合 Swift 类型的 JSON可以参考内置的OpenAILanguageModel的做法用type.generationSchema拿到 JSON Schema附加到请求里再用GeneratedContent(json:)解析返回结果。第 3 步实现流式输出func streamResponseContent( within session: LanguageModelSession, to prompt: Prompt, generating type: Content.Type, includeSchemaInPrompt: Bool, options: GenerationOptions ) - sending LanguageModelSession.ResponseStreamContent where Content: Generable { // 用 AsyncThrowingStream 包装你的流式响应 let stream AsyncThrowingStreamResponseStreamContent.Snapshot, any Error { continuation in Task { for try await chunk in myService.stream(prompt.description) { let raw GeneratedContent(chunk) let snapshot ResponseStreamContent.Snapshot( content: (chunk as! Content).asPartiallyGenerated(), rawContent: raw ) continuation.yield(snapshot) } continuation.finish() } } return LanguageModelSession.ResponseStream(stream: stream) }第 4 步在会话中使用自定义提供商let model MyCustomProvider() let session LanguageModelSession(model: model) let response try await session.respond { Prompt(你好请介绍一下你自己) } print(response.content)接入完成后你的自定义服务就自动拥有了多轮对话、指令系统、工具调用等能力——这些都由LanguageModelSession统一处理不需要你额外编写。高级技巧为自定义提供商配置专属参数 ⚙️不同的 AI 服务总有一些独有参数。AnyLanguageModel 通过CustomGenerationOptions协议解决了这个痛点让每个提供商都能定义自己的专属选项。完整的机制定义在GenerationOptions.swift中。extension MyCustomProvider { struct CustomGenerationOptions: AnyLanguageModel.CustomGenerationOptions { var myVendorParam: String? var enableAdvancedMode: Bool? } } var options GenerationOptions(temperature: 0.7) options[custom: MyCustomProvider.self] .init( myVendorParam: custom-value, enableAdvancedMode: true ) let response try await session.respond(to: prompt, options: options)内置的OpenAILanguageModel就利用这套机制支持了topP、frequencyPenalty、reasoningEffort、extraBody等大量厂商专属参数你可以直接翻阅它的源码作为最佳实践范例。如何验证你的自定义提供商AnyLanguageModel 的测试目录中提供了完善的参考MockLanguageModelTests.swift展示了如何测试一个自定义模型。你也可以仿照MockLanguageModel的做法先返回固定文本验证协议链路是否打通再逐步接入真实 API。写在最后从零到一的接入清单 ✅回顾一下用 AnyLanguageModel 接入自定义 AI 服务只需四步实现LanguageModel协议 → 完成respond方法 → 按需实现流式输出 → 创建会话使用。再配合CustomGenerationOptions定制专属参数你的 AI 服务就能完全融入这个统一的 Swift AI 生态享受和内置提供商完全一致的开发体验。如果你想在本地运行和调试这个开源项目可以通过git clone https://gitcode.com/gh_mirrors/an/AnyLanguageModel获取源码然后使用swift test运行测试套件。动手写一个属于你自己的自定义提供商吧【免费下载链接】AnyLanguageModelAn API-compatible, drop-in replacement for Apples Foundation Models framework with support for custom language model providers.项目地址: https://gitcode.com/gh_mirrors/an/AnyLanguageModel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号