使用 Gemini 构建自己的 ChatGPT
设置环境和库
首先,让我们创建一个虚拟环境!在本教程中,我将使用Python 3.10版本。它可以从这里下载。
接下来我将在Pycharm中使用这个Python作为基础解释器来创建一个虚拟环境。
现在pip安装谷歌genai库。
pip install --upgrade --quiet langchain-google-genai pillow
同样让我们使用streamlit库来创建一个应用程序。
pip install streamlit
现在让我们安装一个帮助加载环境变量的库。
pip install python-dotenv
获取API密钥
Google API
我们将利用双子座模型,每当我们使用任何大型语言模型时,我们需要一个独特的API密钥来访问其功能。
如果我们想要使用OpenAI的模型,我们需要使用OpenAI的API密钥。对于本文,我们将继续使用Google Gemini。
登录您的Gmail帐户,然后转到此页面。
在里边去谷歌 AI 工作室获取谷歌 API 密钥。
接下来,下一步是创建一个API密钥并复制它们。然后,我们可以在项目中创建一个.env文件,用来存储所有的API密钥。
浪链API
此外,我们将使用Langchain,因为它提供了一个统一的界面,通过单个API密钥与各种大型语言模型(LLMs)进行交互,使我们能够轻松切换不同模型,并利用它们独特的优势和能力。
在这里注册。然后转到设置,然后创建一个API密钥。复制它们并粘贴到.env文件中。
让我们一起在代码中放在一起
首先,让我们创建包含所有API_KEY的.env文件。
GOOGLE_API_KEY='*******************'
LANGCHAIN_API_KEY='**************************************'
LANGCHAIN_PROJECT='default'
接下来的一步是开始编码!
import streamlit as st
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_google_genai import ChatGoogleGenerativeAI
在这里使用Streamlit来创建应用程序。Dotenc用于导入环境变量。而且我们使用Langchain的某些模块!
这里使用 ChatPromptTemplate 类来为基于聊天的语言模型结构化提示。StrOutputParser 类用于将模型的输出解析为字符串。ChatGoogleGenerativeAI 类用于与 Google 的 Gemini AI 模型交互。
现在让我们加载环境变量!
load_dotenv()
现在让我们调用导入的模块并实例化模型。
# Now we can instantiate our model object and generate chat completions:
llm = ChatGoogleGenerativeAI(
model="gemini-1.5-pro",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a chatbot"),
("human", "Question:{question}")
]
)
st.title('Langchain Demo With Gemini')
input_text = st.text_input("Enter your question here")
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
if input_text:
st.write(chain.invoke({'question': input_text}))
- llm = ChatGoogleGenerativeAI(...): 创建一个 ChatGoogleGenerativeAI 类的实例,代表 Gemini 语言模型。
- model="gemini-1.5-pro": 指定要使用的特定Gemini型号变体。
- 温度=0:将温度参数设置为0。更低的温度会使模型的输出更加确定(减少随机性)。
- max_tokens=None: 在生成的响应中不设置最大 token 数的限制。
- timeout=None: 设置 API 请求没有超时。
- max_retries=2:如果API请求失败,指定重试的最大次数。
定义聊天提示:
- prompt = ChatPromptTemplate.from_messages(...): 使用ChatPromptTemplate类创建一个聊天提示模板。该模板定义了与模型对话的结构。
- [("system", "您是一个聊天机器人"), ("human", "问题:{question}")]: 定义了对话中的两个角色:
- “系统”:设置模型的初始指令,告诉它扮演聊天机器人的角色。
- “人类”:代表用户的输入,将被插入到{question}的位置。
Streamlit网络应用界面:
- st.title('Langchain Demo With Gemini'):设置Streamlit网页应用程序的标题。
- input_text = st.text_input("在此输入您的问题"): 在Web应用程序中创建一个文本输入字段,用户可以在其中输入他们的问题。
输出解析:
- output_parser = StrOutputParser(): 创建 StrOutputParser 类的一个实例,它将用于将模型的输出解析为简单字符串。
浪链链:
- 链=提示| llm |输出解析器:通过连接提示、语言模型(llm)和输出解析器,构建了一个Langchain链。这个链定义了数据的流动:提示传递给模型,模型生成响应,响应由输出解析器解析。
处理用户输入并显示响应:
- 如果输入文本:: 检查用户是否在输入字段中输入了任何文本。
- st.write(chain.invoke({'question': input_text})): 如果有输入,链会被调用(chain.invoke(...)),并且用户的问题作为输入传递进去。模型的响应会被解析成一个字符串,然后使用st.write()在Streamlit应用程序中显示。
运行Python脚本
在终端中输入
streamlit run app.py
谢谢您的阅读!
如果你喜欢这篇文章并想支持我,请确保:
- 👏为这篇文章鼓掌(50次鼓掌),让它被推荐。
- 在Medium上关注我
- 📰 查看更多内容,请访问我的Medium个人主页
- 🔔 关注我: 领英 | GitHub