点击上方卡片关注 不要错过精彩文章
读完这篇文章,别忘记给舰长点一个关注!舰长的智能体搭建文章,不仅是节点的构建,也有思路的分享。智能体搭建最重要的就是思路。最希望,能给大家带来不一样的搭建思路和方法。
点一点上方的🔵蓝色小字关注,你的支持是我最大的动力!🙏谢谢啦!🌟"
大家好!我说唐舰长团队-缪斯 检索增强生成(RAG)在这两年的发展中技术越来越成熟。但是,在实际应用中,如何高效构建和维护 RAG 系统的知识库,尤其是面对大量非结构化文档时,仍然是一项复杂且耗时的工作。
针对这一问题,我们可以利用 Trae 研发一款自动化问答(QA)生成工具,旨在优化知识库构建流程。该工具能够自动处理各类文档,将非结构化文本转换为结构化的问答对,并无缝对接至 RAG 系统的知识库。通过这一方式,可以降低人工干预的成本,提高知识库的更新效率,从而增强 RAG 系统在实际业务场景中的应用价值。
一、技术方案
在构建 RAG 知识库的过程中,我们会遇到很多挑战,例如文档处理耗时较长、分块规则复杂、整体流程繁琐等。为了解决这些问题,我们可以把需求拆解为两个核心模块:
QA 生成模块和知识库上传模块。
- QA 生成模块:该模块负责加载、清洗、处理各种格式的非结构化文档,并按照设定的规则进行分块。然后调用大模型对文档内容进行解析,自动生成相应的问答对,从而实现结构化知识的自动化构建。
- 知识库上传模块:目前主流的 AI 应用开发工具(如 Coze、Dify、LangChain 等)均提供知识库管理功能。例如,Coze 支持知识库的上传、更新、增删等操作,并提供 API 和 SDK 工具,Dify 也具备类似的 API 接口,而 LangChain 更是 RAG 领域的热门选择,我们在文档加载和处理环节会直接使用 LangChain 相关工具。
基于上述技术方案,我们能够有效优化知识库的构建流程,大幅减少人工干预,提高数据处理效率,进而提升 RAG 系统的落地能力。以上需求看似简单,但是实现起来是很有难度的,所以我们此篇文章中仅讨论QA生成模块的实现。
二、开始实操
基于我们的需求,本次方案主要依赖两款热门工具——Trae 和 LangChain。不啰嗦,直接进入实操部分。
Step1:文档加载
在处理文档时,我们需要考虑多种不同类型的非结构化文档,比如 Word、Markdown、PDF 等。我们选择使用 LangChain 的文档加载器 进行处理,因为相比于其他 AI 开发工具,LangChain 提供了更友好的文档解析能力,能够适配多种格式并轻松集成到 RAG 体系中。
在具体实现过程中,我们结合 Trae 对 LangChain 文档加载器的介绍,完成了对多种非结构化文档的高效加载,从而确保后续的 QA 生成模块能够顺利处理不同类型的数据。
Step2:QA生成
这是一个大函数,里面的功能包括了把文档加载变量中的文本给到大模型,然后做分块、做QA生成这几个步骤。
Trae Prompt:请你根据我对代码功能、逻辑和细节的描述,生成一个Python函数。函数的主要功能是利用大模型(如 glm-4)基于给定的文本块生成高质量的问答对,并在生成过程中显示进度条。
QA生成 Prompt:基于以下给定的文本,生成一组高质量的问答对。请遵循以下指南: 1. 问题部分: - 为同一个主题创建尽可能多的(如K个)不同表述的问题,确保问题的多样性。 - 每个问题应考虑用户可能的多种问法,例如: - 直接询问(如"什么是...?") - 请求确认(如"是否可以说...?") - 寻求解释(如"请解释一下...的含义。") - 假设性问题(如"如果...会怎样?") - 例子请求(如"能否举个例子说明...?") - 问题应涵盖文本中的关键信息、主要概念和细节,确保不遗漏重要内容。 2. 答案部分: - 提供一个全面、信息丰富的答案,涵盖问题的所有可能角度,确保逻辑连贯。 - 答案应直接基于给定文本,确保准确性和一致性。 - 包含相关的细节,如日期、名称、职位等具体信息,必要时提供背景信息以增强理解。 3. 格式: - 使用 "Q:" 标记问题集合的开始,所有问题应在一个段落内,问题之间用空格分隔。 - 使用 "A:" 标记答案的开始,答案应清晰分段,便于阅读。 - 问答对之间用两个空行分隔,以提高可读性。 4. 内容要求: - 确保问答对紧密围绕文本主题,避免偏离主题。 - 避免添加文本中未提及的信息,确保信息的真实性。 - 如果文本信息不足以回答某个方面,可以在答案中说明 "根据给定信息无法确定",并尽量提供相关的上下文。 5. 示例结构(仅供参考,实际内容应基于给定文本): 给定文本: {chunk} 请基于这个文本生成问答对。
如果你对于生成的代码或者其中的Prompt不满意也可以自己去调整代码,我在日常使用Trae的过程中,用Chat会比较多:
Step3:页面展示
在功能框架大致搭建的差不多的时候,我们要开始考虑UI界面该用什么代码,用HTML、Vue?还是gradio、streamlit等等。
每一种UI界面框架都有自己的优劣,这里我不做过多讲解,想了解的朋友可以自己去查一下对比。
在此工具的制作中,我使用到了streamlit来构建界面。
UI界面的构建关乎到用户的体验和具体功能的使用情况,也是非常重要的一个点,所以我们也要不断地测试,查看和调整。
我在工具制作过程中的像trae提出的几个比较重要的需求点:
- 目前的代码有一个问题就是在我点击保存之后并没有真实的保存在我制定的绝对路径中。并且我在点击保存成JSON或者CSV或者TXT格式之后,这个页面会自动跳转到让我继续上传文件生成QA,我希望的是能在保存JSON之后我还能继续保存CSV格式或者TXT格式这个情况。
- 还需要一个停止生成的功能
- 我还需要展示出分割逻辑,比如我想知道为什么会分割成5个片段
- 我还需要知道目前的代码是只能生成单个文档中的QA对吗还是多个。我目前在上传中看到能一次性上传多个
UI界面展示:
我的智谱欠费了。。。那就再展示一下生成的数据把。
结果展示:
好了,这样一份QA对话生成就完毕了,这样我们就可以对接需要知识库的平台进行使用,关注舰长持续学习AI编程。
关注公众号并添加舰长微信,领取智能体学习资料,并参与Coze技术直播讲解
舰长积极创建智能体;工作流交流群,让我们在AI时代一起进步互相学习!每天会在群里分享智能体的搭建,欢迎各位小伙伴加入~
船长团队创作智能体专栏小册,里面有最新进阶的Coze智能体文章,在文章有收获的同时,可以分销而获取60%的小册费用,聚财成多
没有评论:
发表评论