链载Ai

标题: 点燃 AI 革命——Qwen、RAG 和 LangChain 的旅程 [打印本页]

作者: 链载Ai    时间: 昨天 09:30
标题: 点燃 AI 革命——Qwen、RAG 和 LangChain 的旅程

在人工智能 (AI) 时代,从海量数据集中提取有意义的知识对企业和个人都变得至关重要。进入检索增强生成 (RAG),这是一项突破,它增强了 AI 的能力,使系统不仅能够生成类似人类的文本,还可以实时提取相关信息。这种融合产生的响应既有丰富的背景,又有精确的细节。

当我们在人工智能 (AI) 的浩瀚海洋中扬帆起航时,必须了解将成为我们指路明灯的三大支柱:生成式 AI、大型语言模型 (LLM)、LangChain、Hugging Face 以及此 RAG(检索增强生成)上的有用应用程序。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">大型语言模型和生成式 AI:创新引擎

我们旅程的核心是大型语言模型 (LLM) 和生成式 AI——推动创新之船前进的两个强大引擎。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">大型语言模型 (LLM)

LLM,如Qwen、GPT等,是文本的巨头,能够大规模地理解和生成类人语言。这些模型已经在广泛的文本数据语料库上进行了训练,使它们能够预测和生成连贯且与上下文相关的文本字符串。它们是许多自然语言处理任务的支柱,从翻译到内容创建。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">生成式人工智能 (GenAI)

生成式 AI是 AI 领域内巧妙的创造奇才。它包含生成类似于训练数据的新数据实例的技术,例如图像、音乐,以及对于我们的航行来说最重要的是文本。在我们的上下文中,生成式 AI 是指 AI 能够制作出前所未有的新颖且信息丰富的响应、故事或想法。它使人工智能不仅能够模仿过去,而且能够发明、创新和激发灵感。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">LangChain:编排你的 AI 应用

LangChain作为我们AI工作流程的架构师,精心设计了允许各种AI组件之间无缝集成和交互的结构。该框架简化了将来自智能子系统(包括 LLM 和检索系统)的数据流链接在一起的复杂过程,使信息提取和自然语言理解等任务比以往任何时候都更容易访问。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">Hugging Face:AI模型商店

Hugging Face 是一个繁华的大都市,AI 模型在这里蓬勃发展。这个中心枢纽提供了大量预训练模型,为机器学习探索和应用提供了肥沃的土壤。若要访问此中心及其资源,必须创建一个 Hugging Face 帐户。一旦你迈出了这一步,通往广阔的人工智能世界的大门就在等着你——只需访问Hugging Face并注册即可开始你的冒险。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">RAG:利用向量数据库加速智能

检索增强生成 (RAG) 是一种复杂的 AI 技术,它将生成式 AI 的创造力与知识检索的精确性相结合,创建一个不仅清晰而且信息丰富的系统。为了释放RAG的全部潜力和效率,它集成了矢量数据库,这是一个快速筛选大量信息库的强大工具。以下是 RAG 如何与向量数据库一起运行的增强细分:

  1. 使用向量数据库进行检索:RAG 通过查询向量数据库开始其过程,该数据库包含大量信息语料库的嵌入式表示。这些嵌入是封装文档或数据片段的语义本质的高维向量。矢量数据库使 RAG 能够在这些嵌入中执行闪电般的快速搜索,以精确定位与给定查询最相关的内容,就像 AI 快速浏览数字图书馆以找到合适的书籍一样。

  2. 上下文增强:然后,从向量数据库中检索到的相关信息作为上下文增强提供给生成模型。这一步为人工智能提供了集中的知识,增强了它制作响应的能力,这些响应不仅具有创造性,而且具有丰富和精确的上下文。

  3. 生成知情响应:有了这个上下文,生成模型就会继续生成文本。与仅依赖于学习模式的标准生成模型不同,RAG 从检索到的数据中编织细节,从而产生既富有想象力又被检索到的知识所证实的输出。因此,生成被提升,产生更准确、信息更丰富、更能反映真实背景的响应。

矢量数据库的集成是RAG效率的关键。传统的元数据搜索方法可能更慢、更不精确,但矢量数据库有助于近乎即时地检索上下文相关信息,即使是从非常大的数据集中也是如此。这种方法不仅节省了宝贵的时间,而且还确保了人工智能的响应基于最合适和最新的可用信息。

RAG的实力在聊天机器人、数字助理和复杂的研究工具等应用中尤为有利,这些应用在提供精确、可靠和基于上下文的信息至关重要的任何地方。这不仅仅是制作听起来令人信服的回应;它是关于生成以可验证数据和现实世界知识为基础的内容。

凭借对 LangChain、Hugging Face、LLM、GenAI 和向量数据库增强型 RAG 的丰富理解,我们正处于编码冒险的边缘,将这些技术变为现实。我们将深入研究的 Python 脚本代表了这些元素的协同作用,展示了一个 AI 系统,不仅能够以创造力和上下文做出反应,而且还能够以曾经被认为是科幻小说领域的深度理解做出反应。准备编码并体验 RAG 与矢量数据库的变革力量。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">开始编码之旅

开始之前:要点

在我们踏上这场科技之旅之前,让我们确保你已经把所有的鸭子都排成一排了:

明白了吗?瑰!让我们亲自动手(当然是比喻性的)。

运行代码

通过仔细管理你的 Python 依赖项,你可以确保你的 AI 项目建立在稳定可靠的基础上。有了依赖关系并正确设置了环境,您就可以运行脚本并见证 RAG 和 LangChain 的强大功能了。

设置阶段:导入库和加载变量

在我们开始使用 LangChain 框架和 Hugging Face 的 Transformers 库探索 AI 之前,建立一个安全且配置良好的环境至关重要。此准备工作涉及导入必要的库,并通过环境变量管理敏感信息(如 API 密钥)。


from torch import cudafrom langchain_community.vectorstores import FAISSfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.runnables import RunnablePassthroughfrom langchain_community.embeddings.huggingface import HuggingFaceEmbeddingsfrom transformers import AutoModelForCausalLM, AutoTokenizerfrom langchain_community.llms.huggingface_pipeline import HuggingFacePipelinefrom transformers import pipelinefrom dotenv import load_dotenv
load_dotenv()

使用 Hugging Face 中的 AI 模型时,您通常需要访问 Hugging Face API,这需要 API 密钥。此密钥是向 Hugging Face 服务发出请求时的唯一标识符,允许您加载模型并在应用程序中使用它们。

以下是安全设置环境所需的操作:

  1. 获取您的 Hugging Face API 密钥:创建 Hugging Face 帐户后,您可以在“访问令牌”部分下的帐户设置中找到您的 API 密钥。

  2. 保护您的 API 密钥:您的 API 密钥是敏感信息,应保密。与其将其硬编码到脚本中,不如使用环境变量。

  3. 创建 .env 文件:创建名为 .env 的文件。此文件将存储您的环境变量。

  4. 将 API 密钥添加到 .env 文件:使用文本编辑器打开 .env 文件,然后按以下格式添加 Hugging Face API 密钥:

HUGGINGFACE_API_KEY=your_api_key_here

将 your_api_key_here 替换为您从 Hugging Face 获取的实际 API 密钥。

定义模型路径和配置

modelPath="sentence-transformers/all-mpnet-base-v2"device='cuda'ifcuda.is_available()else'cpu'model_kwargs={'device':device}

在这里,我们设置了将用于嵌入的预训练模型的路径。我们还配置了设备设置,如果可用,则使用 GPU 以加快计算速度,否则默认为 CPU。

初始化拥 HuggingFace 嵌入和 FAISS 矢量存储

embeddings = HuggingFaceEmbeddings(model_name=modelPath,model_kwargs=model_kwargs,)
# Made up data, just for fun, but who knows in a futurevectorstore = FAISS.from_texts(["Harrison worked at Alibaba Cloud"], embedding=embeddings)
retriever = vectorstore.as_retriever()

我们使用我们选择的模型和配置初始化 HuggingFaceEmbeddings 的实例。然后,我们使用 FAISS 创建一个向量库,这使我们能够在高维空间中执行高效的相似性搜索。我们还实例化了一个检索器,它将根据嵌入获取信息。

设置聊天提示模板

template = """Answer the question based only on the following context:{context}Question: {question}"""
prompt = ChatPromptTemplate.from_template(template)

在这里,我们定义了一个聊天提示模板,该模板将用于构建与 AI 的交互。它包括上下文的占位符和问题,这些问题将在链执行期间动态填充。

准备分词器和语言模型

在人工智能和自然语言处理的世界中,分词器和语言模型是将文本转化为有意义的动作的动态二人组。分词器将语言分解为模型可以理解的部分,而语言模型则根据这些输入预测和生成语言。在我们的旅程中,我们使用 Hugging Face 的 AutoTokenizer 和 AutoModelForCausalLM 类来利用这些功能。但重要的是要记住,在选择语言模型时,一种尺寸并不适合所有人。

模型大小和计算资源

模型的大小是一个需要考虑的关键因素。像Qwen-72B这样的大型模型具有更多的参数,这通常意味着它们可以理解并生成更细微的文本。但是,它们也需要更多的计算能力。如果您配备了高端 GPU 和足够的内存,您可能会选择这些更大的型号来充分利用它们的功能。

另一方面,像 Qwen-1.8B 这样的小型模型对于标准计算环境来说更容易管理。即使是这个微小的模型也应该能够在物联网和移动设备上运行。虽然它们可能无法像较大的对应物那样捕捉到语言的复杂性,但它们仍然提供出色的性能,并且对于那些没有专门硬件的人来说更容易访问。

特定于任务的模型

要考虑的另一点是任务的性质。如果您正在构建对话式 AI,则使用特定于聊天的模型(例如 Qwen-7B-Chat)可能会产生更好的结果,因为这些模型针对对话进行了微调,并且可以比基本模型更好地处理对话的细微差别。

推理成本

较大的模型不仅对硬件的要求更高,而且如果您使用基于云的服务来运行模型,也可能会产生更高的成本。每个推理都会占用处理时间和资源,如果您使用的是大型模型,这些时间和资源可能会增加。

Qwen系列

做出选择

在决定使用哪种模型时,请根据可用资源和项目的特定要求权衡较大模型的好处。如果您刚刚起步或以较小的规模进行开发,较小的模型可能是最佳选择。随着需求的增长,或者需要更高级的功能,请考虑升级到更大的模型。

请记住,Qwen 系列是开源的,因此您可以尝试不同的模型,看看哪一个最适合您的项目。如果您决定使用其他模型,下面是脚本的模型选择部分的外观:

#ThiscanbechangedtoanyoftheQwenmodelsbasedonyourneedsandresourcestokenizer=AutoTokenizer.from_pretrained("Qwen/Qwen-7B",trust_remote_code=True)model_name_or_path="Qwen/Qwen-7B"model=AutoModelForCausalLM.from_pretrained(model_name_or_path,device_map="auto",trust_remote_code=True)

我们分别使用 AutoTokenizer 和 AutoModelForCausalLM 类从 Hugging Face 加载分词器和因果语言模型。这些组件对于处理自然语言输入和生成输出至关重要。

创建文本生成管道

此管道旨在使用以前加载的语言模型和分词器生成文本。让我们分解这些参数并了解它们在控制文本生成行为中的作用:

pipe = pipeline("text-generation",model=model,tokenizer=tokenizer,max_new_tokens=8192,do_sample=True,temperature=0.7,top_p=0.95,top_k=40,repetition_penalty=1.1)
hf = HuggingFacePipeline(pipeline=pipe)

文本生成管道中的参数说明:

使用所需参数设置管道后,下一行代码:


hf = HuggingFacePipeline(pipeline=pipe)


将管道对象包装在 HuggingFacePipeline 中。该类是LangChain框架的一部分,允许将流水线无缝集成到LangChain的工作流程中,以构建AI应用程序。通过包装管道,我们现在可以将其与LangChain的其他组件(如检索器和解析器)结合使用,以创建更复杂的AI系统。

仔细选择这些参数,您可以微调文本生成的行为,以满足应用程序的特定需求,无论您是在寻找更具创意和多样化的输出,还是以一致连贯和集中的文本为目标。

构建并运行 RAG 链

下面的代码片段代表了一个完整的端到端 RAG 系统,其中初始问题提示搜索相关信息,然后用于增强生成过程,从而为输入问题提供知情且上下文相关的答案。

1.链条结构:


chain = ({"context": retriever, "question": RunnablePassthrough()}| prompt| hf| StrOutputParser())


下面是这部分代码中发生的情况:

使用 |(pipe) 运算符表明此代码使用的是函数式编程风格,特别是函数组合的概念或流水线模式,其中一个函数的输出成为下一个函数的输入。

  1. 链调用:

results=chain.invoke("WheredidHarrisonwork?")

在这一行中,该链被调用了一个特定的问题:“哈里森在哪里工作?此调用将触发链中定义的整个操作序列。检索器搜索相关信息,然后通过提示将信息与问题一起传递到 HuggingFace 模型中。模型根据接收到的输入生成响应。

3.打印结果:

print(results)

然后,生成的响应由 StrOutputParser() 解析并作为最终结果返回,然后将其打印到控制台或其他输出。

最后,我们通过链接 retriever、prompt template、Hugging Face 管道和输出解析器来构建 RAG 链。我们用我们的问题调用链,结果被打印出来。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: normal;outline: 0px;text-align: left;line-height: 1.75em;">结论:您掌握 AI 的门户

您刚刚通过 RAG 和 LangChain 向 AI 世界迈出了一大步。通过理解和运行这些代码,您可以释放创建智能系统的潜力,这些系统可以以前所未有的方式推理和与信息交互。








欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5