OpenAI+LangChain+Chroma

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代码

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值