
llama.rn
在 React Native 应用里跑本地大模型,离线也能对话
llama.rn 是 llama.cpp 的 React Native 绑定库,让开发者能在 iOS 和 Android 原生应用里直接运行本地大语言模型,无需依赖云端 API。它把 llama.cpp 的 C/C++ 推理能力封装成 JavaScript/TypeScript 接口,支持加载 GGUF 格式模型、流式生成 token、多轮对话上下文管理,以及可调用的底层参数(如温度、top-k、线程数)。核心价值在于把端侧 LLM 推理带进跨平台移动开发流程,开发者用熟悉的 React Native 技术栈就能做出离线可用的 AI 聊天、文本补全、摘要等应用,避免网络延迟、隐私外泄和调用费用。项目以 C 语言实现核心,提供 Android 与 iOS 双端支持,适合需要本地推理、数据不出设备的移动场景。
项目数据
使用教程
环境要求
- 已创建的 React Native 项目(v0.10 起要求启用新架构)
- Node.js 与 npm 环境(使用 Bun 时需将 llama.rn 标记为受信任包)
- iOS/Android 原生构建环境(Xcode 或 Android 构建工具链)
- 已准备好 GGUF 格式的模型文件,多模态还需对应 mmproj 文件
安装与启动步骤
-
1安装 llama.rn
在 React Native 项目根目录执行。postinstall 会自动下载 iOS 与 Android 预编译产物并做 SHA-256 校验,已下载的会复用。
npm install llama.rn -
2确认新架构
v0.10 起必须使用 React Native 新架构;若需旧架构支持或 v0.9.x 文档,请改用 v0.9 分支。
-
3准备 GGUF 模型
把下载好的 GGUF 模型放到应用可访问的路径,代码中以 file:// 开头的完整路径引用。多模态场景还需额外准备 mmproj 投影文件。
-
4读取模型信息
先用 loadLlamaModelInfo 验证模型文件路径正确、可被解析,控制台会打印出模型元信息。
import { loadLlamaModelInfo } from 'llama.rn' const modelPath = 'file:///your/path/model.gguf' console.log('Model Info:', await loadLlamaModelInfo(modelPath)) -
5初始化上下文
用 initLlama 加载模型创建上下文,首次加载耗时较长;n_gpu_layers 控制放入 GPU 的层数,可按设备调整。
import { initLlama } from 'llama.rn' const context = await initLlama({ model: modelPath, use_mlock: true, n_ctx: 2048, n_gpu_layers: 99, }) -
6发起对话补全
向 context.completion 传入 messages 做聊天补全,或传 prompt 做文本补全;第二个参数是流式 token 回调。
const stopWords = ['', '<|end|>', '<|eot_id|>', '<|end_of_text|>', '<|im_end|>'] const msgResult = await context.completion( { messages: [ { role: 'system', content: 'This is a conversation between user and assistant, a friendly chatbot.' }, { role: 'user', content: 'Hello!' }, ], n_predict: 100, stop: stopWords, }, (data) => { const { token } = data }, ) console.log('Result:', msgResult.text)
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
model | 是 | GGUF 模型文件的本地路径,以 file:// 开头 | file:///your/path/model.gguf |
n_ctx | 否 | 上下文窗口长度,越大占用内存越多 | 2048 |
n_gpu_layers | 否 | 放入 GPU 显存的层数(Metal/OpenCL) | 99 |
use_mlock | 否 | 是否锁定内存防止被换出 | true |
embedding | 否 | 是否启用 embedding 输出,TTS 连续模型需要 | true |
n_parallel | 否 | 并行槽最大数量,配合 parallel.enable 使用 | 4 |
如何确认成功
调用 loadLlamaModelInfo 打印出模型信息,或 initLlama 成功返回 context 并输出 completion 的 text 与 timings,即表示推理链路可用。
常见问题
Q:安装后没有下载到 iOS/Android 预编译产物怎么办?
A:这些产物由 postinstall 从对应 GitHub release 下载并用 SHA-256 校验,已存在会复用。若因网络中断失败,删除后重新执行 npm install 即可。
Q:用 Bun 安装后提示找不到二进制文件?
A:Bun 默认不执行依赖的生命周期脚本。需要先把 llama.rn 标记为受信任包,再重新安装以触发 postinstall 下载。
Q:能用旧架构的 React Native 吗?
A:v0.10 起要求新架构。需要旧架构支持时,改用仓库的 v0.9 分支及其文档。
Q:如何让模型只输出指定结构的内容?
A:llama.rn 支持 GBNF 语法与 JSON schema 语法采样,可在生成时约束输出格式,适合工具调用等结构化场景。
Q:怎么支持图片或音频输入?
A:需要多模态模型并准备对应的 mmproj 投影文件,通过 mmproj 集成启用视觉/音频理解。
注意事项
- 首次 initLlama 加载模型可能耗时较久,需耐心等待。
- 模型必须放在应用可访问的路径,并以 file:// 形式传入。
- Android 的 Hexagon NPU 加速目前为实验特性。
- TTS 为实验功能,用完 vocoder 后应调用 releaseVocoder 释放资源。
核心亮点
- 直接复用 llama.cpp 的推理内核,支持 GGUF 量化模型,端侧性能有保障
- 提供 React Native 原生模块,JS/TS 调用简单,能流式返回 token 做打字机效果
- 同时覆盖 Android 和 iOS,一套代码跨平台,适合已有 RN 技术栈的团队快速集成
不足之处
- 模型文件需自行准备并打包或下载,体积大,对 App 包体和存储有压力
- 端侧推理速度受手机芯片限制,大参数模型体验有限,文档和示例相对精简
适用场景
- 离线 AI 聊天助手:在无网或弱网环境下用本地模型完成对话
- 隐私敏感场景:医疗、法律等文本在设备内处理,不上传云端
- 移动端文本工具:本地摘要、改写、翻译等轻量 AI 功能嵌入 App
替代项目
llama.cpp、mlc-llm、react-native-executorch
项目介绍
上一篇:guardrails
同类项目推荐
ComfyUI_Custom_Nodes_AlekPet
开源
给 ComfyUI 装上语音翻译和姿态检测,工作流更全能
Custom nodes that extend the capabilities of Comfyui
langchain
开源
组装 AI 应用的乐高积木,从想法到上线不换工具
The agent engineering platform.
transformers
开源
全球最大的模型仓库全家桶,想用的模型一把抓
Transformers: the model-definition framework for state-of-the-art machine learning m···
bruno
开源
把 API 测试当代码管理,用 Git 搞定协作与版本追踪
Opensource IDE For Exploring and Testing API's (lightweight alternative to Postman/I···