首页/新闻资讯/正文详情

RunAnywhere React Native SDK 架构解析:基于 NitroModules 的端侧 AI 桥接与多后端引擎注册指南

发布时间:2026/9/24 16:23:15 来源:云帆数科 栏目:资讯中心
RunAnywhere React Native SDK 架构解析:基于 NitroModules 的端侧 AI 桥接与多后端引擎注册指南
AI模型推理服务推理引擎本地部署多模态【免费下载链接】runanywhere-sdksProduction ready toolkit to run AI locally项目地址https://gitcode.com/gh_mirrors/ru/runanywhere-sdks点击查看免费下载导读本文面向在 React Native 应用中集成端侧on-deviceAI 能力的开发者以及希望理解 RunAnywhere React Native SDK 内部架构的维护者。文章以 bindings/react-native/AGENTS.md 为骨架结合仓库源码逐层拆解这套 Yarn Berry 3.6.1 workspaces 单体仓库monorepo的设计一个核心包加四个后端包的划分、基于 NitroModulesJSI 零序列化桥而非经典 RN Bridge/TurboModules 的桥接方案、五层技术栈、两阶段初始化、显式后端注册模型以及完整的构建、打包、测试与发布命令。读完本文你将能够从源码层面理解 SDK 的桥接契约与生命周期并掌握构建、打包、运行示例应用的完整实操流程。仓库定位与包结构RunAnywhere React Native SDK 是 RunAnywhere 跨平台 SDK 家族中的 React Native 绑定层职责是把预编译的 C 推理引擎runanywhere-commons通过NitroModulesNitrogen/Nitro桥接进 React Native。这是一个基于 JSI、零序列化的桥而不是经典的 RN Bridge 或 TurboModules。SDK 采用 Yarn Berry 3.6.1 workspaces 管理一个核心包 四个后端包依赖关系与职责划分如下包npm 名称职责packages/corerunanywhere/coreSDK 生命周期、认证、原生事件/模型/存储门面facade、全部 AI 能力代理packages/llamacpprunanywhere/llamacppLlamaCPP 后端注册GGUF LLM VLMpackages/mlxrunanywhere/mlxApple MLX 后端注册LLM、VLM、语音、嵌入仅限 iOS 物理设备packages/onnxrunanywhere/onnxONNX/Sherpa 后端注册STT、TTS、VADpackages/qhexrtrunanywhere/qhexrtQualcomm Hexagon NPU 后端仅 Android。公开发布到 npm携带 Qualcomm QAIRT 运行时但默认package-sdk.sh不会将其纳入需加--include-private-qhexrt工作区还依赖../proto-ts即 bindings/proto-tsnpm 名runanywhere/proto-ts提供 protobuf 生成的 TypeScript 类型。runanywhere/core持有 SDK 门面和 commons 桥后端包不拥有模型生命周期、注册表、下载或编排——它们只负责注册后端可用性并随包分发后端二进制与胶水代码。架构对齐原则Swift 为唯一事实来源整个 React Native 绑定遵循一个明确的产品契约Swift 是对齐的事实来源。文档明确指向 bindings/swift/ARCHITECTURE.md尤其是其中 §4 目录布局、§12 生成的 proto 代码、§15 构建/部署三节。React Native 绑定继承了 Swift 侧的 iOS 17.5 最低版本要求和原生/proto 字节所有权模型JavaScript 只是门面facade永远不是模型注册表、下载、存储路径或原生 HTTP 路由的所有者。这一决策在 Docs/ARCHITECTURE.md 中被进一步固化Proto 字节是原生桥接契约——TypeScript 可以创建和解码生成的 proto 消息但原生桥只接收和返回编码后的请求/结果字节初始化分两阶段详见下文原生持有 SDK 状态认证、设备身份、注册、下载、模型路径、存储、注册表发现、遥测、日志、生命周期不保留任何为旧 RN API 做的兼容层——被 Swift 形态 API 取代的旧 JS 路径会直接删除。五层技术栈AGENTS.md 给出了完整的五层架构Layer 1: TypeScript API RunAnywhere facade one module per v3 namespace in Public/Api/ (llm, vlm, stt, tts, vad, embeddings, rerank, images, diarization, segmentation, voice, rag, models, lora) over internal Public/Extensions/ per-feature bridge helpers (STT, TTS, VoiceAgent, RAG, LLM, Models, Storage, Solutions, Hybrid, Audio, Embeddings, CUA) Foundation/Initialization/ (InitializationState, ServicesReadyGuard), SDKLogger Layer 2: Nitro Bridge (JSI — no serialization) HybridRunAnywhereCore (C) — ~60 methods covering all SDK capabilities HybridRunAnywhereCoreMLX — dynamic registration of the linked Swift MLX runtime HybridRunAnywhereLlama (C) — LlamaCPP backend VLM HybridRunAnywhereONNX (C) — generic ONNX Sherpa speech registration HybridRunAnywhereQHexRT (C) — Hexagon NPU backend registration capability probe (Android only, no iOS side) HybridRunAnywhereDeviceInfo — Platform-specific (Swift on iOS, Kotlin on Android) HybridLLM / HybridVoiceAgent — Proto-byte streaming subscription objects Layer 3: C Bridge Code (packages/core/cpp/) HybridRunAnywhereCore.cpp extension files (AuthDevice, Download, Events, Http, Registry, SecureStorage, Solutions, Storage, Telemetry, Tools, Voice) cpp/bridges/ — AuthBridge, DeviceBridge, ExternalConfigGuard, FileManagerBridge, HTTPBridge, InitBridge, ModelRegistryBridge, PlatformDownloadBridge, StorageBridge, TelemetryBridge Layer 4: Platform Native Code iOS: PlatformAdapterBridge.m (C ABI → Swift), URLSessionHttpTransport.mm, KeychainManager.swift, HybridAudioCapture.swift/HybridAudioPlayback.swift, SDKLogger.swift Android: PlatformAdapterBridge.kt (JNI ↔ Kotlin), cpp-adapter.cpp (JNI_OnLoad), SecureStorageManager.kt (Android Keystore), SDKLogger.kt, OkHttpHttpTransport.kt Layer 5: Pre-built C Libraries (runanywhere-commons) RACommons.xcframework / librac_commons.so — Core infrastructure, registry, storage, events, proto ABI RABackendLLAMACPP.xcframework / .so — llama.cpp backend RABackendMLX.xcframework RunAnywhereMLXRuntime.xcframework RunAnywhereMLXMetal.xcframework — MLX plugin, shared Swift runtime, dynamic Metal carrier (iOS) RABackendONNX.xcframework / .so — generic ONNX backend RABackendSherpa.xcframework / .so — Sherpa-ONNX speech backend librac_backend_qhexrt.so ( _jni.so) — Hexagon NPU backend (Android only, private packaging)对应到仓库目录Layer 1 在 packages/core/srcPublic/Api/、Public/Extensions/、Foundation/等子目录与上文描述一一对应Layer 2/3 在packages/core/cpp/Layer 4 在packages/core/ios/与packages/core/android/Layer 5 则来自上游runanywhere-commons的预编译产物。关键设计决策NitroModules而不是 TurboModules所有原生桥接都使用 Nitrogen 生成的HybridObject类在 dylib 加载时注册进HybridObjectRegistryiOS 在loadAndroid 在JNI_OnLoad。JavaScript 侧通过NitroModules.createHybridObject(RunAnywhereCore)拿到 JSI 句柄。SDK 中不存在任何RCT_EXPORT_MODULE/RCTBridgeModule注册。源码印证packages/core/src/native/NativeRunAnywhereCore.ts 中的requireNativeModule()在首次调用时执行proxy.createHybridObject(RunAnywhereCore)并缓存单例L31-L42isNativeModuleAvailable()则以 try/catch 软探测L44-L50。完整的原生 C 接口契约约 60 个方法定义在 packages/core/src/specs/RunAnywhereCore.nitro.ts。Swift 事实来源消费者无需配置 SPMRN SDK 直接链接 Swift 架构文档所描述的同一套预编译 RACommons/后端二进制。React Native 消费者通过CocoaPods拿到完整的 MLX 载荷plugin runtime Metal carrier Hub/Crypto 资源 bundle而不是额外添加一个独立的 Swift package 依赖RN 侧不复制 MLX 推理源码。后端注册是显式的应用需要单独调用LlamaCPP.register()、MLX.register()、ONNX.register()在获得许可的情况下还有QHexRT.register()与RunAnywhere.initialize()分开执行。MLX 和 QHexRT 都复用核心 Nitro 对象而不是新增第二个 HybridObjectMLX 通过导出的 C 符号发现链接进来的 Swift 运行时。MLX 仅限物理设备打包进 npm 的 arm64 模拟器切片只用于包/编译/链接/启动校验。在 iOS 模拟器中MLX.register()与MLX.isAvailable()均返回false。HTTP 传输层 vtable 模式rac_http_transport_ops_t是位于librac_commons.so中的一个 C 函数指针结构体。iOS 的URLSessionHttpTransport注册 URLSession 回调Android 的RunAnywhereCorePackagecompanioninit块调用racHttpTransportRegisterOkHttp()JNI →OkHttpHttpTransport.kt。该注册必须发生在任何原生 HTTP 请求之前。Proto 字节流式传输HybridLLM/HybridVoiceAgent暴露subscribeProtoEvents(handle, onBytes, onDone, onError)并返回一个退订函数。LLM 流式输出在RunAnywhereTextGeneration内部直接消费语音代理流由VoiceAgentStreamAdapter包装成AsyncIterableVoiceEvent见 packages/core/src/Adapters/VoiceAgentStreamAdapter.ts。Hermes 异步迭代约束Hermes 不支持对 NitroModules 自定义异步迭代器使用for await...of必须使用手动iterator.next()循环const iterator asyncIterable[Symbol.asyncIterator](); let result await iterator.next(); while (!result.done) { // process result.value result await iterator.next(); }所有返回AsyncIterable的公共 API 都受影响完整影响面清单见 Docs/DEVELOPMENT.mdRunAnywhere.generateStream产出LLMStreamEvent、transcribeStreamSTTPartialResult、synthesizeStreamTTSStreamEvent、processImageStreamVLMStreamEvent、downloadModelStreamDownloadProgress、streamVoiceAgentVoiceEvent。对应的批量孪生方法transcribe、synthesize、processImage、generate、downloadModel返回单个Promise无需迭代。for await仅在禁用 Hermes使用 JavaScriptCore时可用用break/return跳出循环会自动取消原生订阅。入口点与两阶段初始化SDK 入口SDK 入口是 packages/core/src/index.ts它 re-export 一切。导入顺序很重要——NitroModulesGlobalInit必须最先。RunAnywhere是唯一的公共命名空间L13其余均为类型导出与能力辅助导出。NitroModules 引导initializeNitroModulesGlobally()位于 packages/core/src/native/NitroModulesGlobalInit.ts通过模块级单例防止重复安装只调用一次NativeModules.NitroModules.install()。其中getNitroModulesProxySync()L85-L90提供了同步回退当调用发生在RunAnywhere.initialize()之前例如应用引导期间执行后端register()时直接使用静态导入缓存代理避免误报native module not available。原生模块单例requireNativeModule()/isNativeModuleAvailable()位于 packages/core/src/native/NativeRunAnywhereCore.ts惰性创建并缓存HybridRunAnywhereCore实例。它们是packages/core/src/native仅有的两个导出。RunAnywhere.initialize({ apiKey, baseUrl, environment })序列源码实现在 packages/core/src/Public/RunAnywhere.tsinitializeCoreL228-L390公共门面 L452-L454先 join 任何进行中的reset()然后校验 baseUrl 与非 development 环境下API keyproduction 环境强制 HTTPS 且必须有非占位 apiKey否则抛出SDKException.validationFailed安装 NitroModules 并检查原生模块可用性native.initialize(configJson)→ commons Phase 1。注意native.initialize()接收的是手写 JSON blob键集是独立的 TS/C 契约对应HybridRunAnywhereCore.cpp中的extractBoolValue调用而不是 proto 编码缓冲。这一步完成后门面即打开isReady为 true本地推理立即可用在后台启动网络阶段completeServicesInitialization()L168-L226HTTP/auth 配置、设备注册、模型分配、已下载模型发现、遥测刷新。调用方从不 await 第 4 步。ensureServicesReady()packages/core/src/Foundation/Initialization/ServicesReadyGuard.ts会在任何需要后端的调用前 join 它——或者在离线启动后仅重试 HTTP/auth 那一半retryHTTPSetupInternal()L586-L635。如果在reset()中途执行代际号lifecycleGeneration机制会使两阶段同时失效任何在原生 teardown 后试图恢复旧生命周期的调用都会收到SDKException.notInitialized(SDK lifetime ended during ...)requireCurrentLifecycleL94-L98。RunAnywhere.reset()L457-L459是一个进程级生命周期屏障并发 reset 会 join 同一个 promise新的初始化/服务工作会一直等到原生destroy()完成resetInternalL392-L431。门面命名空间RunAnywhere门面只持有生命周期加命名空间RunAnywhere.ts L551-L576llm、vlm、stt、tts、vad、embeddings、rerank、images、diarization、segmentation、voice、rag、models、lora外加cua、storage、logging、auth、pluginLoader、solutions。capabilities()L510-L549返回静态的按构建清单当前支持llm/vlm/stt/tts/vad/embeddings/rerank/images/diarization/segmentation/voice/rag/models/lora/cua等模态后端为 llama.cpp 与 ONNX音频格式pcm/wav并显式列出 v4 契约排除的agents/wakeword/realtime为不可用能力。命名空间模块模式每个命名空间是 Public/Api/ 中的一个模块Llm.ts、Stt.ts、Voice.ts……共享管线放在旁边Types.ts、Options.ts公共参数包 → proto 消息默认值来自生成的*Defaults()辅助函数、Inputs.ts、Results.ts、Stream.ts、Bridge.ts预检守卫、proto 编解码。一个重要的工程约束绝不在 TypeScript 里写默认值——Options.ts将调用方参数覆盖到生成的默认值之上使 IDL 保持默认值的唯一声明来源。Docs/ARCHITECTURE.md 补充说明Public/Extensions/文件是内部桥接辅助不是公共 API部分命名空间llm、vlm、vad、images、embeddings直接调用 Nitro proto 动词没有扩展文件。桥接方法的典型形态是proto 字节进出const requestBytes ModelLoadRequest.encode(request).finish(); const resultBytes await NativeRunAnywhere.loadModel(requestBytes); const result ModelLoadResult.decode(resultBytes);类型系统、事件与日志模态类型STT、TTS、VAD、VLM、LoRA、RAG、VoiceAgent、StructuredOutput来自runanywhere/proto-ts从types/index.ts再导出RN 本地枚举只保留 proto 未定义的状态。SDKException包装SDKErrorProto见 packages/core/src/Foundation/Errors/SDKException.ts是唯一的可抛出类型带静态工厂notInitialized、invalidInput、modelNotFound……。原生桥失败信息若携带RAC_RESULTrc模式会先经sdkExceptionFromRcResult映射成规范化 proto 错误RunAnywhere.ts L132-L145。RunAnywhere.eventsPublic/Api/Events.ts把原生 proto 字节事件解码为AnySDKEvent11 个类别JS 侧没有事件接收器。SDKLoggerFoundation/Logging/Logger/SDKLogger.ts委托给LoggingManager.shared通过RunAnywhere.logging.configure/.setLevel/.setLocalEnabled调节冗长级别。iOS 侧用OSLogsubsystemcom.runanywhere.reactnative经RNSDKLoggerBridgeObjC shimAndroid 侧用android.util.Log.*。SwiftLint 禁止在 error 级别直接使用print()/NSLog()/os_log()/debugPrint()/Logger。构建系统细节无 JS bundler只用tsc包入口的main/types/exports直接指向src/index.tsMetro 直接解析 TS 源码。nitrogen读取nitro.jsonsrc/specs/*.nitro.ts在nitrogen/generated/下生成 C spec 头文件、Swift/ObjC iOS 胶水、Kotlin/CMake/JNI Android 胶水core 的scripts/fix-nitrogen-output.js后处理会移除一个在固定 nitro 版本中不存在的#include NitroModules/Null.hpp——每个nitrogen脚本调用都会串联它。iOSCocoaPods podspec 打包包自有的 XCFrameworksios/Binaries/编译ios/**/*cpp/**/*并加载生成的*autolinking.rb。AndroidGradle 的downloadNativeLibs任务把.sozip 拉到src/main/jniLibs/CMakeLists.txt编译librunanywherecore.soC20导入预编译的librac_commons.so并以-Wl,-z,max-page-size16384链接以满足 Android 15 的 16 KB 页大小合规。完整的从源码构建 原生产物 staging 步骤见 Docs/DEVELOPMENT.md先构建runanywhere-commons原生产物再./scripts/package-sdk.sh --natives-from PATH把二进制拷入各包最后yarn install。若不需要重建 commons也可以直接跑yarn core:download-ios/yarn core:download-android等下载助手从发布拉取预编译产物。常用命令速查根级在bindings/react-native/下yarn install # 安装全部 workspace 依赖node-modules linker yarn typecheck # 全部包类型检查tsc --noEmit yarn lint # 全部包 ESLint yarn build # 构建全部包tsc 输出到 lib/ yarn nitrogen:all # 重新生成 Nitrogen 桥接代码core、llamacpp、onnx、qhexrt —— mlx 没有见下文 # 消费或刷新已暂存的本地原生二进制 yarn core:download-ios # pod install 获取 core 暂存二进制 yarn core:download-android # Gradle downloadNativeLibs 获取 core yarn llamacpp:download-ios # llamacpp、onnx 同理 yarn llamacpp:download-android yarn release # lerna publishnpm仅 main 分支注意仓库根目录的./run sdk rn build包装脚本当前是坏的——它会转调已被删除的scripts/build-react-native.sh该脚本已列入legacy-files-blocklist.yml禁止回归名单。请直接使用上面的yarn命令。包内在packages/core|llamacpp|mlx|onnx|qhexrt/下yarn typecheck # tsc --noEmit yarn lint # ESLint src/**/*.ts yarn nitrogen # 重新生成 Nitrogen 桥接代码mlx 没有mlx包没有自己的 nitrogen 脚本它与qhexrt都复用核心 Nitro 对象。测试yarn workspace runanywhere/core test --runInBand核心单元测试覆盖 proto 字节/线格式编码、结构化 SDK 错误、网络配置校验、生成的 Solutions 表面以及其他后端无关辅助。原生/后端推理仍需平台示例/设备工作流——JS 单元测试通过不代表原生验证通过。分发打包./scripts/package-sdk.sh # 暂存原生产物、类型检查、为 4 个 PUBLIC 包产出 .tgz .sha256 ./scripts/package-sdk.sh --include-private-qhexrt --natives-from PATH # 仅内部额外暂存 runanywhere/qhexrtqhexrt与公共包一起做类型检查但默认被公共打包跳过只通过内部标志发布输出到dist/sdk-rn-internal/——而且脚本自身会断言任何librac_backend_qhexrt*/libQnn*/lib{a,c}dsprpc.so绝不会落入公共的dist/sdk-rn/输出。--mode local|ci可覆盖打包模式默认从$CI自动检测。打包前的完整从源码构建staging natives步骤见 Docs/DEVELOPMENT.md。Monorepo 集成与坑点父仓库runanywhere-sdks在根package.json中把这些包声明为 workspacesbindings/react-native/packages/*、example、bindings/proto-ts内部 bindings/react-native/package.json 又以本地路径声明同一集合以支持独立运行。两份声明都必须存在且保持同步。Yarn 通过向上查找最近的yarn.lock来决定项目归属因此bindings/react-native/yarn.lock让内部项目拥有其下所有内容包括example/。任何位于bindings/react-native/下但被内部workspaces数组遗漏的包都会失主此时yarn workspace name run …会在任意位置报 doesnt seem to be part of the project declared in …。根声明负责让根yarn.lock覆盖这些包对应仓库根 lockfile 门禁rn-typecheck。由于example是内部项目的成员workspace 级的yarn typecheck/yarn lint也会覆盖示例应用。另一个易踩的坑example 设置了installConfig.hoistingLimits: workspaces其依赖留在example/node_modules而不提升使它成为runanywhere/proto-ts位于../proto-ts的外部 workspace必须能链接进去的提升边界。因此 example 的bufbuild/protobuf版本范围必须与proto-ts/packages/*声明的^2.12.1保持兼容范围过松会解析出第二份 protobuf 运行时副本安装时以 YN0071 Cannot link runanywhere/proto-ts … conflicts with parent dependency 失败。CI/CD 门禁.github/workflows/pr-build.yml的rn-typecheck任务远超名字所示生成 IDLts,cpp→ 安装根 bindings/react-nativeworkspaces →针对生成的 Nitro specs 编译 RN C 头文件check_rn_cpp_headers_compile.sh——能抓住手写override与重新生成的纯虚函数不匹配的问题其他 CI 任务都抓不到→yarn typecheckyarn lint整个 RN workspace含 example→ 为runanywhere/core和 RN example 跑 Jest。.github/workflows/release.yml的validate_consumer_react_native任务克隆RunanywhereAI/react-native-starter-app并跑tsc --noEmit默认关闭只在手动workflow_dispatch且validate_external_starters: true时运行。legacy-files-blocklist.yml禁止重新引入scripts/build-react-native.sh见上文./run sdk rn build坑点以及两个已移除的VoiceSessionHandle/RunAnywhereVoiceSession文件。关键文件速查文件用途packages/core/src/Public/RunAnywhere.tsSDK 门面生命周期 v3 命名空间packages/core/src/specs/RunAnywhereCore.nitro.ts完整原生 C 接口契约约 60 个方法packages/core/src/native/NativeRunAnywhereCore.ts NitroModulesGlobalInit.ts原生模块单例 安装守卫packages/core/src/Adapters/VoiceAgentStreamAdapter.ts语音事件 proto 字节 → AsyncIterable 适配器packages/core/src/Foundation/Errors/SDKException.ts唯一可抛出类型带静态工厂packages/core/cpp/HybridRunAnywhereCore.cppC 实现拆分为Extension文件packages/core/ios/PlatformAdapterBridge.m/android/.../PlatformAdapterBridge.kt平台 C ABI ↔ 原生桥安全存储、设备信息、HTTPbindings/swift/ARCHITECTURE.mdiOS 布局、生成的 proto 代码与构建/部署事实来源工程规范Conventions严格 TypeScript开启strict、noImplicitAny、strictNullChecks、noImplicitReturns、noFallthroughCasesInSwitchESLinttypescript-eslint/recommendedprettierno-console: error、no-explicit-any: errorPrettier单引号、2 空格缩进、es5 尾逗号SwiftLint仅packages/{core,llamacpp,onnx}/ios——mlx/qhexrt 没有 iOS 侧print()、NSLog()、os_log()、debugPrint()、Logger均作为 lint error 被禁止统一用SDKLogger版本管理core 与后端包共享一个 semver当前0.20.37由 Lerna 配合 conventional commits 管理包命名Kotlin Nitro 生成代码使用命名空间com.margelo.nitro.runanywhere.*。从 AGENTS.md 到实际开发总结一下这份文档给出的完整心智模型React Native 是一层薄薄的 TypeScript 门面 原生桥真正的工作发生在runanywhere-commonsC里。作为 SDK 消费者你只需要记住三条主线——一是入口与生命周期RunAnywhere.initialize两阶段、reset、ensureServicesReady二是后端注册LlamaCPP.register()/MLX.register()/ONNX.register()与初始化分离三是流式消费约束Hermes 下必须用手动iterator.next()循环。作为维护者你还需要掌握氮气桥的生成-编译-校验闭环nitrogen→fix-nitrogen-output.js→rn-typecheck的 C 头编译门禁、双 workspace 声明的同步纪律以及公共打包与私有qhexrt打包的隔离边界。更深入的目标态架构与从源码构建指南可继续阅读 Docs/ARCHITECTURE.md 与 Docs/DEVELOPMENT.md公共 API 参考在 Docs/Documentation.md。赞分享AI模型推理服务推理引擎本地部署多模态【免费下载链接】runanywhere-sdksProduction ready toolkit to run AI locally项目地址https://gitcode.com/gh_mirrors/ru/runanywhere-sdks点击查看免费下载相关推荐Label Studio 的 Kubernetes Helm 部署如何升级到新版本Label Studio 的 Kubernetes Helm 部署如何升级到新版本 如果你已经通过官方 Helm chart 把 Label Studio 社AI模型推理服务推理引擎本地部署多模态Haystack Builders 组件完全指南AnswerBuilder、PromptBuilder 与 ChatPromptBuilder 的用法与源码剖析Haystack Builders 组件完全指南AnswerBuilder、PromptBuilder 与 ChatPromptBuilder 的用法与源码剖AI模型推理服务推理引擎本地部署多模态Joplin Data API 完全指南基于 Clipper 服务的 REST 接口开发实战Joplin Data API 完全指南基于 Clipper 服务的 REST 接口开发实战 Joplin 内置的 Data API 是围绕 ClipperAI模型推理服务推理引擎本地部署多模态上一篇LinkSwift一键获取九大网盘直链下载地址的终极解决方案下一篇LeetCode 496 · Next Greater Element I 全解哈希表与单调栈的多语言实现与复杂度剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Bindu Agent 身份认证实战指南:基于 Ory Hydra 的 Bearer Token 机制与配置排查
Bindu Agent 身份认证实战指南:基于 Ory Hydra 的 Bearer Token 机制与配置排查

Bindu Agent 身份认证实战指南:基于 Ory Hydra 的 Bearer Token 机制与配置排查 【免费下载链接】Bindu Bindu: The identity, communication, and payments layer for AI agents. 项目地址: https://gitcode.com/gh_mirrors/bin/Bindu 导读 本文以 docs/AU… · 2026/9/24 16:23:09

在浏览器中使用 Webpack 5 打包 PDFKit:官方示例的完整配置指南
在浏览器中使用 Webpack 5 打包 PDFKit:官方示例的完整配置指南

后端文档 【免费下载链接】pdfkit A JavaScript PDF generation library for Node and the browser 项目地址: https://gitcode.com/gh_mirrors/pd/pdfkit 点击查看 免费下载 本文基于 PDFKit 仓库中官方自带的 examples/webpack 示例,系统讲解如何在浏… · 2026/9/24 16:23:09

PandaWiki 快速上手指南:从 Docker 安装到 AI 知识库搭建全流程
PandaWiki 快速上手指南:从 Docker 安装到 AI 知识库搭建全流程

后端前端人工智能AI 应用RAG知识管理 【免费下载链接】PandaWiki PandaWiki 是一款 AI 大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的 产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供 AI 创作、AI 问答、AI 搜索等能力。 项目地… · 2026/9/24 16:23:09

临床药学生写毕业论文,别再让 AI “一键硬编”了:抗菌药专项点评这类题,可以这样选工具 [特殊字符]
临床药学生写毕业论文,别再让 AI “一键硬编”了:抗菌药专项点评这类题,可以这样选工具 [特殊字符]

临床药学专业的同学,毕业前大概率会遇到一类非常典型的任务:在实习医院完成一项用药合理性评价或药学服务实践研究。 比如这篇帖子就选一个很有代表性的题目:《某院呼吸科老年社区获得性肺炎患者抗菌药物使用情况及药师干预效果分析》你需要从… · 2026/9/24 18:13:14

OPNET OSPF动态路由实验配置验证与排错指南
OPNET OSPF动态路由实验配置验证与排错指南

简介:OSPF 是内部网关协议中广泛应用的链路状态路由协议,而 Riverbed OpNet 是业界常用的网络仿真与性能分析平台。该资源是一份面向网络工程师、运维人员及高校学生的 OSPF 仿真项目包,基于 OpNet 环境搭建了完整的 OSPF 网络模型&#xff0… · 2026/9/24 18:13:14

递增的三元子序列
递增的三元子序列

题目描述 给你一个整数数组 numsnumsnums&#xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i,j,k)(i, j, k)(i,j,k) 且满足 i<j<ki < j < ki<j<k &#xff0c;使得 nums[i]<nums[j]<nums[k]nums[i] < nums[… · 2026/9/24 18:13:14

JSP财务管理系统实战全指南:从源码解析到毕业设计避坑
JSP财务管理系统实战全指南:从源码解析到毕业设计避坑

简介&#xff1a;这套基于Jsp的财务管理系统设计与实现交付包&#xff0c;面向计算机相关专业学生及Java Web初学者&#xff0c;适用于课程设计、毕业设计或项目实训等场景&#xff0c;重点是解决财务模块从需求分析到实现交付的完整链路问题。压缩包内包含项目报告、中期报告、… · 2026/9/24 18:13:08

Jsp财务管理系统全解析:从架构设计到部署避坑指南
Jsp财务管理系统全解析:从架构设计到部署避坑指南

简介&#xff1a;基于JSP的财务管理系统全套项目资料&#xff0c;面向高校软件技术、财务信息化、管理信息系统等方向的课程设计或毕业设计人群。压缩包采用zip格式&#xff0c;大小约117.43MB&#xff0c;内容覆盖项目报告、中期报告、答辩PPT、完整源代码与数据库文件&#x… · 2026/9/24 18:13:08

C#在线二手交易平台开发详解:从架构设计到避坑指南
C#在线二手交易平台开发详解:从架构设计到避坑指南

简介&#xff1a;基于C#语言开发的在线二手商品交易平台&#xff0c;面向毕业设计、课程设计场景&#xff0c;适合需要完成完整Web项目实践的学生与开发者。项目覆盖软件工程需求分析、系统设计、编码实现、数据库管理及测试部署等关键环节&#xff0c;能够帮助读者将理论知识转… · 2026/9/24 18:13:08

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

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

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介&#xff1a;面向时间序列数据建模的一维卷积神经网络完整实现&#xff0c;适合深度学习入门者及需要快速验证时序模型的研究者&#xff0c;能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小&#xff0c;只有3KB&#xff0c;内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L&#xff0c;而是舌尖上的L最近在几个方言群和语音教学社群里&#xff0c;反复看到有人发一句&#xff1a;“也说字母L&#xff1a;柔软的长舌”。初看以为是英语发音课笔记&#xff0c;点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码