RunAnywhere React Native Core SDK 实战指南:基于 @runanywhere/core 构建端侧 AI 应用

发布时间:2026/9/24 16:11:32

RunAnywhere React Native Core SDK 实战指南:基于 @runanywhere/core 构建端侧 AI 应用 RunAnywhere React Native Core SDK 实战指南基于 runanywhere/core 构建端侧 AI 应用【免费下载链接】runanywhere-sdksProduction ready toolkit to run AI locally项目地址: https://gitcode.com/gh_mirrors/ru/runanywhere-sdksrunanywhere/core是 RunAnywhere 为 React Native 提供的核心 SDK 包它统一封装了设备端 AI 的初始化、模型生命周期、流式推理与事件系统并通过 NitroModules 原生桥接层对接 C 实现的 runanywhere-commons。本文以 bindings/react-native/packages/core/README.md 为主线结合仓库源码与示例工程完整讲解从安装、初始化到模型下载、加载、生成与流式消费的实战流程并深入剖析 Hermes 环境下异步流、错误处理与多环境配置等关键细节读完即可在现有 React Native 工程中接入本地 LLM、语音与视觉推理能力。一、核心定位一个包打通端侧 AI 全链路runanywhere/core是整个 React Native SDK 的唯一必需包。它本身并不直接执行推理而是扮演三个角色公共 API 门面对外暴露统一的RunAnywhere命名空间所有能力LLM、STT、TTS、VAD、RAG、模型管理等都挂在这个门面之下模型与生命周期管理负责模型注册、下载、加载、卸载与注册表查询原生桥接层通过 NitroModulesreact-native-nitro-modules调用 C 实现的 runanywhere-commons将 proto 编码的请求/响应在 JS 与原生之间往返传递。从 src/index.ts 的导出声明可以看到包的主体就是RunAnywhere门面以及围绕它的 v3 类型体系LlmOptions、SttOptions、GenerationResult、SdkEvent等。而 src/Public/RunAnywhere.ts 中列出的 15 个能力命名空间llm、vlm、stt、tts、vad、embeddings、rerank、images、diarization、segmentation、voice、rag、models、lora、cua加上平台服务storage、logging、auth、pluginLoader、solutions构成了完整的端侧 AI 能力面。一个关键的设计事实所有推理都发生在原生 commons 层TypeScript 层只负责选项与结果的编解码。源码注释明确写道“All inference lives in native commons — this layer only marshals options and results.” 这意味着runanywhere/core的性能瓶颈在原生侧JS 侧只承担协议转换。二、环境要求与安装2.1 版本与环境要求根据 bindings/react-native/README.md 的要求矩阵组件最低版本推荐版本React Native0.83.10.85.3Node.js22.1224 LTSiOS17.517.5AndroidAPI 247.0API 28Xcode2626RAM3 GB6 GB用于较大模型Apple Silicon 设备与 6 GB 内存的 Android 手机推荐用于运行 3B 及以上参数模型。从 package.json 的 peerDependencies 可以看到核心包对react19.0.0、react-native-nitro-modules^0.33.9有强依赖其余如react-native-blob-util、react-native-device-info、react-native-fs均为可选依赖。2.2 安装命令核心包 README 给出的标准安装命令注意版本需要锁定到0.20.11与仓库当前版本线保持一致npm install runanywhere/core0.20.11 react-native-nitro-modules随后在 iOS 目录执行 CocoaPods 安装cd ios pod install cd ..Android 无需额外配置——原生库会随 Gradle 构建自动打包并下载这是 React Native SDK 与 iOS 的主要差异之一。iOS 麦克风权限若应用需要使用麦克风采集语音转写、语音 Agent 等必须在Info.plist中添加NSMicrophoneUsageDescription权限描述字符串否则系统会直接拒绝录音访问。完整配置流程见 React Native SDK README。2.3 选择推理后端包runanywhere/core是骨架具体模型推理由后端包提供。安装核心包后按需安装后端npm install runanywhere/core0.20.11 runanywhere/llamacpp0.20.11包用途runanywhere/core核心 SDK —— 必需runanywhere/llamacppLLM / VLMGGUF基于 llama.cpprunanywhere/onnxSTT、TTS、VADWhisper、Piper、Silerorunanywhere/mlxApple MLX物理 iOS 设备上的 Apple Silicon 加速runanywhere/qhexrt可选的 Qualcomm Hexagon NPU 加速Snapdragon Android三、初始化与运行环境语义3.1 开发环境快速初始化核心 README 给出了最简初始化方式import { RunAnywhere, SDKEnvironment } from runanywhere/core; await RunAnywhere.initialize({ environment: SDKEnvironment.SDK_ENVIRONMENT_DEVELOPMENT, }); console.log(Ready:, RunAnywhere.isInitialized);在开发环境SDK_ENVIRONMENT_DEVELOPMENT下SDK 以Keyless OSS 模式运行无需 API Key日志级别默认为DEBUG。从 SDKEnvironmentHelpers.ts 的源码可以确认这一行为——开发环境不要求后端 URL、不同步后端、不要求认证且默认日志级别为LOG_LEVEL_DEBUG。3.2 生产环境初始化生产环境需要认证与遥测配置await RunAnywhere.initialize({ apiKey: YOUR_API_KEY, baseURL: https://api.runanywhere.ai, environment: SDKEnvironment.SDK_ENVIRONMENT_PRODUCTION, });三个环境的值域与行为语义环境说明SDK_ENVIRONMENT_DEVELOPMENTKeyless OSS 模式详细日志SDK_ENVIRONMENT_STAGING使用真实服务进行测试SDK_ENVIRONMENT_PRODUCTION认证控制平面 遥测从 RunAnywhere.ts 的initializeCore实现可以看到初始化时的参数校验规则这是最容易踩坑的地方生产环境必须提供非空的apiKey且不能是占位符baseUrl必须是绝对 HTTP(S) URL且不能包含内嵌凭据、query 参数或 fragment生产环境强制要求 HTTPS开发环境允许 Keyless 的 Staging 接入commons 会覆盖 base URL 指向内置 staging 后端请求以未认证方式发出。校验失败会抛出SDKException.validationFailed其中fieldPath会精确指向出问题的字段如InitializeOptions.baseUrl或InitializeOptions.apiKey。3.3 两阶段初始化与后台网络相位初始化并非一次同步完成。initialize()实际分为两个相位源码注释明确描述Phase 1本地核心native.initialize(configJson)拉起平台适配器、原生 commons、设备注册等返回后本地推理即可用Phase 2网络相位认证、设备注册、模型目录同步、遥测在后台异步进行不阻塞调用方。网络相位失败是非致命的——SDK 会记录 warning并在下一次需要联网的调用前通过retryHTTPSetupInternal自动重试 HTTP/认证设置。RunAnywhere.isReady只反映本地核心是否初始化完成与网络相位是否成功无关。这种设计保证了离线优先没有网络时本地推理照常可用。此外initialize()具备幂等与并发安全语义重复调用会共享同一个 in-flight PromiseinitializingPromise并发调用不会重复初始化原生层reset()则是进程级生命周期屏障会等待所有挂起的初始化/网络工作结束后再销毁原生实例。四、快速上手从后端注册到模型生成核心 README 强调安装后端包后必须先注册对应后端才能下载与加载模型。结合 React Native SDK README 的 Quick Start一个完整的 LLM 推理流程如下import { RunAnywhere, SDKEnvironment } from runanywhere/core; import { LlamaCPP } from runanywhere/llamacpp; await RunAnywhere.initialize({ environment: SDKEnvironment.SDK_ENVIRONMENT_DEVELOPMENT, }); await LlamaCPP.register(); await RunAnywhere.downloadModel(smollm2-360m); await RunAnywhere.loadModel(smollm2-360m); const result await RunAnywhere.generate(What is the capital of France?); console.log(result.text);内置目录模型自动发现仓库内置模型目录中的条目如smollm2-360m在初始化完成后会被自动发现无需手动registerModel。只有自定义模型外部 GGUF、ONNX/Sherpa、MLX bundle才需要调用RunAnywhere.registerModel()显式注册。值得注意的细节生成类 API 并不强制要求预加载。从 Models.ts 的ensureModelLoaded实现可以看到如果调用llm.generate({ model })时模型尚未下载SDK 会自动执行下载 → 加载的完整链路内部先消费完整下载事件流再调用models.load。因此用户既可以显式管理生命周期也可以直接传model选项让 SDK 兜底。五、能力全景与模型生命周期管理5.1 统一命名空间能力矩阵RunAnywhere是唯一的入口门面所有能力通过命名空间访问。注册后端模块LlamaCPP、ONNX、MLX后才能下载与加载模型能力关键 API后端包LLMgenerate、generateStreamrunanywhere/llamacpp、runanywhere/mlxVLMprocessImage、processImageStreamrunanywhere/llamacpp、runanywhere/mlxSTTtranscribe、transcribeStreamrunanywhere/onnxTTSsynthesize、synthesizeStreamrunanywhere/onnxVAD语音活动检测辅助runanywhere/onnxVoice agentinitializeVoiceAgent、streamVoiceAgent、processVoiceTurnCore ONNX LLM 后端ModelsregisterModel、downloadModel、loadModel、listModelsrunanywhere/coreRAG / toolsragQuery、generateWithToolsrunanywhere/core5.2 支持的模型格式格式适用场景后端GGUFLLM、部分 VLMLlamaCPPONNX / Sherpa archivesSTT、TTS、VADONNXMLX bundlesApple Silicon 上的 LLM、VLM、语音MLXQHexRT bundlesSnapdragon 上的 NPU 加速模型QHexRT5.3 模型生命周期 API 深度解析RunAnywhere.models命名空间Models.ts提供了完整的注册表与生命周期控制list(filter?)/get(id)查询注册表。filter支持category模型类别、framework、downloadedOnly、search关键词筛选register(model)支持三种注册来源——单个 URLurl、归档 URLarchiveUrl自动按扩展名推断.zip/.tar.bz2/.tar.xz/.tar.gz归档类型、多文件集合files需显式iddownload(id)返回AsyncIterableDownloadEvent事件流事件类型包括started、progress含bytesDone/bytesTotal/percent、extracting、completed、failedload(id, options?)立即加载模型。注意当前原生 load ABI 只支持backendPreferences[0]即框架选择与forceReloadcontextLength、threads、accelerator等选项暂未随 ABI 传递传入会抛出明确的SDKException.invalidInputunload(id)/unloadAll(category?)按 id 或按类别/全局卸载delete(id)删除本地模型文件并清理注册表路径unregister(id)仅移除注册元数据要求模型已卸载且无本地产物state()返回每个类别的已加载模型快照 存储余量storageUsedBytes/storageFreeBytesrefresh()重新扫描托管模型目录并调和下载状态用于拾取磁盘上被外部改动的人工产物。一个实用的快捷方式llm.generate(input, { model: xxx })会在后台自动完成模型的下载与加载这是 Llm.ts 中buildRequest调用的ensureModelLoaded行为开发者在原型阶段可以完全跳过显式生命周期管理。5.4 LLM 生成与工具调用RunAnywhere.llm提供四种生成形态Llm.tsgenerate(input, options?)一次性生成返回GenerationResult含text、finishReason、token 用量、timeToFirstTokenMs、tokensPerSecond等generateStream(input, options?)流式生成产出started→token区分text/thought思维链 token→completed事件序列generateStructured(prompt, schema, options?, mode?)结构化输出。mode支持validationOnly默认自由生成后校验、repair校验失败后携带修复指令重试一次、constrained引擎级约束解码当前未接入调用会抛出notImplemented工具调用llm.tools.register/unregister/list/clear注册工具配合generateWithTools显式工具循环支持对循环预算maxCalls、思维链、并行执行的完全控制。六、流式输出与 Hermes 关键注意点核心 README 用醒目引用块强调了一条极易踩坑的规则Hermes消费 SDK 的AsyncIterable流时请使用手动[Symbol.asyncIterator]()循环不要使用for await...of。原因是 Hermes 运行时对AsyncIterable的for await...of语法支持存在限制。SDK 所有流式动词generateStream、download、sdkEvents、transcribeStream、synthesizeStream等返回的都是AsyncIterableT底层由 Stream.ts 的pushStream驱动——它基于runanywhere/proto-ts/streams/push的推送式异步迭代器实现消费端必须手动拉取。正确写法仓库示例工程 BenchmarkScreen.tsx 中的实际用法const iterator events[Symbol.asyncIterator](); let step await iterator.next(); while (!step.done) { // 处理 step.value如 GenerationEvent 的 token 增量 step await iterator.next(); }流式事件的取消语义当消费者中途跳出循环时pushStream的cancel回调会被触发进而调用原生层的llmCancelProto()取消底层推理任务见 Llm.ts。因此即使使用手动循环也建议在finally中调用迭代器的return()以确保原生资源被及时释放。七、错误处理统一的 SDKExceptionSDK 中所有错误都以SDKException抛出其内部封装了从 idl/errors.proto 生成的 protoSDKError载荷SDKException.ts 的实现。核心 README 给出的标准捕获方式import { SDKException, ErrorCode, isSDKException } from runanywhere/core; try { await RunAnywhere.generate(Hello!); } catch (error) { if (isSDKException(error)) { console.error(error.code, error.message); } }SDKException提供的结构化访问器code数字型 proto 错误码如ERROR_CODE_MODEL_NOT_FOUND 110category粗粒度分类网络、配置、校验、组件等fieldPath结构化校验错误的字段路径如InitializeOptions.baseUrl便于跨 SDK 统一读取cAbiCode对应的负值rac_result_tC ABI 错误码recoverySuggestion常见错误码的人类可读恢复提示如网络不可用 → Check your internet connection and try again.isExpected是否为预期内错误用户取消流式任务此类错误不应按 error 级别记录日志。原生桥接层返回的RAC_RESULT-NNN模式错误会被asNativeSDKException自动解析并调用 commons 的标准 ABIrac_result_to_proto_error转换为规范 proto 错误RunAnywhere.ts。也就是说无论错误源自 JS 校验、proto 解码还是原生 C 层最终都以同一套SDKException结构呈现这对统一错误上报与跨端对齐非常有利。八、平台适配与安全说明8.1 原生桥接结构从包目录结构看runanywhere/core的原生部分采用NitroModules架构iOSios/目录包含 Swift 实现的PlatformAdapter.swift、KeychainManager.swift、URLSessionHttpTransport来自共享的 shared-apple/URLSessionHttpTransport等Androidandroid/目录包含 Kotlin 实现的OkHttpHttpTransport.kt、SecureStorageManager.kt、PlatformAdapterBridge.kt等共享 Ccpp/目录下的HybridRunAnywhereCore*.cpp系列文件实现了 JS ↔ commons 的 proto 桥接包括生命周期、下载、注册表、语音、工具调用、解决方案等 15 个功能域Nitro 生成代码nitrogen/generated/下的 iOS/Android 桥接桩代码。8.2 隐私与安全推理完全在设备本地仅在首次模型下载时需要联网之后推理全程离线用户数据不上云生产模式可能收集匿名遥测可配置密钥存储iOS 使用 KeychainKeychainManager.swift、Android 使用加密存储SecureStorageManager.kt日志安全初始化失败时 SDK 只记录结构化的非敏感错误码/类别完整异常只返回给调用方不写入设备日志见 RunAnywhere.ts 的注释说明。九、支持与许可完整文档React Native SDK README另可查阅 架构文档、开发文档 与 API 参考可直接运行的 示例应用含聊天、基准测试、模型选择等完整场景是学习Symbol.asyncIterator消费模式的参考实现许可协议RunAnywhere License详见 LICENSE。结语runanywhere/core的定位非常清晰一个包搞定端侧 AI 的骨架推理能力由后端包按需插入。理解它的关键在于把握三条主线——两阶段初始化本地核心 后台网络相位保证离线可用性、统一的RunAnywhere门面收敛全部能力、proto 驱动的原生桥接保证跨 SDK 的错误与数据结构一致。对 React Native 开发者而言掌握本文的初始化校验规则、Hermes 流式消费方式和SDKException处理范式就能在真实工程中稳定地落地本地 LLM、语音与视觉应用。【免费下载链接】runanywhere-sdksProduction ready toolkit to run AI locally项目地址: https://gitcode.com/gh_mirrors/ru/runanywhere-sdks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/24 16:11:32

SeaORM 与 Seaography 实战:用 Rust 从数据库一键生成 GraphQL API

后端数据库ORM 【免费下载链接】sea-orm 🐚 A powerful relational ORM for Rust 项目地址: https://gitcode.com/gh_mirrors/se/sea-orm 点击查看 免费下载 导读 本文基于 SeaORM 仓库中的 seaography_example 完整示例,系统讲解如何将 Se…

2026/9/24 16:11:32

无意识稳住血糖的5个小习惯

#现在到处都是控糖#有些不经意的行为,能帮你在不知不觉中稳住血糖↓↓【吃饭爱加点醋】醋可以延缓胃排空速度,促进血液中葡萄糖的消耗。还能抑制淀粉酶活性,降低碳水化合物的消化速率,延缓小肠对葡萄糖的吸收。【吃新鲜水果而不是…

2026/9/24 17:06:39

Windows 跑 Codex:原生 PowerShell 还是 WSL2?仓库放错最容易踩坑

Windows 跑 Codex:原生 PowerShell 还是 WSL2?仓库放错最容易踩坑 [!NOTE] Windows 版 ChatGPT 桌面应用默认使用 Windows 原生 Codex Agent,并在 PowerShell 环境运行;也可以把 Agent 切换到 WSL2。 “Agent 在哪里运行”“集成终端显示什么”“仓库实际存在哪个文件系统”…

2026/9/24 17:06:39

一个项目挂 3 个仓库:Codex 多文件夹项目与跨仓 Diff 怎么审

一个项目挂 3 个仓库:Codex 多文件夹项目与跨仓 Diff 怎么审 [!NOTE] ChatGPT 桌面应用的本地 Project 可以附加多个文件夹,并指定一个 Primary folder;Codex 能读写所有附加目录,但自动发现 AGENTS.md、Skills、config.toml 和默认 Git 操作仍以主目录为中心。 Review pan…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码