一、项目概述
大语言模型 (LLM) 驱动智能体的检索能力,在通过使用工具、查看文件和规划信息交互的过程中表现尤为卓越,通过与各种工具和文档交互,形成有效对话。检索增强生成(RAG)作为一种提升性能的技术,其受欢迎程度呈爆炸式增长。从高度准确问答AI聊天机器人到代码生成副驾驶,各行各业的组织都在探索 RAG如何帮助优化流程。
NVIDIA搭建开源LLM NVIDIA AI基础模型,可直访问应用程序,并使用LangChain连接器简化开发。本项目是参加NVIDIA举办的AI-AGENT夏季训练营后,搭建RAG智能问答机器人,对电影文本信息进行提取,并对文本与图表进行多模态转换,和通过Gradio搭建前端界面进行用户交互。
二、技术方案与实施步骤
1、模型选择:
RAG应用程序含四个组件:自定义数据加载器、文本嵌入模型、向量数据库、大语言模型。
2、数据的构建(必写): 说明数据构建过程、向量化处理方法及其优势。
(1)生成 API 密钥后,NGC 构建聊天用户界面并添加自定义数据连接器。
(2)使用 API 调用访问文本嵌入模型。
(3)将向量数据库部署到索引嵌入中,创建或加载向量存储,并使用 FAISS 库存储数据块。
(4)使用开源框架 Streamlit 将 RAG 工作流连接在一起。
3、环境搭建
先安装Miniconda,然后按照下列步骤配置环境,配置好在终端输入jupyter-lab进入实验环境。
三、项目成果与展示
1、场景一:让RAG机器人学习2024年8月新上映的“电影《逆行人生》的导演(徐峥)”文本信息
(1)申请llama-3.1-405b-instruct大模型的API Key(vapi开头的所有内容,点击复制)。
(2)将自己的API Key填入jupyter-lab,输出奇怪的结果“张一白”,与真实结果“徐峥”不符。
(分析原因猜测:openAI大模型还没能及时学习到2024年8月新上映的中文电影信息)
(3)使用 phi-3-small-128k-instruct初始化SLM(结果分析:结果不正确,而且胡说八道)。
。
(4)在子文件夹zh_data里(新增关于电影《逆行人生》的相关信息的txt文件)
(5)进行删除空行等预处理。
(6)将文档处理到faiss vectorstore,并将其保存到磁盘。
(7)基于phi-3-small-128k-instruct模型进行RAG检索,提出问题(修改invoke内容)
(结果分析:得到正确答案,说明RAG已经学习到奥本海默电影信息)
(8)通过Gradio搭建前端界面,给这个智能体添加一个UI界面,形成智能问答交互页面
(自定义函数,将上述invoke的文本输入和result的文本输出,传递给Gradio接口)
———————————————————————————————————————————
———————————————————————————————————————————
2、场景二:让RAG机器人学习“电影奥本海默”百度百科在线网址的Oppenheimer文本信息
(1)加载库与API Key(复制粘贴vapi)
(2)定义html_document_loader网络文档数据加载器:进行文档解析返回文档内容
(3)定义index_docs函数作为构建向量储存和文档检索工具
(4)定义数据向量化工具(修改urls里的内容为“Oppenheimer电影的百度词条”的网址)
(5)使用定义好的相关函数和工具执行文档嵌入Embeddings的生成
(6)未使用RAG的llm输出输出效果(修改llm.invoke里的内容为“输出Oppenheimer的信息”)
结果只有Oppenheimer的个人信息,欠缺Oppenheimer的电影信息。
(7)采用langchain结合NIM实现LLM-RAG检索(修改query内容为“输出Oppenheimer信息”)
结果里既有奥本海默的个人信息,也有电影信息,说明RAG已经学习到奥本海默电影信息。
(8)通过Gradio搭建前端界面,给这个智能体添加一个UI界面,形成智能问答交互页面
(自定义函数,将上述query的文本输入和result的文本输出,传递给Gradio接口)
———————————————————————————————————————————
———————————————————————————————————————————
3、场景三:让RAG机器人学习“电影票房”的柱状图信息,转化成统计表和饼图信息
(1)导入工具库
(2)利用Microsoft Phi 3 vision来解析图片数据
结果中从统计图里提取电影及其票房信息
(3)定义多模态数据分析Agent(功能为从统计图里提取电影及票房信息,转化成统计表形式)
(4)执行上面构建好的智能体(实现从统计图里提取电影及其票房信息,并转化成统计表形式)
(5)通过大模型用python语言绘制图表(将统计表里的票房信息以饼图形式展示)
(6)通过Gradio搭建前端界面,给这个智能体添加一个UI界面,形成智能问答交互页面
(功能为输入柱状图形式的图片,传递给Gradio接口,转换成饼图形式)
———————————————————————————————————————————
———————————————————————————————————————————
四、问题与解决方案
在场景二让RAG机器人学习在线文本信息时,出现无法学习中文信息的问题。
本想在线学习电影逆行人生的信息,无法正确显示,改为学习外语电影Oppenheimer的信息。
五、项目总结与展望
本项目通过搭建RAG机器人进行文本与图表多模态信息处理,并通过Gradio搭建UI交互界面。
未来研究在NVIDIA NIM上使用 Phi-3构建语音机器人,并通过处理pdf文件进行多模态分析。
六、附件与参考资料
2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac)
NVIDIA举办的AI-AGENT夏季训练营的资料、讲解、答疑。
最后十分感谢NVIDIA各位老师的热心帮助和用心分享。