@capacitor/local-llm

中文文档
1.0.0发布于 2026/05/11MITTypeScriptESM + CJS零依赖近 30 天下载 3123

一个用于运行在device LLMs上的Capacitor插件,支持文本生成,图像生成,以及iOS和Android上的会话管理.

中文使用文档
文档目录26 节
  1. 安装
  2. 平台要求
  3. iOS 设置
  4. Android 设置
  5. 检查可用性和下载
  6. 平台限制
  7. iOS系统
  8. 机器人
  9. 使用量
  10. 基本快捷键
  11. 多回合对话
  12. 用热身来减少第一反应延迟
  13. 图像生成( 只有iOS)
  14. 处理错误
  15. LocalLLMErrorCode
  16. API 密码
  17. 可操作性( )
  18. 下载( )
  19. 提示(...)
  20. 会议结束(...)
  21. 生成图像(...)
  22. 热身(...)
  23. 添加倾听器('system Available Change',...)
  24. 删除所有收听器( )
  25. 接口
  26. 类型异名

@ capacor/ local- llm

[尖叫声]
CapacitorLABS - 这个项目是实验性的. 没有提供支助。 请在有需要时开放问题.

使用苹果智能(Foundation Models)在iOS上运行大型语言模型,并使用双子纳诺在Android上运行. 没有网络请求,没有API密钥,没有数据离开设备.

说明: On-device LLMs需要物理硬件. Android 模拟器不支持 。 只要主机设备能够运行Apple Intelligence并启用,iOS模拟器就会被支持.

安装

npm install @capacitor/local-llm
npx cap sync

平台要求

平台最小操作系统页:1
iOS系统15个图像生成需要iOS 18.4+. 文本LLM(Foundation Models / Apple Intelligence)需要iOS 26+.
机器人9 (API 28) (英语)通过 ML 双子纳米 Kit需要一个支持在device AI上的设备(如像素9+).

iOS 设置

不需要额外的配置。 基础模型和图像游乐场(Foundation Models and Image Playground)是Apple Intelligence启用后在所支持的设备上自动可用的系统框架.

打电话 systemAvailability() 在运行时检查模型是否准备好,然后发出提示.

关于iOS 18和以下, systemAvailability() 返回时 'unavailable' 用于文本 LLM。 若为 prompt() 或者说 warmup() 不管怎么说, 承诺将因错误而被拒绝。 图像生成通过 generateImage() 已在iOS 18.4+上全面运行.

Android 设置

该插件的最低和机器人SDK为28个,高于Capacitor目前的最低(24个). 你需要改变 android/variables.gradle 应用程序中的文件 :

ext {
    minSdkVersion = 28
}

双子纳米通过Google Play Services发行,使用前必须下载到设备上. 该模型没有与您的应用程序捆绑.

检查可用性和下载

打电话 systemAvailability() 以检查当前状态。 如果状态是 downloadable,触发下载方式 download() 和民意调查 systemAvailability() 直到状态变为 available。 。 。 .

import { LocalLLM } from '@capacitor/local-llm';

const { status } = await LocalLLM.systemAvailability();

if (status === 'downloadable') {
  await LocalLLM.download();
  // Poll systemAvailability() until status === 'available'
  // Alternatively, use addListener('systemAvailabilityChange', {}) to get notified of status updates
}

平台限制

iOS系统

  • Text LLM需要iOS 26和苹果智能. 关于iOS 18和以下, systemAvailability() 返回时 'unavailable' 文本 LLM 和 prompt() 编号 : warmup() 将拒绝。 只有选择iPhones(iPhone 15 Pro或后期)和iPads与Apple Intelligence兼容. 这里有更多信息。 。 。 .
  • download() 在 iOS 上无法获取. 该模型由操作系统管理;使用 systemAvailability() 检查准备状态.
  • 上下文限制为4096个符. 这适用于系统指令的综合长度,对话历史,以及当前快取.

机器人

  • maximumOutputTokens 被夹到 1–256 由 ML Kit API 编辑 。 这一范围以外的价值观将受到胁迫.
  • 多回合会话背景在记忆中管理 通过手动将对话历史集成到每个提示中。 它不是一个本地会话 API , 并且不会在应用程序重启时持续存在 .
  • warmup() 忽略 sessionId 财务报告和审定财务报表 promptPrefix 在Android上——它让模型在全球暖和.
  • 并非所有Android 9+设备都支持双子座纳米. 设备必须有一个相容的安装在device AI芯片上(例如像素9和后期). 这里有更多信息。 。 。 .
  • 当应用程序处于背景状态时,无法使用在线设备模型 . 应用程序背景化时提出的推断请求将失败 .
  • AICore执行每个应用程序的推论配额. 在短期内提出过多的请求将导致 BUSY 出错反应——重试时考虑指数回放. 一个 PER_APP_BATTERY_USE_QUOTA_EXCEEDED 如果应用程序超过更长的配额(例如每日限制),错误可以返回.

使用量

基本快捷键

import { LocalLLM } from '@capacitor/local-llm';

const { text } = await LocalLLM.prompt({
  prompt: 'Summarize the theory of relativity in one paragraph.',
});

console.log(text);

多回合对话

使用一个 sessionId 以在多个提示中保持上下文.

import { LocalLLM } from '@capacitor/local-llm';

const sessionId = 'my-chat-session';

await LocalLLM.prompt({
  sessionId,
  instructions: 'You are a helpful assistant.',
  prompt: 'What is the capital of France?',
});

const { text } = await LocalLLM.prompt({
  sessionId,
  prompt: 'What is the population of that city?',
});

// Clean up when done
await LocalLLM.endSession({ sessionId });

用热身来减少第一反应延迟

import { LocalLLM } from '@capacitor/local-llm';

// Pre-initialize the model before the user starts typing
await LocalLLM.warmup({
  sessionId: 'my-session',
  promptPrefix: 'You are a customer support agent for Acme Corp.',
});

图像生成( 只有iOS)

import { LocalLLM } from '@capacitor/local-llm';

const { pngBase64Images } = await LocalLLM.generateImage({
  prompt: 'A serene mountain lake at sunrise, photorealistic',
  count: 2,
});

// Use directly in an <img> tag
const src = `data:image/png;base64,${pngBase64Images[0]}`;

处理错误

所有插件方法抛出一个 LocalLLMException 失败。 它延伸 Error 并添加一个机器可读 code 类型属性 LocalLLMErrorCode。 。 。 .

import { LocalLLM, LocalLLMException } from '@capacitor/local-llm';

try {
  await LocalLLM.prompt({ prompt: 'Hello' });
} catch (err) {
  if (err instanceof LocalLLMException) {
    console.log(err.code);    // e.g. 'LOCAL_LLM_NOT_ENABLED'
    console.log(err.message); // human-readable description
  }
}

LocalLLMErrorCode

代码说明
LOCAL_LLM_UNSUPPORTED_PLATFORM目前的OS版本或设备硬件不支持在device LLMs上.
LOCAL_LLM_NOT_ENABLED在线设备AI功能得到了用户的支持,但没有被用户启用(如苹果智能).
LOCAL_LLM_NOT_READY该模型存在于设备上,但仍在下载或初始化.
LOCAL_LLM_UNAVAILABLE该模型由于未分类的原因无法使用.
LOCAL_LLM_RESPONSE_IN_PROGRESS已经向已经产生答复的会议发出一个提示.
LOCAL_LLM_NOT_INITIALIZED插件执行未初始化 。 这不应在正常情况下发生.
LOCAL_LLM_MISSING_PARAMETER缺少一个所需的调用参数(例如:. sessionId, (中文(简体) ), prompt) (中文(简体) ).
LOCAL_LLM_WEB_NOT_SUPPORTED该方法在网络平台上被调用,但并不支持.
LOCAL_LLM_IMAGE_GENERATION_FAILED图像生成失败( 例如没有可用的生成样式) .
LOCAL_LLM_UNKNOWN_ERROR一个出乎意料的错误被基础平台SDK所抛出. 检查 err.message 详细情况.

API 密码

与device LLMs互动的主要插件接口.

可操作性( )

systemAvailability() => Promise<SystemAvailabilityResponse>

检查设备 LLM 的可用状态.

使用这种方法来确定LLM是否准备使用,需要下载, 或设备上没有.

回返情况: Promise<SystemAvailabilityResponse>

自: 1.0.0 (单位:千美元)


下载( )

download() => Promise<void>

下载在线设备 LLM 模型.

这种方法在LLM模型尚未下载时启动下载 显示在设备上。 只能从Android上找到.

自: 1.0.0 (单位:千美元)


提示(...)

prompt(options: PromptOptions) => Promise<PromptResponse>

发送一个提示到设备 LLM 并收到回复 .

使用这种方法与 LLM 交互. 您可以选择提供会话Id 以保持多个提示的对话环境.

参数类型说明
optionsPromptOptions- 即时选项,包括文本即时和可选配置

回返情况: Promise<PromptResponse>

自: 1.0.0 (单位:千美元)


会议结束(...)

endSession(options: EndSessionOptions) => Promise<void>

结束活动 LLM 会话 .

用这种方法来清理资源,当您完成一个对话会话时. 这对于管理内存和防止资源泄漏很重要.

参数类型说明
optionsEndSessionOptions- 包含会议结束的选项

自: 1.0.0 (单位:千美元)


生成图像(...)

generateImage(options: GenerateImageOptions) => Promise<GenerateImageResponse>

使用 device LLM 从文本提示生成图像 .

使用这种方法创建基于文本描述的图像. 可选规定 参考图像来影响生成。 生成的图像被返回 在一个阵列中作为基础64-编码的 PNG 字符串.

参数类型说明
optionsGenerateImageOptions- 图像生成选项,包括即时、可选的参考图像和计数

回返情况: Promise<GenerateImageResponse>

自: 1.0.0 (单位:千美元)


热身(...)

warmup(options: WarmupOptions) => Promise<void>

暖和一下LLM 以更快的初始反应.

使用这种方法在 LLM 初始化前加一个快取前缀, 减少空闲度 第一个实际快速。 当您提前知道类型时,这个是有用的 通知你发送.

参数类型说明
optionsWarmupOptions- 热身选项,包括即时前缀

自: 1.0.0 (单位:千美元)


添加倾听器('system Available Change',...)

addListener(eventName: 'systemAvailabilityChange', listenerFunc: SystemAvailabilityChangeListener) => Promise<PluginListenerHandle>

当设备 LLM 可用性状态发生变化时,会调用它.

每次改变时都会以新的可用状态引用收听器. 投票 当第一个听众被添加时开始, 当所有听众被删除时停止 removeAllListeners()。 。 。 .

参数类型说明
eventName'systemAvailabilityChange'- 要听的活动名称
listenerFuncSystemAvailabilityChangeListener- 在每个变化中,以新的可用状态引用回调

回返情况: Promise<PluginListenerHandle>

自: 1.0.0 (单位:千美元)


删除所有收听器( )

removeAllListeners() => Promise<void>

接口

系统可操作性响应

包含设备上LLM的系统可用状态的反应.

Prop类型说明自兹
statusLLMAvailabilityLLM目前可用状态.1.0.0 (单位:千美元)

快速回复

LLM 处理后的反应 .

Prop类型说明自兹
textstringLLM生成的文本响应.1.0.0 (单位:千美元)

提示选项

向 LLM 发送提示的选项 .

Prop类型说明自兹
sessionIdstring用于保持对话环境的可选会话标识符 。 通过多个提示提供相同的会话Id以保持上下文. 如不提供,则将每个提示视为独立.1.0.0 (单位:千美元)
instructionsstring系统级指令来指导LLM的行为. 以此来设定LLM反应的作用,基调或约束.1.0.0 (单位:千美元)
optionsLLMOptions控制 LLM 推论行为的配置选项 .1.0.0 (单位:千美元)
promptstring文本提示发送到 LLM .1.0.0 (单位:千美元)

LLM 选项

LLM 推断行为的配置选项 .

Prop类型说明自兹
temperaturenumber控制模型输出中的随机性. 更高的值(如0.8)使输出更加随机,而更低的值(如0.2)则使其更有针对性并具有决定性.1.0.0 (单位:千美元)
maximumOutputTokensnumber响应中要生成的最大符数 。 在Android上,这一定是在1到256之间.1.0.0 (单位:千美元)

届会结束

结束活动 LLM 会话的选项 .

Prop类型说明自兹
sessionIdstring要结束的会话标识符 。 这应该与先前的快讯( ) 呼叫中使用的会话Id 匹配 .1.0.0 (单位:千美元)

生成图像响应

包含生成的图像数据的反应 .

Prop类型说明自兹
pngBase64Imagesstring[]将生成的图像编组为 Base64-encoded PNG 字符串 。 每个字符串包含原始基础64数据(没有数据URI前缀). 要在 Ing 标记中使用, 前缀为 “ data: image/ png; base64, ” .1.0.0 (单位:千美元)

生成图像选项

从文本提示生成图像的选项 .

Prop类型说明默认自兹
promptstring文字提示描述要生成的图像 .1.0.0 (单位:千美元)
promptImagesstring[]可选的参考图像阵列来影响生成的输出. 提供碱基64-编码的图像字符串(无论有无数据URI前缀),用作图像生成的可视上下文或灵感. 这使得您可以结合文本和图像概念来进行更受控的输出.1.0.0 (单位:千美元)
countnumber要生成的图像变化数 。 未指定时默认为 1 .11.0.0 (单位:千美元)

温暖选项

升温LLM的选项.

Prop类型说明自兹
sessionIdstring热身的会话标识符 。 此标识符将与温暖会话相关, 允许您使用同一会话进行后续提示 .1.0.0 (单位:千美元)
promptPrefixstring用于升温LLM的快速前缀. 此文本将被用于模型的初始化前,减少后期带有类似前缀的提示的延迟.1.0.0 (单位:千美元)

插件听筒

Prop类型
remove() => Promise<void>

类型异名

法学硕士

设备LLM的可用性状况.

'available' | 'unavailable' | 'notready' | 'downloadable'

系统可操作性

当在线设备 LLM 可用性状态改变时,会引用回调 .

(response: SystemAvailabilityResponse): void

版本与发布记录

@capacitor/local-llm 共发布 2 个版本,首次发布于 2026/05/11;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.0.0latest2026/05/115 个月前
0.0.0-dev.f15b48ddev2026/05/115 个月前

关于 @capacitor/local-llm 的常见问题

@capacitor/local-llm 是什么?

一个用于运行在device LLMs上的Capacitor插件,支持文本生成,图像生成,以及iOS和Android上的会话管理.

如何安装 @capacitor/local-llm?

在项目目录运行 npm install @capacitor/local-llm,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capacitor/local-llm 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@capacitor/local-llm 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capacitor/local-llm 可以商用吗?

@capacitor/local-llm 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@capacitor/local-llm 的下载量有多少?

根据 npm 官方下载统计,@capacitor/local-llm 在 2026/10/09 – 2026/11/07 这 30 天内被下载 3,123 次,日均约 104 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capacitor/local-llm 还在维护吗?

最新版本 1.0.0 发布于 2026/05/11(5 个月前);至今共发布 2 个版本,其中过去 12 个月发布了 2 个;首次发布于 2026/05/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。