人工智能助手通过RAG消除幻觉以及图片的智能重绘
贺振华_武汉理工 2024-08-31 17:01:02 阅读 60
为期三天的NVIDIA AI-AGENT夏季训练营结束了。过程紧张而充实,收获满满。
废话不多少,直接上干货。
NVIDIA AI-AGENT夏季训练营
项目名称:AI-AGENT夏季训练营 — RAG智能对话机器人
报告日期:2024年8月18日
项目负责人:贺振华
01 项目概述:
本项目旨在使用NVIDIA的NIM人工智能平台,针对特定应用场景中的文本检索和图像处理需求,进行RAG智能对话机器人的搭建和实践。项目通过先进的自然语言处理技术增强文字的检索能力,使用户能够更快速、准确地找到所需信息。同时,利用调用大模型API对图片进行微调重绘,提升视觉呈现效果,增强用户体验。项目的亮点在于其创新性地结合了文本和图像处理功能,为用户提供一站式解决方案。可能的应用场景包括数字图书馆、在线媒体平台和企业内部文档管理等,有助于提高工作效率和信息获取的精确度。
02 技术方案
模型选择:
文字的检索增强(RAG)采用microsoft/phi-3-small-128k-instruct;进阶版RAG采用的mistralai/mixtral-8x7b-instruct-v0.1;图片的智能重绘采用的microsoft/phi-3-vision-128k-instruct和meta/llama-3.1-405b-instruct。
数据的构建:
数据构建过程:在文字的RAG中,数据为txt的文本数据,通过python程序代码对数据进行简单的数据清洗,随后处理到faiss vectorstore 并将其保存到磁盘备用。
向量化处理方法:通过NVIDIA Embeddings工具类调用NIM中的"ai-embed-qa-4"向量化模型。随后使用microsoft/phi-3-small-128k-instruct模型,结合"ai-embed-qa-4"向量化模型,基于本地存储的数据,进行文本数据的RAG功能实现。
功能整合(进阶版RAG必填): 通过多模态模型microsoft/phi-3-vision-128k-instruct ,对图片进行识别,将编码后的图像按照格式给到Microsoft Phi 3 vision , 利用其强大能力解析图片中的数据。随后,使用 LangChain 构建多模态智能体,整体的工作流程为:接收图片 -> 分析数据 -> 修改数据 -> 生成绘制图片的代码 -> 执行代码 -> 展示结果。然后,结合microsoft/phi-3-vision-128k-instruct模型和meta/llama-3.1-405b-instruct模型,通过Gradio构建的前端UI,进行结果的呈现。
03 实施步骤:
1. 环境搭建: 下面依次描述需要配置的环境,软件,插件等。此步骤非常重要,耗时最长。
安装Miniconda。我使用的是:清华大学镜像,地址https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/选择Miniconda版本。由于python至少需要3.8以上版本,所以大家需要注意Miniconda的版本。安装Miniconda。本人在安装时的踩的一个坑是安装目录里不能有空格或中文等字符,否则后续配置环境时不断的报错。Miniconda安装好后,打开终端。创建python 3.8虚拟环境。
<code>conda create --name ai_endpoint python=3.8 通过Anaconda Powershell Miniconda终端进入虚拟环境。
conda activate ai_endpoint
安装nvidia_ai_endpoint工具
pip install langchain-nvidia-ai-endpoints
安装Jupyter Lab
pip install jupyterlab
安装langchain_core
pip install langchain
安装matplotlib
pip install matplotlib
安装Numpy
pip install numpy
安装CPU版本的faiss
pip install faiss-cpu==1.7.2
安装OPENAI库
pip install openai
注意事项:安装过程中如果下载速度慢,可以切换镜像。比如清华镜像。
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2. 代码实现:
Step 1 - 使用NVIDIA_API_KEY 程序执行后会提示输入NVIDIA_API_KEY
import getpass
import os
if os.environ.get("NVIDIA_API_KEY", "").startswith("nvapi-"):
print("Valid NVIDIA_API_KEY already in environment. Delete to reset")
else:
nvapi_key = getpass.getpass("NVAPI Key (starts with nvapi-): ")
assert nvapi_key.startswith("nvapi-"), f"{nvapi_key[:5]}... is not a valid key"
os.environ["NVIDIA_API_KEY"] = nvapi_key
Step 2 - 初始化SLM 模型选用为microsoft/phi-3-small-128k-instruct
llm = ChatNVIDIA(model="microsoft/phi-3-small-128k-instruct", nvidia_api_key=nvapi_key, max_tokens=512)code>
result = llm.invoke("泰坦尼克号的导演是谁?")
print(result.content)
由于字数限制,后续的重要代码和结果用图片代替。
3. 测试与调优: 描述测试过程,包括测试用例的设计、执行及性能调优。
未使用RAG,采用 microsoft/phi-3-small-128k-instruct模型下,给出问题:泰坦尼克号的导演是谁? 相关的运行结果如下。
由此可知,小模型有时会有幻觉,也就是我们常说的“一本正经的胡说八道”。使用RAG,采用 microsoft/phi-3-small-128k-instruct模型下,给出问题:泰坦尼克号的导演是谁? 检索增强后的相关运行结果如下。
进阶版的RAG运行结果对比如下: 未使用RAG的结果:
使用之后的结果:
结论:很明显,RAG的效果良好,可以起到很好的消除AI模型的幻觉问题。
4. 集成与部署: 使用结合microsoft/phi-3-vision-128k-instruct模型和meta/llama-3.1-405b-instruct模型,通过Gradio构建的前端UI,基于图片的智能微调结果如下所示。
API的信息,基于个人信息的保护,我就模糊处理了。
最终的结果展示如下:
UI展示项目中踩过的深坑:图片的保存路径需要在NIM的代码中进行修改,否则不能在UI里面显示。
项目成果与展示:
应用场景展示: RAG增强的智能机器人可能的具体应用场景,如个性化教育辅导,智能电话问答等。功能演示: 列出并展示实现的主要功能,附上UI页面截图,直观展示项目成果。
问题与解决方案:
问题分析: 详细描述在项目实施过程中遇到的主要问题。配置环境报错下载环境相关文件时,速度尤其慢。UI展示项目中,图片无法正常显示。
解决措施: 阐述针对每个问题采取的具体解决措施及心路历程,体现问题解决能力。
问题:配置环境报错。原因:miniconda软件安装路径中有空格。解决方案:消除空格后,重新配置就正常了。问题:下载环境相关文件时,速度尤其慢。原因:默认站点的速度慢。解决方案:切换清华镜像,pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 问题从而解决。UI展示项目中,图片无法正常显示。原因:图片的保存路径设置错误。解决方案:重新设定图片的保存路径。问题解决。这个问题困扰了24个小时,死了不少脑细胞。
项目总结与展望:
项目评估: 项目在文本检索增强和图片微调重绘方面表现出色。项目成功实现了自然语言处理和深度学习算法的有效整合,显著提升了信息检索速度和准确性。这一创新组合可以带来高效便捷的工作体验,在未来的AI垂直领域应用具有广阔的应用前景。未来方向: 对于某些特殊格式的文本和图像,项目的兼容性和处理效果有待加强。此外,系统在处理大规模数据时的响应速度需要进一步优化,以应对未来数据量的增长。附件与参考资料
NVIDIA AI Endpoint介绍页面: https://python.langchain.com/v0.1/docs/integrations/chat/nvidia_ai_endpoints/
2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac)
NVIDIA NIM页面:https://build.nvidia.com/explore/discover
NVIDIA DLI课程学习资料页面:https://www.nvidia.cn/training/online/
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。