
llama.rn
在 React Native 应用里跑本地大模型,离线也能对话
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-09-16 · 当前星标 ★ 1065
使用教程
ℹ 本教程由 AI 依据该项目 README 整理,个别步骤可能需要按你的环境微调。
环境要求
- 已创建的 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 = ['</s>', '<|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
同类项目推荐
ZombieBuddy
开源
不改源码,运行时直接改游戏逻辑
Java agent framework for Project Zomboid that enables runtime bytecode patching usin···
Turing.jl
开源
用几行 Julia 代码写概率模型,自动完成贝叶斯推断
Bayesian inference with probabilistic programming.
instructor-php
开源
PHP 开发者也能轻松获得结构化 AI 输出,快速构建 Agent 应用。
Unified LLM API, structured data outputs with LLMs, and agent SDK - in PHP
openai-async
开源
异步调用 OpenAI,不阻塞,高并发轻松搞定
A light-weight, asynchronous client for OpenAI API - text completion, image generati···
Arcade-Learning-Environment
开源
用 Atari 2600 游戏快速搭建和评测强化学习智能体
A simple framework that allows researchers and hobbyists to develop AI agents for At···
agentscope-studio
开源
可视化多智能体运行轨迹,调试 LLM 应用更直观
A development-oriented visualization toolkit
codex-multi-auth
开源
多账号一键切换,Codex 登录永不掉线
Codex CLI multi-account OAuth manager with account switching, health checks, runtime···
OfflineAI-KMP
开源
不联网也能用的跨平台本地AI助手,数据不出设备
superduper
开源
把 AI 模型直接跑在数据库上,快速搭建生产级智能应用。
Superduper: End-to-end framework for building custom AI applications and agents.