foundation_models
设备端大模型文本生成(Foundation Models,iOS 26+)。
端侧文本生成(Apple Foundation Models,iOS 26+):对话、摘要、错误解释。
边界:需 iOS 26+ 且设备支持 Apple Intelligence 端侧模型。与云端 Agent 不同;带工具调度的助手请用 assistant。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | import foundation_models |
| 适合做什么 | 本地摘要、代码解释、短问答 |
| 调用时机 | respond / summarize 放在按钮回调 |
| 推荐顺序 | is_available() → 选择 API → 传入文本 |
| 隐私 | 推理在设备端完成,不经过本模块发网络请求 |
#快速开始
已复制
import foundation_models
if not foundation_models.is_available():
print("Foundation Models 不可用")
else:
answer = foundation_models.respond("用三句话介绍 Python")
print(answer)
summary = foundation_models.summarize("很长的文章正文……", max_sentences=3)
print(summary)
解释 Python 报错:
已复制
import foundation_models
hint = foundation_models.explain_error(
"NameError: name 'x' is not defined",
code_snippet="print(x)",
)
print(hint)
#AppUI 示例
已复制
import appui
import foundation_models
state = appui.State(
available="—",
prompt="用一句话介绍 PythonIDE",
output="—",
)
def refresh_available():
state.available = "是" if foundation_models.is_available() else "否"
def ask_model():
refresh_available()
if state.available != "是":
state.output = "Foundation Models 不可用(需 iOS 26+)"
return
try:
state.output = foundation_models.respond(state.prompt)
except foundation_models.FoundationModelsError as exc:
state.output = str(exc)
def body():
return appui.NavigationStack(
appui.Form([
appui.Section("提问", [
appui.TextEditor(text=state.prompt).frame(min_height=80),
appui.Button("生成回答", action=ask_model)
.button_style("bordered_prominent"),
]),
appui.Section("结果", [
appui.LabeledContent("可用", value=state.available),
appui.Text(state.output).foreground_color("secondaryLabel"),
]),
]).navigation_title("端侧模型")
)
appui.run(body, state=state)
#API 参考
#速查
| API | 作用 |
|---|---|
is_available() | 端侧模型是否可用 → bool |
respond(prompt, instructions=None) | 自由问答 → str |
summarize(text, max_sentences=3) | 文本摘要 → str |
explain_error(error, code_snippet='') | 解释报错 → str |
FoundationModelsError | 操作失败异常 |
#respond
已复制
text = foundation_models.respond(
"总结这段日志的关键问题",
instructions="回答要简短,用中文",
)
#summarize / explain_error
已复制
foundation_models.summarize(long_text, max_sentences=5)
foundation_models.explain_error("SyntaxError: invalid syntax", code_snippet="if True\nprint()")
#常见错误
| 错误写法 | 后果 | 修正 |
|---|---|---|
| 在低版本 iOS 调用 | is_available() 为 False | 检查系统版本与机型 |
在 body() 里自动生成 | 每次刷新重复推理 | 放进按钮回调 |
| 期望访问日历/照片等工具 | 本模块无工具 | 用 assistant |
| 超长上下文一次传入 | 可能截断或失败 | 分段摘要 |
#相关文档
| 文档 | 用途 |
|---|---|
| assistant | 带内置设备工具的助手 |
| translation | 文本翻译 |
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。