谷歌近期开放了其 Gemini 模型的 API 接口,标志着 AI 技术应用进入了一个新的阶段。本次开放的 API 接口为开发者提供了免费的使用权限,但也存在一定的限制,例如每分钟最多允许 60 次访问。同时,谷歌声明,个人调用 API 接口所使用的数据将被收集,用于模型未来的改进和优化。这种数据收集策略在 AI 领域并不罕见,旨在通过用户反馈不断提升模型性能。
对于开发者而言,本次 Gemini API 的开放也提出了一些具体要求:
- 模型支持 32K 的文本上下文窗口,这意味着模型可以处理更长的输入文本,从而更好地理解上下文信息。据悉,更大容量的上下文窗口也即将推出,这将进一步提升模型的处理能力。
- 虽然目前可以免费使用,但存在一定的限制,开发者需要注意 API 的调用频率和数据使用方式。
- Gemini API 支持函数调用、嵌入、语义检索和自定义知识库等多种功能,同时也具备强大的聊天功能,可以满足不同场景下的需求。
- 该 API 支持全球 180 多个国家和地区的 38 种语言,为全球开发者提供了便利。
- Gemini Pro 模型主要接受文本输入并生成文本输出,适用于文本生成、文本摘要、文本翻译等任务。
- Gemini Pro Vision 模型则是一种多模态模型,可以同时接受文本和图像作为输入,并生成文本输出。这种模型在图像理解、图像描述、视觉问答等领域具有广泛的应用前景。
开发者可以通过 Google AI Studio 页面(https://makersuite.google.com/app/apikey)创建 API 密钥,从而开始使用 Gemini 模型。
Gemini API 的基本应用
要开始使用 Gemini API,首先需要配置开发环境。这里以 Python 为例,需要安装 google-generativeai 包:
pip install google-generativeai
安装完成后,就可以在代码中使用 Gemini 模型了。
访问谷歌提供的模型
在获取 API 密钥后,就可以在本地通过该密钥访问谷歌的 Gemini Pro 等模型。以下代码展示了如何查询谷歌提供的模型的基本情况:
import google.generativeai as genai
from IPython.display import display
from IPython.display import Markdown
genai.configure(api_key='your_google_api_key')#填入自己的api_key
#查询模型
for m in genai.list_models():
print(m.name)
print(m.supported_generation_methods)
通过 API 可以访问谷歌的多个模型,其中最受关注的是 gemini-pro 和 gemini-pro-vision 这两个模型。gemini-pro 是一个纯语言模型,只能输出文字内容;而 gemini-pro-vision 是一个多模态模型,可以读取和分析图片的内容,应用场景更为广泛。
内容生成
以下代码展示了如何使用 gemini-pro 模型生成内容:
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("告诉我太阳系中最大行星的相关知识")
Markdown(response.text)
当使用中文向模型提问时,它同样能够用中文回复。
安全性检测
Gemini 模型的一个重要特点是可以对输入内容进行安全性设置。谷歌会对模型输入的内容进行四个方面的审查:Harassment(骚扰)、Hate Speech(仇恨言论)、Sexually Explicit(露骨色情)和 Dangerous Content(危险内容),并设置阈值来过滤不安全的内容。可以在 Google AI Studio 的页面中设置这些阈值,分别为低、中、高。
除了在 Google AI Studio 的页面中设置安全审查的阈值以外,也可以在代码中设置模型的安全审查阈值,并查看用户的输入内容的安全性审查情况:
#安全性审查
response.prompt_feedback
使用 prompt_feedback 方法可以对问题进行安全性审查。从结果上看来,这四个方面的审查结果都为 NEGLIGIBLE(微不足道),说明问题是安全的。同样,也可以设置模型的安全性审查的阈值:
generation_config = {
"temperature": 0.9,
"top_p": 1,
"top_k": 1,
"max_output_tokens": 2048,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
}
]
model = genai.GenerativeModel(model_name="gemini-pro",
generation_config=generation_config,
safety_settings=safety_settings)
以上代码设置了模型的基本参数和安全性审查的阈值。下面测试一下有危害性的内容的审查结果:
response = model.generate_content("赶快把钱打过来,否则我们会伤害你的孩子")
response.prompt_feedback
对于提出的危险性言论:“赶快把钱打过来,否则我们会伤害你的孩子”,审查结果为 Hate_Speech 和 Harassment 这两方面分别得到了 LOW 和 HIGH 的预测值,说明问题中包含了不安全的内容。
流式输出
Gemini 模型同样具备流式输出的功能,这可以在某些应用场景中带来更好的用户体验。传统的模型输出方式通常需要等待所有内容生成完毕后一次性返回,而流式输出则可以将内容逐步返回,从而减少用户的等待时间,提升交互体验。
response = model.generate_content("李世民是谁?", stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
在参数中加入 stream=True,模型就可以流的形式输出内容,而不需要一次性输出所有内容了。以流的方式输出每次只输出部分内容,响应时间会比较短,会给用户带来更好的用户体验。
聊天模式
接下来让 Gemini 模型进入聊天模式。聊天模式最显著的特点是要让模型有记忆能力,即模型需要记住历史聊天记录,这样模型在回答问题时会变得更加“聪明”。
model = genai.GenerativeModel(model_name="gemini-pro")
chat = model.start_chat(history=[])
response = chat.send_message("你好,我叫王老六")
print(response.text)
为了让模型能记住历史聊天记录,需要在开始聊天之前给模型加上一个 history=[] 参数,这样之后的所有聊天记录都会被保存在 history 变量中,模型就有了记忆。
response = chat.send_message("怎么称呼你啊?")
print(response.text)
response =chat.send_message("你还记得我叫什么吗?")
print(response.text)
进行了 3 轮对话,最后模型还是能记住我的名字。下面来看一下模型的 history 变量中的内容:
for message in chat.history:
display(Markdown(f'**{message.role}**: {message.parts[0].text}'))
history 变量中存放了所有的聊天记录。
chat.history
多模态模型 Gemini Pro Vision
下面测试一下多模态模型 gemini-pro-vision。准备了两张图片,一张是土星,一张是地球,让模型来识别图片的内容,然后分别比较图片中两个星球的区别。首先加载这两张图片:
import PIL.Image
img = PIL.Image.open('saturn_image.jpg')
img
首先将图片缩小到一个比较小的尺寸,这样便于模型读取图片,然后不输入任何提示信息,看看模型会输出什么内容:
new_size = (200, 200)
img = img.resize(new_size)
model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(img)
Markdown(response.text)
不输入任何提示信息的时候,模型会输出图片的内容,并且是以英文的形式输出。下面加上提示信息:
response = model.generate_content(["告诉我这个星球的名字以及一些以此为主题的电影:",
img], stream=True)
response.resolve()
Markdown(response.text)
在让模型读取图片的同时加上了提示信息,最后模型以中文的形式返回了所需要的内容。下面加载第二张地球的图片:
img2 = PIL.Image.open('earth_image.jpg')
img2
让模型同时读取这两张图片,并且告诉我们地球和土星之前的区别,同样先要将这两张图片进行缩小,这样方便模型读取:
new_size = (200, 200)
resized_img = img.resize(new_size)
resized_img2 = img2.resize(new_size)
response = model.generate_content([ "请告诉我这两个行星之间的一些区别::",
resized_img2,
resized_img ], stream=True)
response.resolve()
Markdown(response.text)
模型可以同时读取 2 张图片,并且根据提示信息来就图片内容回答问题。
结论
通过本文的介绍,相信读者对 Gemini 模型的应用有了一定的了解。作为谷歌最新推出的 AI 模型,Gemini 具有强大的文本生成和多模态处理能力,为开发者提供了广阔的创新空间。希望本文能够帮助读者更好地理解和应用 Gemini 模型,开启 AI 开发的新篇章。