GPT-4o:逐步了解如何在新模型上实现 RAG!
OpenAI 刚刚发布了他们的最新 GPT 模型 GPT-4o,其价格是当前 GPT-4 模型的一半,而且速度更快。
在本文中,我们将向您展示:
- 什么是 RAG
- 入门:设置您的 OpenAI 帐户和 API 密钥
- 在 talkdai/dialog 上使用 Langchain 的方法
- 在你的内容中使用 GPT-4o
PS:在学习本教程之前,我们希望您对文件编辑和 docker 有基本的了解。
什么是 RAG?
RAG 是一个框架,允许开发人员同时使用检索方法和生成人工智能,将大型语言模型 (LLM) 的强大功能与大量信息和特定的自定义知识库相结合。
入门:设置您的 OpenAI 帐户和 API 密钥
首先,您需要访问 OpenAI 平台网站并创建一个新帐户(如果您还没有帐户)。直接进入表单的链接是:https://platform.openai.com/signup
每当您提交包含电子邮件和密码的表格时,您将收到一封来自 OpenAI 的电子邮件(就像下面的电子邮件一样),以激活和验证您的帐户。
如果您出于某种原因没有在收件箱中看到这封邮件,请尝试检查您的垃圾邮件。如果仍然找不到,请点击页面上的“重新发送”按钮来验证您的电子邮件地址。
恭喜!您现已登录 OpenAI 平台。
现在,让我们生成您的 API 令牌,以便能够使用 GPT-4o 的聊天完成端点,从而允许您将其与talkdai/dialog一起使用,后者是 Langchain 的包装器,具有易于使用的 API。
在左侧菜单中,您将能够找到一个名为“API 密钥”的子菜单项,只需单击它,您就会被重定向到 API 密钥。
如果这是您第一次设置帐户,则需要验证您的电话号码。
验证您的电话号码后,Create new secret key
将会启用,如下图所示:
OpenAI 密钥现在是基于项目的,这意味着您将被分配一个项目作为您帐户中此生成密钥的“主机”,它将使您能够更好地控制预算并获得对成本和代币使用情况的更多可观察性。
为了简化流程,我们只需命名我们的 API 密钥并使用“全部”权限类型,对于生产场景,这不是最佳做法,我们建议您明智地设置权限。
点击“创建”后,它将生成一个唯一的密钥,您必须将其存储在安全的地方,该密钥只能被可视化一次,因此如果您需要再次获取它,则需要从您保存的地方获取它或生成一个新的。
在talkdai/dialog上使用 Langchain 的方法
什么是 Langchain?
Langchain 是一个框架,允许用户使用链(一个提示、LLM 模型和其他可根据用例扩展的功能的总和的概念)来处理 LLM 模型。
该框架对 OpenAI 和其他 LLM 模型具有原生支持,允许全球开发人员使用生成式 AI 方法创建出色的应用程序。
talkdai/dialog 是什么?
talkdai/dialog,或者简称为 Dialog,是我们构建的一个应用程序,旨在帮助用户轻松部署他们想要使用的任何 LLM 代理(在 Langchain 的情况下,代理只是链的一个实例,或者是提示和模型的联合使用)。
talkdai/dialog 的主要目标是让开发人员能够在不到一天的时间内部署 LLM,而无需任何 DevOps 知识。
设置对话框
在您的终端上,在您选择的文件夹中,使用以下命令克隆我们的存储库,在其中您将拥有轻松启动和运行 GPT-4o 的基本结构。
git clone https://github.com/talkdai/dialog
在存储库中,您需要添加 3 个文件:
-
你的 .env 文件,OpenAI API 密钥将存储在其中(请不要在你的环境中提交此文件)。这将完全基于
.env.sample
我们在存储库根目录中的文件。 -
您将定义提示的文件(我们在文档中将其称为 prompt.toml,但您可以随意命名)
-
最后但并非最不重要的是,包含您的内容的 CSV 文件。
.env 文件
将文件复制并粘贴.env.sample
到存储库的根目录,然后使用您的数据对其进行修改。
PORT=8000 # We recommend you use this as the default port locally
OPENAI_API_KEY= # That API Key we just fetched should be put here
DIALOG_DATA_PATH=./know.csv # The relative path for the csv file inside the root directory
PROJECT_CONFIG=./prompt.toml # The relative path for your prompt setup
DATABASE_URL=postgresql://talkdai:talkdai@db:5432/talkdai # Replace the existing value with this line
STATIC_FILE_LOCATION=static # This should be left as static
LLM_CLASS=dialog.llm.agents.lcel.runnable # This is a setting that define's the Dialog Model Instance we are running, in this case we are running on the latest LCEL version
Prompt.toml - 你的提示和模型的设置
此文件将允许您定义
[model]
model_name = "gpt-4o"
temperature = 0.1
[prompt]
prompt = """
You are a nice bot, say something nice to the user and try to help him with his question, but also say to the user that you don't know totally about the content he asked for.
"""
这个文件非常简单,它有两部分:一部分用于定义模型细节,允许我们调整温度和模型值。
第二部分最有趣:在这里您将定义代理的初始提示符。此初始提示符将在实例的整个生命周期内指导代理的操作。
大多数调整将通过改变提示的文本和模型的温度来完成。
知识库
如果您想在 LLM 中添加更适合您具体情况的具体知识,此 CSV 将允许您这样做。
现在,CSV 必须具有以下格式:
- 类别——该知识的类别;
- 子类别——该知识的子类别;
- 问题 - 该行内容回答的标题或问题,以及
- content - 内容本身。每当用户的输入与该内容生成的嵌入相似时,就会在提示中注入该内容。
以下是一个示例:
category,subcategory,question,content
faq,football,"Whats your favorite soccer team","My favorite soccer team is Palmeiras, from Brazil. It loses some games, but its a nice soccer team"
Langchain 的幕后故事
在本教程中,我们将使用基于 Langchain 的 LCEL 的对话代理实例。以下代码可在您刚刚克隆的仓库中找到。
# For the sake of simplicity, I've removed some imports and comments
chat_model = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0,
openai_api_key=Settings().OPENAI_API_KEY,
).configurable_fields(
model_name=ConfigurableField(
id="model_name",
name="GPT Model",
description="The GPT model to use"
),
temperature=ConfigurableField(
id="temperature",
name="Temperature",
description="The temperature to use"
)
)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
Settings().PROJECT_CONFIG.get("prompt").get("prompt", "What can I help you with today?")
),
MessagesPlaceholder(variable_name="chat_history"),
(
"system",
"Here is some context for the user request: {context}"
),
("human", "{input}"),
]
)
def get_memory_instance(session_id):
return generate_memory_instance(
session_id=session_id,
dbsession=next(get_session()),
database_url=Settings().DATABASE_URL
)
retriever = DialogRetriever(
session = next(get_session()),
embedding_llm=EMBEDDINGS_LLM
)
def format_docs(docs):
return "\n\n".join([d.page_content for d in docs])
chain = (
{
"context": itemgetter("input") | retriever | format_docs,
"input": RunnablePassthrough(),
"chat_history": itemgetter("chat_history")
}
| prompt
| chat_model
)
runnable = RunnableWithMessageHistory(
chain,
get_memory_instance,
input_messages_key='input',
history_messages_key="chat_history"
)
第一行定义了模型的温度和名称。默认情况下,模型为 ,gpt-3.5-turbo
温度为 0,但由于我们在提示配置文件中定义了它,因此它将更改为gpt-4o
,温度为 0.1。
要在 Langchain 内部发送提示,您需要使用它的模板,这也是我们接下来在ChatPromptTemplate.from_messages
实例上所做的事情。
在接下来的几行中,我们定义内存、如何使用内存以及检索器的实例(我们将从中获取自定义数据)。
在你的内容中使用 GPT-4o
经过这么长时间的设置后,是时候运行我们的应用程序并进行测试了。只需运行:
docker-compose up --build
使用此命令,您的 docker 应该在镜像构建后启动并运行。
日志显示: 后Application startup complete.
,请转到浏览器并输入用于托管 API 的地址,默认情况下,它是:http://localhost:8000
。
转到/ask
端点文档,在 JSON 中填写您想要询问 GPT 的消息,并获取其答案,如以下屏幕截图所示:
就这些!希望你喜欢这篇内容,并使用 talkdai/dialog 作为部署 Langchain RAG 和 Agent 的首选应用。
文章来源:https://dev.to/vmesel/gpt-4o-learn-how-to-implement-a-rag-on-the-new-model-step-by-step-377d