使用AI-Agent的RAG智能对话机器人帮二刺螈角色打赢复活赛

2301_77550512 2024-09-01 09:31:01 阅读 56

使用AI-Agent的RAG智能对话机器人帮二刺螈角色打赢复活赛

NVIDIA AI-AGENT夏季训练营

项目名称:AI-AGENT夏季训练营 — RAG智能对话机器人

报告日期:2024年8月18日

项目负责人:Askeladd

项目概述:

**应用场景:**本项目展示了AI-Agent的RAG智能对话机器人在二次元领域的创新应用。我从互联网收集动漫角色数据,运用RAG检索增强技术将人物设定等信息向量化存储。最后,我基于大模型进行检索增强生成,创造出独特的对话体验。**亮点:**这种方法不仅提高了对话的准确性和相关性,还为二次元爱好者提供了一个互动的平台。相比于prompt技术,RAG在角色还原能力以及准确度上更加优越,尤其对于具有大量信息设定的角色来说。

技术方案与实施步骤

模型选择: **大模型的选择理由:**本项目采用微软语言模型phi-3-mini-4k-instruct,考虑到未来边缘设备性能,选择微软phi3轻量型语言模型(SLM)。**RAG模型的优势分析:**RAG模型能有效利用外部知识库,引用大量信息以提供更深入、准确且有价值的答案,从而提高生成文本的可靠性。它具备检索库的更新机制,无需重新训练模型即可实现知识的即时更新。这意味着RAG模型可以提供与最新信息相关的回答,高度适配需要及时性的应用。由于RAG模型的答案直接来自检索库,其回复具有很强的可解释性,减少了大模型的"幻觉"。用户可以核实答案的准确性,并从信息来源中获取支持。此外,RAG模型可以根据特定领域的知识库和提示进行定制,使其快速具备该领域的能力。这说明RAG模型广泛适用于各种领域和应用,例如虚拟伴侣、虚拟宠物等。数据的构建: 通过解析网页获取html文件内容,并最终提取出重要的信息。创建embedding嵌入并通过FAISS进行向量存储。最后langchain结合NIM实现LLM-RAG检索。功能整合: 不仅是大模型,为了提升角色还原度,使用whisper,ffmpeg,tts等技术,为角色bot生成语音。最后使用gradio将其部署并应用。

实施步骤:

环境搭建:

安装anaconda创建虚拟环境

<code>conda creat --name ai_endpoint python=3.8

conda activate ai_endpoint

pip install langchain-nvidia-ai-endpoints jupyterlab langchain_core langchain matplotlib numpy faiss-cpu==1.7.2 langchain-community

pip install openai-whisper==20231117

pip install ffmpeg==1.4

conda install ffmpeg -y

pip install edge-tts

pip install transformers

pip install openai

pip install torch torchvision torchaudio

pip install pydub==0.25.1

代码实现:

数据获取和处理:

import re

from typing import List, Union

import requests

from bs4 import BeautifulSoup

def html_document_loader(url: Union[str, bytes]) -> str:

try:

response = requests.get(url)

html_content = response.text

except Exception as e:

print(f"Failed to load { url} due to exception { e}")

return ""

try:

# 创建Beautiful Soup对象用来解析html

soup = BeautifulSoup(html_content, "html.parser")

# # 删除脚本和样式标签

for script in soup(["script", "style"]):

script.extract()

# 从 HTML 文档中获取纯文本

#text = soup.get_text()

# 查找所有 <p> 和 <b> 标签的元素

elements = soup.find_all(['p'])

# 提取所有匹配元素的文本内容

text = [element.get_text() for element in elements]

text="".join(text)code>

# # 输出文本内容

# with open("text.txt", "w", encoding="utf-8") as f:code>

# f.write(str(text))

#

# 去除空格换行符

text = re.sub("\s+", " ", text).strip()

return text

except Exception as e:

print(f"Exception { e} while loading document")

return ""

提取的部分信息

在这里插入图片描述

定义数据向量化工具和index_docs函数作为构建向量储存和文档检索工具langchain结合NIM实现LLM-RAG检索

<code>retriever = docsearch.as_retriever()

prompt = ChatPromptTemplate.from_messages(

[

(

"system",

"You will play as an anime character with the following character settings:Answer solely based on the following context:\n<Documents>\n{context}\n</Documents>Throughout the conversation, respond strictly to the character and try to show the character's personality and characteristics as much as possible.Responses must be short, no more than two to three sentences.Avoid revealing too much information and keep it mysterious.Use tone and language that matches the character's personality.If it involves a character's secrets or important information, be cautious when answering and may respond in a vague or deflected manner.",

),

("user", "{question}"),

]

)

chain = (

{ "context": retriever, "question": RunnablePassthrough()}

| prompt

| llm

| StrOutputParser()

)

result=chain.invoke("introduce yourself in short")

def phi_demo(prompt):

result=chain.invoke(prompt)

return result

在这里插入图片描述

使用whisper,ffmpeg,tts等技术,为角色bot生成语音

在这里插入图片描述

使用gradio进行应用部署

<code>with gr.Blocks() as demo:

user_avatar = "./xuenai_pic.jpg"

bot_avatar = "./askeladd_pic.jpg"

chatbot = gr.Chatbot(avatar_images=(user_avatar, bot_avatar),label="Chat with Askeladd")code>

msg = gr.Textbox(label="Ask anything")code>

msg.submit(run_text_prompt, [msg, chatbot], [msg, chatbot])

with gr.Row():

audio = gr.Audio(sources="microphone", type="filepath")code>

send_audio_button = gr.Button("Send Audio", interactive=True)

send_audio_button.click(run_audio_prompt, [audio, chatbot], [audio, chatbot])

demo.launch(share=True,debug=True)

测试与调优

测试:评估大模型回答与动漫角色的符合度,主要通过询问身份信息相关问题。同时,对原角色的还原程度进行评估。

调优:着重于提高角色信息的准确性,并改进prompt设计。集成与部署: 使用gradio将应用部署。

项目成果与展示:

应用场景展示: 本项目主要聚焦于角色模拟扮演,为用户提供情感互动和娱乐体验。功能演示:与bot聊天对话,并附有角色语音生成,保存于本地

在这里插入图片描述

csdn竟然上传不了mp3文件

在这里插入图片描述

问题与解决方案:

问题分析:HTML解析困难,难以单独提取特定标签和元素信息。其次,不同终端浏览器的兼容性问题导致某些功能无法正常使用。最后,如何设计简短有效的prompt提示词也是一个难题。gradio部署以后总是无法找到microphone,在github上也有人提出了相同的issus,但是没找到可以实施的解决方案。解决措施:对页面源代码进行了深入分析,并借助GPT的智能建议来克服这些挑战。

项目总结与展望:

项目评估:项目完成度尚可,虽然大部分代码源自现有资源,但成功地进行了综合应用。值得一提的是,成功地使代码运行起来,实现了预期功能。然而,在创新性和独特性方面还有提升空间。未来方向: 为角色训练专属声音和live2d,结合语言大模型使其更加还原。

附件与参考资料



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。