无需OpenAI API Key,构建个人化知识库的终极指南

一、介绍

今天和大家一起学习下使用LangChainLLM 来构建本地知识库

我们先来了解几个名词。

二、什么是LLM?

LLM指的是大语言模型Large Language Models),大语言模型(LLM)是指使用大量文本数据训练的深度学习模型,可以生成自然语言文本或理解语言文本的含义。大语言模型可以处理多种自然语言任务,如文本分类、问答、对话等,是通向人工智能的一条重要途径。

所以,LLM就是AI模型。

三、什么是Embeddings?

embedding中文翻译为嵌入,并不能很好的理解embedding的概念。我们看一下OpenAI的文档是怎么解释:
在这里插入图片描述
用中文翻译总结一下就是:

嵌入(Embedding)是一种将文本或对象转换为向量表示的技术,将词语、句子或其他文本形式转换为固定长度的向量表示。嵌入向量是由一系列浮点数构成的向量。通过计算两个嵌入向量之间的距离,可以衡量它们之间的相关性。距离较小的嵌入向量表示文本之间具有较高的相关性,而距离较大的嵌入向量表示文本之间相关性较低。

embedding在自然语言处理的许多任务中发挥重要作用。例如:

  1. 在搜索任务中,可以使用embedding来度量查询字符串与文本结果之间的相关性,从而对搜索结果进行排序。
  2. 在聚类任务中,可以使用embedding将相似的文本字符串进行分组。
  3. 在推荐系统中,可以根据embedding的相似性来推荐与用户兴趣相关的文本或物品。
  4. 还可用于异常检测、多样性分析和文本分类等任务。

总之,Embedding是将文本或对象转换为向量表示的技术,可以衡量文本之间的相关性,在各种自然语言处理任务中发挥重要作用。

四、LangChain🦜️🔗

ok,上面解释了LLM和Embedding的概念,我们现在来介绍一下LangChain是什么?
在这里插入图片描述

LangChain是一个基于语言模型开发应用程序的框架。可以将语言模型与其他数据源相连接,并允许语言模型与环境进行交互,提供了丰富的API。
官方文档:https://python.langchain.com/en/latest/index.html
Github(已经有4W多的star):https://github.com/hwchase17/langchain
更多关于LangChain的内容,大家可以自行查阅文档研究。这里给大家简单介绍几个组件。

4.1 Document Loader 文档加载器

文档加载器可以将我们的文件加载到内存中,例如txt、md、csv、pdf,甚至是B站视频都可以直接通过Document Loaders加载到内存中。LangChain提供了各种文件格式的文档加载器:
在这里插入图片描述

4.2 Vectorstore 矢量数据库

在上一步通过Document Loader将我们的文档加载到内存中,然后通过Embedding Model将文字转化为向量,Vectorstore要做的就是把这些向量存储起来,并且提供快速查找文档内容的接口(即Retrievers)。
同样,LangChain也提供了丰富的方式作为Vectorstore:
在这里插入图片描述

4.3 Question Answering over Docs (代码)

ok,了解了以上的概念之后,现在我们开始构建我们自己的知识库。
主要流程:

  1. 加载文档
  2. 文本分割
  3. 构建矢量数据库
  4. 引入LLM
  5. 创建qa_chain,开始提问
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"
"""
Question Answering Chain
"""

with open("../test.txt") as f:
    state_of_the_union = f.read()

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(state_of_the_union)

embeddings = OpenAIEmbeddings()

docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": str(i)} for i in range(len(texts))]).as_retriever()

query = "What did the president say about Justice Breyer"
docs = docsearch.get_relevant_documents(query)

chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")

answer = chain.run(input_documents=docs, question=query)
print(answer)

ok,其实到这里我们的本地知识库就完成了,但是上面的OpenAIEmbeddings()OpenAI()中,默认使用的都是OpenAI公司的模型,是需要OpenAI API Key的,这个需要注册OpenAI账号,是有几美元的免费额度的,但是现在官方已经停止注册了,并且免费额度是会过期的,如果想要继续使用,就需要添加国外信用卡支付方式,这个也是很麻烦的。所以我们就只能使用其他开源的AI模型。
在这里插入图片描述
在这里插入图片描述

五Huggingface🤗

Hugging Face是一个为自然语言处理(NLP)开发者提供工具和库的开源社区和平台。该平台提供了丰富的NLP模型和预训练模型。
在这里插入图片描述

我们可以使用开源的google/flan-t5-xlAI模型

5.1 使用Huggingface开源AI模型构建本地知识库

from langchain import HuggingFacePipeline
from langchain.chains import RetrievalQA
from langchain.chains.question_answering import load_qa_chain
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.llms.base import LLM
import os

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline

os.environ["HUGGINGFACEHUB_API_TOKEN"] = 'HUGGINGFACEHUB_API_TOKEN'

# Document Loaders
loader = TextLoader('../example_data/test.txt', encoding='utf8')
documents = loader.load()

# Text Splitters
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# select embeddings
embeddings = HuggingFaceEmbeddings()

# create vectorstores
db = Chroma.from_documents(texts, embeddings)

# Retriever
retriever = db.as_retriever(search_kwargs={"k": 2})

query = "what is embeddings?"
docs = retriever.get_relevant_documents(query)

for item in docs:
    print("page_content:")
    print(item.page_content)
    print("source:")
    print(item.metadata['source'])
    print("---------------------------")


tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-xl")
model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-xl")
pipe = pipeline(
    "text2text-generation",
    model=model,
    tokenizer=tokenizer,
    max_length=512,
    temperature=0,
    top_p=0.95,
    repetition_penalty=1.15
)

llm = HuggingFacePipeline(pipeline=pipe)

chain = load_qa_chain(llm, chain_type="stuff")
llm_response = chain.run(input_documents=docs, question=query)
print(llm_response)
print("done.")

5.2 使用Flask构建 Web API

另外使用Flask构建Web API,实现问答机器人
在这里插入图片描述

在这里插入图片描述

六、最后

源码已上传https://github.com/Liu-Shihao/transformers-course

如果您有什么问题或者经验,欢迎评论区交流。
如果您觉得本文对您有帮助,欢迎点赞、评论、分享。
您的支持是我创作的最大动力。

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
私有知识库的开源项目是一种用于企业内部的知识管理系统,可以用于构建企业内部的私有化知识库、资料库、文档库、操作手册、个人博客、个人文档等内容管理平台。这样的项目可以解决企业信息化的采集、展现、开发和共享等功能需求。其中,有一款开源+私有化部署的知识管理系统由老厂商天翎推出,该系统已经有18年的发展历史,平台技术成熟,源代码规模达到200万行,客户授权超过10万+,具备丰富的开发经验。通过这样的开源项目,企业可以将不同部门和岗位的员工组织起来,将每个人都视为学习者,通过知识分享和知识库的形式,实现知识的共享和利用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [如何搭建团队私有化知识库?你用过哪些开源项目?](https://blog.csdn.net/jonyleek/article/details/121919599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的](https://blog.csdn.net/LowCode_/article/details/125261184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【开源项目】一款私有化部署的知识管理工具,你值得拥有!](https://blog.csdn.net/jonyleek/article/details/129027680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu_Shihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值