Gemini 2.0
谷歌深度思维的 Gemini 2.0 Flash API 在实时 AI 支持的对话领域中实现了突破性的飞跃。它使开发人员能够构建可以无缝处理实时语音交互的应用程序,提供无与伦比的语音输入和输出的无缝集成。不论是创建客户服务聊天机器人、增强辅助工具,还是开发互动 AI 导师,此 API 是一个坚实的基础。在本文中,我们将探讨 Gemini 2.0 Flash API 的功能,并演示如何有效使用它(Python)。我们将一步步引导您完成实现过程,通过两个不同的脚本 live_test.py
和 no_queue_version.py
,帮助您开始构建动态对话式 AI 解决方案。
在我们继续之前,请先保持联系!不妨在Medium上关注我,并别忘了在我的LinkedIn上与我连接,以获取定期的数据科学和深度学习见解。 🚀📊🤖
前提条件- API密钥: 在Google AI平台上注册以获取你的Google Gemini API密钥。
- Python环境: 确保安装了Python 3.8或更高版本。
- 依赖项: 安装所需的库。
pip install websockets pyaudio asyncio
运行此命令来安装websockets、pyaudio和asyncio三个Python库。
- 环境变量: 将 API 密钥设置为环境变量。
你的API密钥如下:"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") # 获取环境变量中的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}" # URI格式为WebSocket连接,包含API密钥
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("已经连接到Gemini,现在你可以开始说话了")
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 服务的 WebSocket 连接。
- 任务组: 负责同时管理音频捕获、流传输和播放。
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) # 读取音频数据
data = base64.b64encode(data).decode() # 将音频数据转换为 base64 编码的字符串
await self.ws.send(
json.dumps(
{
"realtime_input": {
"media_chunks": [
{
"data": data, # base64 编码的音频数据
"mime_type": "audio/pcm", # 音频媒体类型
}
]
}
}
)
) # 发送处理后的音频数据到WebSocket
- 音频记录: 从麦克风获取输入并发送到API。
异步定义 stream_audio(self):
async for msg in self.ws:
response = json.loads(msg)
尝试:
audio_data = response["serverContent"]["modelTurn"]["parts"][0]["inlineData"]["data"]
self.audio_queue.put_nowait(base64.b64decode(audio_data))
除了 KeyError:
通过
- 响应的处理: 解码 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
运行一下脚本:
- 设置环境变量:
export GEMINI_API_KEY="你的API密钥如下"
2. 运行一下脚本:
运行 python live_test.py
3. 对着麦克风说: 脚本会捕捉你的声音输入,然后将其发送到Gemini服务,并然后播放AI的回复。
(Note: The last part "并然后" is redundant, so it should be corrected to just "并".)
Final corrected translation:
3. 对着麦克风说: 脚本会捕捉你的声音输入,然后将其发送到Gemini服务,并播放AI的回复。
使用 Google DeepMind Gemini 2.0 Flash API,您可以构建动态和实时对话支持的创新应用程序。这项尖端技术实现了无缝的音频互动体验,非常适合各种应用场景,如客户支持、互动教程和语言学习。
通过选择不同的 Python 脚本,开发人员可以更好地满足特定需求。选择 live_test.py
可以获得高级队列功能,或者选择 no_queue_version.py
来追求简单。
强大的API功能与Python的灵活性相结合,可以创建高度互动和响应式的应用程序。花些时间去探索脚本,并尝试各种自定义选项,充分发掘AI驱动通信的所有潜力。可能性无穷,借助Gemini 2.0 Flash,您可以将最雄心勃勃的对话式AI创意变为现实!
共同学习,写下你的评论
评论加载中...
作者其他优质文章