NVIDIA AI-AGENT夏季训练营-作业之法律咨询

NVIDIA AI-AGENT夏季训练营总结

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

01项目概述

基于RAG实现民法典相关法律咨询对话及语音生成。
用户问:
什么是知识产权
=回复=
知识产权是指权利人依法就其创造性的智力劳动成果或其他符号标记等享有的专有权利。根据已知信息中的内容,知识产权包括以下几种类型:

  1. 作品:这指的是文学、艺术和科学领域的创作。
  2. 发明、实用新型、外观设计:这些都是技术领域的创新,包括新的技术方案、产品的形状、构造以及其结合。
  3. 商标:用于区分商品或服务来源的标记。
  4. 地理标志:用于标识产品来源于特定地区且具有特定质量、声誉或其他特征的标志。
  5. 商业秘密:包括技术信息和经营信息,如生产工艺、配方、客户名单等。
  6. 集成电路布图设计:指集成电路的三维结构设计。
  7. 植物新品种:指经过人工培育的具有新的特征的植物品种。
  8. 法律规定的其他客体:其他由法律规定应当受到保护的智力成果。

02技术方案与实施步骤

 模型选择:详细描述项目采用的技术方案,包括大模型的选择理由、RAG模型的优势分析。
RAG中选择测试以下大语言模型:
meta/llama-3.1-405b-instruct(采用)
mistralai/mistral-7b-instruct-v0.3
nv-mistralai/mistral-nemo-12b-instruct
mistralai/mistral-large
google/gemma-7b
microsoft/phi-3-small-128k-instruct(采用)
RAG中选择测试以下Embedding模型:
baai/bge-m3
snowflake/arctic-embed-l
nvidia/nv-embedqa-mistral-7b-v2
nvidia/nv-embed-v1
NV-Embed-QA(采用)
nvidia/nv-embedqa-e5-v5
较大较新的模型回答得比较准确。对于法律工作者或法律咨询者,更希望得到遵照相关法律法规的回答,因此有引入RAG的必要性。
 数据的构建:说明数据构建过程、向量化处理方法及其优势。
以民法典为例构建了RAG的向量数据库和向量检索,与关键词检索相比,检索内容更准确。
 功能整合:介绍进阶的语音功能、Agent功能、多模态等功能的整合策略与实现方法。
引入了TTS功能,对RAG+大模型的回答做语音播报。
实施步骤:
 环境搭建(必写): 描述开发环境的搭建过程,包括必要的软件、库的安装与配置。
conda create --name ai_endpoint python=3.11
conda activate ai_endpoint
pip install langchain-nvidia-ai-endpoints
pip install jupyterlab
pip install langchain_core
pip install langchain
pip install matplotlib
pip install numpy1.26.4
pip install faiss-cpu
1.7.2
pip install gradio
pip install openai-whisper20231117
pip install ffmpeg
1.4
conda install ffmpeg -y
pip install edge-tts
pip install transformers
pip install openai
 代码实现
‘’’
from openai import OpenAI
client = OpenAI(
base_url = “https://integrate.api.nvidia.com/v1”,
api_key = “nvapi-*****”
)
completion = client.chat.completions.create(
model=“meta/llama-3.1-405b-instruct”,
messages=[{“role”:“user”,“content”:“什么是知识产权”}],
temperature=0.2,
top_p=0.7,
max_tokens=1024,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end=“”)

from langchain_nvidia_ai_endpoints import ChatNVIDIA
nvapi_key=“nvapi-*****”
llm = ChatNVIDIA(model=“microsoft/phi-3-small-128k-instruct”, nvidia_api_key=nvapi_key, max_tokens=512)
result = llm.invoke(“什么是知识产权?”)
print(result.content)

from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
embedder = NVIDIAEmbeddings(model=“NV-Embed-QA”, nvidia_api_key=nvapi_key)

import os
from tqdm import tqdm
from pathlib import Path
from langchain.text_splitter import RecursiveCharacterTextSplitter
file_path=‘.day3/txt/中华人民共和国民法典_2020_05_28.txt’

Here we read in the text data and prepare them into vectorstore

ps = os.listdir(“./day3/txt/”)
data = []
sources = []
for p in ps:
if p.endswith(‘.txt’):
path2file=“./day3/txt/”+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)
documents=[d for d in data if d != ‘\n’]
len(data), len(documents), data[0]
from operator import itemgetter
from langchain_community.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))
text_splitter
docs
metadatas
store = FAISS.from_texts(docs, embedder , metadatas=metadatas)
store.save_local(‘./day3/nv_embedding’)

Load the vectorestore back.

store = FAISS.load_local(“./day3/nv_embedding”, embedder,allow_dangerous_deserialization=True)
retriever = store.as_retriever()

prompt = ChatPromptTemplate.from_messages(
[
(
“system”,
“Answer solely based on the following context:\n\n{context}\n”,
),
(“user”, “{question}”),
]
)

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

answer = chain.invoke(“什么是知识产权?”)

edge_command=f’edge-tts --text “{answer}” --write-media ./day3/demo.mp3’
import os
os.system(edge_command)`
 测试与调优: 描述测试过程,包括测试用例的设计、执行及性能调优。
测试主要是环境的安装,pip包的版本不对容易报错。
民法典文本较长,向量化时间较长,下一步需要进行批量处理,以提高稳定性和效率。
 集成与部署: 说明各模块集成方法及最终部署到实际运行环境的步骤。
Anaconda中部署环境,在VScode和pycharm环境下运行。

03项目成果与展示

 应用场景展示: 民法典相关法律咨询,通过RAG+大模型技术给出文本和语音回答。
 功能演示: 列出并展示实现的主要功能,直观展示项目成果。
对问题“什么是知识产权?”的回答
meta/llama-3.1-405b-instruct的回答如下:
知识产权是指人们在科学、文学、艺术等领域中创造的智力成果,如发明、作品、商标等。
microsoft/phi-3-small-128k-instruct的回答如下:
《知识产权》是指个人或组织对其创造的原创作品或发明的法律权利。这些权利包括但不限于版权、商标、专利和商业秘密。版权保护文学、艺术和音乐作品;商标保护品牌名称和设计;专利保护新的工艺、产品或服务;商业秘密保护公司内部的机密信息。知识产权的目的是鼓励创新和创造力,同时为创作者或发明者提供控制其作品或发明的权利,从而确保他们能够从其工作中获得经济利益。
基于RAG实现民法典相关法律咨询对话及语音生成。
用户问:
什么是知识产权
=回复=
知识产权是指权利人依法就其创造性的智力劳动成果或其他符号标记等享有的专有权利。根据已知信息中的内容,知识产权包括以下几种类型:

  1. 作品:这指的是文学、艺术和科学领域的创作。
  2. 发明、实用新型、外观设计:这些都是技术领域的创新,包括新的技术方案、产品的形状、构造以及其结合。
  3. 商标:用于区分商品或服务来源的标记。
  4. 地理标志:用于标识产品来源于特定地区且具有特定质量、声誉或其他特征的标志。
  5. 商业秘密:包括技术信息和经营信息,如生产工艺、配方、客户名单等。
  6. 集成电路布图设计:指集成电路的三维结构设计。
  7. 植物新品种:指经过人工培育的具有新的特征的植物品种。
  8. 法律规定的其他客体:其他由法律规定应当受到保护的智力成果。

04问题与解决方案:

 问题分析与解决措施
Faiss向量化速度比较慢,计划进行批量处理。
TTS生成语音的文本中不能有回车/n,生成的文本需要删除回车后再传入tts.

05 项目总结与展望:

 项目评估: 对项目的整体表现进行客观评估,总结成功点和存在的不足。
成功点在于跑通了课程的全部内容并将其应用于法律咨询,不存之处在于webUI和连续问答尚未实现。
 未来方向: 基于项目经验,提出未来可能的改进方向和发展规划。
扩大法律咨询范围,提高RAG中向量数据库生成的稳定性和效率。

附件与参考资料

  1. https://build.nvidia.com/explore/discover#llama-3_1-405b-instruct
  2. https://blog.csdn.net/babylon3000/article/details/141217141?spm=1001.2014.3001.5502
  3. NVIDIA开发者社区公众号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值