章节 01
导读 / 主楼:Llamatik:Kotlin多平台真端侧AI解决方案
Llamatik是一个真正的Kotlin多平台AI库,支持在Android、iOS、桌面和WASM上本地运行LLM、语音识别和图像生成,无需Python、无需服务器。
正文
Llamatik是一个真正的Kotlin多平台AI库,支持在Android、iOS、桌面和WASM上本地运行LLM、语音识别和图像生成,无需Python、无需服务器。
章节 01
Llamatik是一个真正的Kotlin多平台AI库,支持在Android、iOS、桌面和WASM上本地运行LLM、语音识别和图像生成,无需Python、无需服务器。
章节 02
Llamatik的核心理念可以概括为一句话:你的模型、你的数据、你的设备。在云端AI服务日益普及的今天,数据隐私和离线可用性仍然是许多应用场景的硬性需求。
Llamatik通过以下设计原则实现这一目标:
章节 03
Llamatik的架构设计体现了工程上的深思熟虑。它不是简单的封装,而是深度的原生集成:
你的应用
│
▼
LlamaBridge (共享Kotlin API)
│
├─ llamatik-core → 原生llama.cpp、whisper.cpp、stablediffusion.cpp (端侧)
├─ llamatik-client → 远程HTTP推理
└─ llamatik-backend → llama.cpp兼容服务器
这种分层架构的最大优势在于灵活性:在本地推理和远程推理之间切换,只需要修改配置,无需改动API调用代码。
章节 04
这些版本选择经过精心测试,确保稳定性和性能的平衡。
章节 05
通过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 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,可用于相似度计算
章节 06
通过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()
章节 07
通过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文件
章节 08
通过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") }
}
)