Create your own Chatbox and Train it in less than 30 lines of code in python using openai and langch

怎样在LangChain中设置OpenAI API密钥?

LangChain是一个强大的文案撰稿框架,它基于OpenAI API提供智能化的文本生成功能。但在使用LangChain进程中,你可能会遇到一些关于OpenAI API密钥的问题。本文将介绍怎么解决这些问题并设置OpenAI API密钥,以使LangChain能够顺利使用OpenAI的API。

一、使用LangChain框架时遇到的问题与解决方法

1.1 OPENAI_API_KEY密钥毛病

在使用LangChain框架时,你可能会遇到一个与OPENAI_API_KEY相关的毛病。在示例代码中需要设置这个密钥,但是却没有明确地使用。

解决方法是在代码中显式地导入OPENAI_API_KEY,并将其赋给openai.api_key变量。这样LangChain就可以正确使用OpenAI的API密钥。

1.2 删除环境变量并重新设置

如果你遇到了OPENAI_API_KEY找不到的问题,你可以尝试删除在Vercel中设置的环境变量,然后重新设置它并重新部署项目。

一些用户已尝试过这个方法,并获得了成功。

二、在LangChain中集成OpenAI

2.1 获得OpenAI的API密钥

使用API密钥是开始使用OpenAI的最简单方式。你可以在Azure门户中找到API密钥,具体位置是Azure OpenAI资源下。

如果你没有账户,你需要在OpenAI官网上注册并创建一个Azure OpenAI资源。

2.2 在Python中生成密钥

集成OpenAI与LangChain可以通过在Python中生成一个API密钥来实现。

在OpenAI平台上创建一个简单的Python程序,并生成一个密钥,用于访问OpenAI的API。

三、获得OpenAI的API密钥的步骤

3.1 打开OpenAI官网

在浏览器中打开OpenAI官网,网址是https://www.openai.com/。

在官网上你可以找到关于OpenAI的各种信息,并且注册创建账户。

3.2 导航到API密钥页面

在OpenAI官网上找到API密钥页面,该页面用于获得你的API密钥。

通常你可以在用户账户或设置选项中找到API密钥相关的页面。详细的步骤可能因平台和版本而异。

四、LangChain中设置OpenAI的API密钥的代码示例

4.1 导入所需的库和模块

在LangChain中,首先需要导入一些必要的库和模块,例如os和openai。

4.2 获得API密钥并设置

使用os库来获得之前生成的API密钥,并将其赋给openai.api_key变量。这样就能够在LangChain中使用OpenAI的API了。

以上是关于怎样在LangChain中设置OpenAI API密钥的大致概述。通过解决可能的问题和提供解决方法,和给出集成OpenAI与LangChain的步骤和示例代码,可以帮助用户顺利使用OpenAI的API。

langchain openai api key not found的进一步展开说明

怎么用OpenAI和Langchain在30行代码之内创建自己的聊天机器人

介绍
在本教程中,我们将探索怎样使用Langchain和OpenAI创建自己的聊天机器人。Langchain是一个提供易于使用的接口来构建会话式AI系统的Python库,而OpenAI是一家为开发者提供一套基于人工智能的工具和服务的公司。通过结合这两个强大的工具,我们可以创建一个可以基于文本数据回答问题的聊天框。

这个进程触及使用包括文本数据的CSV文件对聊天机器人进行训练。我们将使用Langchain的内置模块将文本转换为向量,创建一个向量存储器,并构建一个对话检索链。检索链使用了来自OpenAI的预先训练的语言模型,根据文本数据生成用户查询的回答。

使用Langchain和OpenAI构建聊天机器人的好处之一是它允许我们利用预训练的语言模型的强大功能,而无需从头开始训练它们。这可以节省时间和资源,由于预训练模型已学会了理解自然语言并对问题生成回答。另外,Langchain提供了一个用户友好的界面来构建会话式AI系统,使我们可以轻松地对聊天机器人的设计进行实验和迭代。

在我们开始之前,重要的是要注意,我们将需要从OpenAI获得一个API密钥,并将其添加到我们的环境变量中。这个API密钥将允许我们访问OpenAI的语言模型和其他AI服务。说了这么多,让我们深入研究怎样使用Langchain和OpenAI创建我们自己的聊天机器人!

完全代码

“`python
import csv
import os
import openai
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.vectorstores import FAISS
from langchain.vectorstores.base import Document

def read_csv_into_vector_document(file, text_cols):
with open(file, newline=”) as csv_file:
csv_reader = csv.DictReader(csv_file)
text_data = []
for row in csv_reader:
text = ‘ ‘.join([row[col] for col in text_cols])
text_data.append(text)

return [Document(page_content=text) for text in text_data]

api_key = os.environ.get(‘OPENAI_API_KEY’)
if not api_key:
print(‘OpenAI API key not found in environment variables.’)
exit()

data = read_csv_into_vector_document(“training.data.csv”, [“Product ID”, “Product Category”, “Product Details”,])
embeddings = OpenAIEmbeddings(openai_api_key=api_key)
vectors = FAISS.from_documents(data, embeddings)
chain = ConversationalRetrievalChain.from_llm(llm=ChatOpenAI(temperature=0.0, model_name=’gpt⑶.5-turbo’, openai_api_key=api_key), retriever=vectors.as_retriever())
history = []

while True:
query = input(“Enter Your Query:”)
print(chain({“question”: query, “chat_history”: history})[“answer”])
“`

代码解析:
“`python
import csv
import os
import openai
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.vectorstores import FAISS
from langchain.vectorstores.base import Document
“`

这些行导入了代码运行所需的必要库和模块。具体来讲,这段代码使用了csv,os,openai,langchain.embeddings.openai,langchain.chat_models,langchain.chains,langchain.vectorstores和langchain.vectorstores.base模块。

“`python
def read_csv_into_vector_document(file, text_cols):
with open(file, newline=”) as csv_file:
csv_reader = csv.DictReader(csv_file)
text_data = []
for row in csv_reader:
text = ‘ ‘.join([row[col] for col in text_cols])
text_data.append(text)

return [Document(page_content=text) for text in text_data]
“`

该函数将CSV文件读入Document对象的列表中,稍后可以用于创建向量存储器。file参数是CSV文件的路径,text_cols参数是要用作文本数据的每一个文档的列名的列表。

“`python
api_key = os.environ.get(‘OPENAI_API_KEY’)
if not api_key:
print(‘OpenAI API key not found in environment variables.’)
exit()
“`

这段代码从名为OPENAI_API_KEY的环境变量中获得OpenAI API密钥。如果环境变量没有设置,代码会打印一条消息并退出。

“`python
data = read_csv_into_vector_document(“training.data.csv”, [“Product ID”, “Product Category”, “Product Details”,])
embeddings = OpenAIEmbeddings(openai_api_key=api_key)
vectors = FAISS.from_documents(data, embeddings)
chain = ConversationalRetrievalChain.from_llm(llm=ChatOpenAI(temperature=0.0, model_name=’gpt⑶.5-turbo’, openai_api_key=api_key), retriever=vectors.as_retriever())
history = []
“`

这些代码创建了一个对话式检索链,可以根据文本数据回答问题。

首先,代码使用read_csv_into_vector_document函数从CSV文件中读取数据,该函数创建了一个Document对象的列表。

接下来,代码使用OpenAIEmbeddings对象使用OpenAI API密钥。该对象用于将文本数据嵌入到向量中。

然后,代码使用FAISS模块创建一个向量存储器,FAISS是一个用于高效类似性搜索和密集向量聚类的库。向量存储器是使用Document对象列表和OpenAIEmbeddings对象创建的。

接下来,代码创建了一个ChatOpenAI对象,该对象是基于OpenAI API的对话模型。该对象用于生成问题的响应。

最后,代码创建了一个ConversationalRetrievalChain对象,将ChatOpenAI模型和向量存储器组合在一起。此对象可以根据文本数据回答问题。

“`python
while True:
query = input(“Enter Your Query:”)
print(chain({“question”: query, “chat_history”: history})[“answer”])
“`

这段代码获得用户的输入并将其传递给ConversationalRetrievalChain对象的__call__方法,该方法生成对问题的响应。__call__方法接受一个带有两个键的字典:question,它包括用户的输入,chat_history,它是与对话模型的先前交互的列表。__call__方法返回一个带有一个键(answer)的字典,该键包括模型对问题的响应。这个响应被打印到控制台。

总的来讲,这段代码创建了一个对话检索链,可以根据文本数据回答问题。该链是使用OpenAIEmbeddings对象将文本数据嵌入到向量中,使用FAISS模块创建向量存储器,使用ChatOpenAI模型生成问题的响应,使用ConversationalRetrievalChain对象将模型和向量存储器组合而成的。代码提示用户输入,并使用对话检索链生成对他们问题的响应。

附录:

示例CSV文件

training_data.csv

Product ID,Product Category,Product Details,

Product1,Data,”25MB @ GHS 0.50, No Expiry-One-time”,

Product2,Data,”25MB @ GHS 0.50, No Expiry-Auto-renewal”,

Product4,Data,”55MB @ GHS 1, No Expiry-One-time”,

Product5,Integrated,”16Mins Crossnet, 90MB, 50SMS @GHS 2″,

Product6,Integrated,”40Mins Crossnet, 250MB, 50SMS @GHS 5″,

Product7,Integrated,”90Mins Crossnet, 500MB, 50SMS @GHS 10″,

Product8,Integrated,”180Mins Crossnet, 1024MB, 50SMS @GHS 20″,

Product123,Integrated,”250Mins Crossnet, 1533MB, 50SMS @GHS 30″,

与ChatBox的示例对话

Github:

https://github.com/ebojacky/console-chatbox-using-openai-and-langchai。

请以第三人称的视角来表达,要求以下:
1. 依照总分的大小标题子节点逻辑,重新组织新的大纲,依照新的大纲结构温柔序来组织文章内容
2. 内容组织与增减信息:
– 请保持段落和句子或段落的逻辑顺序不变。
– 在不改变文章主要观点的条件下,添加更多的解释或例子以增强内容。
– 去掉没必要要的修饰词或句子。
– 字数保持在原有内容相近,不低于 1500 字。
3. 语言和辞汇:
– 使用与原文中辞汇意义相近的同义词进行替换。
– 将复杂的长句分解为更简洁的短句或使用并列句。
4. 风格和语气:
– 使用更正式、严谨的表达方式。
– 虽然不改变文章的基本意义,但请确保语气更坚定,以增加读者的信任感。
5. 格式和排版:
– 重新排版原有内容,请使用HTML

标签作为主容器,标题标签仅限

这 3 个组织层级关系,用加粗文本()强调重要的关键词,使用无序列表(