Type something to search...
如何使用 Google DeepMind Gemini 2.0 Flash Live API 进行实时对话

如何使用 Google DeepMind Gemini 2.0 Flash Live API 进行实时对话

Google DeepMind 的 Gemini 2.0 Flash API 代表了实时 AI 驱动对话领域的重大突破。它使开发者能够构建能够无缝处理实时音频交互的应用程序,提供了语音输入和输出的无与伦比的集成。无论您是在创建客户服务聊天机器人、增强无障碍工具,还是开发互动 AI 导师,这个 API 都是一个强大的基础。在本博客中,我们将探讨 Gemini 2.0 Flash API 的功能,并演示如何有效地使用 Python。我们将通过两个不同的脚本 live_test.pyno_queue_version.py 逐步指导您实施,帮助您开始构建动态对话 AI 解决方案。

在我们继续之前,让我们保持联系!请考虑在 Medium 上关注我,并不要忘记在 LinkedIn 上与我连接,以定期获取数据科学和深度学习的见解。” 🚀📊🤖

前提条件

  1. API 密钥: 通过在 Google AI Platform 上注册以获取访问权限来获取您的 Google Gemini API 密钥。
  2. Python 环境: 确保安装了 Python 3.8+。
  3. 依赖项: 安装所需的库:
pip install websockets pyaudio asyncio

4. 环境变量: 将 API 密钥设置为环境变量:

export GEMINI_API_KEY="your_api_key_here"

脚本的主要特征

两个脚本都实现了实时语音交互,但在方法上略有不同:

  • live_test.py: 使用音频队列来管理和播放接收到的音频数据。
  • no_queue_version.py: 直接播放接收到的音频,没有队列,简化了过程。

共享组件

  • WebSocket 连接: 促进与 Gemini API 的通信。
  • 音频捕获: 使用 PyAudio 记录用户输入。
  • 音频播放: 将 AI 生成的响应流回用户。

live_test.py 的逐步解释

初始化

class GeminiVoice:
    def __init__(self):
        self.audio_queue = asyncio.Queue()
        self.api_key = os.environ.get("GEMINI_API_KEY")
        self.model = "gemini-2.0-flash-exp"
        self.uri = f"wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key={self.api_key}"
        self.FORMAT = pyaudio.paInt16
        self.CHANNELS = 1
        self.CHUNK = 512
        self.RATE = 16000
  • 音频队列: 存储接收到的音频块以供播放。
  • API 密钥和模型: 配置对 Gemini API 的访问。
  • 音频设置: 设置输入和输出参数。

开始连接

async def start(self):
    self.ws = await connect(
        self.uri, additional_headers={"Content-Type": "application/json"}
    )
    await self.ws.send(json.dumps({"setup": {"model": f"models/{self.model}"}}))
    await self.ws.recv(decode=False)
    print("Connected to Gemini, You can start talking now")
    async with asyncio.TaskGroup() as tg:
        tg.create_task(self.capture_audio())
        tg.create_task(self.stream_audio())
        tg.create_task(self.play_response())
  • WebSocket 连接: 建立与 Gemini 服务的链接。
  • 任务组: 并发管理音频捕获、流式传输和播放。

捕获音频

async def capture_audio(self):
    audio = pyaudio.PyAudio()
    stream = audio.open(
        format=self.FORMAT,
        channels=self.CHANNELS,
        rate=self.RATE,
        input=True,
        frames_per_buffer=self.CHUNK,
    )

    while True:
        data = await asyncio.to_thread(stream.read, self.CHUNK)
        await self.ws.send(
            json.dumps(
                {
                    "realtime_input": {
                        "media_chunks": [
                            {
                                "data": base64.b64encode(data).decode(),
                                "mime_type": "audio/pcm",
                            }
                        ]
                    }
                }
            )
        )
  • 音频录制: 捕获来自麦克风的输入并将其发送到API。

流音频

async def stream_audio(self):
    async for msg in self.ws:
        response = json.loads(msg)
        try:
            audio_data = response["serverContent"]["modelTurn"]["parts"][0]["inlineData"]["data"]
            self.audio_queue.put_nowait(base64.b64decode(audio_data))
        except KeyError:
            pass
  • 响应处理: 解码来自API的音频响应并将其存储在队列中。

播放响应

async def play_response(self):
    audio = pyaudio.PyAudio()
    stream = audio.open(
        format=self.FORMAT, channels=self.CHANNELS, rate=24000, output=True
    )
    while True:
        data = await self.audio_queue.get()
        await asyncio.to_thread(stream.write, data)
  • 音频播放: 播放AI生成的音频。

no_queue_version.py 的逐步解释

no_queue_version.py 脚本通过直接流式传输和播放接收到的音频,简化了这一过程,而无需中间队列。

主要区别

  • 简化的响应处理:
async def recv_model_audio(self):
    audio = pyaudio.PyAudio()
    stream = audio.open(
        format=self.FORMAT, channels=self.CHANNELS, rate=24000, output=True
    )
    async for msg in self.ws:
        response = json.loads(msg)
        try:
            audio_data = response["serverContent"]["modelTurn"]["parts"][0]["inlineData"]["data"]
            await asyncio.to_thread(stream.write, base64.b64decode(audio_data))
        except KeyError:
            pass

运行脚本

  1. 设置环境变量:
export GEMINI_API_KEY="your_api_key_here"

2. 运行脚本:

python live_test.py

3. 对着麦克风说话: 脚本捕获您的输入,将其发送到Gemini服务,并播放AI的响应。

结论

使用 Google DeepMind Gemini 2.0 Flash API,您可以构建支持动态和实时对话的创新应用程序。这项尖端技术实现了无缝的音频交互,非常适合客户支持、互动教程和语言学习等多种用例。

通过选择 live_test.py 以获得高级排队功能或 no_queue_version.py 以实现简单性,开发人员可以根据具体需求定制 API 集成。

API 的强大功能结合 Python 的灵活性,使得创建高度互动和响应迅速的应用程序成为可能。花时间探索脚本,尝试自定义选项,释放 AI 驱动通信的全部潜力。可能性是巨大的,借助 Gemini 2.0 Flash,您可以将最雄心勃勃的对话 AI 创意变为现实!

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...