langchain使用chroma进行持久化时的一些问题
根据官方文档–langchain使用Chroma官方文档
第一步在工程中进行 pip install chromadb
并粘上官网提供的相应代码后
代码报错
这边搜索报错
error:Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/
需要安装 Microsoft C++ 生成工具 - Visual Studio
Microsoft C++ 生成工具
页面直接点击下载生成工具即可
以上步骤执行完毕后再执行 pip install chromadb 即可
下面提供一段demo代码文章来源:https://www.toymoban.com/news/detail-613414.html
import os
from langchain.chains.question_answering import load_qa_chain
from langchain.text_splitter import CharacterTextSplitter
from langchain.chat_models import ChatOpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.document_loaders import DirectoryLoader
# 这里输入自己的 openai 的 key
os.environ["OPENAI_API_KEY"] = "---------------------------"
os.environ["OPENAI_API_BASE"] = "---------------------------"
OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
OPENAI_API_BASE = os.environ["OPENAI_API_BASE"]
# chat_content写提问
chat_content = "柏林少女这款香水的评价如何"
print("用户正在提问:" + chat_content)
# 这里的upload 是最外层的文件夹(也可自己配置希望读取的文件夹)
this_dir = os.path.dirname(__file__)
path = os.path.join(this_dir, '..', 'upload')
print(path)
# langchain提供DirectoryLoader方法可直接加载文件夹下指定格式文件
# loader_kwargs 参数代表是否开启--自动根据编码格式转义
text_loader_kwargs = {'autodetect_encoding': True}
loader = DirectoryLoader(path, glob="*.txt", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs)
docs = loader.load()
# print(docs)
embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)
# 使用ChatOpenAI接口
llm = ChatOpenAI(temperature=0, openai_api_key=OPENAI_API_KEY, verbose=True)
# 初始化加载器
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
# 切割加载的 document
split_docs = text_splitter.split_documents(docs)
# 这里请更换为自己电脑的指定路径,以存放index
vector_store_path = r"D:\pythonCodeSpace\vector_store"
print(vector_store_path)
# 下面两种情况在使用时请仅选其一:1.embedding并存储 2.仅读取指定存储空间
# 1.持久化存储进入矢量库
print("chroma持久化------")
vectordb = Chroma.from_documents(documents=split_docs,
embedding=embeddings,
persist_directory=vector_store_path)
vectordb.persist()
# 2.如果只是读取---读取持久化的embedding内容
# vectordb = Chroma(persist_directory=vector_store_path, embedding_function=embeddings)
# k=? 是指指召回top ?的结果
# as_retriever函数还有个search_type的参数, 默认的是similarity, 参数解释如下:
# search_type 搜索类型:“similarity” 或 “mmr”
# search_type=“similarity” 在检索器对象中使用相似性搜索,在其中选择与问题向量最相似的文本块向量。
# search_type=“mmr” 使用最大边际相关性搜索,其中优化相似性以查询所选文档之间的多样性。
retriever = vectordb.as_retriever(search_kwargs={"k": 1})
print("根据提问内容在矢量库中查询相关内容,relevantDocs------")
relevantDocs = retriever.get_relevant_documents(chat_content)
chain = load_qa_chain(llm, chain_type="stuff")
result = chain({"input_documents": relevantDocs, "question": chat_content}, return_only_outputs=True)
print(result['output_text'])
这里的demo代码有参考csdn的文章 如下
用LangChain实现一个ChatBlog
感谢作者大大文章来源地址https://www.toymoban.com/news/detail-613414.html
到了这里,关于OpenAI+LangChain+Chroma的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!