企业知识管理混乱?RAG+LangChain+DeepSeek构建会思考的企业知识库!(AI实战系列,附有详细代码)

【背景概述】

 企业知识库,建议尽早搭建!不论是否在AI时代,一个企业的核心竞争力就是知识,很多企业没有意识到,散落在各处的产品手册、用户反馈、销售分析报告等等,都是宝贵的知识资产,若把这些整合到企业知识库,是能实实在在提升运营效率,解决知识管理的大难题!

在学习本地部署大模型(Large Language Model,简称LLM)以及拥有自有模型后,本文将继续从企业AI落地的角度,介绍如何运用RAG技术搭建企业的知识库,通过代码的方式,全流程解析开发过程与原理,其中会涉及使用的技术框架LangChain、Embedding、向量库、调用本地DeepSeek和企业自有模型等,完成知识库的问答。

AI实战系列前两篇:

DeepSeek本地运行全流程解析,企业私有化,数据安全、降本增效双搞定!含ollama命令聊天、chatbox界面聊天效果(AI实战系列,保姆级教程)

教你打造企业自有大模型(基于ollama、deepseek),走出定制化第一步,沉淀AI技术能力,让AI变成生产力!【AI实战系列】

一、概念:企业知识库,RAG、微调与蒸馏,LangChain

在实现企业知识库功能前,先简单介绍下知识库以及相关技术。

1、企业知识库

企业知识库是指企业用于集中存储、管理和共享内部知识与信息的数字化平台‌,是企业数字化转型的必备工作。其中包含了企业的组织架构、品牌及产品服务、业务操作流程、客户信息等内容,目的在于提升企业知识利用效率和各部门的协作能力。‌‌

(1)知识库核心功能。一是知识集中化管理‌。整合企业各类信息(如业绩报告、专利技术、客户数据等),按主题分类存储,形成可检索的共享资源。‌‌‌二是支撑高效协作‌。通过数字化平台实现自助查询,减少重复性工作,加速问题的解决。‌‌‌

(2)AI技术赋能,传统的知识库‌是以结构化的数据为主,比较依赖人工维护,基本上就存在档案室了,没有可用的余地。得益于AI的兴起,新型知识库是结合大模型与检索增强生成(RAG)技术,实现动态知识更新、上下文理解及智能问答,能够显著提升知识的利用率。

其中谈到RAG技术,顺便理解下RAG、微调与蒸馏。

2、RAG、微调与蒸馏

‌(1)RAG(Retrieval-Augmented Generation,检索增强生成)。结合检索(Retrieval)和生成(Generation)技术,通过实时从外部知识库检索相关信息,辅助生成更准确的回答。其实可以将知识库理解为“信息外挂”,先到知识库中获取到相关信息,大模型通过分析理解后给出答复,此时信息是比较安全的,因为其完全独立在外。

(2)微调(Fine-tuning)。在预训练大模型或者搭建的自有模型的基础上,用特定领域或任务的数据训练,使其适应特定场景的需求。此方式需要进行数据训练,若使用外部大模型时,自然会存在数据安全风险。

(3)蒸馏(Knowledge Distillation,知识蒸馏)。可以理解为与“微调”类似,只不过使用的数据是经过大模型学习后浓缩而成的数据(知识),类比于将课本知识划了重点,浓缩而成的“考试前的秘籍”,牺牲部分精度换取效率。

3、LangChain

LangChain是一个基于语言模型开发应用程序的框架。一是组件化,组件封装,将功能模块化,便于开发者直接使用。二是链,将结构化的组件组合,可以快速完成特定任务,比如QA问答等,此处不做详细介绍,后续对该框架进行详细分析,目前大致了解即可。

二、全流程实现与解析

1、实现目标

本次实现的目标是:用户检索知识库的知识,并且能看到大模型的思考过程。步骤拆解如下:

(1)文本预处理:数据(pdf、word等文档)加载与清洗。

(2)文本向量化:将数据切片,并使用预训练的词嵌入(Embedding)模型将加载的数据转换为向量。

(3)构建索引:将处理好的向量数据存储到向量检索库(如Chroma、FAISS等),同时构建知识库的向量索引。

(4)提示词prompt模板编写:让大模型按照要求进行问答。

(5)检索查询:实现一个检索函数,传递一个query参数,在索引中找到最相似的文本片段,使用LangChain的RetrievalQA完成大模型、知识向量库的链式调用。

(6)验证效果:使用根据知识的内容,进行检索效果的验证。

2、代码实现与解析

有了上述拆解过程,实现起来就方便很多了。

(1)创建Python项目

打开PyCharm,创建llm-rag-demo项目,创建data、docs目录,用于存放向量库文件以及需要加入企业知识库的文件。如下:

图片

创建ai_rag_ollama.py,正式进行开发。

注意:最好设置独立的环境,避免与其他项目环境冲突。

(2)文档加载、数据切片处理、构建向量索引

# 加载文件目录file_path = './docs/'# 文件切割chunk_size = 1024chunk_overlap = 256text_split = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)# 向量库persist_directory = './data/vector_store'# 使用本地模型,可以在各模型社区下载embedding_model = HuggingFaceEmbeddings(model_name='./text2vec-base-chinese')vector_db = Chroma(persist_directory=persist_directory, embedding_function=embedding_model)
# 加载文件,并进行数据切片,添加至向量库def load_file(file_name):    print('加载文件--:', file_name)    if file_name.lower().endswith('.pdf'):        loader = PyPDFLoader(file_path + file_name)    elif file_name.lower().endswith('.csv'):        loader = CSVLoader(file_path + file_name)    elif file_name.lower().endswith('.docx'):        loader = Docx2txtLoader(file_path + file_name)    else:        raise ValueError('文件类型不支持。目前支持格式:pdf、csv、docx。')    documents = loader.load()    docs = text_split.split_documents(documents)    if docs:        vector_db.add_documents(docs)
# 遍历加载docs目录下的文件def load_file_and_vec():    if os.path.isdir(file_path):        for root, ds, fs in os.walk(file_path):            for f in fs:                load_file(file_name=f)

(3)提示词prompt模板编写​​​​​​​

qa_prompt = PromptTemplate.from_template("""根据给出的上下文信息回答问题,如果从上下文信息中找不到答案诚实的说不知道。上下文信息:{context}问题:{question}""")

提示词根据需求进行调整即可,此处用于演示相对简单。其中参数一个是上下文信息,一个是提问的问题。

(4)提示词prompt模板编写​​​​​​​

# 检索def do_search(msg):    llm = Ollama(model='deepseek-r1:7b')    qa = RetrievalQA.from_chain_type(        llm=llm,        retriever=vector_db.as_retriever(),        verbose=False,        chain_type_kwargs={'prompt': qa_prompt}    )    response = qa({'query': msg})    try:        ans = response['result']    except Exception as err:        print('chat err: {}'.format(err))        ans = '模型查询异常!'    return ans

解析:

  • 使用了Ollama,调用的是本地模型。这个有不理解的,可以看下上一篇文章。另外后续也会介绍如何对接百度千帆、阿里百炼等平台。

  • 使用了RetrievalQA,可以很方便的组合llm、vector_db、提示词,快速实现问答。

(5)main函数​​​​​​​

if __name__ == '__main__':    # 到网上找好资料,并放在docs目录下,执行加载    # 首次加载后,后续提问时不需要再执行了    load_file_and_vec()    # 提问    query = '量子计算机的工作原理'    # query = '数电发票是什么?'    ans = do_search(query)    # 输出查询结果    print('大模型理解后回复如下:  {}'.format(ans))

(6)附:代码中的相关引用​​​​​​​

import osfrom langchain.document_loaders.pdf import PyPDFLoaderfrom langchain.document_loaders.csv_loader import CSVLoaderfrom langchain.document_loaders import Docx2txtLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.vectorstores.chroma import Chromafrom langchain.embeddings.huggingface import HuggingFaceEmbeddingsfrom langchain.chains.retrieval_qa.base import RetrievalQAfrom langchain.prompts.prompt import PromptTemplatefrom langchain_community.llms import Ollama

三、跑一下,看效果

1、首次执行

首次执行后,在“./data/vector_store”下会生产相关文件。

此时可以将以下这行代码注释了。

# load_file_and_vec()

2、使用deepseek-r1:7b模型,提问“量子计算机的工作原理”

回答如下:

图片

其中<think> 标签里面是思考过程。

回复有些意外的,居然是:无法提供具体信息

3、使用deepseek-r1:14b模型,提问“量子计算机的工作原理”

回答如下:

图片

回复是正常的,可以看出来大模型的能力是能提升知识库的整体能力的

下面可以自行调整query的值,比如提问“数电发票是什么?”,也可以切换模型做一些对比验证,另外还可以使用上一篇中自定义的模型试试哦。

至此,简易的知识库已经完成!若需要提供给用户使用,实现相应的系统界面即可。将企业文档管理起来,实时进行数据切片、向量转换与存储,根据不同类型的场景,编写不同的prompt,以及选择不同的大模型,可以达到更好的效果。

因为篇幅有限,涉及内容较多,有一些没有说到的地方,若有需要源码的,没有下载到text2vec-base-chinese模型文件的,可以私信,也可以看下图的方式获取。当然,有企业知识库搭建需求,欢迎私信。

感谢点赞、收藏、评论、关注,后续持续分享,如何基于DeepSeek等大模型,实现企业AI集成、企业知识库、电商场景应用、模型微调、智能问答、多模态、RPA等项目实战。致力为中小企业提供实用的企业级AI解决方案!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

StarkLi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值