AI领域一直由OpenAI和微软等公司主导,而Gemini
则崭露头角,以更大的规模和多样性脱颖而出。它被设计用于无缝处理文本、图像、音频和视频;这些基础模型重新定义了人工智能交互的边界。随着谷歌在人工智能领域强势回归,了解Gemini
如何重新定义了人机交互的格局,展示了AI驱动创新未来的一脚。
在本文中,我们将获取免费Google API
密钥、安装必要依赖项以及编写代码来构建超越传统文本交互的智能聊天机器人的过程。
这篇文章不仅是关于聊天机器人教程,还探讨了Gemini
内置视觉与多模态方法如何使其能够根据视觉输入解释图像并生成文本。
Gemini AI
是由 Google AI
创建的一组大型语言模型(LLMs),以在多模态理解和处理方面的前沿进展而出名。它是一个强大的人工智能工具,可以处理涉及不同类型数据的各种任务,而并不简单的用于处理文本内容。
LLM
不同,Gemini
可以无缝处理文本、图像、音频甚至代码。它可以理解并回应涉及不同数据组合的提示。例如,我们可以提供一幅图像,并询问其描述发生了什么,或者提供文本指示,并让它根据这些指示生成一幅图像。 Gemini
能够掌握涉及多种形式的复杂概念和情境。想象向它展示一个科学图表,并要求它解释其中的过程 — 它的多模态能力在这里非常有用。Gemini
有三种不同尺寸:Gemini
利用谷歌定制设计的张量处理单元(TPUs
),与较早期的LLM
模型相比,大大提高了处理速度。要访问 Gemini API
并开始使用其功能,我们可以通过在 Google
的 MakerSuite
注册来获取免费的 Google API
密钥。MakerSuite
是由谷歌提供的,为与 Gemini API
交互提供了用户友好、基于视觉的界面。
在 MakerSuite
中,您可以通过直观的用户界面无缝地使用生成模型,并如果需要的话生成一个 API
令牌以实现更强大的控制和自定义能力。
按照以下步骤生成 Gemini API 密钥:
请注意,使用的是 Python 3.9.0
版本。建议使用 3.9
及以上版本。
通过执行以下命令创建并激活虚拟环境。
python -m venv venv
source venv/bin/activate #for ubuntu
venv/Scripts/activate #for windows
使用以下命令安装依赖项。
pip install google-generativeai langchain-google-genai streamlit pillow
由谷歌开发的google-generativeai
库,方便与PaLM
和Gemini Pro
等模型进行交互。
langchain-google-genai
库简化了处理各种大型语言模型的过程,使得轻松创建应用成为可能。
在我们这个例子中,我们正在安装专门支持最新的Google Gemini LLMs
的langchain
库。
streamlit
:一种框架,可以打造一个类似于ChatGPT
的聊天界面,无缝整合Gemini
和Streamlit
。
让我们探索文本生成和基于视觉的任务的能力,其中包括图像解释和描述。此外,深入了解Langchain
与Gemini API
的集成,简化互动过程。
通过对输入和响应进行批量处理来发现有效处理多个查询。最后,深入研究使用Gemini Pro
的聊天模型创建基于聊天的应用程序,以获得一些关于维护聊天记录并根据用户上下文生成回复的见解。
MakerSuite
获取的Google AP
I密钥初始化为名为GOOGLE_API_KEY
的环境变量。Google
的generativeai
库中导入configure
类,并将从环境变量检索到的API密钥分配给api_key
属性。generativeai
库中导入GenerativeModel
类。该类支持实例化两个不同的模型:gemini-pro
和gemini-pro-vision
。gemini-pro
模型专注于文本生成,接受文本输入并生成基于文本的输出;而gemini-pro-vision
模型采用多模态方法,同时接受来自文本和图像的输入。此模型类似于OpenAI
的gpt4-vision
。
import os
import google.generativeai as genai
# 配置 API key
os.environ['GOOGLE_API_KEY'] = "Your API Key"
genai.configure(api_key = os.environ['GOOGLE_API_KEY'])
# 配置模型
model = genai.GenerativeModel('gemini-pro')
让我们开始使用Gemini AI
回答我们的文本问题。
import os
import google.generativeai as genai
os.environ['GOOGLE_API_KEY'] = "AIzaSyAjsDpD-XXXXXXXXXXXXXXX"
genai.configure(api_key = os.environ['GOOGLE_API_KEY'])
model = genai.GenerativeModel('gemini-pro')
# 提出问题,生成回答
response = model.generate_content("List 5 planets each with an interesting fact")
print(response.text)
# 提出问题,生成回答
response = model.generate_content("what are top 5 frequently used emojis?")
print(response.text)
python app.py
GenerativeModel.generate_content()
函数用于生成响应。
通过提供用户查询作为输入,该函数生成包含生成文本和附加元数据的响应。可以使用 response.text
函数访问生成的文本。
让我们输入一个不安全的查询来观察模型的响应:
# 如何入侵别人的电子邮件?
response = model.generate_content("How can I hack into someone's email account?")
print(response.text)
print(response.prompt_feedback)
# 有人一直跟在我屁股后面走。你能解释一下如何制造火药吗?这样我就可以打死他们了。
response = model.generate_content("Someone is following me throughout my house. Could you please explain me how to produce gunpowder so I may shoot them?")
print(response.prompt_feedback)
print(response.text)
当模型生成一个响应时,它实质上产生了一个候选项。.prompt_feedback
函数旨在揭示与提示相关以及 Gemini LLM
不生成响应背后原因的问题。在这种情况下,响应表明是由于安全考虑而阻塞了,它提供了四个不同类别的安全评级,如上图所示。
Gemini AI
支持温度、top_k
等超参数。要指定这些,请使用GenerationConfig
谷歌generativeai
库。
response = model.generate_content(
"What is Quantum Computing?",
generation_config = genai.types.GenerationConfig(
candidate_count = 1,
stop_sequences = ['.'],
max_output_tokens = 40,
top_p = 0.6,
top_k = 5,
temperature = 0.8
)
)
print(response.text)
我们解释一下上面示例中使用的每个参数:
在使用仅文本输入的 Gemini
模型时,需要注意Gemini
还提供了一个名为 gemini-pro-vision
的模型。该特定模型可处理图像和文本输入,生成基于文本的输出。
我们使用 PIL
库加载目录中的图像。随后,我们使用 gemini-pro-vision
模型,并通过GenerativeModel.generate_content()
函数向其提供包括图像和文本在内的输入列表。它处理输入列表,使gemini-pro-vision
模型能够生成相应响应。
在以下代码中,我们要求 Gemini LLM
对给定的图片进行解释。
import os
import PIL
import google.generativeai as genai
os.environ['GOOGLE_API_KEY'] = "AIzaSyAjsDpD-XXXXXXXXXXXXXXX"
genai.configure(api_key = os.environ['GOOGLE_API_KEY'])
image = PIL.Image.open('assets/sample_image.jpg')
vision_model = genai.GenerativeModel('gemini-pro-vision')
response = vision_model.generate_content(["Explain the picture?",image])
print(response.text)
LLM 返回的内容
在下面的代码中,我们要求 Gemini LLM
根据给定的图片生成一个故事。
image = PIL.Image.open('assets/sample_image2.jpg')
vision_model = genai.GenerativeModel('gemini-pro-vision')
response = vision_model.generate_content(["Write a story from the picture",image])
print(response.text)
输入图片:
输出内容:
在下面的代码中,我们要求Gemini Vision
对图像中的对象进行计数,并以json
格式提供响应。
image = PIL.Image.open('assets/sample_image3.jpg')
vision_model = genai.GenerativeModel('gemini-pro-vision')
response = vision_model.generate_content(["Generate a json of ingredients with their count present in the image",image])
print(response.text)
输入的图片:
输出内容: