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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 智能体(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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
12天前
|
人工智能 算法 开发者
开源VLM“华山论剑”丨AI Insight Talk多模态专场直播预告
开源VLM“华山论剑”丨AI Insight Talk多模态专场直播预告
109 10
开源VLM“华山论剑”丨AI Insight Talk多模态专场直播预告
|
19天前
|
数据采集 人工智能 自然语言处理
让AI读懂代码需求:模块化大模型微调助力高效代码理解与迁移
本文介绍了一种解决开源项目代码升级中“用户需求关联相应代码”难题的创新方法。面对传统Code RAG和Code Agent在召回率、准确率和稳定性上的不足,以及领域“黑话”和代码风格差异带来的挑战,作者团队提出并实践了一套以大模型微调(SFT)为核心的解决方案。
212 21
|
2月前
|
机器学习/深度学习 人工智能 自动驾驶
AI Agent多模态融合策略研究与实证应用
本文从多模态信息融合的理论基础出发,构建了一个结合图像与文本的AI Agent模型,并通过PyTorch代码实现了完整的图文问答流程。未来,多模态智能体将在医疗、自动驾驶、虚拟助手等领域展现巨大潜力。模型优化的核心是提升不同模态的协同理解与推理能力,从而打造真正“理解世界”的AI Agent。
AI Agent多模态融合策略研究与实证应用
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
1096 1
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
301 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
1268 0
|
6月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
338 0

热门文章

最新文章