LangChain构建大模型应用之RAG

在这里插入图片描述
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南

一、环境与依赖准备 为确保编译顺利,我们首先更新系统并安装必要的编译工具和库: sudo apt update sudo apt install -y build-essential \libpcre3 libpcre3-dev \zlib1g zlib1g-dev \libssl-dev \wgetbuild-essential:提供 gcc、make 等基…

第十二章-PHP文件上传

第十二章-PHP文件上传 一,文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时,浏览器会将表单数据编码为多部分(multipart)格式。 Boundary分隔符:随机生成的…

CSS元素动画篇:基于当前位置的变换动画(三)

基于当前位置的变换动画(三) 前言缩放效果类元素动画脉冲动画效果效果预览代码实现 橡皮筋动画效果效果预览代码实现 果冻动画效果效果预览代码实现 欢呼动画效果效果预览代码实现 心跳动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种&…

Redis ssd是什么?Redis 内存空间优化的点都有哪些?embstr 和 row、intset、ziplist分别是什么?

Redis SSD 是什么? Redis SSD 通常指 Redis 使用 SSD(固态硬盘)作为持久化存储介质的场景。虽然 Redis 是内存数据库(数据主要驻留内存),但其持久化机制(如 RDB 快照和 AOF 日志)需…

【蓝桥杯】 数字诗意

数字诗意 在诗人的眼中,数字是生活的韵律,也是诗意的表达。 小蓝,当代顶级诗人与数学家,被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。 某日&#xff0…

DHCP 服务器运行流程图

以常见的 DHCP v4 为例,其完整流程如下: 一、客户端请求 IP 地址阶段 DHCPDiscover:客户端启动后,会以广播的形式发送 DHCPDiscover 报文,目的是在网络中寻找可用的 DHCP 服务器。该报文中包含客户端的 MAC 地址等信息,以便服务器能够识别客户端。DHCPOffer:网络中的 D…

一种企业信息查询系统设计和实现:xujian.tech/cs

一种企业信息查询系统设计和实现:xujian.tech/cs 背景与定位 企业在对外合作、风控审查或市场调研时,常需快速获取公开的工商信息。本文介绍一个企业信息搜索引擎,面向普通用户与开发者,帮助快速定位企业名称、统一社会信用代码…

前端面试高频算法

前端面试高频算法 1 排序算法;1.1 如何分析一个排序算法1.1.1 执行效率3.1.2 内存消耗1.1.3 稳定性 1.2 冒泡排序(Bubble Sort)1.3 插入排序(Insertion Sort)1.4 选择排序(Selection Sort)1.5 归…

C++初阶-模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板概念 2.2实现函数模板 2.3模板的原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式初始化 2.5模板参数的匹配原则 3.类模板 3.1类模板定义格式 3.2类模板的实例化 4.总结 1.泛型编程 对广泛的类型法写代码,我…

「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…

JavaScript 中 undefined 和 not defined 的区别

在 JavaScript 的调试过程中,你是否经常看到 undefined 却不知其来源?是否曾被 ReferenceError: xxx is not defined 的错误提示困扰?这两个看似相似的概念,实际上是 JavaScript 类型系统中最重要的分水岭。本文将带你拨开迷雾&am…

django admin AttributeError: ‘UserResorce‘ object has no attribute ‘ID‘

在 Django 中遇到 AttributeError: ‘UserResource’ object has no attribute ‘ID’ 这类错误通常是因为你在代码中尝试访问一个不存在的属性。在你的例子中,错误提示表明 UserResource 类中没有名为 ID 的属性。这可能是由以下几个原因造成的: 拼写错…

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡 在科技飞速发展的当下,鸿蒙 Next 系统无疑成为了众多科技爱好者与行业人士关注的焦点。今日,卓伊凡便收到这样一个饶有趣味的问题:鸿蒙 Next 系统究竟需要多长时间才能完全成熟&#xff…

快速上手GO的net/http包,个人学习笔记

更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …

AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。

一、软件介绍 文末提供程序和源码下载学习 AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok、Felo、Cody、JENOVA、Phind、Perplexity、Genspark 和 Google AI Studio 的客户端应用程序,集成了 Monaco 编辑器。使用 Electron 构建的强大桌面应用程序&a…

Dify框架面试内容整理-Dify如何处理知识库的集成?

Dify 在知识库集成方面采用了“检索增强生成(RAG)”的技术架构,核心实现思路如下: 一、知识库集成的整体流程 Dify处理知识库集成通常包括以下关键步骤: 文档上传↓

Laravel 模型使用全局作用域和局部作用域

一. 需要解决什么问题 最近Laravel 项目中遇到一个需求,我有一个客户表,每个员工都有自己的客户,但是自己只能看自己的客户。 项目中,有很多功能需要查询客户列表,客户详情,查询客户入口很多,…

【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步

序言 在上一篇文章中,我们深入探索了 icon 组件从测试到全局注册的全过程🎯,成功为其在项目中稳定运行筑牢了根基。此刻,组件库的建设之旅仍在继续,我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…

鸿蒙OSS文件(视频/图片)压缩上传组件-能够增删改查

一、鸿蒙实现处理-压缩上传整体代码处理逻辑 转沙箱压缩获取凭证并上传文件 文件准备(拿到文件流)获取上传凭证(调接口1拿到file_name和upload_url)执行文件上传(向阶段2拿到的upload_url上传文件)更新列表…

河道流量监测,雷达流量计赋能水安全智慧守护

在蜿蜒的河道之上,水流的脉搏始终与人类文明的兴衰紧密相连。从农田灌溉的水量调配到城市防洪的精准预警,从生态保护的水质溯源到水资源管理的决策,河道流量监测如同大地的 “血管检测”,是守护水安全的第一道防线。传统监测手段在…