基于 Llama 3 构建 RAG 语音助手:集成 Qdrant、Whisper 与 LangChain
本文介绍利用 Llama 3、Whisper、LangChain 和 Qdrant 构建本地 RAG 语音助手的完整流程。涵盖环境配置、数据管道搭建、文档加载与分块、向量嵌入生成、Qdrant 向量数据库存储与检索,以及通过 Whisper 实现文本转语音功能。提供具体代码示例及性能优化建议,助力开发者快速实现智能语音交互系统。

本文介绍利用 Llama 3、Whisper、LangChain 和 Qdrant 构建本地 RAG 语音助手的完整流程。涵盖环境配置、数据管道搭建、文档加载与分块、向量嵌入生成、Qdrant 向量数据库存储与检索,以及通过 Whisper 实现文本转语音功能。提供具体代码示例及性能优化建议,助力开发者快速实现智能语音交互系统。

本教程介绍如何使用 Llama 3、Whisper、LangChain 和 Qdrant 构建一个本地 RAG 语音助手。我们将使用以下技术栈:
在开始之前,请确保准备好以下资源:
打开命令行界面,创建虚拟环境并安装依赖:
mkdir llama3-whisper && cd llama3-whisper
python3 -m venv llama3-whisper-env
source llama3-whisper-env/bin/activate
安装核心库:
pip3 install --no-deps torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1
pip3 install openai
pip3 install -q transformers==4.33.0
pip3 install -q accelerate==0.22.0
pip3 install -q einops==0.6.1
pip3 install -q langchain==0.0.300
pip3 install -q xformers==0.0.21
pip3 install -q bitsandbytes==0.41.1
pip3 install -q sentence_transformers==2.2.2
pip3 install arxiv
pip3 install -q ipykernel jupyter
pip3 install -q --upgrade huggingface_hub
安装数据处理相关库:
pip3 install unstructured
pip3 install "unstructured[pdf]"
apt-get install -y poppler-utils
pip3 install pytesseract
apt-get install -y tesseract-ocr
pip3 install --upgrade qdrant-client
pip3 install WhisperSpeech
登录 Hugging Face Hub:
huggingface-cli login
导入所有必要的库,支持模型交互、文档处理和嵌入管理。
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from langchain.llms import HuggingFacePipeline
from langchain.vectorstores import Qdrant
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
import torch
数据管道通常涉及收集、摄取、存储、处理和使用五个阶段。在本教程中,为了简化流程,我们将直接使用 Arxiv 的研究论文作为数据源。
创建目录并下载'LLM'搜索词的论文:
# 伪代码示例:实际需根据 arxiv 库实现
# from arxiv import Search, Result
# results = Search(query="LLM", max_results=10).results()
将论文分成有意义的部分:
loader = DirectoryLoader('./papers', glob="**/*.pdf")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_documents(documents)
RAG 工作流帮助管理和利用来自各种来源的数据:
配置 Meta LLaMA 3 模型用于语言生成任务:
model_id = "meta-llama/Meta-Llama-3-8B"
device = "cuda"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map=device,
torch_dtype=dtype
)
使用 transformers 库设置 query_pipeline:
query_pipeline = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
max_length=1024,
device_map="auto"
)
初始化 HuggingFacePipeline 对象:
llm = HuggingFacePipeline(pipeline=query_pipeline)
加载 sentence-transformers/all-mpnet-base-v2 嵌入模型:
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-mpnet-base-v2",
model_kwargs={'device': 'cuda'}
)
如果连接问题,可添加异常处理回退到本地存储的模型。
使用 Qdrant 作为向量数据库:
from qdrant_client import QdrantClient
client = QdrantClient(path="./qdrant_db")
将文档嵌入存储到 Qdrant:
db = Qdrant.from_documents(
documents=chunks,
embeddings=embeddings,
path="./qdrant_db",
collection_name="voice_assistant_documents"
)
重复使用持久存储的数据:
client = QdrantClient(path="./qdrant_db")
db = Qdrant(client=client, collection_name="my_documents", embeddings=embeddings)
设置基于检索的问答系统:
retriever = db.as_retriever()
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
verbose=True
)
定义辅助函数来测试系统:
def test_rag(qa, query):
result = qa({"query": query})
return result["result"]
定义 Whisper 流程:
from whisperspeech.pipeline import Pipeline as S2APipeline
pipe = S2APipeline(s2a_ref='collabora/whisperspeech:s2a-q4-tiny-en+pl.model')
执行查询并生成音频:
query = "如何使用 LLMs 来理解和与复杂的 3D 世界互动"
aud = test_rag(qa, query)
pipe.generate_to_notebook(f"{aud}")
验证语音合成准确性:
# 使用 whisper-1 模型将音频文件转录回文本
为提高性能,可以优化以下关键参数和策略:
通过迭代优化,可以使系统更准确、高效和用户友好。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online