让你快速搭建一个RAG应用[特殊字符]

RAG(Retrieval-Augmented Generation) 是一种结合检索(Retrieval)和生成(Generation)技术的人工智能模型架构,特别适用于处理需要广泛背景知识的自然语言处理任务。RAG模型通过动态从大型文档集合中检索相关信息来增强其生成文本的能力,从而提供更准确、更丰富的输出。

序言

从GPT诞生之初到最近爆火的deepSeek,生成式人工智能取得的突破性进展,已经不得不让我们感到惊叹,它们在文本生成、对话交互、代码编写等场景中展现出强大的能力,已经快速进入我们的日常工作。然而,这类模型也存在明显的局限性:​知识固化​(依赖模型最初训练时的静态数据,但是现在模型可以使用基于联网能力,在网络上搜索最新内容)、幻觉问题​(生成看似合理但不符合事实的内容-一本正经的胡说八道)。为了解决以及优化这些问题,​检索增强生成(Retrieval-Augmented Generation, RAG)​应运而生。

它通过在生成答案时动态引入外部知识库,显著提升模型的准确性。目前的常见应用:

  • 智能客服:基于企业文档生成精准回答
  • 问答平台​(结合行业资料如医疗、法律领域的内容生成)

是大模型在业务上落地的一个重要方向,本文将介绍如何利用开源工具链,快速搭建一个基于场景的智能问答RAG应用。

搭建应用

1. 准备工作

AI相关开发主要使用python作为开发语言,需要提前准备好开发环境以及相关IDE。

推荐版本python3以上,使用vscode开发。

接下来需要准备一些的业务数据,因为我们目前的大模型主要以通用为主,所以它的主要对于通识类的内容,可以给出有价值的内容,但是对于一些特定领域的内容,它没有经过针对性训练的话,是无法产出有效内容的,也就容易出现幻觉问题,所以我们就需要根据我们具体的场景,来准备一些专业性比较强的内容。

例如:一个erp系统,如何创建出入库单据的具体步骤等。数据的格式可以是word、pdf、cvs甚至是一些音、视频。

但是需要保证数据的质量,否则无法给出有价值的内容。

2. 构建知识库

接下来需要搭建知识库,也就是模型回答所依赖的知识。这里我们需要引入一些开源库,来帮助我们搭建应用。

  • LangChain: 是一个用于开发由语言模型驱动的应用程序的框架。
  • JinaEmbeddings: 多语言文本嵌入模型。
  • Milvus: 是一个为 GenAI 应用程序构建的开源向量数据库。使用 pip 安装,执行高速搜索,并在性能损失最小的情况下扩展到数十亿个向量。

在这里我们要说明,在人工智能的相关开发中,数据都是以向量(高维空间中的数字坐标,用于量化表示各种实体)的形式,进行操作或计算。

我们之前准备的数据,都是文本形式的数据,所以我们需要将它们向量化,也叫做文本嵌入。这个操作也是通过嵌入模型来完成,目前有大量的开源或闭源的嵌入模型,这里我们使用JinaEmbeddings

模型的token是有限的,也就是它单次的数据处理量是有限的,所以我们在进行文本嵌入之前,需要先对数据进行一次整理,优化我们的数据源,对于文本类的数据常见的方式有:文本分块、文本分段、语义分割、拼写纠正、同一大小写、移除等,主要思路:1.减少单次处理文本数据的量;2. 减少数据噪声。

# 加载示例数据
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("example_text.pdf")
documents = loader.load()

# 文本分块
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, # 根据内容调整
    chunk_overlap=50,
    length_function=len
)
docs = text_splitter.split_documents(documents)

# 生成文本嵌入
from langchain_community.embeddings.jina import JinaEmbeddings
embeddings = JinaEmbeddings(
    model_name="jina-embeddings-v2-small-en"
)

完成文本嵌入后,我们需要持久化,否则我们每次进行问答时,都要重新处理数据,非常影响性能,也无法有效共建我们的知识库。这里我们使用开源的向量数据库Milvus

# 存储至Milvus
from langchain.vectorstores import Milvus
vector_store = Milvus.from_documents(
    docs,
    embeddings,
    connection_args={"host": "localhost", "port": "19530"}
)

3. 语义检索

使用langchain的能力,就可以实现向量的检索,检索简单来说就是计算输入的向量和我们知识库中向量的距离,距离越近我们就认为它的相似度越高,然后再进行排序,输出相似度最高的数据。

from langchain_core.runnables import RunnablePassthrough

retriever = vector_store.as_retriever()(search_kwargs={"k": 2})  # 返回Top2结果

def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

# 组装检索链
retrieval_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
)

4. 大模型接入

终于可以使用我们熟悉的大模型了,这里可以根据我们的实际情况选择大语言模型,当然参数量更高、模型性能更好的大模型,可以明显提升应用的使用体验,例如GPT4o、deepSeekV3、qwen2.5等。这里我们使用智谱的GLM-4-Flash,因为它是智谱推出的免费大语言模型,对于搭建一个示例应用,没有使用压力,而且它的api与openAi的api基本一致,可以很容易切换成目前市面各种主流大模型api。

同时我们要利用prompt工程,来优化问答能力,例如:如果它没有检索到合适内容,应该回答“不好意思,我现在还不知道这个问题的答案,我会持续学习”,通过这种方式减少大模型幻觉的产生。

from langchain_core.runnables import RunnableBranch
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate


llm = ChatOpenAI(
    temperature=0.95,
    model="glm-4-flash",
    openai_api_key="your zhipuai api key",
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

def check_retrieved_docs(input_dict):
    """检查是否检索到有效内容"""
    # input_dict["context"] 是检索到的Document列表
    return len(input_dict["context"]) > 0  # 判断是否有结果

# 定义提示模板
normal_prompt = ChatPromptTemplate.from_template("""
根据以下上下文回答问题:
{context}

问题:{question}
答案:""")

empty_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个严谨的助手,当没有相关信息时,必须且只能回复:"),
    ("human", "{fallback_response}")
])

# 构建处理链
chain = (
    retrieval_chain
    | RunnableBranch(
        (check_retrieved_docs, normal_prompt),  # 有结果时走正常流程
        empty_prompt.partial(fallback_response="不好意思,我现在还不知道这个问题的答案,我会持续学习")  # 无结果时固定回复
    )
    | llm
)

至此一个简单的问答RAG服务就搭建完成了,后续在搭建一个IM的问答前端页面,就可以部署上线了。

结尾

但是这个应用要达到企业级,还是有多的优化空间:

  1. 如何设计增量式向量库更新机制,例如CDC技术,增量更新数据库,减少知识库全量更新的损耗;
  2. 通过分布式搭建大型的知识库,适应大规模的知识库并提高系统的可用性;
  3. 如何更好的清晰和整理数据,保证输出的可靠性;
  4. 如何监控和评估应用的指标,例如:回答的准确率、效应速率;
  5. 如何将图像、视频等非结构化数据纳入检索体系,增加多模态的能力。

这些都是RAG应用可以探索和优化的方向,通过本文希望和大家一起探索和讨论人工从通用能力向行业深度解决方案演进。

  如何系统的去学习大模型LLM ?

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

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

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

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

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

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

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

LLM大模型学习路线 

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值