尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

深入解读 firebase-ios-sdk 中的 FirebaseAI(Firebase AI Logic)模块:构建、测试与 Mock 数据维护实战

深入解读 firebase-ios-sdk 中的 FirebaseAI(Firebase AI Logic)模块:构建、测试与 Mock 数据维护实战 深入解读 firebase-ios-sdk 中的 FirebaseAIFirebase AI Logic模块构建、测试与 Mock 数据维护实战【免费下载链接】firebase-ios-sdkFirebase SDK for Apple App Development项目地址: https://gitcode.com/GitHub_Trending/fi/firebase-ios-sdk导读本文以 firebase-ios-sdk 仓库中 FirebaseAI/README.md 为骨架结合仓库内的源码、测试与脚本系统讲解 Firebase AI SDK现已更名为 Firebase AILogic的开发构建流程、单元测试前置条件、Mock 响应数据的下载与更新机制。读完本文你将掌握如何通过 Swift Package Manager 选择FirebaseAIscheme 完成 SDK 构建、如何正确准备并运行FirebaseAIUnit单元测试、如何借助scripts/update_vertexai_responses.sh拉取/更新测试所需的 Mock 数据以及该模块的整体架构与版本演进脉络。FirebaseAI 模块是什么FirebaseAI 是 firebase-ios-sdk 中负责将 Gemini 模型能力带入 Apple 平台的客户端 SDK。它的核心定位可以从两个层面理解能力层面SDK 提供了文本/多模态内容生成、流式生成、多轮对话、函数调用Function Calling、GroundingGoogle Search / Google Maps、代码执行、URL 上下文工具、实时双向通信Live API、结构化输出配合 Foundation Models 的Generable/Guide宏以及图像生成等一系列能力命名层面根据 FirebaseAI/CHANGELOG.md自 12.5.0 起FirebaseAI模块被重命名为FirebaseAILogic非破坏性变更旧引用暂时仍可用并在 12.13.0 引入的 Firebase 13.0.0 大版本计划中逐步移除旧名。因此新代码应使用import FirebaseAILogic并选择FirebaseAILogicSwift Package 依赖。在 Package.swift 中可以看到产品层同时暴露FirebaseAI与FirebaseAILogic两个可选项其中 Package.swift 将真正的实现代码指向FirebaseAI/Sources即FirebaseAILogictarget而FirebaseAI则由FirebaseAI/Wrapper/Sources的轻量包装层提供其 Unit 测试 target 位于FirebaseAI/Wrapper/Tests。开发环境与构建选择 FirebaseAI schemeREADME 的 Development 一节给出了最核心的开发流程完成 Swift Package Manager 的 setup instructions 后在 Xcode 中选择FirebaseAIscheme 即可构建 SDK。从仓库证据看这一流程有两个值得注意的实现细节构建入口是FirebaseAI而不是FirebaseAILogicREADME 明确要求使用FirebaseAIscheme 构建。仓库中同时存在两个 Scheme 文件——scripts/spm_test_schemes/FirebaseAIUnit.xcscheme 与 scripts/spm_test_schemes/FirebaseAILogicUnit.xcscheme分别对应包装层与实现层的测试。底层实现入口在FirebaseAI/Sources/FirebaseAI.swift模块的对外入口是一个public final class FirebaseAIFirebaseAI/Sources/FirebaseAI.swift它通过工厂方法创建各类模型实例firebaseAI(app:backend:useLimitedUseAppCheckTokens:)创建FirebaseAI实例默认使用Backend.googleAI()Gemini Developer API并支持开启 App Check 的 limited-use tokensgenerativeModel(modelName:generationConfig:safetySettings:tools:toolConfig:systemInstruction:requestOptions:)创建常规生成模型且会对非gemini-/gemma-前缀的模型名发出警告日志liveModel(...)创建支持双向流式通信的LiveGenerativeModelwatchOS 不可用templateGenerativeModel()创建基于服务端 Prompt 模板的模型generativeModelSession(...)/geminiModel(...)Public Preview 能力分别提供结构化输出会话与 Foundation Models 集成。从源码结构看FirebaseAI实例还会按(appName, apiConfig, useLimitedUseAppCheckTokens)作为 key 进行实例缓存FirebaseAI/Sources/FirebaseAI.swift并通过os_unfair_lock保证线程安全。模型资源名与 Backend 配置构建完成后模型请求的组装逻辑也值得关注。在 FirebaseAI/Sources/FirebaseAI.swift 中modelResourceName(modelName:)会根据apiConfig.service分支构造资源名Agent Platform Gemini API原 Vertex AI形如projects/{projectID}/locations/{location}/publishers/google/models/{modelName}其中 location 默认是global见 FirebaseAI/Sources/Types/Public/Backend.swiftGemini Developer API形如projects/{projectID}/models/{modelName}生产环境经 Firebase 代理。Backend的配置演变FirebaseAI/Sources/Types/Public/Backend.swift是理解版本变化的关键旧的vertexAI()/vertexAI(location:)已废弃建议改用agentPlatform(location:)默认global如需维持us-central1需显式传参googleAI()对应 Gemini Developer API。单元测试FirebaseAIUnit 与 Mock 响应文件README 的 Unit Tests 一节含 [!IMPORTANT]警示明确FirebaseAI 的单元测试依赖 Mock 响应文件必须先运行根目录下的scripts/update_vertexai_responses.sh下载这些文件随后选择FirebaseAIUnitscheme 构建并运行测试。从仓库结构可以印证这一依赖关系测试代码位于 FirebaseAI/Tests/Unit包含GenerativeModelGoogleAITests.swift、GenerativeModelVertexAITests.swift、GenerativeModelVertexAICachingTests.swift、LiveGenerationConfigTests.swift、ChatTests.swift、SafetyTests.swift、MapsGroundingTests.swift、HybridModelTests.swift等针对不同能力面的测试Mock 数据位于FirebaseAI/Tests/Unit/vertexai-sdk-test-data/mock-responses/目录按后端分为developerapiGemini Developer API与vertexaiAgent Platform Gemini API两个子目录测试通过MockURLProtocol.swift拦截URLSession请求并用 Mock 文件回放响应从而不依赖真实网络即可验证请求/响应编解码逻辑。运行单元测试的命令与 Scheme在 Xcode 中操作时按 README 指引依次确保已按 SPM setup 说明将仓库作为本地包打开选择FirebaseAIUnitscheme对应文件 scripts/spm_test_schemes/FirebaseAIUnit.xcscheme先运行下载脚本准备 Mock 数据构建并运行测试。如果希望绕过 Xcode 直接在命令行跑测试也可以使用 SwiftPM 测试 targetFirebaseAILogicUnit对应 Package.swift 与 scripts/spm_test_schemes/FirebaseAILogicUnit.xcscheme。需要注意测试数据的准备是共同前提缺少 Mock 文件会导致用例因拿不到预期响应而失败。更新 Mock 响应脚本机制与工作流README 的 Updating Mock Responses 一节描述了 Mock 数据更新的完整闭环在vertexai-sdk-test-data仓库Firebase 官方维护的共享 Mock 测试数据仓库中创建 PR 提交新的响应文件PR 合并后重新运行scripts/update_vertexai_responses.sh脚本下载更新后的文件。脚本本身的实现scripts/update_vertexai_responses.sh非常简洁其注释点明了设计意图replaces mock response files ... with a fresh clone of the shared repository of mock test datacd $(dirname $0)/../FirebaseAI/Tests/Unit || exit rm -rf vertexai-sdk-test-data || exit git clone --depth 1 https://github.com/FirebaseExtended/vertexai-sdk-test-data.git也就是说该脚本会把FirebaseAI/Tests/Unit/vertexai-sdk-test-data目录整体替换为外部测试数据仓库的最新克隆--depth 1浅克隆仅取最新一次提交。这解释了为什么 README 要求从仓库根目录运行脚本内部通过$(dirname $0)/../FirebaseAI/Tests/Unit定位目标目录因此无论从仓库根目录还是 scripts 目录下执行目标路径都指向同一位置。执行方式在仓库根目录./scripts/update_vertexai_responses.sh适用前提与注意事项该脚本会删除并重建FirebaseAI/Tests/Unit/vertexai-sdk-test-data目录因此不要在该目录中手工放置未纳入外部仓库的自定义文件否则会被覆盖需要网络访问 GitHubgit clone 外部测试数据仓库Mock 数据是按后端分层的developerapi与vertexai新增用例时应把响应样本放进与后端对应的子目录并确保外部数据仓库中的文件名与测试代码引用的资源名一致。源码地图从文件到能力的映射想要深入参与 SDK 开发FirebaseAI/AGENTS.md 提供了一份完整的代码地图它把Sources/下的每个文件与职责一一对应可与 README 的开发说明配合使用。几个关键文件的作用如下文件相对仓库根目录职责FirebaseAI/Sources/FirebaseAI.swift模块入口实例工厂与模型资源名组装FirebaseAI/Sources/GenerativeModel.swift远程多模态模型内容生成与会话起点FirebaseAI/Sources/Chat.swift 与 History.swift多轮对话与会话历史的线程安全管理FirebaseAI/Sources/GenerationConfig.swift生成参数temperature、topP、topK、maxOutputTokens、stopSequences、responseMIMEType、thinkingConfig、imageConfig 等FirebaseAI/Sources/Types/Public/Live/LiveSession.swiftLive API 实时 WebSocket 会话FirebaseAI/Sources/Types/Public/Backend.swift后端选择Agent Platform / Gemini Developer APIFirebaseAI/Sources/Types/Public/Tools/工具集Google Maps Grounding、代码执行等FirebaseAI/Tests/Unit/MockURLProtocol.swift测试用 URLSession 拦截器配合 Mock 数据回放需要特别提醒的是由于FirebaseAI已更名为FirebaseAILogicAGENTS.md中标注的Sources/目录在仓库中实际位于 FirebaseAI/Sources其中Protocols/、Types/、Extensions/子目录分别存放公共协议、数据类型与内部扩展具体结构可以查阅 FirebaseAI/AGENTS.md 的完整清单。版本演进从 Vertex AI 到 Firebase AI LogicREADME 虽未展开介绍功能清单但 FirebaseAI/CHANGELOG.md 完整记录了该模块的演进历史可作为开发决策与兼容性排查的参考11.13.0FirebaseAI首次发布取代旧版 Vertex AI in Firebase SDKFirebaseVertexAI提供 Gemini Developer API含免费额度的 preview 支持同时保持 Vertex AI Gemini API 的 GA 状态12.4.0Live API实时双向流加入Gemini Developer API 与 Imagen 生成 API 转正 GA12.5.0模块改名FirebaseAILogic新增 Live API 视频帧发送能力12.6.0 / 12.9.0Server Prompt Templates 与 URL 上下文工具后转 GA隐式缓存context caching元数据支持12.11.0 ~ 12.13.0GenerativeModelSession结构化输出、自动函数调用、混合推理端侧 Foundation Models 与云端 Gemini 回退、Live API 会话恢复与上下文窗口压缩、ImageConfig图像生成配置12.15.0 ~ 12.17.0App Check 成为依赖简化配置、SpeechConfig语音配置、Backend.vertexAI废弃并改名Backend.agentPlatform、默认位置从us-central1改为global12.18.0 ~ 12.19.0移除已关闭的 Imagen 方法、Live API 增加RealtimeInputConfig与 start/stop activity 支持、Public Preview 引入GeminiLanguageModel与 Apple Foundation Models 框架集成并预告FirebaseAI库将在 Firebase 13.0.0 中移除GenerationConfig/LiveGenerationConfig中的模型调参参数temperature、topP、topK、candidateCount、presencePenalty、frequencyPenalty在 Gemini 3.x 及以后不再受支持。这些信息对迁移升级尤其涉及import改名、默认后端位置变化、废弃 API 替换至关重要建议作为 README 开发指引的配套参考文档阅读。小结围绕 FirebaseAI/README.md本文完整还原了 FirebaseAIFirebaseAILogic模块的本地开发链路SPM 集成 → 选择FirebaseAIscheme 构建 → 运行scripts/update_vertexai_responses.sh准备 Mock 数据 → 通过FirebaseAIUnitscheme 执行单元测试 → 通过外部测试数据仓库 PR 与脚本重跑完成 Mock 数据更新。同时结合 FirebaseAI/Sources/FirebaseAI.swift、Backend.swift 等源码与 FirebaseAI/CHANGELOG.md 的版本记录说明了模块入口、模型资源名组装与命名/后端演进等关键实现细节。无论你是准备为该 SDK 贡献代码的开发者还是需要维护依赖此模块的测试基建的工程师以上流程与源码证据都能作为可直接落地的操作手册。【免费下载链接】firebase-ios-sdkFirebase SDK for Apple App Development项目地址: https://gitcode.com/GitHub_Trending/fi/firebase-ios-sdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表