找回密码
 注册

微信登录

微信扫一扫,快速登录

查看: 263|回复: 0

【AI实战系列】每天5分钟、学习AI知识:企业知识管理混乱?RAG+LangChain+DeepSeek构建会思考的企业知识库!

[复制链接]
发表于 2025-6-20 18:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
作者:微信文章

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

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

前两篇详见:

【AI实战系列】每天花5分钟、碎片学习AI知识:DeepSeek本地运行全流程解析,企业私有化,数据安全、降本增效双搞定!

【AI实战系列】每天5分钟、碎片学习AI知识:教你打造企业自有大模型,走出定制化第一步,沉淀AI技术能力,让AI变成生产力!

01



概念:企业知识库,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问答等,此处不做详细介绍,后续对该框架进行详细分析,目前大致了解即可。

02



全流程实现与解析

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目录,用于存放向量库文件以及需要加入企业知识库的文件。如下:

w1.jpg

创建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

03



跑一下,看效果

1、首次执行

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

此时可以将一下这行代码注释了。
# load_file_and_vec()
2、使用deepseek-r1:7b模型,提问“量子计算机的工作原理”
回答如下:
w2.jpg
其中<think> 标签里面是思考过程。回复有些意外的,居然是:无法提供具体信息。
3、使用deepseek-r1:14b模型,提问“量子计算机的工作原理”
回答如下:
w3.jpg
回复是正常的,可以看出来大模型的能力是能提升知识库的整体能力的。
下面可以自行调整query的值,比如提问“数电发票是什么?”,也可以切换模型做一些对比验证,另外还可以使用上一篇中自定义的模型试试哦。
至此,简易的知识库已经完成!若需要提供给用户使用,实现相应的系统界面即可。将企业文档管理起来,实时进行数据切片、向量转换与存储,根据不同类型的场景,编写不同的prompt,以及选择不同的大模型,可以达到更好的效果。
因为篇幅有限,涉及内容较多,有一些没有说到的地方,若有需要源码的,没有下载到text2vec-base-chinese模型文件的,可以私信获取。当然,有企业知识库搭建需求,欢迎私信哦。

每天花5-10分钟,学习一点AI知识,助您厚积而薄发!
欢迎点赞、收藏、评论、关注公众号,谢谢!后续持续分享,如何基于DeepSeek等大模型,实现企业AI集成、企业知识库、电商场景应用、模型微调、智能问答、多模态、RPA等项目实战。致力为中小企业提供实用的企业级AI解决方案!
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+2, 2025-8-17 13:10 , Processed in 0.161467 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表