RAG(Retrieval-augmented Generation 检索增强生成)是一种结合信息检索与生成模型的技术,通过动态整合外部知识库提升大模型输出的准确性和时效性。其核心思想是在生成答案前,先检索外部知识库中的相关信息作为上下文依据,从而突破传统生成模型的静态知识边界。
为什么我们要整合外部知识库呢?
首先,大模型训练通常需要耗费很多资源,几百万张贵的离谱的高性能GPU卡,巨量的电力,巨量的高质量训练数据–意味着大量的硬盘,每次训练大概要几周到一两个月,总之成本在百万美元到上亿美元,比如2023年,OpenAI的GPT-4模型和Google的Gemini Ultra模型的训练成本更是分别高达约7800万美元和近2亿美元!2024年年底的重大新闻是我国的国产大模型DeepSeek v3 的发布,DeepSeek v3 真正令人印象深刻的是训练成本。该模型在 2788000 个 H800 GPU 小时上进行训练,估计成本为 5576000 美元。facebook (现在名为Meta )的Llama 3.1 405B 训练了 30,840,000 个 GPU 小时——是 DeepSeek v3 所用时间的 11 倍,但基准测试结果略差。
大模型的知识库在训练的时候就已经固定了,而如果要更新知识库那就得重新训练模型,或者对大模型进行微调训练。如果遇到用户需要频繁更新知识库的场景,成本是无法接受的,于是就有了先检索知识库然后让大模型处理后输出的办法。
其次,LLM在自然语言处理任务中可能提供不准确或不充分答案的局限性。我们在使用大模型时候经常会遇到幻觉问题,在某些需求领域这些幻觉是无法接受的,比如在医院开药的时候,药名功效和用量是不能出错的
在一些细分的专业领域,大模型的训练数据是不足的,所以结合信息检索与文本生成:通过从庞大的外部知识库中检索相关信息,动态增强模型的生成能力,弥补LLM依赖静态训练数据的不足。
RAG还可以增强模型输出的准确性和信息完整性,减少生成错误答案的概率。
下面作者将根据吴恩达《LangChain for LLM Application Development》 视频课程来做一些课程笔记,这门课程非常不错,很适合那些有编程基础的读者学习大模型应用开发。由于代码里吴恩达用的是openAI 模型,收费高国内还不好用,langChain可以使用不同的模型,我将代码换成阿里巴巴的千问大模型,方便大家使用。
L1 ,model prompt parser.
第一节,模型,提示词和解析器
1.核心概念介绍
- 模型 model:指语言模型,是大语言模型应用的基础支撑。
- 提示词 prompt:即创建输入的风格,其决定传递给模型的信息内容和形式。
- 解析器 parser:负责将模型输出解析为结构化格式,便于后续处理。
模型与提示的应用实践
基础示例:利用大模型,通过自定义助手函数调用 千问大模型 qwen-plus,如询问 “一加一等于什么” 获取回答。
使用千问大模型需要在阿里官网开通appkey具体如何使用和配置千问大模型 参考如下链接
https://blog.csdn.net/roccreed/article/details/141927269
(linux 和macos 配置环境变量方式和上面不一样在这里插入代码片)
import os
from openai import OpenAIclient = OpenAI(# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
client
llm_model = "qwen-plus"def get_completion(prompt, model=llm_model):messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,temperature