使用 Gemini 构建自己的 ChatGPT

Photo by Itadaki on Unsplash

设置环境和库

首先,让我们创建一个虚拟环境!在本教程中,我将使用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

2024-10-12 04:29:19 AI中文站翻译自原文