OpenAI+LangChain+Chroma

langchain使用chroma进行持久化时的一些问题

根据官方文档–langchain使用Chroma官方文档
第一步在工程中进行 pip install chromadb
OpenAI+LangChain+Chroma_第1张图片
并粘上官网提供的相应代码后
代码报错
OpenAI+LangChain+Chroma_第2张图片
这边搜索报错
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++ 生成工具
页面直接点击下载生成工具即可

OpenAI+LangChain+Chroma_第3张图片
OpenAI+LangChain+Chroma_第4张图片
OpenAI+LangChain+Chroma_第5张图片
OpenAI+LangChain+Chroma_第6张图片

以上步骤执行完毕后再执行 pip install chromadb 即可
OpenAI+LangChain+Chroma_第7张图片
下面提供一段demo代码

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
感谢作者大大

你可能感兴趣的:(python,语言模型,chatgpt,自然语言处理)