Llama 3 构建语音助手:将当地 RAG 与 Qdrant、Whisper 和 LangChain 集成
www.aidoczh.com已经系统的将LangChain官网文档翻译成中文,您可以去http://www.aidoczh.com/langchain/v0.2/docs/introduction/ 查看文档,该网站www.aidoczh.com重要是将AI工具官方文档翻译成中文,还有其他工具文档可以看。
语音启用的人工智能应用将永世改变我们与技术的互动方式。
大家都听说过 OpenAI 和 Google 的最新消息,多模态系统是未来。
拥有人类般的声音,语音助手将扩展任何对话任务,无论是入站销售、客户支持照旧数据网络和验证。
这就是为什么 OpenAI 和 Google 在 GPT 和 Gemini 系列模型中引入了多模态功能,以适应文本、音频、图像和视频输入,以获取各种用例的企业采用的早期份额。
比方,GPT-4o 的性能与 GPT-4 相匹配并超越,而且
- 速率进步了 2 倍
- 价格降低了 50%
- 速率限定比 GPT-4-Turbo 高了 5 倍
还有很多社交媒体上的帖子展示了代码解释器有多么好,而且在数据分析和可视化方面做得更好。
这对应用程序开发职员来说是巨大的好处,我们知道开源将在 2024 年完全赶上闭源模型。
这就是为什么在本教程中,我想带你走进利用当今最先进的开源模型创建一个复杂的语音助手的过程。
我们将利用以下内容:
- Whisper:由 OpenAI 开发,Whisper 在将口语转录为文本方面表现出色。它明白和处理多种语言的能力使其成为任何基于语音的应用程序的必备工具。
- LLaMA 3:LLaMA 系列中的最新型号,LLaMA 3 在其尺寸上提供了出色的性能。
- LangChain 用于和谐组件以处理与模型和数据库的复杂用户交互。
- 向量数据库(Qdrant):Qdrant 旨在高效处理高维数据,使其成为依靠机器学习和大规模数据检索的应用程序的抱负选择。
- 检索增强生成(RAG):RAG 连合了检索和生成模型的优点,使我们的语音助手能够利用大量的信息数据库生成明智和上下文相干的答复。
让我们构建一个由 Llama 3 提供动力的语音助手,它不但响应敏捷,而且智能且能够高效扩展。
不偕行业的语音助手
多模态语音助手可以通过智能音箱、智能手机、可穿戴设备和智能家居系统与用户进行交互。
它们能够与其他技术集成,比方增强现实(AR)和虚拟现实(VR),以提供沉浸式体验。
比方,用户可以向语音助手扣问方向,它不但可以提供口头指示,还可以在连接的 VR/AR 头显上显示蹊径,如 Apple Vision Pro。
这种模态的融合允许更丰富和更互动的参与,满足更广泛的用户需求和偏好。
行业向客户提供产物和服务的方式也将发生变化:
- 金融:语音助手将通过个性化服务和实时欺诈警报来简化银行流程。它们将促进交易,提供余额更新,并资助用户通过设置预算和跟踪支出来管理财政。
- 医疗保健:语音助手将通过无需利用手部操作、用药提示和预约安排来增强患者管理和老年护理。它们还可以为患者提供医生日程的即时更新,并协助打印检测结果。别的,它们可以提供健康提示,通过连接的设备监测生命体征,并提供告急警报。对于医疗保健专业职员来说,语音助手可以转录医疗条记,访问患者记载,并简化行政任务,从而进步效率和患者护理质量。如果考虑到全球医疗工作者短缺和迩来关于医生倦怠的报道,这一点尤为重要。
- 零售:语音助手将优化客户服务和库存管理,进步购物体验和运营效率。它们资助客户找到产物,答复问题,并根据购物历史提供个性化推荐。对于零售商来说,语音助手可以主动补货,跟踪库存程度,并促进订单处理。它们还通过发送促销优惠和网络客户反馈来支持营销工作。
你已经有了这个想法 - 通过将这些系统整合到我们的日常运营中,我们可以进步生产力、客户体验和满意度。
让我们开始制作一个工具,它可以重新定义我们与数字情况的互动方式。
开发 Llama 3 动力语音助手
在开始教程之前,请确保您准备好以下资源:
- GPU: 如果您利用的是 Google Colab,请确保您有 A100 GPU 访问权限;如果您在当地运行此代码,则需要一个 VRAM 大于 24GB 的 GPU 来满足我们的 AI 模型的高盘算需求,特殊是对于训练和复杂盘算。我正在利用具有 24GB 内存的 RTX 4090 运行代码示例。
- 访问 LLaMA 3: 确保您可以访问 Hugging Face 上的 LLaMA 3 模型。https://huggingface.co/meta-llama/Meta-Llama-3-8B
对于 Google Colab 用户,我们首先需要在 Colab 情况中挂载 Google Drive,以便访问和利用我们的数据进行盘算。
- # 指定不同的挂载点
- mountpoint = "/content/my_drive"
- # 挂载 Google Drive
- from google.colab import drive
- drive.mount(mountpoint)
复制代码 否则,我将在当地运行所有示例。
如今,我们需要安装以下库:
- transformers (4.33.0):提供了各种预构建的语言模型,用于文本翻译和择要等语言任务,是语言项目的关键工具。
- accelerate (0.22.0):资助在不同类型的盘算机硬件上运行机器学习模型,如 CPU 或 GPU,而无需更改太多代码。
- einops (0.6.1):简化了在机器学习中利用的数据结构的外形操作和更改,对于构建复杂模型非常有资助。
- langchain (0.0.300):用于将不同的语言技术组合到一个应用程序中,特殊适用于需要多个处理步骤的项目。
- xformers (0.0.21):提供了在学习和利用阶段都能高效处理数据的模型部分。
- bitsandbytes (0.41.1):资助更快地训练深度学习模型,而且占用更少的内存,非常适用于处理大型数据集。
- sentence_transformers (2.2.2):在 transformers 库的根本上构建了详细的句子特征,对于需要明白文本之间相似性的任务非常重要。
让我们首先设置一个虚拟情况并安装库。打开您的命令行界面(可以是命令提示符、终端或您熟悉的任何其他命令行工具),然后运行以下命令:
- # 创建虚拟环境
- 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
复制代码 最后,为了准备情况以从 PDF 文件中提取数据、执行 OCR 并创建嵌入以进行高级数据处理和检索,我们还需要安装一些其他库:
- 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 并打开我们的 IDE:
- # 登录到 Huggingface Hub
- huggingface-cli login
- # 可选地,启动 VSCode 或您喜欢的 IDE,然后让我们开始吧!
- code .
复制代码 太棒了!要继续,您可以创建 .py 文件或 .ipynb 文件(条记本)。我将继续利用 Jupyter 条记本,以便按块运行代码并交互式地查抄结果。
是时间构建语音助手了!
导入库
我们导入所有必要的库,支持此设置的各个方面,包括模型交互、文档处理和嵌入管理。
- import os
- import sys
- import arxiv
- from torch import cuda, bfloat16
- import torch
- import transformers
- from transformers import AutoTokenizer, AutoModelForCausalLM
- from time import time
- from langchain.llms import HuggingFacePipeline
- from langchain.document_loaders import PyPDFLoader,DirectoryLoader,WebBaseLoader
- from langchain.text_splitter import RecursiveCharacterTextSplitter,CharacterTextSplitter
- from langchain.embeddings import HuggingFaceEmbeddings
- from langchain.chains import RetrievalQA
- from langchain.vectorstores import Qdrant
- from pathlib import Path
- from openai import OpenAI
- from IPython.display import Audio, display
- from whisperspeech.pipeline import Pipeline
复制代码 处理语音助手的数据
在继续之前,我想停下来详细介绍一下为AI应用构建数据管道的问题。
数据管道对于高效管理和处理当代应用中的数据至关重要,特殊是在开发由RAG启用的LLM驱动的复杂应用程序时。
这些管道通常涉及五个关键阶段:
- 网络:在这个阶段,数据从各种泉源网络,包括数据存储、数据流和应用程序。对于语音助手来说,这意味着网络来自用户交互、音频输入以及内部和外部数据库的数据。数据可以来自语音助手需要与之交互的长途设备、应用程序或业务系统。常用的工具有Apache Nifi、Apache Flume、Talend和自定义API。
- 摄取:在摄取过程中,网络到的数据被加载到系统中,并在事件队列中构造。对于语音助手来说,这涉及捕获音频输入,将其转录为文本,并将其列队进行进一步处理。摄取过程确保所有传入的数据都准备好进行实时或批处理。常用的工具有Apache Kafka、AWS Kinesis、Google Cloud Pub/Sub、Apache Airflow。
- 存储:在摄取后,构造好的数据存储在各种存储办理方案中,如数据堆栈、数据湖和数据湖堆栈。在语音助手的上下文中,这包括存储转录、用户查询和从RAG系统检索的文档。存储系统确保数据可供未来的处理和分析利用。常用的工具有Amazon S3、Google Cloud Storage、Azure Data Lake、Snowflake、Apache Hudi、Delta Lake。
- 处理:在这个阶段,数据颠末转换任务,如聚合、清洗和操作,以确保其符合所需的标准。对于语音助手来说,这意味着将文本数据转换为向量、压缩并进行分区以实现高效检索。批处理(一次处理大量数据集)和流处理(实时处理数据)技术都被用于确保数据始终是最新和准确的。常用的工具有Apache Spark、Apache Flink、Databricks、AWS Glue、Google Cloud Dataflow。
- 利用:最后一个阶段涉及使颠末处理的数据可供利用。在语音助手的上下文中,这意味着使系统能够准确明白和回应用户查询。它还可以支持决策引擎和面向用户的应用程序,使语音助手能够提供与用户哀求相干且实时的响应。常用的工具有Tableau、Power BI、Looker、Elasticsearch、Kibana、Apache Superset、自定义仪表板。
然而,构建数据管道可能非常复杂,超出了本教程的范围。如果您想看到它的现实应用,请留下批评。
为了简化本教程,我们将利用Arxiv的研究论文。
让我们创建一个目次,搜索并下载“LLM”搜索词的论文:
- dirpath = "arxiv_papers"
- if not os.path.exists(dirpath):
- os.makedirs(dirpath)
- search = arxiv.Search(
- query = "LLM", # 您的查询长度受ARXIV_MAX_QUERY_LENGTH的限制,该限制为300个字符
- max_results = 10,
- sort_by = arxiv.SortCriterion.LastUpdatedDate, # 您还可以使用SubmittedDate或Relevance
- sort_order = arxiv.SortOrder.Descending
- )
复制代码 搜索完成,下载论文:
- for result in search.results():
- while True:
- try:
- result.download_pdf(dirpath=dirpath)
- print(f"-> Paper id {result.get_short_id()} with title '{result.title}' is downloaded.")
- break
- except FileNotFoundError:
- print("File not found")
- break
- except HTTPError:
- print("Forbidden")
- break
- except ConnectionResetError as e:
- print("Connection reset by peer")
- time.sleep(5)
- -> Paper id 2405.10311v1 with title 'UniRAG: Universal Retrieval Augmentation for Multi-Modal Large Language Models' is downloaded.
- -> Paper id 2405.10288v1 with title 'Timeline-based Sentence Decomposition with In-Context Learning for Temporal Fact Extraction' is downloaded.
- -> Paper id 2405.07703v4 with title 'OpenLLM-Ro -- Technical Report on Open-source Romanian LLMs' is downloaded.
- -> Paper id 2405.10276v1 with title 'Revisiting OPRO: The Limitations of Small-Scale LLMs as Optimizers' is downloaded.
- -> Paper id 2405.10255v1 with title 'When LLMs step into the 3D World: A Survey and Meta-Analysis of 3D Tasks via Multi-modal Large Language Models' is downloaded.
- -> Paper id 2405.10251v1 with title 'A Systematic Evaluation of Large Language Models for Natural Language Generation Tasks' is downloaded.
- -> Paper id 2405.10250v1 with title 'IntelliExplain: Enhancing Interactive Code Generation through Natural Language Explanations for Non-Professional Programmers' is downloaded.
- -> Paper id 2405.08997v2 with title 'LLM-Assisted Rule Based Machine Translation for Low/No-Resource Languages' is downloaded.
- -> Paper id 2308.04662v2 with title 'VulLibGen: Identifying Vulnerable Third-Party Libraries via Generative Pre-Trained Model' is downloaded.
- -> Paper id 2405.10212v1 with title 'CPsyExam: A Chinese Benchmark for Evaluating Psychology using Examinations' is downloaded.
复制代码 太棒了,我们如今将这些论文分成有意义的部分。
检索增强生成的简要概述
RAG工作流资助我们管理和利用来自各种泉源的数据,以提供准确和相干的结果。
以下是一个简要概述:
1. 数据加载: 从不同的泉源网络数据,如文本文件、PDF、网站、数据库或API。比方,Llama Hub提供了很多连接器,使这一步骤更容易。
2. 索引: 在索引阶段,系统将原始数据转换为向量嵌入并构造它们。
- 向量化: 利用句子转换模型将每个文档或数据片断转换为捕捉语义含义的高维向量。
- 结构化: 然后将这些向量构造成高效的数据结构,通常是n维树或哈希映射,以实现快速的相似性搜索。
3. 存储: 生存索引数据和标签,以便以后无需再次构造。
4. 查询: 在查询阶段,系统根据查询向量检索最相干的文档:
- 向量匹配: 将查询转换为向量,并利用余弦相似度或其他距离度量与索引向量进行比较。
- 检索: 系统检索与查询向量最靠近的文档,确保响应与用户的哀求在语境上相干。
5. 评估: 由于LLM的随机性质,评估可能非常具有挑衅性。然而,有有效的度量标准和工具可用于进行客观评估。
一些示例指标可能包括:忠实度、答案相干性、上下文精度、召回率、相干性和实体召回率、答案语义相似性、答案正确性。
如果您盼望我详细介绍LLM和RAG评估以及最新的库和框架,请留言。
让我们继续。
文本分割器
为了做到这一点,我们将利用text_splitter将大型文本文档分割成较小的可管理的块:
1. 递归字符文本分割器将文本递归地分割成较小的片断,适用于非常大的文本。
它有两个重要参数:
- chunk_size:每个块的最大字符数(比方,1000个字符)。
- chunk_overlap:块之间的重叠以保持上下文(比方,100个字符)。
这通常适用于没有自然分割点的非常大的文本,并通过保持块之间的重叠来防止上下文丢失,确保后续处理具有连续性。
2. 字符文本分割器根据指定的字符分隔符分割文本,适用于具有自然断点的文本。
它有三个重要参数:
- separator:用于分割的字符(比方,\n表示换行)。
- chunk_size和chunk_overlap:与递归分割器类似,定义块的大小和重叠。
适用于具有明确分界点的文本,比方脚本或具有明确定义的部分的文档,并通过在自然断点处分割文原来确保数据完整性,这有助于保持含义和上下文,无需重叠。
这些工具对于为NLP模型准备文本至关重要,我们盼望数据的大小可管理,同时生存必要的上下文。
文档加载器
谜题的另一部分是文档加载器,它对于处理NLP工作流中的不同数据源至关重要。
每种类型的加载器都针对特定的泉源进行了定制:
- DirectoryLoader:从指定目次加载所有文件,通常用于处理多个文本或PDF文件。
- WebBaseLoader:从指定URL检索文本,用于处理网络内容。
- PyPDFLoader:专注于从单个PDF文件中提取文本以进行进一步分析。
- TextLoader:专门筹划用于加载纯文本文件,直接读取文本数据以供立即利用。
所有加载器的重要功能是网络数据,然后对其进行处理,可能用于生成嵌入。
在此设置中,我们将利用DirectoryLoader和RecursiveCharacterTextSplitter来高效地分块和管理多个文件,但您可以选择适合您数据源需求的任何加载器。
让我们看看分割器和文档加载器怎样在实践中连合起来。
- papers = []
- loader = DirectoryLoader(dirpath, glob="./*.pdf", loader_cls=PyPDFLoader)
- papers = loader.load()
- print("加载的总页数:", len(papers)) # 加载的总页数:410
- # 这将所有论文的所有页面合并为单个文本块以进行分块
- full_text = ''
- for paper in papers:
- full_text = full_text + paper.page_content
- full_text = " ".join(l for l in full_text.splitlines() if l)
- print(len(full_text))
- text_splitter = RecursiveCharacterTextSplitter(
- paper_chunks = text_splitter.create_documents([full_text])
- Total number of pages loaded: 157
- 643128
复制代码 模型配置
此代码配置了一个用于语言生成任务的 Meta LLaMA 3 模型:
- model_id:标识具有 80 亿参数用于高级语言任务的特定 Meta LLaMA 模型。
- device:将模型设置为在 GPU(“cuda”)上运行,进步处理速率和效率。
- dtype:利用 torch.bfloat16 以优化内存和盘算速率。
2. 初始化:
- tokenizer:从 Hugging Face 加载一个分词器,用于将文本预处理为模型能明白的标记。
- model:利用 AutoModelForCausalLM.from_pretrained 初始化模型,配置为因果语言建模,其中模型根据先前文本猜测下一个词。
- model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
- device = "cuda"
- dtype = torch.bfloat16
- tokenizer = AutoTokenizer.from_pretrained(model_id)
- model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=dtype, device_map=device)
复制代码 设置查询管道
如今我们将利用 Hugging Face 的 transformers 库设置一个 query_pipeline 用于文本生成,旨在简化预训练模型和分词器的利用:
- **model**:指定预训练语言模型。
- **tokenizer**:将输入文本转换为标记。
- **torch_dtype**:利用 torch.float16 进行高效盘算。
- **max_length**:将输出限定在 1024 个标记。
- **device_map**:主动优化将模型层分配给可用硬件。
- query_pipeline = transformers.pipeline(
- "text-generation",
- model=model,
- tokenizer=tokenizer,
- torch_dtype=torch.float16,
- max_length=1024,
- device_map="auto",)
复制代码 初始化管道
该代码利用我们配置的 query_pipeline 初始化了一个 HuggingFacePipeline 对象,用于简化文本生成。
- llm = HuggingFacePipeline(pipeline=query_pipeline)
复制代码 处理模型加载并回退到当地资源
我们将从 Hugging Face 的堆栈中加载 sentence-transformers/all-mpnet-base-v2 嵌入模型,配置为在 CUDA 设备上运行。
如果此过程碰到任何问题,如连接问题或访问限定,您还可以添加非常来返回到利用当地存储的嵌入模型。
通过这种方法,我们的应用程序可以在重要泉源不可用时继续利用更换模型进行处理,这有助于我们在不同的运行情况中保持稳健性。
- model_name = "sentence-transformers/all-mpnet-base-v2"
- model_kwargs = {"device": "cuda"}
- # 尝试访问 HuggingFace 的 sentence transformers: https://huggingface.co/api/models/sentence-transformers/all-mpnet-base-v2
- try:
- embeddings = HuggingFaceEmbeddings(model_name=model_name, model_kwargs=model_kwargs)
- except Exception as ex:
- print("异常: ", ex)
- # # 或者,我们将从本地访问嵌入模型
- # local_model_path = "/kaggle/input/sentence-transformers/minilm-l6-v2/all-MiniLM-L6-v2"
- # print(f"使用替代(本地)模型: {local_model_path}\n")
- # embeddings = HuggingFaceEmbeddings(model_name=local_model_path, model_kwargs=model_kwargs)
复制代码 集成 Qdrant 用于嵌入存储和检索
我们将利用 Qdrant 作为我们的向量数据库,因为它在处理向量相似性搜索、可伸缩性和机动的向量数据管理方面具有出色的能力。
别的,Qdrant 支持当地和云存储选项,因此您可以适应各种当地和云情况。
我们已经安装了 Qdrant,并从 LangChain 的向量存储中导入它,如我们的代码中所示:from langchain.vectorstores import Qdrant
我们如今可以将 Qdrant 的向量数据库能力整合到我们的应用程序中来管理和检索嵌入,让我们开始吧!
在 Qdrant 向量数据库中存储文档嵌入
Qdrant.from_documents 方法通过将文档及其对应的嵌入作为输入来促进该过程。
- vectordb = Qdrant.from_documents(
- paper_chunks,
- embeddings,
- path="Qdrant_Persist",
- collection_name="voice_assistant_documents",
- )
复制代码 这里是所利用的参数的详细阐明:
- **documents**:生成嵌入的原始文档。
- **embeddings**:从文档中派生出的嵌入,准备好被索引和存储。
- **path**:指定 Qdrant 数据库将持久存储数据的 Google Drive 当地目次,确保嵌入被安全存储且未来可轻松访问。
- **collection_name**:Qdrant 中数据集的标签,这里是"voice_assistant_documents",有助于构造和检索特定组的嵌入。
重复利用在 Qdrant 向量数据库中持久存储的数据
如果您想利用现有的持久向量数据库,您可以设置一个 QdrantClient 来连接到特定的存储位置:
- 创建一个 QdrantClient 实例,指向我们的数据库文件存储位置,使得能够访问持久存储的数据。
- 我们利用这个客户端初始化了一个 Qdrant 对象,并将其连接到 my_documents 集合。这个设置允许对存储的嵌入进行高效管理和检索。
这样的配置使您能够重新连接并利用现有的数据库。
- from qdrant_client import QdrantClient
- client = QdrantClient(path = "Qdrant_Persist")
- vectordb = Qdrant(
- client=client,
- collection_name="voice_assistant_documents",
- embeddings=embeddings,
- )
复制代码 设置检索器
如今我们需要设置一个基于检索的问答(QA)系统,利用我们在 Qdrant 向量数据库中存储的嵌入向量:
- retriever = vectordb.as_retriever()
- qa = RetrievalQA.from_chain_type(
- llm=llm,
- chain_type="stuff",
- retriever=retriever,
- verbose=True
- )
复制代码
- 首先,我们将 vectordb 对象转换为一个检索器,利用 vectordb.as_retriever()。这个检索器配置为根据向量相似性查询向量数据库中的相干文档,这对于有效的信息检索至关重要。
- 然后,我们初始化一个 RetrievalQA 实例,它是我们的 AI 链的一部分。该实例利用检索器来根据查询获取相干信息。这里,llm 表示我们的语言模型,chain_type 设置为 “stuff”,表示此链将处理的任务或操作类型,verbose=True 在操作过程中提供详细的输出,提供有关检索过程的看法。
测试和可视化 RAG 系统
我们实现了一些函数来测试和可视化检索增强生成(RAG)系统:
- 为“Reasoning”、“Question”、“Answer”和“Total time”等关键术语添加颜色,以获得清晰和视觉上吸引人的输出。
- 接受 QA 系统 (qa) 和一个查询字符串。它测量响应时间,检索答案,并以 Markdown 格式显示格式化的结果,突出显示关键元素以便于阅读。
这些函数有助于测试 RAG 系统的性能,并以清晰、视觉上吸引人的方式呈现结果。
- from IPython.display import display, Markdown
- def colorize_text(text):
- for word, color in zip(["Reasoning", "Question", "Answer", "Total time"], ["blue", "red", "green", "magenta"]):
- text = text.replace(f"{word}:", f"\n\n**<font color='{color}'>{word}:</font>**")
- return text
- def test_rag(qa, query):
- time_start = time()
- response = qa.run(query)
- time_end = time()
- total_time = f"{round(time_end-time_start, 3)} sec."
- full_response = f"Question: {query}\nAnswer: {response}\nTotal time: {total_time}"
- display(Markdown(colorize_text(full_response)))
- return response
复制代码 集成 Llama 3 和 Whisper 进行文本转语音处理
让我们看看这里发生了什么:
- 知识库到向量数据库:首先,从知识库中的文档通过嵌入模型进行处理。该模型将文本数据转换为数值向量,然后将这些向量存储在像 Qdrant 这样的向量数据库中。这样的设置通过将文档的语义含义表示为高维空间中的点,实现了高效的检索。
- 用户查询处理:当用户提交查询时,它首先与嵌入模型交互,将查询转换为其向量表示。
- 检索:然后利用查询向量从向量数据库中获取与之最相似的前K个向量(上下文)。这个过程被称为“检索”,有助于识别与用户查询相干的最相干的文档或数据片断。
- 阅读和响应生成:然后将检索到的上下文输入到Meta Llama 3 LLM中,它会阅读和明白这些上下文中与用户查询相干的信息。然后生成一个响应,旨在提供最准确和相干的信息。然后Whisper将文本转换为音频响应。
让我们首先定义Whisper流程。
- pipe = Pipeline(s2a_ref='collabora/whisperspeech:s2a-q4-tiny-en+pl.model')
复制代码 然后我们利用Llama 3进行文本生成,通过通报我们的查询,接下来我们可以利用Whisper进行音频生成。
- query = "如何使用LLMs来理解和与复杂的3D世界互动"
- aud = test_rag(qa, query)
- pipe.generate_to_notebook(f"{aud}")
复制代码
- 查询处理:我们从查询“怎样利用LLMs来明白和与复杂的3D天下互动”开始,通过利用一个模型(qa)的检索增强生成(RAG)系统进行处理。该系统的响应被准备用于语音合成。
- 语音合成:利用whisper模型和声音,我们将文本响应转换为音频并生存为speech.mp3。
- 语音转文本:利用whisper-1模型将音频文件转录回文本,以验证语音合成的准确性。
- 回答:通过利用LLMs的固有优势,包括世界知识和推理能力,可以使用LLMs来理解和与复杂的3D世界互动。这可以通过将LLMs与3D数据(如3D模型、点云或网格)集成在一起来实现,以实现空间理解、导航和在3D环境中的互动等任务。LLMs还可以用于生成3D数据,如3D模型或纹理,并推理对象之间的关系及其空间布局。此外,LLMs还可以用于规划和预测3D环境中的行动结果,实现更复杂的互动和操作形式。总体而言,将LLMs与3D数据集成在一起为计算模型对物理世界的理解和互动提供了独特的机会,从而在各个领域推动创新。[11, 12]和机器人操作[13, 14, 15]。最近的研究已经展示了将LLMs与3D数据集成以解释、推理或计划复杂的3D环境的潜力,利用了LLMs的固有优势。
复制代码 很好,如今你可以继续尝试从下载的论文中提出一些问题,以了解其优势,并开始思考怎样克服其弱点。
通常,为了进步性能,可以优化几个关键参数和策略。比方:
- 利用领域特定命据对预训练语言模型进行微调,进步相干性和准确性。
- 利用高质量、多样化的训练数据进步模型团体质量。
- 优化超参数,如学习率和批量大小。
- 调解块大小和检索文档数量,以均衡细节和上下文。
- 进步检索模型参数、嵌入质量和向量维度,以进步检索准确性。
- 通过查询扩展和更好的上下文明白来更有效地处理用户查询,并优化答案排序和响应生成过程,确保更相干和连贯的响应。
- 优化系统根本设施以减少延迟和进步可扩展性,通过纳入用户反馈并利用主动学习来不断改进模型,进步用户体验。
- 最后,实施结实的错误处理和回退机制,确保系统能够优雅地处理无法识别的查询或错误。
有很多需要关注的事情,但不要被你可以做的所有事情所压倒,只需专注于创建第一个原型,因为我们在这里利用的组件已经具有高质量。
随着时间的推移,您可以对系统进行迭代,使其更准确、高效和用户友好。
结语
多模态应用是未来。
我想通过集成Whisper、LLaMA 3、LangChain和向量数据库(如Qdrant)等技术,构建响应敏捷、智能的语音助手,实时处理人类语言。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |