How to Build LLM Applications With LangChain and Openai(vectorstoreindexcreator openai key)
一、介绍
LangChain和OpenAI的vectorstoreindexcreator是一套用于创建语义索引和进行语义搜索的工具。
1. 甚么是LangChain和OpenAI的vectorstoreindexcreator
LangChain是一个基于语义的搜索引擎框架,它可以通过构建语义索引来高效地提供准确和相关的搜索结果。OpenAI的vectorstoreindexcreator是LangChain的组件之一,它负责创建语义索引。
2. 为何使用LangChain和OpenAI的vectorstoreindexcreator
LangChain和OpenAI的vectorstoreindexcreator可以帮助开发人员构建智能搜索引擎和智能对话系统。通过语义索引和匹配技术,LangChain可以提供更准确和相关的搜索结果,而OpenAI的vectorstoreindexcreator提供了创建这些语义索引的功能。
二、使用LangChain和OpenAI的vectorstoreindexcreator的步骤
A. 步骤一:获得OpenAI API密钥
- 打开OpenAI官方网站并创建账户。
- 生成OpenAI API密钥。
B. 步骤二:安装LangChain和OpenAI的vectorstoreindexcreator
- 检查Python环境和依赖。
- 使用pip安装LangChain和OpenAI的vectorstoreindexcreator。
C. 步骤三:创建VectorstoreIndexCreator对象
- 导入必要的模块和包。
- 初始化VectorstoreIndexCreator对象。
三、开发独特的利用
A. 基于LangChain和OpenAI的vectorstoreindexcreator的利用案例
1. 语义搜索引擎
- 使用LangChain和OpenAI的vectorstoreindexcreator构建一个基于语义的搜索引擎。
- 通过索引和匹配向用户提供准确和相关的搜索结果。
2. 智能对话系统
- 使用LangChain和OpenAI的vectorstoreindexcreator构建一个智能对话系统。
- 基于训练好的GPT语言模型,实现用户发问的智能回答。
四、常见问题和解决方案
A. 解决OpenAI API密钥问题
- “The dummy key not working”毛病的解决方法。
- 检查API密钥会不会正确设置。
B. 解决Unicode编码毛病
- “unicodeEncodeError”毛病的解决方法。
- 设置正确的编码方式。
五、总结
A. LangChain和OpenAI的vectorstoreindexcreator的价值和利用前景
LangChain和OpenAI的vectorstoreindexcreator为开发人员提供了强大的工具,可以构建智能搜索引擎和智能对话系统。它们的价值在于提供准确和相关的搜索结果,和实现基于训练好的语言模型的智能回答。
B. 使用LangChain和OpenAI的vectorstoreindexcreator的步骤回顾
1. 获得OpenAI API密钥。
2. 安装LangChain和OpenAI的vectorstoreindexcreator。
3. 创建VectorstoreIndexCreator对象。
C. 探索更多创新利用的建议和未来可能发展的方向
通过不断探索和创新,LangChain和OpenAI的vectorstoreindexcreator有着广阔的利用前景。可能的发展方向包括提升搜索引擎的精确度和智能对话系统的回答能力。
vectorstoreindexcreator openai key的进一步展开说明
## LangChain 是一个用于构建大型语言模型 (LLM) 利用程序的开源工具
LangChain 是一个开源工具,用于构建大型语言模型 (LLM) 利用程序。它支持各种开源和闭源模型,通过一个工具轻松创建这些利用程序。LangChain 中的一些模块包括:
– 模型:用于支持模型和集成
– Prompt:简化提示管理
– Memory:用于管理区别模型调用之间的内存
– Indexes:用于加载、查询和更新外部数据
– Chains:用于创建对 LLM 的后续调用
– Agents:用于开发 LLM 模型可以自我指点的利用程序
– Callbacks:用于记录和流式传输链中的中间步骤
本文将展现怎样使用这些模块构建一个利用程序,该利用程序用于转录 YouTube 视频并发问。
## 安装所需包
首先,安装所需的包:
“`python
pip install langchain docarray openai pytube python-dotenv tiktoken pinecone-client git+https://github.com/openai/whisper.git
“`
然后,创建一个 `.env` 文件,并添加你的 Openai 和 Pinecone 密钥。Pinecone 是一个用于存储嵌入向量的向量数据库。对要持久化并且不想将它们存储在内存中的真实利用程序,这点特别重要。
“`python
OPENAI_API_KEY=OPENAI_API_KEY
PINECONE_API_KEY = PINECONE_API_KEY
PINECONE_API_ENV = PINECONE_API_ENV
“`
## 导入包
导入所需的包并加载环境变量:
“`python
import os
import whisper
import tiktoken
import openai
import pinecone
import tempfile
import numpy as np
import pandas as pd
from pytube import YouTube
from uuid import uuid4
from dotenv import load_dotenv
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import CSVLoader
from IPython.display import display, Markdown
from langchain.indexes import VectorstoreIndexCreator
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
“`
## 转录 YouTube 视频
第一步是下载 YouTube 视频并进行转录。例如,使用 Lex 的一些长达两个小时的视频。下面的代码是在 ML 学院的一次会议上提供的。
“`python
YOUTUBE_VIDEOS = [“https://www.youtube.com/watch?v=Z3_PwvvfxIU”, “https://www.youtube.com/watch?v=DxREm3s1scA”]
def transcribe(youtube_url, model):
youtube = YouTube(youtube_url)
audio = youtube.streams.filter(only_audio=True).first()
with tempfile.TemporaryDirectory() as tmpdir:
file = audio.download(output_path=tmpdir)
title = os.path.basename(file)[:⑷]
result = model.transcribe(file, fp16=False)
return title, youtube_url, result[“text”].strip()
transcriptions = []
model = whisper.load_model(“base”)
for youtube_url in YOUTUBE_VIDEOS:
transcriptions.append(transcribe(youtube_url, model))
df = pd.DataFrame(transcriptions, columns=[“title”, “url”, “text”])
df.to_csv(“text.csv”)
df.head()
“`
将文本存储在 CSV 文件中,这样就不需要反复转录像同的视频了。
## 将文本分成多个部份
大型语言模型有最大的可接受 token 数量。因此,在问问题时,不能将全部转录视频的内容作为内容传递。为了解决这个问题,你需要:
1. 将文本分成包括少许 token 的较小块
2. 为每一个块创建嵌入向量
3. 将嵌入向量保存在向量数据库(如 Pinecone)中
4. 将相关的嵌入向量传递给 Openai 而不是全部转录嵌入向量,当有人发问时
当一个问题被提出时,为该问题创建一个嵌入向量。接下来,找到与该问题嵌入向量类似的向量数据库中的嵌入向量。选择最类似的前四个嵌入向量,而不是传递所有嵌入向量,由于传递所有嵌入向量将超过模型的内容长度。
拆分文本并将其保存到 CSV 文件中:
“`python
MAX_TOKENS = 500
tokenizer = tiktoken.get_encoding(“cl100k_base”)
df = pd.read_csv(“text.csv”, index_col=0)
df[“tokens”] = df.text.apply(lambda x: len(tokenizer.encode(x)))
def split_into_many(text, max_tokens):
# 将文本分成句子
sentences = text.split(‘. ‘)
# 获得每一个句子的 token 数
n_tokens = [len(tokenizer.encode(” ” + sentence)) for sentence in sentences]
chunks = []
tokens_so_far = 0
chunk = []
# 遍历句子和与之相连的 token 组成的元组
for sentence, token in zip(sentences, n_tokens):
# 如果到目前为止的 token 数加上当前句子的 token 数大于最大的 token 数,
# 将 chunk 添加到 chunk 列表中,并重置 chunk 和 tokens_so_far
if tokens_so_far + token > max_tokens:
chunks.append(“. “.join(chunk) + “.”)
chunk = []
tokens_so_far = 0
# 如果当前句子的 token 数大于最大的 token 数,则继续下一句
if token > max_tokens:
continue
# 否则,将句子添加到 chunk 中,并将 token 数添加到 total 中
chunk.append(sentence)
tokens_so_far += token + 1
# 将最后的 chunk 添加到 chunks 列表中
if chunk:
chunks.append(“. “.join(chunk) + “.”)
return chunks
data = []
for row in df.iterrows():
title = row[1][“title”]
url = row[1][“url”]
text = row[1][“text”]
tokens = row[1][“tokens”]
if tokens <= MAX_TOKENS: data.append((title, url, text)) else: for chunk in split_into_many(text, MAX_TOKENS): data.append((title, url, chunk)) df = pd.DataFrame(data, columns=["title", "url", "text"]) df["tokens"] = df.text.apply(lambda x: len(tokenizer.encode(x))) df.to_csv("video_text.csv", index=False) ``` ## 使用 LangChain 加载数据 使用 LangChain 的 `CSVLoader` 加载数据。 ```python file = "video_text.csv" loader = CSVLoader(file_path=file) docs = loader.load() ``` ## 创建 Pinecone 索引 Pinecone 索引用于存储向量数据并提供查询。你将把问题嵌入向量与存储在该索引中的向量进行比较,并返回最相似的向量。 你可以在 Pinecone上创建一个免费索引,提供所需的维度、索引名称和要存储的元数据。 ```python pinecone.init(api_key=PINECONE_API_KEY, environment=PINECONE_API_ENV) PINECONE_INDEX = "another-tube" embedding_dimension = 1536 if PINECONE_INDEX not in pinecone.list_indexes(): pinecone.create_index( PINECONE_INDEX, dimension=embedding_dimension, metric="cosine", metadata_config={"indexed": ["title", "url"]}, ) index = pinecone.Index(PINECONE_INDEX) index.describe_index_stats() ``` ## 使用 Pineone 和 Openai 进行问题回答 你已经拥有了开始查询转录的 YouTube 视频所需的一切。使用 Pinecone 索引、由转录创建的文档和 Openai 嵌入初始化一个数据库。 ```python embeddings = OpenAIEmbeddings() db = Pinecone.from_documents(docs, embeddings, index_name=PINECONE_INDEX) ``` `from_documents` 命令从文档中初始化一个向量存储,并存储所有的嵌入向量。 创建一个查询并检查向量存储中与该查询相似的文档数量: ```python query = "Mr Beast 是如何成功在 YouTube 上的?" docs = db.similarity_search(query) len(docs) # 4 ``` 有多种方法可以获得答案。这里我们使用 RetrievalQA 链。该链接受以下参数: - LLM 模型,这里使用的是 Openai chat 模型 - 链类型,将所有文档倒入上下文并对 LLM 进行一次调用 - 检索器,用于获取文档并传递给 LLM ```python retriever = db.as_retriever() llm = ChatOpenAI(temperature=0.0) qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, verbose=True) response = qa.run(query) ``` 将 LLM 的温度设置为 0,确保答案生成过程中不产生随机性。 通过本文,你已经看到了如何使用 LangChain 和 Openai 构建大型语言模型应用程序。使用 LangChain 的美妙之处在于可以使用不同的 LLMs。例如,你可以将 Openai LLM 替换为 LangChain 提供的另一个模型。 我正在为这个应用程序开发一个 Web 界面。如果你想看到它并了解更多关于开发它所使用的技术栈,请回复这封电子邮件或在下面留言。 如果你对这些机器学习应用程序感兴趣,特别是如何将它们部署到实际应用中,请查看 ML Schol。
vectorstoreindexcreator openai key的常见问答Q&A
问题1:如何获得OpenAI API密钥?
答案:要获得OpenAI API密钥,您需要依照以下步骤进行操作:
- 访问OpenAI平台网站并登录您的帐户:https://platform.openai.com/account。
- 创建一个API密钥,您可以在OpenAI网站的“账户”页面上找到相应的选项。
- 复制您的API密钥。
- 将API密钥添加到您的代码中,以便使用OpenAI API。
以下是一个示例代码片断,演示了怎样使用OpenAI API密钥:
import openai
# 设置您的OpenAI API密钥
openai.api_key = "您的API密钥"
# 调用OpenAI API进行操作
response = openai.Completion.create(
engine="davinci-codex",
prompt="请在这里输入您的问题..."
)
问题2:LangChain和OpenAI能够解决甚么问题?
答案:LangChain是一个与OpenAI集成的平台,它可以帮助您构建强大的利用程序,并提供以下功能:
- 使用OpenAI的ChatGPT模型,与Excel数据集进行交互,实现对数据的聊天式查询。
- 训练自定义的OpenAI GPT语言模型,用于回答关于用户提供数据的问题。
- 使用LangChain和OpenAI进行问答系统开发,提供4种区别的问答方式。
- 通过LangChain和OpenAI构建LLM(LangChain Language Model)利用程序。
- 充分利用LangChain平台的功能,并结合OpenAI实现更多创新的利用。
LangChain和OpenAI的集成使得开发人员可以更轻松地构建基于自然语言理解和生成的利用程序,为用户提供更好的交互体验和智能化服务。
问题3:怎样在LangChain中使用OpenAI的嵌入支持构建嵌入向量?
答案:使用LangChain的OpenAI嵌入支持构建嵌入向量非常简单,您只需要依照以下步骤进行操作:
- 首先,将您的OpenAI API密钥添加到您的代码中,以便访问OpenAI的功能。
- 导入所需的模块和类,包括os、Document、VectorstoreIndexCreator和ApifyWrapper。
- 使用Document类创建一个文档对象,将您要构建嵌入向量的文本作为参数传递给它。
- 使用VectorstoreIndexCreator类创建一个向量存储的索引对象。
- 使用索引对象的add_document方法将文档对象添加到向量存储中。
- 通过调用索引对象的build索引方法,构建嵌入向量。
以下是一个示例代码片断,演示了怎样使用LangChain的OpenAI嵌入支持构建嵌入向量:
import os
from langchain.modules import Document, VectorstoreIndexCreator, ApifyWrapper
# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = "您的API密钥"
# 创建文档对象
document = Document("要构建嵌入向量的文本")
# 创建向量存储的索引对象
index_creator = VectorstoreIndexCreator()
# 将文档对象添加到向量存储中
index_creator.add_document(document)
# 构建嵌入向量
index_creator.build_index()