Back to blog
    Llama Stack 装进手机:用微调 Llama 4 模型打造自托管 Llama 智能体
    llama-stackllama-4fine-tuningai-agentson-devicemobileiosandroid

    Llama Stack 装进手机:用微调 Llama 4 模型打造自托管 Llama 智能体

    Meta 的 Llama Stack 是基于 Llama 的智能体的标准参考架构。把它与微调的 Llama 4 衍生模型以及 Swift/Kotlin 客户端 SDK 结合,你就得到了完全运行在用户手机上的完整智能体技术栈。

    EErtas Team·

    Llama Stack 是 Meta 在 Llama 模型上构建智能体的官方参考架构。智能体、工具、安全过滤器、评估与遥测都在单一统一的 API 表面之后。它是开源权重世界中最接近标准智能体技术栈的存在,其设计意图很明显:不要在每个项目里都重新发明智能体循环、安全层与评估套件。

    大多数关于 Llama Stack 的报道假设服务器部署——一个 Kubernetes 集群、一个 GPU 池、一个你的应用通过网络调用的 API 端点。那是显而易见的路径,也是重新制造开源权重生态本应解决的所有经济与隐私问题的路径。按 token 成本依然为正。网络往返依然慢。用户数据依然离开设备。

    少有人欣赏的是,Llama Stack 自带一流的 Swift 与 Kotlin 客户端 SDK。同一智能体抽象可以让模型嵌入 iOS 或 Android 应用中运行,与捆绑进二进制的本地推理服务器对话。智能体循环、工具分发器、安全过滤器、遥测流水线——所有这些都可以在用户手机上运行,对应用打包的微调 Llama 4 衍生模型运行。

    本指南走完那一架构:在 Ertas Studio 中微调的 Llama 4 模型驱动、并通过 Ertas Deployment CLI 发布到移动应用的、完全设备端运行的完整 Llama Stack 智能体。

    架构

    有三个组件,它们干净地组合在一起。

    第一是设备端推理。Llama Stack 的 Swift 客户端 SDK 自带由 ExecuTorch 支撑的 LocalInference 类,它在宿主 iOS 应用内部直接运行模型——推理不需要单独的 Llama Stack 服务器进程。Kotlin 客户端为 Android 提供等价的设备端适配器。模型在应用的地址空间运行,SDK 把 Llama Stack 的 API 调用翻译为本地推理调用。

    第二是模型本身。设备端推理适配器加载应用打包的 GGUF(或 ExecuTorch 格式)二进制——通常是在你的领域数据上微调并为移动量化的 Llama 4 衍生模型。Ertas Deployment CLI 处理格式转换与资源注册。

    第三是智能体平台。Swift 与 Kotlin 客户端在本地实现 Llama Stack 智能体循环、工具分发、安全过滤与遥测——与服务端 Llama Stack 部署会暴露的相同原语,只不过由设备端推理而非网络端点驱动。从应用视角看,API 表面与远程 Llama Stack 部署完全一致。

    结果是干净的分离。应用代码与 Llama Stack 对话。Llama Stack 客户端驱动设备端推理适配器。推理适配器通过 llama.cpp 或 ExecuTorch 与 GGUF 模型对话。其中没有任何环节需要网络往返。

    为什么具体是 Llama Stack

    这里潜伏着一个完全合理的问题:如果你反正要在设备端运行 llama.cpp,何必涉及 Llama Stack?为什么不直接通过 llama.cpp 的 Swift 或 Kotlin 绑定调用,跳过抽象层?

    诚实的回答是,自制移动推理设置跳过了智能体中容易跳过的部分,而那些部分难以补回。工具调用变成定制解析器。安全过滤变成要么没有要么手写正则。评估变成几个一次性脚本。遥测变成你记得添加的任何 Logfire 或 OpenTelemetry 调用。每个缺口单独可解;合在一起,它们产生让设备端 AI 感觉像是 API 支撑智能体降级版的脆弱智能体。

    Llama Stack 把这些缺口作为标准架构的一部分关闭:

    • Agents API 给你结构化智能体循环,带多轮记忆与工具分发——无需写解析器。
    • Tools API 用带类型 schema 注册你的函数并自动处理路由。
    • Safety API 在输入与输出到达用户前运行 Llama Guard(或你选择的安全模型)。
    • Eval API 对留出测试集运行基准,让你在发布新模型版本时检测回归。
    • Telemetry API 捕获每次智能体运行的结构化追踪用于调试与持续训练。

    你无需自行编写这些就能在手机上对本地模型获得这一切。这才是 Llama Stack 设备端的实际价值主张——不是"推理包装"而是恰好支持嵌入式执行的完整智能体平台。

    微调层

    原版 Llama 4 模型是通才。对大多数智能体移动用例——健身辅导、财务辅助、调度、客户支持以及任何领域特定情形——微调衍生模型戏剧性地更可靠。在你的工具上幻觉率更低、schema 违规更少、风格更一致、对超范围请求的拒绝更好。

    流水线如下:

    1. 在 Ertas Studio 中精选数据集。 Studio 的 Data Craft 模块以你的工具 schema 为输入,产出覆盖工具调用、多步骤流程与拒绝的结构化训练对话。对于领域专门化智能体,你通常需要 400 到 800 个样本——足以教 schema、不至于多到开始拟合噪声。
    2. 在 Studio 中微调 Llama 4。 Llama Stack 最初在 2024 年 9 月与 Llama 3.2 一起发布,并跟随 Llama 家族经历 Llama 3.3 与 Llama 4——Llama 4 衍生品是当前新设备端部署的标准基础,与 Safety API 和 Eval API 无需翻译即可集成。Studio 默认配置是 3 个 epoch 的 rank 32 QLoRA。在 Llama 4 8B 基础上训练 500 样本数据集通常一小时内完成。
    3. 导出为 GGUF。 Studio 的导出流程在你指定的级别产出量化的 GGUF 二进制。对于手机上的 Llama 4 8B,Q4_K_M 在磁盘上约 5 GB,可在任何现代旗舰上干净运行。对于更激进的占用,Q3_K_M 以小幅质量代价进一步降低。
    4. 通过 Ertas Deployment CLI 发布到移动端。 CLI 把 llama.cpp 安装到 iOS 或 Android 项目中、把 GGUF 放进正确的资源目录、配置 Llama Stack 的本地服务器以提供模型服务、并接好 Swift 或 Kotlin 客户端。从运行 CLI 到第一次智能体调用通常少于十五分钟。
    ertas deploy mobile \
      --project ./fitness-app \
      --model ertas-fitness-coach-llama4-8b.gguf \
      --framework ios \
      --runtime llama-stack
    

    --runtime llama-stack 标志告诉 CLI 接入 Llama Stack 设备端适配器(iOS 上的 LocalInference、Android 上的 Kotlin 等价物),而不是裸 llama.cpp 调用。CLI 生成推理适配器注册代码、配置模型资源、并把 Swift 或 Kotlin 客户端钩入宿主应用的生命周期,使智能体平台在应用启动时就绪。

    工作示例:一个健身辅导智能体

    我们要构建的智能体如下。用户打开健身应用,输入类似"我做了 3x10 个 135 磅深蹲,记录下来并告诉我下一步"。智能体有三个工具:

    • log_workout(exercise: String, sets: Int, reps: Int, weight: Double) 记录训练
    • fetch_progress(exercise: String, weeks: Int) 返回最近历史
    • suggest_routine(goal: String, equipment: [String]) 建议下一次训练

    在 Studio 中,我们精选约 600 个对话的数据集,覆盖单工具调用、多步骤流程(先记录再建议)、拒绝(医疗建议超范围)以及验证边界用例(缺失重量默认为自重)。在 3 个 epoch 上微调 Llama 4 8B。评估套件通过:96% 工具名称准确率、95% 参数名称准确率、94% 参数值准确率。生产就绪。

    运行 Deployment CLI、指向 iOS 项目、选择 --runtime llama-stack。两分钟后项目构建完成、设备端推理适配器与模型一起注册、Swift 客户端接入。

    下面是整个客户端智能体集成:

    import LlamaStack
    
    let client = LlamaStackClient(transport: .embedded)
    
    let agent = try await client.agents.create(
        model: "ertas-fitness-coach-llama4-8b",
        instructions: "You are a fitness coach. Use the tools to log workouts and suggest routines. Refuse medical questions.",
        tools: [
            Tool(name: "log_workout", description: "Log a completed workout"),
            Tool(name: "fetch_progress", description: "Fetch recent workout history"),
            Tool(name: "suggest_routine", description: "Suggest the next routine"),
        ],
        safety: .llamaGuard
    )
    
    let session = try await agent.createSession()
    
    let response = try await session.turn(
        messages: [.user("I did 3x10 squats at 135, log it and tell me what to do next.")],
        toolHandlers: [
            "log_workout": logWorkoutHandler,
            "fetch_progress": fetchProgressHandler,
            "suggest_routine": suggestRoutineHandler,
        ]
    )
    
    print(response.finalMessage.content)
    

    约三十行 Swift。智能体循环、工具分发、通过 Llama Guard 的安全过滤、多轮会话记忆——Llama Stack 全部处理。宿主应用提供三个工具处理器(实际向 Core Data 记录、查询历史、产出训练计划的 Swift 函数),其余由 Llama Stack 处理。

    Kotlin 中的同一模式本质相同:

    val client = LlamaStackClient(transport = Transport.Embedded)
    
    val agent = client.agents.create(
        model = "ertas-fitness-coach-llama4-8b",
        instructions = "You are a fitness coach. Use the tools to log workouts and suggest routines.",
        tools = listOf(
            Tool("log_workout", "Log a completed workout"),
            Tool("fetch_progress", "Fetch recent workout history"),
            Tool("suggest_routine", "Suggest the next routine"),
        ),
        safety = Safety.LlamaGuard,
    )
    

    之后发生的一切——推理、工具调用、安全检查——在 iOS 与 Android 之间相同。Stack 干净地抽象了运行时。

    经济模型

    成本论与所有设备端智能体架构相同。多轮健身辅导流程对前沿 API 的运行成本根据上下文长度大约为每会话 3 到 8 美分。每天 1,000 个活跃用户、每人平均每天 4 次会话,就是每天 120 到 320 美元,即每月 3,600 到 9,600 美元。账单随用户线性扩展。

    设备端,每次推理的边际成本是用户手机上的 GPU/CPU 时间——通常几百毫秒以及用户电池的不到一分钱。固定成本是磁盘上的模型占用。两项都不随用户数增长。

    对移动应用构建者,智能体成本悬崖根据会话强度在 500 到 5,000 用户之间咬下——那是 API 成本开始消耗订阅收入的速度快于使用增长能甩开的范围。设备端推理完全消除该悬崖,且 Llama Stack 设备端在不强迫团队从零重建智能体循环、安全过滤器或遥测流水线的前提下消除它。

    对于隐私敏感用例,权衡更尖锐。健康、金融与法律领域对用户数据的去向有硬性要求。设备端智能体永远不会让"用户消息发送给 Meta"或"用户消息发送给 OpenAI"成真。对某些类别的应用,这既是合规论证也是成本论证——也是唯一重要的论证。

    与其他设备端方案的差异化

    把模型放到手机上有其他方法。你可以通过 llama.cpp 的 Swift 绑定直接调用。你可以在 iOS 26+ 上使用 Apple Foundation Models。你可以在 Android 上使用 Google 的 AICore。你可以在任何这些之上自制智能体循环。

    Llama Stack 设备端提供而其他方案没有的,是智能体平台的其余部分。Llama Guard 用于安全过滤、已集成与配置。Eval API 用于在发布新微调时捕获回归。Telemetry API 用于结构化追踪、可反馈到下一轮训练。Tools API 用于带类型 schema 与自动分发。Agents API 处理多轮会话记忆。

    你不是从零构建那些层,也不是把六个开源库拼凑起来近似它们。你是在使用 Meta 为这一目的设计的参考架构,模型嵌入应用而非位于网络端点之后。

    结语

    发布 AI 功能的移动构建者可以发布完整的智能体技术栈——不仅是推理——完全在用户设备上。Meta 的参考架构、微调的 Llama 4 衍生模型与少量胶水代码。Llama Stack、Ertas Studio 与 Ertas Deployment CLI 的组合把过去一个季度的平台工程坍缩为一个下午的集成工作。

    微调部分是 Studio 赚回工资的地方——原版 Llama 4 模型是通才,而你需要发布的智能体可靠性来自一个对你的工具熟悉到位的模型。部署部分是 CLI 赚回工资的地方——把 llama.cpp(或 ExecuTorch)、Llama Stack 设备端推理适配器、Swift 或 Kotlin 客户端与一个 5 GB 模型文件接入 iOS 或 Android 项目,是 20-40 小时的构建配置工作,大多数应用构建者从未完成。把三块叠在一起,从"我们想要设备端智能体"到"我们有了设备端智能体"的路径变成单一下午。

    对盯着智能体成本悬崖的应用构建者,那就是路径。Llama Stack 给你架构。Llama 4 给你基础模型。Studio 给你专门化。Deployment CLI 给你移动发布流水线。智能体在用户手机上运行,账单不再随使用增长,用户数据从不离开设备。

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading