nullskymc / blogcomments

MIT License
0 stars 0 forks source link

每日花钱助手——RAG-Agent智能对话机器人 #20

Open nullskymc opened 1 month ago

nullskymc commented 1 month ago

https://nullskymc.cloud/camp/

项目名称:每日花钱助手——RAG-Agent智能对话机器人

报告日期:2024年8月18日

项目负责人:吃不饱的null

项目概述:

本项目旨在开发一个基于RAG(Retrieval-Augmented Generation)的智能对话机器人,能够进行文字形式的聊天,并拓展了Agent智能体。通过了解用户的每日花钱记录,计算支出总额,理解支出的类型与特点,帮助用户更好的管理财务。

本项目使用langchain作为处理项目逻辑的核心库,langchain是一个用于拓展LLM能力,实现Agent等功能的库。

通常情况下,LLM的知识是静态的,停留在模型训练时的知识。因此,当LLM接受到一个问题,它只能回答它已知的部分,遇到现有知识无法回答的问题,LLM会编造错误的回答或是重复问题,这一现象称为“大模型幻觉”。

为了解决这一问题,我们引入了RAG(Retrieval-Augmented Generation)模型。RAG模型结合了检索和生成的优势,通过特定领域的向量数据库,能够在对话过程中提供更加准确的回答。同时,鉴于微调模型需要耗费大量计算资源,使用RAG是更经济效率的选择。

技术方案与实施步骤

模型选择:

本项目使用NVIDIA NIM平台上的microsoft/phi-3-small-128k-instruct模型,用于处理文本数据,分析情感,执行外部tools,为用户提供每日贴心tips。

数据的构建:

针对特定领域进行数据构建,包括对话语料、知识库等。通过向量化处理,将文本数据转换为向量形式,方便模型处理。

向量化处理就是通过embedding模型将各种文本或多模态的数据标注为词向量,存入到向量数据库中。LLM在接收到问题时,会先通过检索模块在向量数据库中找到相似的知识,据此生成回答。

通过向量化处理文本或多模态的知识,可以有效避免LLM的“大模型幻觉”,提高对话的准确性,在特定领域的应用中具有广泛的前景。

功能整合:

在RAG的基础上,通过langchain的agent的模块,可以让LLM从局限的文本对话中拓展到多功能的Agent智能体,能够执行外部任务,获取外部信息。

比如,LLM并不知道现在的时间,知识库实际上也无法解决这个问题。但是,通过拓展tools,LLM可以调用时间API,获取当前时间,并返回给用户。

创建一个Agent,能够把用户的每日花钱记录,计算支出总额,合成为一个合适的sqlite表,作为tools使用,定义一个代码解释器,让LLM执行生成的代码,从数据库中获取数据,计算支出特点,最终实现完整的主动性Agent chain。

实施步骤:

在实现以上基础函数后,就可以搭建一个基于RAG的智能对话机器人了。下面是一个实现:

环境搭建:

创建一个新的virtualenv环境,安装必要的库:

python -m venv env source env/bin/activate pip install langchain, faiss-cpu, langchain_community, langchain_nvidia_ai_endpoints,openai

这里使用NVIDIANIM平台的模型,需要在NIM平台上注册并获取API key。

from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings,ChatNVDIA embedder = NVIDIAEmbeddings(model=

nullskymc commented 1 month ago

init