人工智能讲故事的艺术
在上一篇文章中,我们探索了使用 OpenCV 和 BigQuery 捕获和分析迷你高尔夫数据的历程。但真正让“Gemini 高尔夫”栩栩如生的是Vertex AI上由人工智能驱动的 Gemini 故事。
Gemini 1.5 Pro可以分析视频片段,但其响应可以通过结构化数据和详细提示变得更加丰富。通过结合预定义的上下文、镜头信息和生成式 AI,Gemini 可以创建比单纯依赖视频更引人入胜的故事。
利用这些背景和数据,我可以指示 Gemini 为迷你高尔夫游戏生成评论,从而为玩家带来更丰富、更引人入胜的体验。我设计了演示,以便我可以使用 Gemini 根据提取的数据生成引人入胜的叙述。通过我的指示和提供的数据,Gemini 可以详细而深刻地描述每一次击球,从而增强整体迷你高尔夫体验。
指导讲故事的人:定义背景和提示
为了为 Gemini 制作有效的提示,我需要一种轻松访问和分析存储在 BigQuery 中的镜头数据的方法。BigQuery Studio是 Google Cloud 数据分析套件的统一协作工作区,有助于加速数据到 AI 工作流程,它提供了完美的解决方案。其嵌入式Python 笔记本(由Colab Enterprise提供支持)对我的流程至关重要,我将在下面进行介绍。
这些笔记本可以直接访问 BigQuery 中的镜头跟踪数据,这意味着我可以分析数据并创建提示,而无需导出或移动数据。此外,BigQuery Studio 的笔记本提供了一个协作环境,允许多个用户同时与同一个笔记本交互。为了在演示期间展示这一协作功能,我在三台 Chromebook 上运行了笔记本。在我的笔记本电脑上对代码或提示所做的任何更改都会立即反映在所有三台笔记本电脑上,展示了 BigQuery Studio 如何促进数据分析任务的实时协作。
为了说明我是如何引导 Gemini 的评论的,下面是我用来定义提示的代码:
PRE_DEFINED_TEXT = """ 您是专业的高尔夫播音员,您必须 以正式且信息丰富的语气播报比赛。您应该使用以下上下文。 - 比赛是“Google Cloud Next - 迷你高尔夫锦标赛决赛”, 地点是拉斯维加斯的曼德勒海湾。 - 参赛者已经完成比赛,如果玩家 在三杆之内完成这个洞,则玩家获胜。 - 如果四杆之内完成这个洞,则参赛者获胜。 - 即使参赛者获胜,您也必须播报比赛, 直到玩家完成最后一杆。 - 您不应提及任何有关玩家的外表或 个人生活的内容。 - 广播必须使用口语, 除了播音员的评论外,不得添加任何其他文字 (例如,不得包含观众的欢呼声)。 - 球场是一个长 7 英尺、宽 20 英尺的矩形, 球场上没有障碍物或斜坡。 - 详细描述每次击球。 - 此文本将以 markdown 格式显示, 因此请确保添加一些强调时会降价。 """
此代码片段展示了我如何提示 Gemini。我指定了播音员的角色、比赛背景以及场地和规则等关键细节。我还提供了有关所需语气、语言风格和要包含的信息的具体说明。通过精心设计这些提示,我引导 Gemini 生成相关、引人入胜且信息丰富的评论。
从数据到叙述:Gemini 的实际行动
现在,让我们看看如何使用 Gemini 从原始数据中生成一个引人入胜的故事,具体基于下面所示的镜头数据:
为了指导 Gemini 的评论,我首先需要将镜头数据处理成 Gemini 可以轻松理解的结构化摘要。我创建了一个 Python 函数来generate_commentary(df)
执行此操作。
该generate_commentary(df)
函数将原始镜头数据作为输入(df)
然后,该函数处理这些数据以生成格式化的字符串(注释),为 Gemini 提供明确的指示和背景。以下是示例输出:
- 以下是从视频中提取的每次击球的分析结果。 请将其用作参考: - 击球 1 从距洞 684.42 像素处开始 - 击球 1 在距洞 133.33 像素处停止 - 击球 2 从距洞 127.58 像素处开始 - 击球 2 在距洞 6.32 像素处停止 - 球在第 2 杆之后进入洞中。 - 距离以像素为单位。距离是 从球的中心到洞的中心。 - 不要使用像素作为测量单位。只能使用英尺和码。请 适当地将像素转换为英尺和码。 - 最后一次击球后,如果剩余像素少于 50 像素, 则视为进洞。
如您所见,输出总结了每次投篮,表明球是否进篮,并为 Gemini 提供说明,例如将像素转换为英尺和码。
以下是generate_commentary(df)函数的代码:
def generate_commentary ( df: pd.DataFrame ) -> str : #... 处理击球数据并创建结构化摘要的代码... commentary = f""" - 以下是从视频中提取的每次击球的分析数据。 请将其用作参考:{shot_details} -击球编号{shot_number} 后的球{result.upper()}球洞。- 距离以像素为单位测量。距离是 从球的中心到球洞的中心。- 请勿使用像素作为测量单位。仅使用英尺和码。 将像素适当转换为英尺和码。- 最后一次击球后,如果剩余像素小于 50 像素, 则视为进洞。""" return commentary
一旦镜头数据处理完毕,我会将其连同视频和之前建立的预定义上下文一起输入到 Gemini:
#...从数据框中提取镜头数据并生成评论的代码... response = model.generate_content( [VIDEO, PRE_DEFINED_TEXT, generate_commentary(df)], generation_config=generation_config, safety_settings=safety_settings, stream= False , ) #...生成配置和安全设置的代码...
此代码演示了 Gemini 如何接收视频、预定义上下文和分析后的镜头数据。利用其生成功能,Gemini 可以处理这些信息并编写叙述,将原始数据转化为引人入胜的故事。
彰显成功:蓬勃发展的互动体验
“Golf with Gemini” 在 Google Cloud Next ’24 上的表现超出预期,吸引了众多与会者并吸引了众多积极参与者。除了高参与率之外,真正让我兴奋的是 Gemini 解说的质量。它始终提供富有洞察力和吸引力的叙述,准确反映比赛的流程并为球员增添了新的刺激感。许多参与者表示,Gemini 的解说如何增强了他们对比赛的享受,使其感觉更像是一场真正的体育赛事。
当然,在使用大型语言模型时,总会担心出现幻觉——产生不准确或虚假的信息。为了降低这种风险,我专注于为 Gemini 提供非常具体的说明和结构化数据。通过明确定义游戏的背景、规则和所需的基调,并提供精确的镜头细节,我能够引导 Gemini 生成既有创意又基于现实的评论。
“Golf with Gemini” 的成功表明,引人入胜的 AI 驱动体育评论已触手可及。想象一下这样的可能性:在一场篮球比赛中,Gemini 可以分析球员统计数据、预测投篮结果并实时提供历史背景。通过将 Gemini 的功能与创意快速工程、实时数据分析和 BigQuery 等现成的工具相结合,开发者可以解锁身临其境、引人入胜的体育体验。
学习与迭代:完善体验
演示强调了清晰简洁的说明对于 Gemini 生成准确且引人入胜的评论的重要性。通过改进提示并提供有关游戏背景、规则和所需语气的具体细节,我能够指导 Gemini 制作更引人注目且更相关的叙述。然而,Gemini 评论的质量在很大程度上取决于基础数据的准确性。
虽然 OpenCV 的 CSRT 跟踪器提供了一个实用的起点,但它在演示过程中暴露了局限性。例如,如果球员的身体遮挡了球,跟踪器通常会失去目标并无法恢复跟踪。同样,快速挥杆有时也会导致跟踪器丢失球,从而导致击球数据不准确。这些问题源于 CSRT 跟踪器的局限性,有时会导致 Gemini 误解击球次数,甚至在多次击球时描述一杆进洞。这凸显了构建真实世界应用程序的一个关键要点:准确的跟踪数据对于逼真的评论至关重要。探索更强大的跟踪算法(如定制训练的 AutoML Vision 模型)可以通过更有效地处理遮挡和快速运动来提高准确性。
此外,为了进一步增强体验,未来的实施可以纳入以下功能:
- 实时数据可视化:动态显示球员统计数据和投篮数据以及 AI 评论,以提供更深入的见解并添加视觉组件。在活动期间,上传和处理视频通常需要 60-90 秒。优化数据管道并探索低延迟处理选项可以减少未来版本的延迟。
- 多语言支持:扩展语言能力(可能利用 Gemini 现有的多语言能力)以满足全球受众的需求。
- 自定义 TTS(文本转语音):每个镜头完成后,播音员的声音会通过经过精简数据处理训练的自定义 TTS 播报前一个镜头。
“Gemini 高尔夫” 是一次宝贵的学习体验,凸显了 AI 改变体育和娱乐的潜力。通过解决需要改进的地方并添加新功能,未来版本可以让体验更加有趣、信息丰富且人人都能使用。为了帮助您进入这个令人兴奋的 AI 迷你高尔夫世界,我正在制作一个 YouTube 视频,它将逐步指导您完成“Gemini 打造自己的高尔夫”的过程。准备好亲身体验这种刺激吧!