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 Ultra在性能上实现了质的飞跃,在多个关键指标上超越了GPT-4。它率先在大型多任务语言理解基准测试(MMLU)中超越人类专家,该基准测试涵盖了57个学科的世界知识和问题解决能力。这一突破性进展,充分展示了Gemini Ultra卓越的理解和推理能力。
环境搭建与API密钥配置
要开始使用Gemini API,您需要先获取一个API密钥。请访问https://ai.google.dev/tutorials/setup并按照指引操作。
点击“获取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还可以为一个提示生成多个候选响应,您可以从中选择最合适的一个。在本例中,我们只有一个响应。
response.candidates
让我们尝试让Gemini Pro用Python编写一个简单的游戏:
response = model.generate_content("Build a simple game in Python")
Markdown(response.text)
结果简洁明了,符合预期。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还支持流式传输响应,类似于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 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强大的图像理解能力。
为了进行对比,我们将相同的图像提供给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生成了一篇简短的博文,但篇幅相对较短,可能无法满足长篇内容的需求。
与GPT-4相比,Gemini Pro Vision模型在生成长格式博文方面可能存在一些局限性。
聊天对话会话
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
对象保存了用户和模型之间的对话历史记录。
我们可以使用Markdown格式显示聊天历史:
for message in chat.history:
display(Markdown(f'**{message.role}**: {message.parts[0].text}'))
接下来,我们提出一个后续问题:
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 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快速入门。