智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答

简介: 智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答

上一篇介绍了接入大模型输出结果,实现了基本的问答功能。现有大模型都是基于公开资料训练的,搜索垂直专业领域的知识可能会出现问题。本篇文章会基于RAG实现简单的知识库问答功能。
一、RAG介绍
RAG(Retrieval Augmented Generation)即检索增强生成,是一种结合了信息检索和大语言模型(LLM)生成能力的技术,旨在解决大语言模型在回答问题时,因知识更新不及时、缺乏特定领域知识或事实性错误等问题,通过在生成回答之前检索相关外部知识源来增强回答的准确性和可靠性。
1.工作原理
检索阶段:当用户提出一个问题时,RAG 系统首先将问题发送到内部的知识源(如文档库、数据库等)进行检索。通常会使用向量检索技术,将问题和知识源中的文档都转换为向量表示,然后计算问题向量与文档向量之间的相似度,找出与问题最相关的文档段落。
生成阶段:将检索到的相关文档段落与用户的问题一起输入到大语言模型中,大语言模型结合这些外部知识生成最终的回答。
2.优势
知识更新:可以利用最新的内部知识来回答问题,避免了大语言模型因训练数据固定而导致的知识过时问题。

特定领域知识:对于特定领域的问题,能够从专业的知识源中获取相关信息,提高回答的专业性和准确性。

减少幻觉:通过引入内部知识,减少大语言模型生成回答时出现问答错误和幻觉内容。

二、具体的功能实现

1.准备知识源

选择合适的知识源,如文本文件、PDF、Word、数据库等本地或内部的结构化或非结构化数据。如我在本地准备了一个自己胡编的一段内容。
image.png
2.对知识源进行预处理,包括文本清洗、分词等,如以下代码所示:

  def load_and_process_documents(directory):
    """
    加载并处理指定目录下的所有文本文件
    :param directory: 包含文本文件的目录路径
    :return: 处理后的文档块列表
    """
    documents = []
    # 遍历目录下的所有文件
    for filename in os.listdir(directory):
        if filename.endswith('.txt'):
            file_path = os.path.join(directory, filename)
            # 使用 TextLoader 加载文本文件
            loader = TextLoader(file_path, encoding='utf-8')
            loaded_docs = loader.load()
            documents.extend(loaded_docs)
    # 初始化文本分割器
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,  # 每个文档块的大小
        chunk_overlap=200  # 相邻文档块的重叠部分大小
    )
    # 分割文档
    split_docs = text_splitter.split_documents(documents)
    return split_docs

3.数据向量化

选择合适的向量数据库,如 FAISS、Chroma 等。我分别试了这两个数据库都是可以的。然后将预处理后的知识源文档转换为向量并存储到向量数据库中。

def create_vector_store(docs):
    """
    创建向量数据库并存储文档向量
    :param docs: 处理后的文档块列表
    :return: 向量数据库对象
    """
    # 初始化 OpenAI 嵌入模型
    #embeddings = OpenAIEmbeddings()
    # 使用 Chroma 创建向量数据库并存储文档向量
    vectorstore = Chroma.from_documents(docs, embeddings)
    # 使用 FAISS 创建向量数据库并存储文档向量
    #vectorstore = FAISS.from_documents(docs, embeddings)
    return vectorstore

4.创建检索并设置问答链

def setup_qa_chain(vectorstore):
    """
    设置问答链
    :param vectorstore: 向量数据库对象
    :return: 问答链对象
    """
    # 初始化 OpenAI 大语言模型
    llm = ChatAI(
    temperature=0.7,  # 控制生成文本的随机性
    max_tokens=500,  # 限制生成的最大token数
    #stream=True #开启流式输出
    stream=False #关闭流式输出
    )
    # 创建检索式问答链
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",  # 使用 "stuff" 类型将检索结果直接输入到 LLM
        retriever=vectorstore.as_retriever()  # 向量数据库的检索器
    )
    return qa_chain

5.运行代码测试功能
image.png
三、总结

LangChain 提供了丰富的动态扩展功能,可以基于RAG实现企业内部私有智能体。在使用RAG时也需注意数据质量或直接影响 RAG 系统的性能,需要对数据进行严格的清洗和预处理。还需选择合适的向量表示方法和嵌入模型,提高检索的准确性和企业适用场景。

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
4月前
|
人工智能 自然语言处理 数据挖掘
从幻觉到精准:RAG如何重塑AI对话的可靠性
从幻觉到精准:RAG如何重塑AI对话的可靠性
372 111
|
4月前
|
人工智能 缓存 运维
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
本文介绍联调造数场景下的AI应用演进:从单Agent模式到多Agent协同的架构升级。针对复杂指令执行不准、响应慢等问题,通过意图识别、工具引擎、推理执行等多Agent分工协作,结合工程化手段提升准确性与效率,并分享了关键设计思路与实践心得。
756 20
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
|
4月前
|
存储 人工智能 搜索推荐
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
本文介绍基于LangGraph构建的双层记忆系统,通过短期与长期记忆协同,实现AI代理的持续学习。短期记忆管理会话内上下文,长期记忆跨会话存储用户偏好与决策,结合人机协作反馈循环,动态更新提示词,使代理具备个性化响应与行为进化能力。
763 10
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
|
4月前
|
人工智能 安全 开发工具
C3仓库AI代码门禁通用实践:基于Qwen3-Coder+RAG的代码评审
本文介绍基于Qwen3-Coder、RAG与Iflow在C3级代码仓库落地LLM代码评审的实践,实现AI辅助人工评审。通过CI流水线自动触发,结合私域知识库与生产代码同仓管理,已成功拦截数十次高危缺陷,显著提升评审效率与质量,具备向各类代码门禁平台复用推广的价值。(239字)
897 24
|
4月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
4月前
|
人工智能 自然语言处理 搜索推荐
RAG:让AI的回答不再“凭空想象
RAG:让AI的回答不再“凭空想象
|
5月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
993 109
|
5月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
465 2
|
4月前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
404 120

热门文章

最新文章