赞
踩
第一章 langchain生成与加载向量库并根据匹配内容回答问题
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。我们相信,最强大和不同的应用程序不仅将通过 API 调用语言模型,还将:
因此,LangChain 框架的设计目标是为了实现这些类型的应用程序。
LangChain 框架提供了两个主要的价值主张:
LangChain 提供了对几个主要模块的支持。这些模块按照逐渐增加的复杂性排列如下:
本文主要介绍了基于LangChain的文本内容切分、向量生成、存储、加载以及Prompt拼接与文本大模型输出连接的方法。LangChain是一种用于文本大模型的框架,通过对文本内容进行切分,生成向量,存储向量,加载向量等步骤,实现文本内容的处理和建模。在LangChain框架下,我们可以将文本内容切分为多个片段,并使用向量表示每个片段。这些向量可以存储在计算机内存中,也可以存储在磁盘上。我们可以将问题与匹配到的知识与Prompt进行拼接,并将其输入到文本大模型中进行处理和输出。通过这种方式,我们可以使用LangChain框架和ChatGLM2-6B文本大模型来处理和建模文本内容,从而实现对一些领域的专业知识进行准确的回答。
from chatglm_llm import *
from transformers import AutoTokenizer, AutoModel
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
# ChatGLM2-6B 模型加载
tokenizer = AutoTokenizer.from_pretrained("/workspace/models/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/workspace/models/chatglm2-6b", trust_remote_code=True).float()
chatglm = model.eval()
# 非结构化数据路径
filepath = "demo.txt"
# 向量存储路径
vs_path = "knowledge_base/vector_store"
# 读取非结构化数据
loader = UnstructuredFileLoader(filepath)
docs = loader.load()
# 定义文本切分
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=200)
docs = text_splitter.split_documents(docs)
# 加载Embedding模型
embeddings = HuggingFaceEmbeddings(model_name="/workspace/models/text2vec-base-chinese")
# 使用langchain的FAISS构建向量库
vector_store = FAISS.from_documents(docs, embeddings)
# 存储为本地向量库
vector_store.save_local(vs_path)
prompt = f"""基于以下已知信息,请简洁并专业地回答用户的问题。
如果无法从中得到答案,请说 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息"。不允许在答案中添加编造成分。另外,答案请使用中文。
已知内容:
{context}
问题:
{query}"""
query = " 什么是知识图谱?"
# 匹配query相似语句
docs = vector_store.similarity_search(query)
# 将相似语句循环写入context列表
context = [doc.page_content for doc in docs]
# 将prompt模板传入模型中,生成答案
answer = chatglm.chat(tokenizer, prompt1, history=[])
print(answer)
工作随笔,希望可以帮助到大家!
如有不足之处,请多多指教!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。