iOS 基于 Foundation Model 构建媒体流 - 教程

news/2025/12/5 18:14:44/文章来源:https://www.cnblogs.com/gccbuaa/p/19313340

网罗开发(小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
大家好,我是展菲!
全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 背景
    • 引入 Streaming:实时获取模型输出
    • 结构定义背后的“魔法”:PartiallyGenerated
    • 完整流式输出 + 最终结果收集
    • 实际场景分析
    • 总结

背景

在前面我们已经了解过 Foundation Model 的基本用法,比如使用 Generable 注解结构化输出。
通常,我们会写出类似这样的代码:

import FoundationModels
@Generable struct Article {
@Guide(description: "The title of the article")
let title: String
@Guide(description: "The content of the article")
let body: String
@Guide(description: "Useful tips related to the article")
let tips: [String]
}
import Playgrounds
#Playground {
let articleGenerationInstructions = "Write a health related article."
let session = LanguageModelSession(instructions: articleGenerationInstructions)
let response = session.respond(to: "Heart Rate", generating: Article.self)
print(response.content)
}

这段代码中:

  • 我们定义了一个 Article 结构体,使用 @Generable 宏标记;
  • 每个属性(titlebodytips)都有明确的语义指导(@Guide);
  • 模型会生成一个符合 Article 类型格式的结果;
  • 我们使用 respond() 来等待模型一次性返回完整输出。

这种方式虽然简单,但在用户体验上略显“卡顿”——尤其当生成内容较长时,用户要等全部生成完才能看到结果。

引入 Streaming:实时获取模型输出

为了让生成过程更自然、实时,Apple 在 Foundation Model 框架中引入了 Streaming API

我们可以通过 streamResponse() 方法来替代 respond(),从而在模型生成过程中不断接收部分结果:

import Playgrounds
#Playground {
let articleGenerationInstructions = "Write a health related article."
let session = LanguageModelSession(instructions: articleGenerationInstructions)
let stream = session.streamResponse(to: "heart rate", generating: Article.self)
for try await article in stream {
print(article)
}
}

在这个例子中:

  • streamResponse() 返回的是一个 ResponseStream 对象
  • 它符合 AsyncSequence 协议,可以通过 for try await 来异步遍历;
  • 每一次迭代,模型都会返回当前生成的部分结果。

这意味着,我们可以在界面上 边生成边展示,比如一篇文章的标题出来后立刻显示,正文陆续追加,最后再呈现小贴士。

结构定义背后的“魔法”:PartiallyGenerated

有趣的是,@Generable 宏在编译时会自动为我们的结构体生成一个内部类型,比如 Article.PartiallyGenerated,里面的字段都变成了可选类型(Optional)。

这让流式生成成为可能:

  • 当模型只生成了 title 时,bodytips 仍然是 nil
  • 模型每生成一个字段,就会触发一次流式输出;
  • Swift 的类型系统保证了这种“部分可用”的结构安全。

换句话说,模型生成的顺序会严格按照我们定义的属性顺序执行:

struct Article {
let title: String   // 先生成
let body: String    // 再生成
let tips: [String]  // 最后生成
}

所以当我们渲染前端 UI 时,也建议保持这种顺序输出,提升体验的连贯性。

完整流式输出 + 最终结果收集

如果我们希望在流式展示的同时,最后还能拿到完整的结果,也可以这样写:

import Playgrounds
#Playground {
let articleGenerationInstructions = "Write a health related article."
let session = LanguageModelSession(instructions: articleGenerationInstructions)
let stream = session.streamResponse(to: "heart rate", generating: Article.self)
// 实时流式输出
for try await article in stream {
print(article.content)
}
// 等待最终生成结果
let article = try await stream.collect()
print(article.content)
}

这里的关键在于:

  • for try await 是一个 异步迭代器,逐步输出生成结果;
  • collect()聚合函数,在流结束后获取完整的 Article 实例。

这让我们可以既实现「实时更新 UI」,又能在生成完成后「统一保存完整数据」。

实际场景分析

这个机制在工程上非常有用。比如:

  • 实时内容生成:写作类 App 可以在用户输入主题后立即显示文章开头;
  • 对话系统:用户提问后,AI 回答可以逐句出现,不必等待整段生成;
  • 编程助手:代码生成时可逐行输出,方便开发者实时查看。

通过 Foundation Model 的 Streaming API,我们能让生成式 AI 的交互更接近人类思维过程,提升用户参与感和响应速度。

总结

流式生成的本质是:

让模型输出变得可感知、可等待、可预览。

借助 @Generable + streamResponse()

这标志着 Foundation Model 在 Swift 生态中不只是一个“生成 API”,而是一个具备 类型安全 + 实时反馈 + 异步语义统一 的完整生成体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/989048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年国内可靠的河道护坡石笼网源头厂家找哪家,抗冲击抗腐蚀石笼网/柔韧抗压石笼网/双隔板石笼网/六角石笼网河道护坡石笼网源头厂家口碑推荐

随着国家水利工程建设与生态修复需求的持续增长,河道护坡石笼网作为兼具防护功能与生态效益的关键材料,其市场需求日益旺盛。面对市场上众多的生产厂家,如何甄别并选择技术可靠、品质过硬、服务完善的源头供应商,成…

2025 AI软件引流获客公司TOP5口碑推荐:专业排行助企

AI搜索用户突破6亿、83%年轻用户首选AI获取信息的当下,企业对AI软件引流获客的需求呈爆发式增长,但90%的企业仍未布局GEO推广,面临官网流量枯竭、新媒体烧钱低效、AI优先推荐竞品的三刀致命伤。为帮助企业精准选型,…

蓝凌aiOA引领中国协同办公创新,用LanBots.AI助力企业智能体落地

从数字化时代迈向人与智能体协作的新时代,OA办公自动化系统正经历着前所未有的范式转移。随着大模型技术的迅猛发展,人工智能已从辅助工具演进为能够自主服务的智能体,这一转变正深刻重构着企业的工作方式与管理模式…

2025年国内知名的微动开关工厂口碑推荐,家电微动开关/大型微动开关/鼠标微动开关/小型微动开关/防水微动开关定制厂家怎么选择

在工业自动化、智能家电、新能源汽车等产业蓬勃发展的当下,微动开关作为关键的电路控制元件,其性能与可靠性直接影响着终端产品的品质。面对市场上众多的微动开关制造厂家,采购方与工程师们如何甄选值得信赖的合作伙…

2025年最新水处理设备厂家精选:五家企业以净水实力脱颖而出

反渗透设备作为工业纯水制备、苦咸水淡化的核心装备,其脱盐效率、运行稳定性与适配性直接关系到企业生产合规性与资源利用效率。随着《工业水效提升行动计划》深入推进,市场对设备的智能化调控、特殊水质处理能力及全…

i dont study in mathematics but I wear glasses in 20s

because its the fault of reddit or Facebook

52(12.4)

上了数据结构,上了排球课

53(12.5)

上了网课形势政策

软件定义汽车:重看动力电池与BMS的系统性挑战

​随着全球能源转型步伐加快,新能源汽车以其低碳环保优势迅速渗透市场,成为汽车产业升级的关键力量。然而,伴随销量增长而同步增加的,是近年来多起由电池系统故障引发或加剧的新能源汽车安全事故——它们有的是单体…

实用指南:新手产品经理精通 MES 系统业务的完整指南

实用指南:新手产品经理精通 MES 系统业务的完整指南2025-12-05 18:06 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

iBuilder驱动:易路HR智能体的招聘全场景突破

一、招聘困局下的必然选择:AI 成为企业破局关键 在数字化浪潮与人才竞争白热化的双重驱动下,企业招聘正面临前所未有的挑战。央视财经数据显示,2025 年以来 AI 相关岗位简历投递量同比激增 70%,头部企业纷纷加入 “…

2025年度电线电缆实力厂家权威推荐:看看哪家电线电缆品质优

电线电缆作为工程建设的血管,其定制化需求伴随新能源、市政基建、智能制造等领域的扩张持续攀升。2024年数据显示,国内定制电缆市场规模突破600亿元,年增速达32%,但行业投诉中30%集中在定制精度不足、交期延误、环…

医学图像分割经典模型U-Net架构全解析

本文深入探讨了用于语义分割和生物医学图像分割的U-Net系列架构,包括FCN、3D U-Net、V-Net、UNet++等变体,详细分析了其技术原理、网络结构改进,并提供了PyTorch代码实现。医学图像分割经典模型U-Net架构全解析 U形…

51(12.3)

上了离散数学,上了马原

linux安装jdk和tomcat和并自启动 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年国内有实力的鼠标微动开关企业推荐,中型微动开关/大型微动开关/微动开关/小型微动开关/汽车微动开关制造商排名

在消费电子与电竞外设领域,鼠标的性能与手感至关重要,而作为其核心触发元件的微动开关,直接决定了点击的清脆度、响应速度与使用寿命。随着市场对高品质外设需求的增长,选择一家技术过硬、品控严格、供货稳定的微动…

understandable

can not be understanded.Which is more important, hearing or vision? of course, somehow its vision. most of games rely on vision. but Im learning languages.

关于.NET 10性能与 AI 是主题色

发布公告:https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/10.0/性能改进:https://devblogs.microsoft.com/dotnet/performance-improv…

Spring两大特性 AOP和IOC

IOC IOC即为控制反转,Spring不再需要我们手动new新对象,而是交给Spring容器,由容器统一管理对象的生命周期和对象的依赖关系。 IOC实现最主要的方式为依赖注入(DI), 容器在创建对象时会将其所依赖的其他对象注入…

deepin系统配置堡垒机支持deepin-terminal

deepin v20.9系统配置deepin-terminal支持堡垒机登陆节点,需要以下三个步骤接受堡垒机公钥或指纹 封装自己的putty 堡垒机指定启动文件sudo apt install putty sshpass expect tcl这一步主要通过putty来接受堡垒机指…