当前位置: 首页 > 图灵资讯 > 技术篇> 创建基于私有文档的本地问答系统[无需联网]

创建基于私有文档的本地问答系统[无需联网]

来源:图灵教育
时间:2023-05-30 09:30:25

背景

在当前的信息爆炸时代,越来越多的企业、组织甚至个人都面临着处理和管理大量信息的挑战。其中,管理问题和答案尤为重要,因为它可以直接影响企业或组织的运作和效率。

为了有效地管理问题和答案,许多企业已经开始或使用基于文档的问题跟踪系统。该系统允许企业或组织记录和跟踪问题,包括问题的来源、紧急情况、处理进度和最终解决方案。然而,为了更好地保护企业或组织的私人信息,有时需要一个基于私人文件的私人问题系统。

基于私有文件的私有问题系统可以帮助企业或组织更好地管理他们的问题和答案,同时保护他们的私人信息。

那我们为什么要保护私人信息呢?

众所周知,三星在使用ChatGPT时,由于使用不当,导致机密信息泄露,造成非常不良的图像。如果它与外部网络互动,就有泄露的风险。使用基于私有文件的私有问题系统可以确保只有授权人员才能访问这些私人信息,避免信息泄露,并考虑到工作效率。

如何在三分钟内建立一个私有化的文档问答系统,代码仓库见文末

要做到这一点,一般需要两个步骤:

1/embedding用于文档

2/问答基于embedding后的文档

直接看效果,这里有一个关于https的文档://pub.dev/packages/flex_color_scheme的说明文件,我交给了。 privateGpt 进行学习:

学习结束后,我根据文档的内容问答

我的第一个问题是什么 what is FlexColorScheme

它准确地给出了这个库是做什么的,也给出了引用文档中的内容。

他的实现原则是什么?

1、首先是学习文档。主要代码逻辑如下,基于提供的文档进行学习。这个工具链之前介绍过的工具langchain 当然,实现了 embedding 不使用openAi 是的,而是用的 HuggingFaceEmbeddings。

from langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.vectorstores import Chromafrom langchain.embeddings import HuggingFaceEmbeddingsfrom langchain.docstore.document import Documentfrom constants import CHROMA_SETTINGS

复制

2、问答的实现是基于文档内容的

args = parse_arguments()    embeddings = HuggingFaceEmbeddings(model_name=embeddings_model_name)    db = Chroma(persist_directory=persist_directory, embedding_function=embeddings, client_settings=CHROMA_SETTINGS)    retriever = db.as_retriever()    # activate/deactivate the streaming StdOut callback for LLMs    callbacks = [] if args.mute_stream else [StreamingStdOutCallbackHandler()]    # Prepare the LLM    match model_type:        case "LlamaCpp":            llm = LlamaCpp(model_path=model_path, n_ctx=model_n_ctx, callbacks=callbacks, verbose=False)        case "GPT4All":            llm = GPT4All(model=model_path, n_ctx=model_n_ctx, backend='gptj', callbacks=callbacks, verbose=False)        case _default:            print(f"Model {model_type} not supported!")            exit;    qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, return_source_documents= not args.hide_source)    # Interactive questions and answers    while True:        query = input("\nEnter a query: ")        if query == "exit":            break        # Get the answer from the chain        res = qa(query)        answer, docs = res['result'], [] if args.hide_source else res['source_documents']

复制

要实现它,它也更容易理解。首先,它仍然是一个大型模型。这里默认使用GPT4All。数据源是我们刚才基于自己的本地文档 embedding后的db,当然,还有一个基本的模型,可以直接下载和参考项目 https://github.com/imartinez/privateGPT。

注意事项

1、支持中文。请注意,如果是中文文档,需要UTF8导入,否则学习环节会出错。

2、使用macos计算机,使用 ARCHFLAGS="-arch x86_64" pip3 install -r requirements.txt 依赖安装,m1 芯片可直接安转。