Zing 论坛

正文

Llamatik:Kotlin多平台真端侧AI解决方案

Llamatik是一个真正的Kotlin多平台AI库,支持在Android、iOS、桌面和WASM上本地运行LLM、语音识别和图像生成,无需Python、无需服务器。

Kotlin多平台端侧AI本地推理llama.cpp语音识别图像生成移动AI隐私保护
发布时间 2026/04/08 22:12最近活动 2026/04/08 22:25预计阅读 6 分钟
Llamatik:Kotlin多平台真端侧AI解决方案
1

章节 01

导读 / 主楼:Llamatik:Kotlin多平台真端侧AI解决方案

Llamatik是一个真正的Kotlin多平台AI库,支持在Android、iOS、桌面和WASM上本地运行LLM、语音识别和图像生成,无需Python、无需服务器。

2

章节 02

项目定位:隐私优先的端侧AI

Llamatik的核心理念可以概括为一句话:你的模型、你的数据、你的设备。在云端AI服务日益普及的今天,数据隐私和离线可用性仍然是许多应用场景的硬性需求。

Llamatik通过以下设计原则实现这一目标:

  • 完全离线推理:所有计算在设备本地完成,无需网络连接
  • 零数据外泄:用户数据永远不会离开设备
  • 统一Kotlin API:一套代码,多端运行
  • 无需Python:纯Kotlin实现,无需Python运行时
3

章节 03

技术架构:原生C++与Kotlin的完美融合

Llamatik的架构设计体现了工程上的深思熟虑。它不是简单的封装,而是深度的原生集成:

你的应用
│
▼
LlamaBridge (共享Kotlin API)
│
├─ llamatik-core → 原生llama.cpp、whisper.cpp、stablediffusion.cpp (端侧)
├─ llamatik-client → 远程HTTP推理
└─ llamatik-backend → llama.cpp兼容服务器

这种分层架构的最大优势在于灵活性:在本地推理和远程推理之间切换,只需要修改配置,无需改动API调用代码。

4

章节 04

底层依赖版本

  • llama.cpp: b7815
  • whisper.cpp: v1.8.3
  • stablediffusion.cpp: master-504-636d3cb

这些版本选择经过精心测试,确保稳定性和性能的平衡。

5

章节 05

1. 大语言模型(LLM)

通过LlamaBridge对象提供完整的文本生成能力:

基础文本生成

// 解析模型路径(将GGUF放入assets/bundle)
val modelPath = LlamaBridge.getModelPath("phi-2.Q4_0.gguf")

// 加载模型
LlamaBridge.initGenerateModel(modelPath)

// 生成文本
val output = LlamaBridge.generate(
    "用一句话解释Kotlin多平台。"
)

带上下文的对话生成

val output = LlamaBridge.generateWithContext(
    systemPrompt = "你是一个 helpful 的AI助手。",
    contextBlock = "用户:你好\n助手:你好!有什么可以帮助你的?",
    userPrompt = "Kotlin和Java有什么区别?"
)

流式生成

对于需要实时显示生成内容的场景:

LlamaBridge.generateStream(
    prompt = "写一首关于编程的诗。",
    callback = object : GenStream {
        override fun onDelta(text: String) {
            // 实时接收token
            print(text)
        }
        override fun onComplete() {
            println("\n[完成]")
        }
        override fun onError(message: String) {
            println("错误: $message")
        }
    }
)

JSON结构化输出

支持通过JSON Schema约束输出格式:

val schema = """
{
  "type": "object",
  "properties": {
    "name": {"type": "string"},
    "age": {"type": "integer"}
  }
}
"""

val jsonOutput = LlamaBridge.generateJson(
    prompt = "生成一个用户对象",
    jsonSchema = schema
)

嵌入向量生成

支持生成文本嵌入,用于向量搜索和RAG应用:

LlamaBridge.initModel(modelPath)
val embedding = LlamaBridge.embed("需要编码的文本")
// 返回FloatArray,可用于相似度计算
6

章节 06

2. 语音识别(Whisper)

通过WhisperBridge提供设备端语音转文字能力:

// 获取模型路径
val modelPath = WhisperBridge.getModelPath("ggml-tiny-q8_0.bin")

// 初始化(应用启动时执行一次)
WhisperBridge.initModel(modelPath)

// 转录音频(16kHz单声道WAV格式效果最佳)
val text = WhisperBridge.transcribeWav(
    wavPath = "/path/to/recording.wav",
    language = "zh",  // 可选:指定语言
    initialPrompt = "医学术语"  // 可选:引导特定领域词汇
).trim()

// 应用关闭时释放资源
WhisperBridge.release()
7

章节 07

3. 图像生成(Stable Diffusion)

通过StableDiffusionBridge实现设备端文生图:

val modelPath = StableDiffusionBridge.getModelPath("sd-model.bin")

StableDiffusionBridge.initModel(modelPath)

val imageBytes = StableDiffusionBridge.generateImage(
    prompt = "赛博朋克风格的羊驼在霓虹东京",
    width = 512,
    height = 512,
    steps = 20,
    cfgScale = 7.5f
)

// 将imageBytes保存为PNG文件
8

章节 08

4. 多模态视觉(VLM)

通过MultimodalBridge支持设备端图像理解:

// 初始化需要两个文件:视觉模型GGUF和对应的mmproj GGUF
val loaded = MultimodalBridge.initModel(
    modelPath = "/path/to/SmolVLM-256M-Instruct-Q8_0.gguf",
    mmprojPath = "/path/to/mmproj-SmolVLM-256M-Instruct-f16.gguf"
)

// 分析图像
val imageBytes = File("/path/to/photo.jpg").readBytes()

MultimodalBridge.analyzeImageBytesStream(
    imageBytes = imageBytes,
    prompt = "描述这张图片中你看到了什么。",
    callback = object : GenStream {
        override fun onDelta(text: String) { print(text) }
        override fun onComplete() { println("\n[完成]") }
        override fun onError(message: String) { println("错误: $message") }
    }
)