我正在参加「掘金·启航计划」
Chorma
Chroma 是开源嵌入数据库。Chroma 通过为 LLM 插入知识、事实和技能,使构建 LLM 应用程序变得容易。
最近AIGC可谓火遍互联网,各种技术也层出不穷,其中向量数据库Chorma以简单速度快等优点脱颖而出.Chroma是在研究Langchain的过程中发现较轻量级的向量数据库,同时也能为你提供一些简单的向量搜索,虽然搜索结果偶尔会不尽如人意,但是Chorma依然是一个适合初学者入门向量数据库的学习内容。本文基于python3.11展开.
Langchain+Chroma+OpenAI实现为GPT链接本地向量数据
- 我们下载一些依赖
pip3 install openai
pip3 install chromadb
pip3 install langchain
pip3 install unstructured
这里我们下载了openai、chromadb、langchain这些都是必要的依赖.chromadb为我们提供chroma的客户端
-
加载相应文档进行向量化操作
#导入文档加载器
from langchain.document_loaders import DirectoryLoader, TextLoader
#指定chroma持久化的目录,当我们不知道目录时,chroma会将数据存储在内存中,随着程序的关闭就会删除
persist_directory = "./public"
#按目录加载文档
loader = DirectoryLoader(persist_directory, glob='**/*.txt')
docs = loader.load()
#加载单个文档 可以自由选择
loader = TextLoader('./public/***.txt', encoding='utf8')
docs = loader.load()
# 调用openai Embeddings
os.environ["OPENAI_API_KEY"] = "sk-*** 这里输入Open AI APIKey"
embeddings = OpenAIEmbeddings(openai_api_key=os.environ["OPENAI_API_KEY"])
# 文档切块目的是为了防止超出GPTAPI的token限制
text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0)
doc_texts = text_splitter.split_documents(docs)
# 向量化
vectordb = Chroma.from_documents(doc_texts, embeddings, persist_directory=persist_directory)
# 持久化
vectordb.persist()
#执行到这里你会发现public目录下多了一些以parquest结尾的文件,这些文件就是chroma持久化本地的向量数据
3.向量化搜索以及调用OpenAI回答
# 搜索
question = "你要问的问题"
# 通过目录加载向量 这里的目录就是我们持久化的目录
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
# 向量搜索 根据你的问题进行本地向量搜索
docs = vectordb.similarity_search(question, k=4)
print(docs)
# 将搜索到的信息重新转换为向量 (直接查到向量数据还不会😑😑)
vectordb = Chroma.from_documents(docs, embeddings)
#将向量转换为OpenAI所需的格式
retriever = vectordb.as_retriever()
# 创建聊天机器人对象chain
chain = ConversationalRetrievalChain.from_llm(ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo"),retriever=retriever,return_source_documents=True)
chat_history = []
# 调用OpenAI接口实现AI会话
result = chain({"question": question, "chat_history": chat_history})
printr(result)
#到这里就基本实现 Langchain+Chroma+OpenAI实现为GPT链接本地向量数据