AI-AGENT夏季训练营 — RAG智能对话机器人

AI-AGENT夏季训练营 — RAG智能对话机器人

一、技术方案与实施步骤

1.1 模型选择

本次项目采用的是ChatGLM3-6B和RAG模型,其中ChatGLM3-6B由智谱AI和清华大学KEG实验室联合发布的对话预训练模型,它属于第三代对话模型,具有强大的对话流畅性和功能支持 。这个模型以其60亿参数量和创新的GLM架构,在对话理解与生成能力上表现出色 。
该模型具有如下几个特点:

  • 强大的基础模型:ChatGLM3-6B-Base使用了多样的训练数据和合理的训练策略,在多个数据集上展现出强大的性能 。
  • 完整的功能支持:模型采用新设计的Prompt格式,增强了能力,并且原生支持工具调用、代码执行和Agent任务等复杂场景 。
  • 全面的开源序列:除了对话模型ChatGLM3-6B,还开源了基础模型ChatGLM3-6B-Base和长文本对话模型ChatGLM3-6B-32K 。
    而RAG(Retrieval-Augmented Generation)模型是一种结合了信息检索(IR)和自然语言生成(NLG)的技术,它在处理复杂查询和生成信息丰富的回答方面表现出色 。以下是RAG模型的一些主要优势:
  • 提高准确性和效率:RAG通过检索外部知识库来辅助生成文本,使得生成的内容更加准确,同时提高了处理复杂查询的效率 。
  • 实现即时知识更新:RAG模型的知识库可以即时更新,确保了模型能够处理最新的信息,避免了因模型训练数据过时而导致的知识缺失问题 。
  • 可解释性强:RAG的答案直接来源于检索库,用户可以验证答案的准确性,增加了对模型输出的信任度 。
  • 高度定制和安全性:RAG可以根据特定领域的知识库进行定制,实现快速适应特定领域,同时通过限制知识库权限,可以确保敏感信息不被泄露 。
  • 避免“幻觉”问题:RAG通过检索外部信息作为输入,辅助大型模型回答问题,减少生成不准确信息的问题,增加回答的可追溯性 。
  • 数据隐私和安全:RAG可以将知识库作为外部附件管理企业或机构的私有数据,避免数据在模型学习后以不可控的方式泄露 。
  • 信息的实时性:RAG允许从外部数据源实时检索信息,因此可以获取最新的、领域特定的知识,解决知识时效性问题 。
    . 成本和响应速度:RAG相比于微调模型具有训练时间短和成本低的优势;而与长文本处理相比,则拥有更快的响应速度和低得多的推理成本 。
    RAG模型的这些优势使其在问答系统、文档生成和自动摘要、智能助手和虚拟代理、信息检索和知识图谱填充等多个应用场景中具有广泛的应用潜力

1.2 数据的构建

数据构建过程、向量化处理方法及其优势是信息检索和自然语言处理中的关键步骤,尤其是在使用RAG(Retrieval-Augmented Generation)模型时。以下是这些步骤的概述:

  • 数据构建过程
  • 数据收集:收集相关领域的文本数据,可能包括书籍、文章、网页、数据库等多种形式的文档。
  • 数据预处理:
    1. 清洗:去除无关内容,如广告、版权信息等。
    2. 格式化:统一数据格式,便于处理。
    3. 分词:对于中文等语言,进行分词处理。
  • 文档切分:将长文档分割成小块或段落,以适应模型的输入限制,并保持语义的连贯性。
  • 标注(可选):如果需要,对数据进行标注,如问答对、实体识别等。
  • 构建知识库:将处理后的数据组织成易于检索的知识库。
  • 向量化处理方法
  • 选择嵌入模型:选择适合的嵌入模型,如Word2Vec、BERT、GPT等,这些模型能够将文本转换为数值向量。
  • 训练嵌入模型:
    1. 语料库输入:提供大量文本数据训练嵌入模型。
    2. 学习词向量:模型学习文本中每个词或短语的向量表示。
  • 向量化:使用训练好的嵌入模型将文本数据转换为向量形式。
  • 构建索引:在向量数据库中为向量化的数据构建索引,以优化检索效率。

优势

  • 语义理解:向量化能够捕捉文本的深层语义信息,而不仅仅是表面的关键词匹配。
  • 高效检索:向量数据库优化了处理和存储大规模向量数据的效率,使得在面对海量数据时能够迅速检索出相关信息。
  • 泛化能力:向量化处理不仅限于文本数据,还可以处理图像、音频等多模态数据。
  • 快速响应:向量数据库支持快速检索,即使在数据量增长时也能保持查询的响应时间。
  • 可扩展性:向量数据库能够水平扩展,以支持更多的数据和更复杂的查询。
  • 减少歧义:向量化处理减少了自然语言中的歧义性,提供更精确的信息检索。
  • 支持复杂查询:向量化使得能够执行更复杂的查询,如基于语义相似度的搜索。
  • 提高模型性能:在RAG模型中,向量化处理提高了检索的准确性,进而提升了生成文本的质量和相关性。

通过这些步骤和优势,RAG模型能够更有效地结合检索和生成过程,提供更准确、更丰富的信息和回答。

1.3 实施步骤

第一步:使用NVIDIA_API_KEY
第二步:初始化SLM
第三步:初始化ai-embed-qa-4向量模型
第四步:获取文本数据集
第五步:进行一些基本的清理并删除空行
第六步:
6.1 将文档处理到 faiss vectorstore 并将其保存到磁盘
6.2 重读之前处理并保存的 Faiss Vectore 存储
第七步:提出问题并基于phi-3-small-128k-instruct模型进行RAG检索

1.3.1 环境搭建

1 创建Python环境

首先安装miniforge,下载地址为: link
安装完之后,在系统环境变量的path添加下列就行了,根据自己的路径修改:
在这里插入图片描述在打开的终端中按照下面的步骤执行,配置环境:

  • 创建python 3.8虚拟环境
 mamba create --prefix=C:\miniforge3\envs ai_endpoint python==3.9.19
  • 进入虚拟环境
mamba activate ai_endpoint
  • 安装nvidia_ai_endpoint工具
pip install langchain-nvidia-ai-endpoints 
  • 安装Jupyter Lab
pip install jupyterlab
  • 安装langchain_core
pip install langchain_core
  • 安装langchain
pip install langchain
  • 安装matplotlib
pip install matplotlib
  • 安装faiss, 这里如果没有GPU可以安装CPU版本
pip install faiss-cpu==1.7.2
  • 安装OPENAI库
pip install openai

  1. 利用Jupyter Lab打开课件执行
    在上面打开的终端中, 输入以下命令:
jupyter-lab

利用Jupyter 打开课件
在这里插入图片描述

1.3.2 代码实现

先决条件,获取nvapi-key。首先进入该网址: link,注册一个账号,登录进入该网站如下:
在这里插入图片描述选择需要的模型,以chatglm3-6b为例:
在这里插入图片描述在这里插入图片描述具体实现核心代码:

  • Step 1 - 使用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

打印输出当前可用的模型:

from langchain_nvidia_ai_endpoints import ChatNVIDIA
ChatNVIDIA.get_available_models()
  • Step 2 - 初始化SLM
llm = ChatNVIDIA(model="microsoft/phi-3-vision-128k-instruct", nvidia_api_key=nvapi_key, max_tokens=512)
result = llm.invoke("如何养犬")
print(result.content)

在这里插入图片描述

  • Step 3 - 初始化ai-embed-qa-4向量模型
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
embedder = NVIDIAEmbeddings(model="NV-Embed-QA")
  • Step 4 - 获取文本数据集
import os
from tqdm import tqdm
from pathlib import Path

# Here we read in the text data and prepare them into vectorstore
ps = os.listdir("./zh_data/")
data = []
sources = []
for p in ps:
    if p.endswith('.txt'):
        path2file="./zh_data/"+p
        with open(path2file,encoding="utf-8") as f:
            lines=f.readlines()
            for line in lines:
                if len(line)>=1:
                    data.append(line)
                    sources.append(path2file)
  • Step 5 - 进行一些基本的清理并删除空行
documents=[d for d in data if d != '\n']
len(data), len(documents), data[0]
  • Step 6a - 将文档处理到 faiss vectorstore 并将其保存到磁盘
# Here we create a vector store from the documents and save it to disk.
from operator import itemgetter
from langchain.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain.text_splitter import CharacterTextSplitter
from langchain_nvidia_ai_endpoints import ChatNVIDIA
import faiss
#只需要执行一次,后面可以重读已经保存的向量存储
text_splitter = CharacterTextSplitter(chunk_size=400, separator=" ")
docs = []
metadatas = []

for i, d in enumerate(documents):
    splits = text_splitter.split_text(d)
    #print(len(splits))
    docs.extend(splits)
    metadatas.extend([{"source": sources[i]}] * len(splits))

store = FAISS.from_texts(docs, embedder , metadatas=metadatas)
store.save_local('./zh_data/nv_embedding')
  • Step 6b - 重读之前处理并保存的 Faiss Vectore 存储
# Load the vectorestore back.
store = FAISS.load_local("./zh_data/nv_embedding", embedder,allow_dangerous_deserialization=True)
  • Step 7- 提出问题并基于phi-3-small-128k-instruct模型进行RAG检索
retriever = store.as_retriever()

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "Answer solely based on the following context:\n<Documents>\n{context}\n</Documents>",
        ),
        ("user", "{question}"),
    ]
)

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

chain.invoke("法国斗牛犬")

二、项目成果与展示

2.1 应用场景

对话机器人在犬类与饲养知识的具体应用场景中,能够发挥重要作用,为宠物主人提供便捷、准确的信息服务。以下是一些主要的应用场景:

  • 饲养知识问答
    场景描述:宠物主人可以通过与对话机器人交互,询问关于犬类饲养的各种问题,如“如何训练小狗坐下?”、“哪种狗粮适合我家狗狗的年龄和体重?”等。
    功能实现:对话机器人利用自然语言处理技术理解用户的问题,并通过检索知识库或调用相关算法,给出专业、详细的回答。
    优势:快速响应、24小时在线,为宠物主人提供即时的饲养指导。

  • 健康咨询与诊断辅助
    场景描述:当宠物主人发现狗狗出现异常情况,如食欲不振、呕吐、腹泻等,可以通过对话机器人进行初步的健康咨询。
    功能实现:对话机器人根据用户描述的症状,提供可能的病因分析、紧急处理措施以及就医建议。同时,可以引导用户拍摄宠物照片或视频,以便进行更准确的诊断。
    优势:提供初步的健康评估,减轻宠物主人的焦虑情绪,并为及时就医提供参考。

  • 饲养计划制定
    场景描述:宠物主人可以根据狗狗的品种、年龄、健康状况等信息,通过对话机器人制定个性化的饲养计划。
    功能实现:对话机器人根据用户输入的信息,结合知识库中的饲养建议,生成包括饮食、运动、训练等方面的饲养计划。
    优势:为宠物主人提供科学、合理的饲养指导,促进狗狗的健康成长。

  • 宠物行为解读
    场景描述:宠物主人可能对狗狗的某些行为感到困惑,如为何频繁吠叫、为何突然躲藏等,可以通过对话机器人进行解读。
    功能实现:对话机器人利用宠物行为学知识,结合用户描述的行为表现,给出可能的原因和解决方案。
    优势:帮助宠物主人更好地理解狗狗的行为和需求,增强与狗狗之间的沟通和互动。

  • 宠物社交与分享
    场景描述:宠物主人可以通过对话机器人参与宠物社交活动,分享自己的养狗经验、照片和视频等。
    功能实现:对话机器人可以提供一个宠物社交平台或接口,让宠物主人可以与其他养宠人士交流心得、分享快乐。
    优势:增强宠物主人的归属感和社交体验,促进宠物文化的传播和发展。

  • 宠物用品推荐与购买
    场景描述:宠物主人在购买狗粮、玩具、保健品等宠物用品时,可以通过对话机器人进行推荐和购买。
    功能实现:对话机器人根据狗狗的品种、年龄、健康状况等信息,推荐适合的宠物用品,并提供购买链接或渠道。
    优势:为宠物主人提供便捷的购物体验,同时确保购买的宠物用品符合狗狗的实际需求。

综上所述,对话机器人在犬类与饲养知识的具体应用场景中,能够为用户提供全方位、个性化的服务体验。随着技术的不断进步和应用场景的不断拓展,对话机器人将在宠物领域发挥更加重要的作用。

2.2 功能演示

下面附上几个功能演示效果:

  • 犬类分类:以法国斗牛犬为例在这里插入图片描述

  • 提供如何训练犬只的建议
    在这里插入图片描述

  • 咨询如何养犬
    在这里插入图片描述参加英伟达(NVIDIA)夏季AI-Agent训练营无疑是一次宝贵且充满挑战的学习经历,它不仅深化了我对人工智能领域的理解,还让我亲身体验了最前沿的技术应用与创新。以下是我对这次训练营的感想、总结与展望:

  • 感想

  • 技术前沿的震撼:英伟达作为GPU和AI加速技术的领军者,其训练营内容覆盖了深度学习、强化学习、计算机视觉、自然语言处理等多个热门方向,让我深刻感受到了AI技术的飞速发展和无限潜力。

  • 实战能力的提升:训练营通过理论讲解与项目实践相结合的方式,让我们在解决实际问题的过程中不断试错、优化,极大地提升了我的编程能力和问题解决能力。特别是那些基于NVIDIA硬件优化的实战项目,让我对如何高效利用硬件资源有了更直观的认识。

  • 社群文化的感染:训练营汇聚了来自全球各地的优秀学子和行业专家,大家共同探讨技术难题、分享学习心得,这种积极向上的社群氛围极大地激发了我的学习热情和创造力。

  • 总结
    训练营中不乏来自业界的嘉宾分享,他们分享的行业趋势、技术挑战与解决方案让我对AI技术的实际应用场景有了更加清晰的认识,也为我未来的职业规划提供了宝贵的参考。

  • 展望

  1. 持续学习:AI技术日新月异,我将继续保持对新技术、新方法的关注和学习,不断提升自己的专业技能和竞争力。
  2. 深化应用:我计划将所学知识应用于实际项目中,比如参与开源社区贡献、开发创新应用等,通过实践来检验和巩固所学知识。
  3. 探索新领域:随着AI技术的不断发展,我将积极探索边缘计算、自动驾驶、机器人等新兴领域的应用,争取在这些领域也能有所建树。
  4. 加强交流:我将继续与同行保持密切的交流与合作,共同推动AI技术的进步和发展。同时,我也希望能够有机会参与到更多的国际交流中,拓展自己的国际视野。

总之,英伟达夏季AI-Agent训练营为我打开了一扇通往AI世界的大门,让我在这里收获了知识、技能和友谊。我相信,在未来的日子里,我将以更加饱满的热情和坚定的信念,继续在AI领域探索前行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值