pcliangx/agf-wiring-apple-llm
Use when wiring LLM features into the Apple client (macOS / iOS) — streaming chat via the FastAPI multi-LLM gateway, or on-device inference (Apple Foundation Models / Core ML). Provides the route decision (gateway vs on-device), streaming transport pattern, env/config contract, offline & cost guardrails, and minimum verifications before declaring the integration done.
npx skills add https://github.com/pcliangx/AppGenesisForge --skill agf-wiring-apple-llm
Use this skill when:
apple/ app 加对话 / 生成 / 总结类 LLM 功能默认走后端网关:FastAPI 后端已按 skill agf-wiring-multi-llm-sdk 封装 DeepSeek / Doubao / Qwen / MiniMax(provider 切换、fallback、cost telemetry 全在服务端)。客户端只对一个自有 API 说话,不直连任何 LLM 厂商。
| 场景 | 路由 | 理由 |
|---|---|---|
| 对话 / 生成 / RAG(默认) | 后端网关 | key 不进客户端、provider 可热切、成本计量集中、合规审计单点 |
| 离线可用 / 隐私敏感(文本不出设备)/ 低延迟小任务(分类、摘要短文本) | on-device(Apple Foundation Models framework,iOS 26+ / macOS 26+;或 Core ML 自带模型) | 零 token 成本、断网可用;但模型能力 / 上下文受限 |
| 多模态生成(文生图 / 视频) | 后端网关(ml-engineer 维护的推理服务) | 客户端不嵌大模型 |
> 铁律:LLM 厂商 API key 永不进客户端。客户端二进制可被逆向,任何打进 app 的 key 等于公开。只有自有后端的会话凭证可进客户端。
on-device 路径若成为产品主路径(非补充),属技术选型变更 → tech-lead 新开 ADR。
后端以 SSE(text/event-stream)暴露流式 chat 端点。注意:OpenAPI 对 SSE 描述能力有限——流式端点允许在生成 client 之外手写一个最小 SSE transport(这是 ADR-008「禁手写」的唯一豁免点,豁免范围仅限流式通道本身;请求/响应模型仍用生成类型):
// AppCore/Sources/AppCore/LLM/StreamingClient.swift —— 唯一允许的手写网络层(SSE 豁免)
let (bytes, response) = try await URLSession.shared.bytes(for: request)
for try await line in bytes.lines {
guard line.hasPrefix("data: ") else { continue }
let payload = line.dropFirst(6)
if payload == "[DONE]" { break }
// decode 用生成的 Components.Schemas.ChatChunk 类型,不手写 DTO
}
Task.cancel() 必须真正断开 SSE 连接(防后台烧 token)@MainActor 的 AsyncSequence 消费,禁在主线程做 JSON 解析客户端无 .env;配置走 build configuration / Info.plist 注入:
| 项 | 载体 | 说明 |
|---|---|---|
| 网关 base URL | xcconfig per-configuration(Debug → localhost / UAT 栈,Release → 生产) | 禁硬编码在 Swift 源码 |
| 会话凭证 | Keychain | 禁 UserDefaults / 文件 |
| on-device 模型开关 | feature flag(后端下发或本地配置) | 降级链路可远程关 |
@available + 能力探测 gating,回落网关或隐藏入口apple-native.md §7):AI 生成内容须有举报 / 过滤入口;用户输入发往后端在隐私政策声明;隐私清单如实标注localhost:1),确认降级行为符合上表strings 扫 release 二进制无任何厂商 key / 网关密钥(strings App | grep -iE 'sk-|api[_-]?key')agf-wiring-multi-llm-sdk(服务端 SSOT,本 skill 不重复)Take pcliangx/agf-wiring-apple-llm from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.