快速构建和部署 RAGS:节省时间和最大化效率的逐步指南

大多数 RAG 都建立在这个技术栈之上;为什么每次都要重做呢?

在这里插入图片描述

照片由 Warren 拍摄于 Unsplash

RAGs 让 LLMs 变得有用。

是的,在 RAG 出现之前,LLMs 仅仅是玩具。除了对 LLM 进行一些琐碎的情感分类之外,没有多少应用。这主要是由于 LLM 无法随时随地学习。任何实时的东西都无法与 LLM 配合使用。

当 RAGs 开始实践时,这种情况发生了变化。

RAGs 允许我们使用实时数据构建应用程序,并且它们帮助我们使用 LLMs 构建围绕我们私有数据的智能应用程序。

但是,如果你问任何构建 RAGs 的人他们的技术栈是什么,你就会听到一个古老而破损的录音机。所有 RAG 管道的前几个阶段都非常相似,核心技术几乎没有替代方案。

我的首选入门应用程序具有以下技术:Langchain(LlamaIndex 是唯一可比的替代方案)、ChromaDB 和 OpenAI,用于 LLMs 和嵌入。我经常在 docker 环境中进行开发,因为结果很容易在其他人的计算机上重现(除了它们带来的许多其他好处)。

就我的需求而言,我很少打包它们。当我这样做时,我使用 Streamlit 或 Gradio。我以前使用 Django。它是一个很棒的 Web 开发框架。但是,如果你是一名全职数据科学家,你最好在 Streamlit 或 Gradio 之间做出选择。

由于我注意到我总是从这个技术栈开始项目,因此我创建了一个项目模板,这样每当我有一个想法时,我就不想在无聊的基础知识上浪费时间。

我将与你分享这篇文章;也许你也可以节省时间。

如何在几分钟内启动一个 RAG 应用程序

在深入研究任何细节之前,让我们先让我们的基本 RAG 应用程序启动并运行。

要使其工作,你必须在你的计算机上安装 Docker 和 Git,并拥有一个 有效的 OpenAI API 密钥。

首先克隆以下存储库。

git clone git@github.com:thuwarakeshm/ragbasics.git
cd ragbasics

在项目目录中创建一个 .env 文件,并将你的 OpenAI API 密钥放入其中。

OPENAI_API_KEY=sk-proj-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

你已准备好构建并运行一个 docker 实例,该实例将打开一个 RAG 应用程序。以下是如何操作:

docker build -t ragbasics .
docker run -p 8000:7860 --env-file .env --name ragbasics-001 ragbasics

如果这是你第一次构建此镜像,则需要几分钟,服务器将准备就绪。打开你的浏览器并访问地址 https://localhost:8000 以访问该应用程序。

在这里插入图片描述

RAG 入门模板 — 作者提供的图片。

你可以上传你的任何 PDF 文档并提交它们。提交后,该应用程序将对你的文档进行分块,并从这些块中创建一个矢量存储。然后,你可以询问有关该文档的问题,该应用程序将回答这些问题。

在这里插入图片描述

运行中的 RAG 入门模板 — 作者提供的图片。

你可以立即更改什么?

这个应用程序远非完美。但它也是大多数 RAG 应用程序的共同元素。

除此之外,我们还会更改一些东西。其中最重要的是 RAG 的提示。最终的响应是通过单个 LLM 调用生成的,其中检索到的信息作为上下文。此 提示模板 在我们的响应质量中起着至关重要的作用。

我使用了一个基本模板。只是要求 LLM 根据上下文回答用户的问题。但是你可能必须修改它才能获得更好的质量响应,或者避免响应特定查询。

因为它非常常见,所以我已从 pyproject.toml 文件中提取了它。你可以在配置文件中指定你的提示,而不是进入代码库。

我更改的另一个常见的事情是 分块策略

分块是我们如何将一个大文档分成小块(可能)只有一个想法。递归字符分割和 Markdown 分割是两种最流行的分块策略。

递归字符分割将你的文档中的所有内容都视为文本,从而创建一个移动的块窗口。如果将块大小设置为 1000,将重叠设置为 200,则移动窗口会将前 1000 个字符放入第一个块,将第 201 个字符到第 1200 个字符放入第二个块,依此类推。如果使用此策略,你通常需要更改块大小和重叠。你可以在你的 pyproject.toml 文件中直接执行此操作。

如果你的文档已经采用 Markdown 格式,则可以使用此信息创建更多信息丰富且相关的块。你可以在配置文件中完成所有这些操作。这是一个示例。

[chunking]
strategy = "recursive_character_text_splitter"
chunk_size = 1000
chunk_overlap = 200

## strategy = "markdown_splitter"
## headers_to_split_on = ["##", "###", "####", "#####", "######"]
## return_each_line = true
## strip_headers = false

[rag_prompt]
prompt_template = """
Answer the question in the below context:
{context}

Question: {question}
"""

如果你希望向应用程序添加新的分块技术,可以通过实现 ChunkingStrategy 抽象类并在 Chunker 类中注册它来实现。

## Create a chunking strategy
## chunking\your_chunking_stragey.py

from typing importList
from chunking.chunkingimportChunkingStrategy
from langchain.docstore.documentimportDocument

classYourChunkingStrategy(ChunkingStrategy):

def chunk(self, documents: List[Document]) -> List[Document]:
        # implement your own chunking technique here
        pass

## Register the new chunking strategy
## chunking\__init__.py

from chunking.your_chunking_strageyimportYourChunkingStrategy
classChunker:
    def __init__(self):
        ...
        elif config["chunking"]["strategy"] == "your_chunking_strategy"::
            self.chunking_strategy = YourChunkingStrategy()
        else:
            raise ValueError(f"Invalid chunking strategy: {config['chunking']['strategy']}")

工程师花费大量时间进行分块,并且没有一种方法比其他方法更好。我之前已经记录了一些我学到的关于分块的知识。这是一个使用许多超参数调整的实验过程。

拥有这样的模板可以帮助我们更快地完成它。它还可以帮助我们轻松地与另一个人沟通流程。

部署到 Huggingface

构建完你的应用程序后,下一件重要的事情就是部署它。

有很多选择,但 huggingface spaces 对于数据科学家来说既简单又受欢迎,所以我们将坚持使用 Huggingface。

为什么选择 Docker?

我主要使用 Docker 封装器来构建应用程序。原因有几个。

首先,我可以与同事共享它,并且该应用程序几乎总是在他们的计算机上以相同的方式运行。

其次,我可以轻松地向技术栈添加更多技术。例如,假设我想使用 Neo4J 而不是向量存储来创建知识图谱(如本例所示)。我只需创建一个 docker-compose 并向其中添加一个 Neo4J 容器即可。

第三是 Docker 与 Huggingface 的兼容性。您可以快速将 Docker 容器部署到 HF Spaces。我们讨论中的示例使用了 Gradio,它也与 HF Spaces 兼容。但 Docker 在使用上更灵活。

转到 HF Spaces 并创建一个新的空间。如果您按照本例操作,免费的 CPU 选项应该足够了。对于更强大的应用程序,您需要更多资源。

图片

创建 HF 空间 — 作者的截图。

确保您已为空间 SDK 和一个空白模板选择了 Docker。

创建后,您将看到关于克隆和更新空间存储库的说明。将其克隆到您的计算机上,将您的项目文件复制到此存储库,然后将更改推回空间。

警告:不要直接将您的 .env 文件推送到 HF Spaces。

cd <project_directory>
git clone <hfspace_repository> hfspace
cp -r app.py Dockerfile pyproject.toml requirements.txt chunking hfspace
git add .                                                                                            
git commit -m "Deploying basic RAG app" 
git push

当您推送更改后,HF 空间将构建并部署您的 Docker 容器。

图片

HF 空间构建和部署 Docker 容器 — 作者的图片

但该应用程序尚不可用。还记得我们在将更改推送到 HF 空间时忽略了 .env 文件吗?我们必须通过 HF Space 设置安全地提供环境变量。

您可以在 HF 空间的设置选项卡中的变量和密钥部分找到此配置。单击“新建密钥”按钮并提供 OPENAI_API_KEY 变量。

图片

在 HF Space 中添加环境变量 — 作者的截图。

保存密钥后,应用程序将重新启动。您现在可以访问该空间并查看您的应用程序实时运行。

图片

部署到 Huggingface 空间的基本 RAG — 作者的截图。

最后的想法

检索增强型应用程序是 LLM 的主要用例之一。但是,大多数 RAG 应用程序使用相同的技术栈,因此工程师花费大量时间重复执行基础工作。

我创建了一个模板项目,每当我想要启动一个 RAG 应用程序时,它都会帮助我。这是一篇关于此模板的文章。您可以窃取它来快速构建 RAG 应用程序并将其部署到空间中,或者创建一个与此类似的应用程序,并且永远不必再担心样板文件。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值