Gemini API快速入门:Python实战指南

9

Gemini,这款由谷歌倾力打造的全新AI模型,正以其卓越的多模态处理能力和近乎完美的答案生成质量,吸引着全球科技界的目光。它不仅仅是一个模型,更是谷歌在人工智能领域多年深耕的结晶,代表着AI技术发展的新高度。

本教程将带您深入了解Gemini API,并指导您如何在本地机器上进行配置,开启您的AI探索之旅。我们将详细剖析各种Python API函数,从文本生成到图像理解,助您全面掌握Gemini的强大功能。

Gemini AI模型深度剖析

Gemini并非横空出世,而是谷歌研究院与DeepMind等多个顶级团队协同创新的成果。它的独特之处在于原生支持多模态,能够无缝理解和处理文本、代码、音频、图像和视频等多种类型的数据。这种强大的多模态处理能力,使其在处理复杂现实问题时更具优势。

作为谷歌迄今为止最先进、规模最大的AI模型,Gemini展现出前所未有的灵活性。它可以在从数据中心到移动设备的各种平台上高效运行,这预示着它将彻底改变企业和开发者构建和扩展AI应用程序的方式。Gemini的出现,有望加速各行各业的智能化转型。

为了满足不同场景的需求,Gemini模型被设计成三个版本:

  • Gemini Ultra:性能巅峰,专为执行最复杂的任务而生。
  • Gemini Pro:性能与可扩展性兼顾,适用于广泛的应用场景。
  • Gemini Nano:轻量级设计,完美适配移动设备。

Gemini模型

Gemini Ultra在性能上实现了质的飞跃,在多个关键指标上超越了GPT-4。它率先在大型多任务语言理解基准测试(MMLU)中超越人类专家,该基准测试涵盖了57个学科的世界知识和问题解决能力。这一突破性进展,充分展示了Gemini Ultra卓越的理解和推理能力。

环境搭建与API密钥配置

要开始使用Gemini API,您需要先获取一个API密钥。请访问https://ai.google.dev/tutorials/setup并按照指引操作。

获取API密钥

点击“获取API密钥”按钮,然后选择“在新项目中创建API密钥”。

创建API密钥

复制API密钥,并将其设置为环境变量。如果您使用Deepnote,可以轻松地创建一个名为“GEMINI_API_KEY”的密钥。只需进入集成设置,向下滚动并选择环境变量。

设置环境变量

接下来,我们将使用PIP安装Python API:

pip install -q -U google-generativeai

安装完成后,根据谷歌的GenAI设置API密钥,并初始化Gemini实例:

import google.generativeai as genai
import os

gemini_api_key = os.environ["GEMINI_API_KEY"]
genai.configure(api_key = gemini_api_key)

Gemini Pro实战演练

完成API密钥配置后,使用Gemini Pro模型生成内容非常简单。只需向generate_content函数提供一个提示,输出将以Markdown格式呈现。

from IPython.display import Markdown

model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("Who is the GOAT in the NBA?")

Markdown(response.text)

输出结果可能因个人喜好而异,但它展示了Gemini Pro强大的文本生成能力。

Gemini Pro NBA GOAT

Gemini还可以为一个提示生成多个候选响应,您可以从中选择最合适的一个。在本例中,我们只有一个响应。

response.candidates

Gemini Pro 候选响应

让我们尝试让Gemini Pro用Python编写一个简单的游戏:

response = model.generate_content("Build a simple game in Python")
Markdown(response.text)

结果简洁明了,符合预期。Gemini Pro能够生成可执行的Python代码,而不仅仅是代码解释。

Gemini Pro Python游戏

响应配置与参数调优

您可以通过generation_config变量来定制Gemini Pro的响应。例如,我们可以将候选响应计数限制为1,添加停止词“space”,并设置最大token数和温度。

response = model.generate_content(
    'Write a short story about aliens.',
    generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        stop_sequences=['space'],
        max_output_tokens=200,
        temperature=0.7)
)
Markdown(response.text)

正如您所见,响应在单词“space”之前停止。这展示了stop_sequences参数的有效性。

Gemini Pro 停止词

流式传输响应

Gemini Pro还支持流式传输响应,类似于Anthropic和OpenAI API,但速度更快。

model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("Write a Julia function for cleaning the data.", stream=True)

for chunk in response:
    print(chunk.text)

通过流式传输,您可以更快地获得模型的响应,并实现更流畅的用户体验。

Gemini Pro 流式传输

Gemini Pro Vision多模态应用

Gemini Pro Vision模型的多模态能力令人印象深刻。我们将加载一张图片,并用它来测试Gemini Pro Vision的图像理解能力。

import PIL.Image
img = PIL.Image.open('images/photo-1.jpg')
img

我们加载了一张奥古斯塔拱门的高质量图像。

奥古斯塔拱门

现在,加载Gemini Pro Vision模型,并将图像提供给它:

model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(img)
Markdown(response.text)

该模型准确地识别出了图像中的建筑,并提供了有关其历史和建筑的更多信息。这充分展示了Gemini Pro Vision强大的图像理解能力。

Gemini Pro Vision 图像识别

为了进行对比,我们将相同的图像提供给GPT-4,并询问它关于该图像的信息。两种模型都给出了相似的答案,但GPT-4的响应在某些方面可能更胜一筹。

GPT-4 图像识别

接下来,我们将向API同时提供文本和图像,让Vision模型以图像作为参考,撰写一篇旅游博文:

response = model.generate_content(["Write a travel blog post using the image as reference.", img])
Markdown(response.text)

Gemini Pro Vision生成了一篇简短的博文,但篇幅相对较短,可能无法满足长篇内容的需求。

Gemini Pro Vision 博文

与GPT-4相比,Gemini Pro Vision模型在生成长格式博文方面可能存在一些局限性。

GPT-4 博文

聊天对话会话

Gemini Pro支持创建聊天对话会话,使模型能够记住上下文和之前的响应,从而实现更自然的对话。

在本例中,我们启动了一个聊天会话,并要求模型指导如何开始玩Dota 2游戏。

model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
chat.send_message("Can you please guide me on how to start playing Dota 2?")
chat.history

chat对象保存了用户和模型之间的对话历史记录。

Gemini Pro 聊天历史

我们可以使用Markdown格式显示聊天历史:

for message in chat.history:
    display(Markdown(f'**{message.role}**: {message.parts[0].text}'))

Gemini Pro 聊天 Markdown

接下来,我们提出一个后续问题:

chat.send_message("Which Dota 2 heroes should I start with?")
for message in chat.history:
    display(Markdown(f'**{message.role}**: {message.parts[0].text}'))

通过滚动查看,我们可以回顾模型的整个会话,并了解其如何根据上下文提供建议。

Gemini Pro 完整会话

嵌入技术与语义理解

嵌入模型在上下文感知应用程序中扮演着越来越重要的角色。Gemini embedding-001模型可以将单词、句子或整个文档表示为编码语义含义的密集向量。通过比较不同文本片段对应的嵌入向量,可以方便地计算它们之间的相似性。

我们可以将内容提供给embed_content函数,将文本转换为嵌入向量:

output = genai.embed_content(
    model="models/embedding-001",
    content="Can you please guide me on how to start playing Dota 2?",
    task_type="retrieval_document",
    title="Embedding of Dota 2 question")
print(output['embedding'][0:10])

输出结果是一个包含10个元素的嵌入向量。

我们还可以将字符串列表传递给content参数,将多个文本块转换为嵌入向量:

output = genai.embed_content(
    model="models/embedding-001",
    content=[
        "Can you please guide me on how to start playing Dota 2?",
        "Which Dota 2 heroes should I start with?",
    ],
    task_type="retrieval_document",
    title="Embedding of Dota 2 question")
for emb in output['embedding']:
    print(emb[:10])

这将生成两个文本块的嵌入向量,每个向量包含10个元素。

Gemini API提供了丰富的功能,本文仅介绍了其冰山一角。要了解更多信息,请参阅Gemini API: Python快速入门