上一篇文章 使用谷歌 Gemini API 构建自己的 Chat(教程一) 我们介绍了 Gemini
是什么,以及如何使用Gemini
构建一个多模态的聊天场景示例。这一篇我们使用 langchain
与 Gemini
集成构建应用:
Langchain
与 Gemini
集成Langchain
已成功将Gemini
模型整合到其生态系统中,使用ChatGoogleGenerativeAI
类。
启动该过程需要向ChatGoogleGenerativeAI
类提供所需的Gemini
模型来创建一个llm类。我们调用函数并传递用户输入的内容为参数。
可以通过调用response.content
获取生成的响应。
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(model="gemini-pro")
response = llm.invoke("Explain Quantum Computing in 50 words?")
print(response.content)
在下面的代码中,我们将多个输入传入模型,并获取模型的响应。
batch_responses = llm.batch(
[
"Who is the Prime Minister of India?",
"What is the capital of India?",
]
)
for response in batch_responses:
print(response.content)
在下面的代码中,我们提供了文本和图像输入,并期望模型基于给定的输入生成文本响应。
from langchain_core.messages import HumanMessage
llm = ChatGoogleGenerativeAI(model="gemini-pro-vision")
message = HumanMessage(
content=[
{
"type": "text",
"text": "Describe the image",
},
{
"type": "image_url",
"image_url": "https://picsum.photos/id/237/200/300"
},
]
)
response = llm.invoke([message])
print(response.content)
HumanMessage
类是 langchain_core
Message
库,用于将内容结构化为包含属性 type
、text
和 image_url
的字典列表。该列表传递给 llm.invoke()
函数,并可以使用 `response.content
访问响应内容。
from langchain_core.messages import HumanMessage
llm = ChatGoogleGenerativeAI(model="gemini-pro-vision")
message = HumanMessage(
content=[
{
"type": "text",
"text": "Find the differences between the given images",
},
{
"type": "image_url",
"image_url": "https://picsum.photos/id/237/200/300"
},
{
"type": "image_url",
"image_url": "https://picsum.photos/id/219/5000/3333"
}
]
)
response = llm.invoke([message])
print(response.content)
脑洞大开,我们可以做一个这样找不同的程序了。🤪
我们玩够了 Gemini 后,使用 Streamlit
和 Gemini
构建类似 ChatGPT
的简单应用程序。
import streamlit as st
import os
import google.generativeai as genai
st.title("Gemini Bot")
os.environ['GOOGLE_API_KEY'] = "AIzaSyAjsDpD-XXXXXXXXXXXXX"
genai.configure(api_key = os.environ['GOOGLE_API_KEY'])
# 配置 model
model = genai.GenerativeModel('gemini-pro')
# 初始化 message
if "messages" not in st.session_state:
st.session_state.messages = [
{
"role":"assistant",
"content":"Ask me Anything"
}
]
# 重新运行应用程序时显示来自历史记录的聊天消息
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# 处理并储存和回复。
def llm_function(query):
response = model.generate_content(query)
# 显示助手消息
with st.chat_message("assistant"):
st.markdown(response.text)
# 保存用户信息
st.session_state.messages.append(
{
"role":"user",
"content": query
}
)
# 保存用户信息
st.session_state.messages.append(
{
"role":"assistant",
"content": response.text
}
)
# 输入我们的问题
query = st.chat_input("What's up?")
# 当输入时调用该函数。
if query:
# 显示用户的回答
with st.chat_message("user"):
st.markdown(query)
llm_function(query)
streamlit run gemini-bot.py
Gemini API
进行文本生成和基于视觉的任务,包括解释图像内容、根据图片写故事以及计算图像中的对象数量。Langchain
库可以简化与Gemini
模型的集成,使得处理文本和图像输入更加方便,并能够批量处理多个查询。Streamlit
框架与Gemini
模型结合,构建一个类似ChatGPT
的聊天应用程序,并通过示例代码展示了具体的实现步骤。