NVIDIA AI-AGENT夏季训练营 — 墨尔本大学RAG智能对话机器人

NVIDIA AI-AGENT夏季训练营

项目名称:AI-AGENT夏季训练营 — 墨尔本大学RAG智能对话机器人
报告日期:2024年8月18日
项目负责人:桑楠

项目概述

墨尔本大学RAG智能对话机器人旨在通过检索增强生成(Retrieval-Augmented Generation)技术,提升学生在学术咨询、课程推荐及校园信息查询方面的用户体验。该项目基于墨尔本大学的丰富数据资源,通过智能化对话提供高效、准确的信息服务,解决传统FAQ系统在灵活应答和个性化推荐上的不足。项目亮点:基于动态知识更新的实时响应以及强大的语义检索能力。

技术方案与实施步骤

 模型选择: 项目采用RAG(Retrieval-Augmented Generation)架构,结合预训练语言模型(ai-phi-3-small-128k-instruct)进行生成,并通过向量检索实现高效的信息检索。选择该模型的原因是模型小可以在一些学校机器人等算力较小的终端设备部署。RAG模型的优势在于它能将检索得到的信息与生成模型的能力相结合,实现知识丰富、上下文准确的自然语言生成。
 数据的构建: 数据构建过程涉及墨尔本大学官方网站、课程目录。通过自然语言处理技术对数据进行清洗、分类,并采用向量化处理。这种方法使模型能够快速准确地从大规模数据集中找到与用户查询最相关的信息。

实施步骤:

 环境搭建
开发环境采用Python,用Anconda来对包进行管理,使用英伟达框架NIM。大语言模型部分使用langchain,向量检索部分使用Faiss,使用getpass来隐藏NVIDIA密钥。使用ChatNVIDIA来选择大语言模型。
 代码实现:

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
llm = ChatNVIDIA(model="ai-phi-3-small-128k-instruct", nvidia_api_key=nvapi_key, max_tokens=512,temperature=0.2,
  top_p=0.7)
result = llm.invoke("墨尔本大学Stop1在哪?")
print(result.content)
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings

embedder = NVIDIAEmbeddings(model="ai-embed-qa-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("./Unimelb/")
data = []
sources = []
for p in ps:
    if p.endswith('.txt'):
        path2file="./Unimelb/"+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)
                    print(line)
documents=[d for d in data if d != '\n']
len(data), len(documents), data[0]
# 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=300, 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('./Unimelb/nv_embedding')
# Load the vectorestore back.
store = FAISS.load_local("./Unimelb/nv_embedding", embedder,allow_dangerous_deserialization=True)
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("在哪可以找到墨尔本stop1?")

项目成果与展示:

 应用场景展示: 项目在多个场景下应用,包括学术咨询、课程推荐、校园导览等。学生可以通过智能对话机器人快速获取相关信息,如课程大纲、申请流程、学术支持服务等。
 功能演示: 文本查询与响应:通过自然语言文本输入,机器人可以提供实时、准确的答案。
在这里插入图片描述

在这里插入图片描述

项目总结与展望:

 项目评估: 不足在于筛选出来的数据还是带有很多\n和一些没用的话。
 未来方向: 添加文生图和语音向导功能。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值