在人工智能领域里,RAG应用脱颖而出,成为重塑各行各业领域的变革性工具。这些工具通过增强数据分析能力及预测功能,为企业提供了巨大的价值。通过结合检索和生成模型,RAG应用使信息检索过程更高效,让研究人员能够迅速访问跨多个领域的丰富知识。
各行各业的公司越来越多地开始采用RAG技术来提升其人工智能潜力。RAG应用中的检索和生成组件融合,帮助分析大量客户数据,从而做出可操作的见解,推动个性化推荐。这种协同作用使企业能够自信地利用生成式AI技术,应用于各种场景。此外,RAG应用的架构将信息检索与文本生成模型相结合,从而能够有效响应用户查询并访问相关数据库。
通过诸如量化和检索增强微调(RAFT)等技术对大型语言模型进行微调,开发人员提升了RAG应用的稳定性和效率,这使得RAG应用更加可靠和高效。
Claude如何增强RAG模型的效果Claude 3 由 Anthropic 开发,是一个先进的 AI 模型家族,设立了新的准确性与上下文处理标准。Claude 3 家族包括 Haiku、Sonnet 和 Opus 三个模型,每个模型都是为满足不同需求而设计。这些模型以其高事实准确性以及保持长时间对话中的上下文而著称。值得注意的是,在多项基准测试中,Opus 模型的表现超过了 GPT-4,包括研究生水平的推理能力和基本数学测试。拥有高达 200,000 个 token 的上下文窗口,Claude 3 处理大量文本输入更有效,比竞争对手更为出色。
除了性能表现之外,Claude 3 模型还优先考虑人工智能的伦理使用和安全性。它们旨在减少偏见并消除不公平,保护用户隐私,并且即使面对复杂的提示也能提供准确的回应。这些模型还支持文本和视觉输入,使其适合内容创作、数据分析等多种应用。通过强大的合作伙伴关系和在多个平台上的可访问性,Claude 3 模型在推动创新和提高效率方面占据有利地位。
为什么选择Hugging Face的RAG模型?Hugging Face 是一个领先的平台,以其广泛且适用于各种自然语言处理任务的预训练模型库而闻名,其中包括检索增强生成(RAG)。这些模型涵盖了密集检索、序列到序列生成等高级任务,使得开发者可以轻松搭建和实验不同的RAG配置。平台友好的API和详尽的文档进一步简化了集成和微调过程,即使是刚开始接触RAG模型的开发者也可以快速搭建有效的系统。借助Hugging Face提供的工具,如LangChain和Ray,开发者可以构建可扩展且高性能的RAG系统,高效处理大规模数据和复杂查询需求。
在这篇博客中,我们将专门介绍如何使用Hugging Face的嵌入模型。Hugging Face提供了一系列嵌入模型,这些模型对于基于检索的生成(RAG)系统的第一步至关重要:即检索相关文档。这些模型旨在生成高质量的嵌入向量,这对于准确和高效的信息检索是必不可少的。通过使用Hugging Face的嵌入模型,我们可以确保我们的RAG系统能够为任何给定查询检索到最相关的上下文,从而提高生成响应的整体准确性和性能。这种选择使我们能够利用Hugging Face提供的强大且灵活的模型,同时根据具体需求定制我们的实现。
使用Claude 3和Hugging Face的嵌入来构建RAG应用现在,让我们使用Claude 3和Hugging Face的特征向量模型来构建一个RAG应用。我们将依次完成环境搭建、文档加载、生成特征向量以及用Claude 3模型从检索文档生成相应答案的过程。
搭建环境首先,我们需要安装必要的库。取消以下行的注释符号并运行该行来安装所需的库。如果您的系统上已经安装了这些库,您可以跳过这一步。
pip install langchain sentence-transformers anthropic
这会安装langchain
,sentence-transformers
和anthropic
,这些是我们所需用于RAG系统的。
接下来我们要设置与 MyScale 和 Claude 3 API 的连接环境变量。我们将在 RAG 应用中使用 MyScaleDB 作为向量数据库,因为它具有高性能、可扩展性和高效的数据检索功能。
import os
# 配置向量数据库连接
os.environ["MYSCALE_HOST"] = "设置你的主机名"
os.environ["MYSCALE_PORT"] = "443"
os.environ["MYSCALE_USERNAME"] = "设置你的用户名"
os.environ["MYSCALE_PASSWORD"] = "设置你的密码"
# 设置 Claude 3 API 密钥
os.environ["ANTHROPIC_API_KEY"] = "设置你的 Claude API 密钥"
此脚本用来设置为连接到MyScale向量数据库和Claude 3 API而需要的环境变量。
注意:如果您还没有 MyScaleDB 的账号,您可以访问 MyScale 网站 注册一个免费账号,并按照 快速入门指南 进行相关操作。要使用 Claude 3 API 功能,您需要在 Claude 控制台 创建一个账号来使用。
导入所需的库然后我们导入所需的库,用于文档加载、分割、嵌入及使用Claude 3模型等操作。
# 将文档拆分成片段
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 使用 MyScale 来存储向量数据
from langchain_community.vectorstores import MyScale
# 使用 Hugging Face 生成嵌入
from langchain_huggingface import HuggingFaceEmbeddings
# 从维基百科加载页面
from langchain_community.document_loaders.wikipedia import WikipediaLoader
import anthropic
这些库将帮助我们处理文档、创建嵌入向量,并与Claude 3模型进行交互。
启动 Claude 3 客户端:初始化用于与Claude 3模型通信的客户端。
client = anthropic.Anthropic()
加载文件
在这个例子中,我们将使用WikipediaLoader
加载来自Wikipedia的文档。
loader = WikipediaLoader(query='Fifa')
# 加载相关文档
docs = loader.load() # 加载后的文档
这从维基百科加载与“Fifa”相关的资料。
拆分文件我们把加载的文档使用(RecursiveCharacterTextSplitter)分成便于管理的小块。
character_splitter = 递归字符文本分割器(
块大小=1000,
块重叠=200
)
docs = character_splitter.split_documents(docs) # 将文档拆分成小块
这确保文档分块,每块1000字符,每块之间有200字符的重叠部分。
创建嵌入接下来,我们使用来自Hugging Face的模型为我们的文档片段生成嵌入向量。
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-base-en-v1.5")
docsearch = MyScale(embedding_function=embeddings.embed_documents)
docsearch.add_documents(docs)
这段代码初始化了一个名为embeddings
的对象,使用预训练的模型"BAAI/bge-base-en-v1.5"来生成文档的嵌入向量。然后,创建了一个docsearch
对象,该对象使用了上述嵌入向量来处理文档集合。最后,docsearch
对象添加了文档集docs
。
这一步骤为文档片段生成嵌入向量,并将它们添加到我们的MyScale向量存储。
测试文档搜索功能我们测试文档搜索功能,确保嵌入式表示和向量数据库一切正常。
query = "2022年的FIFA 世界杯是哪个队赢了?"
docs = docsearch.similarity_search(query, 3)
docs
这会对查询“谁夺得了2022年国际足联世界杯?”进行搜索,并找到最相关的前三份文档。它会返回类似这样的文档:
[文档(page_content="国际足联世界杯(简称“世界杯”)是由国际足联(FIFA)主办的国际成年男子国家队足球比赛。世界杯自1930年首届比赛以来每四年举行一次,但由于第二次世界大战,1942年和1946年未举行。阿根廷队是目前的冠军,在2022年世界杯中赢得了他们的第三个冠军。\\n比赛分为资格赛阶段和决赛阶段。资格赛阶段在前三年进行,以确定哪些球队有资格参加决赛阶段。在决赛阶段,32支球队在为期约一个月的比赛中争夺冠军,比赛地点位于东道主国家(或多个国家)内。东道主国家(或多个国家)自动进入决赛阶段的小组赛。比赛计划从2026年的世界杯开始扩大到48支球队。", metadata={'source': '<https://en.wikipedia.org/wiki/FIFA_World_Cup>', 'summary': "国际足联世界杯,通常被称为世界杯,是由国际足联(FIFA)成员协会的成年男子国家队参加的国际足球比赛。自1930年首届比赛以来,世界杯每四年举行一次,但由于第二次世界大战,1942年和1946年未举行。阿根廷队是目前的冠军,在2022年世界杯中赢得了他们的第三个冠军。\\n比赛分为资格赛阶段和决赛阶段。资格赛阶段在前三年进行,以确定哪些球队有资格参加决赛阶段。在决赛阶段,32支球队在为期约一个月的比赛中争夺冠军,比赛地点位于东道主国家(或多个国家)内。东道主国家(或多个国家)自动进入决赛阶段的小组赛。比赛计划从2026年的世界杯开始扩大到48支球队。\\n截至2022年国际足联世界杯,自1930年首次举办以来共举办了22届。共有80个国家队参加过世界杯。奖杯被八个国家队夺得。巴西队是唯一一支参加了每届比赛的队伍,共五次夺冠。其他世界杯冠军是德国队和意大利队,各四次;阿根廷队三次;法国队和首次夺冠的乌拉圭队各两次;英格兰队和西班牙队各一次。\\n世界杯是世界上最顶级的足球锦标赛,也是世界上观看和参与人数最多的单项体育赛事。2018年世界杯的观众人数估计为35亿,接近全球人口的一半,而2022年世界杯的互动人数估计为50亿,约有15亿人观看了决赛。\\n17个国家曾举办过世界杯,最近一次是卡塔尔于2022年主办的。2026年世界杯将由加拿大、墨西哥和美国三国的16个城市联合主办,这将使墨西哥成为第一个三次主办世界杯比赛的国家。\\n\\n", 'title': '国际足联世界杯'}),
文档(page_content="2026年国际足联世界杯,以FIFA World Cup 26名义推广,将是第23届国际足联世界杯,每四年一次的国际男子足球锦标赛,由国际足联成员协会的国家队参加。比赛将于2026年6月11日至7月19日举行。比赛将由加拿大、墨西哥和美国三国的16个城市联合主办。这是首次由三个国家联合主办的世界杯,也是自1994年以来首次在北美举办的世界杯。阿根廷队是卫冕冠军。", metadata={'source': '<https://en.wikipedia.org/wiki/2026_FIFA_World_Cup>', 'summary': "2026年国际足联世界杯,以FIFA World Cup 26名义推广,将是第23届国际足联世界杯,每四年一次的国际男子足球锦标赛,由国际足联成员协会的国家队参加。比赛将于2026年6月11日至7月19日举行。比赛将由加拿大、墨西哥和美国三国的16个城市联合主办。这是首次由三个国家联合主办的世界杯,也是自1994年以来首次在北美举办的世界杯。阿根廷队是卫冕冠军。\\n这次比赛将是首次有48支队伍参加的比赛,从之前的32支队伍增加。2026年的申办击败了摩洛哥的申办,并在第68届国际足联大会上通过了最后的投票。这是自2002年以来首次由多个国家联合主办的比赛。墨西哥将在1970年和1986年的赛事之后第三次举办或协办男子世界杯。美国上次举办男子世界杯是在1994年,而加拿大首次举办或协办男子世界杯。这次比赛也将恢复到传统的夏季时间表,因为2022年卡塔尔世界杯是在11月和12月举行的。", 'title': '2026年国际足联世界杯'}),
文档(page_content="2022年国际足联世界杯是第22届国际足联世界杯,这是由国际足联组织的世界男子国家队足球锦标赛。比赛于2022年11月20日至12月18日在卡塔尔举行,卡塔尔于2010年获得主办权。这是首次在阿拉伯世界和穆斯林世界举办的世界杯,也是继2002年韩国和日本之后,第二次完全在亚洲举办的世界杯。\\n这次比赛是最后一次有32支队伍参加的比赛,2026年的比赛将扩大到48支队伍。为了避免卡塔尔极端高温天气,比赛安排在11月和12月进行,而不是传统的5月、6月或7月。比赛在29天内进行,共有64场比赛在五个城市的八个场馆举行。卡塔尔作为东道主自动进入比赛,与通过资格赛确定的31支球队一起参赛,这是他们首次参加世界杯。", metadata={'source': '<https://en.wikipedia.org/wiki/2022_FIFA_World_Cup>', 'summary': "2022年国际足联世界杯是第22届国际足联世界杯,这是由国际足联组织的世界男子国家队足球锦标赛。比赛于2022年11月20日至12月18日在卡塔尔举行,卡塔尔于2010年获得主办权。这是首次在阿拉伯世界和穆斯林世界举办的世界杯,也是继2002年韩国和日本之后,第二次完全在亚洲举办的世界杯。\\n这次比赛是最后一次有32支队伍参加的比赛,2026年的比赛将扩大到48支队伍。为了避免卡塔尔极端高温天气,比赛安排在11月和12月进行,而不是传统的5月、6月或7月。比赛在29天内进行,共有64场比赛在五个城市的八个场馆举行。卡塔尔作为东道主自动进入比赛,与通过资格赛确定的31支球队一起参赛,这是他们首次参加世界杯。\\n阿根廷队在决赛中以4-2(点球大战)战胜卫冕冠军法国队,赢得了冠军。这是阿根廷队的第三个冠军,也是自1986年以来的第一个冠军,也是自2002年以来第一个在欧洲以外赢得冠军的国家。法国球员姆巴佩成为自1966年决赛的赫斯特以来第一个在世界杯决赛中上演帽子戏法的球员,并获得了金靴奖,他在比赛中进球最多(8个)。姆巴佩也成为自1958年和1962年巴西的瓦瓦之后第一个在连续两届世界杯决赛中进球的球员。阿根廷队长梅西获得了本届比赛的最佳球员称号,获得了金球奖。这次比赛被认为是梅西职业生涯的巅峰之作,对于一些评论员来说,这是成为有史以来最伟大的球员之一的必备条件。队友马丁内斯和恩佐·费尔南德斯分别获得了金手套奖(颁发给最佳门将)和最佳年轻球员奖。本届比赛共打进172个进球,创下了32支球队参赛格式下的最高进球纪录,每个参赛球队至少打进一球。摩洛哥队成为第一支在小组赛阶段得分最高的非洲国家(7分)。\\n选择在卡塔尔举办世界杯引起了广泛的批评,人们担心该国对待外籍工人、女性和LGBT群体的态度,以及卡塔尔的气候、缺乏强大的足球文化、赛程更改以及为获得主办权和更广泛的国际足联腐败的指控。", 'title': '2022年国际足联世界杯'})]
现在,接下来是利用Claude 3模型从我们找到的信息中得到我们需要的结果。
开始准备查询所需的内容我们从检索到的文档中提取内容,为Claude 3模型做准备。
stre = "".join(doc.page_content for doc in docs)
这会将检索到的文档连接成一个字符串。
设置模型参数选择我们用于生成答案的模型。
model = 'claude-3-opus-20240229' # 此模型为 'claude-3-opus-20240229'
生成答案
最后,我们利用Claude 3模型(或直接使用其英文名称,视具体语境而定)根据上下文生成一个答案。
response = client.messages.create(
system = "你是一个乐于助人的研究助手。你将从一个庞大的知识库中获取数据,并根据提供的上下文回答问题。",
messages=[
{"role": "user", "content": "上下文:\n\n" + stre + "\n\n问题: " + query},
],
model= model,
temperature=0,
max_tokens=160
)
response['content'][0]['text']
这个脚本会把上下文和问题发送给Claude 3模型,并得到回复。你会看到这样的结果。
根据提供的背景,阿根廷赢得了2022年国际足联世界杯冠军,现在是卫冕冠军。文中提到:“卫冕冠军是阿根廷,他们在2022年的比赛中赢得了他们的第三个世界杯冠军。”
通过按照这些步骤,我们建立了一个使用Hugging Face嵌入、Claude 3模型等技术从知识库中检索并生成答案的RAG(检索和生成)应用程序。
为何选择MyScaleDB用于RAG模型
MyScaleDB 由于结合了高级向量搜索能力和 SQL 支持,在 RAG 应用中脱颖而出,成为理想选择。它基于 ClickHouse 构建,能够无缝地结合向量和结构化数据,从而支持复杂的高效查询。这种集成简化了数据管理,提升了 RAG 系统的性能和准确性,使其表现更佳。这使得它能够更容易地高效处理大量数据。
MyScaleDB的另一个显著优势是其成本效益性和经济性。它被设计为最经济实惠的向量数据库之一,同时提供比竞争对手更优的性能。它提供了先进的向量索引技术,如多尺度树图(MSTG),以节省资源同时提高精度。动态批处理功能和多线程支持高并发请求,保持低延迟和高吞吐。这些功能使MyScaleDB成为可扩展RAG应用中可靠且高效的数据库解决方案。
总结开发简单的RAG应用程序相对简单,但优化它们并保持其响应的准确性却颇具挑战性。这就是为什么选择合适的工具,如大规模语言模型(LLMs)、向量数据库和嵌入式模型非常重要。每个组件都在确保应用程序运行高效并提供准确和相关响应方面起着关键作用。
选择向量数据库尤其重要,因为它们为大语言模型提供了必要的上下文。MyScaleDB 在性能和准确性方面已经超过了领先的向量数据库。此外,MyScaleDB 为新用户提供 5 百万免费向量存储,让他们可以测试功能并亲自体验优势。这使得它成为希望构建高性能检索增强生成系统的用户的理想之选。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章