当前位置: 首页 > article >正文

02-LangChain简单介绍、RAG开发

一、LangCain1、介绍LangChain由Harrison Chase创建于2022年10月它是围绕LLMs大语言模型建立的一个框架。LangChain自身并不开发LLMs它的核心理念是为各种LLMs实现通用的接口把LLMs相关的组件“链接”在一起简化LLMs应用的开发难度方便开发者快速地开发复杂的LLMs应用。2、功能介绍3、安装pip install langchain langchain-community langchain-ollama dashscope chromadb- langchain: 核心包- langchain-community: 社区支持包提供了更多的第三方模型调用我们用的阿里云千问模型就需要这个包- langchain-ollama: Ollama支持包支持调用ollama托管部署的本地模型- dashscope: 阿里云通义千问的Python SDK- chromadb: 轻量向量数据库后续使用二、RAG1、介绍1.1 LLM存在的问题通⽤的基础⼤模型存在一些问题•LLM的知识不是实时的模型训练好后不具备自动更新知识的能力会导致部分信息滞后•LLM领域知识是缺乏的大模型的知识来源于训练数据这些数据主要来自公开的互联网和开源数据集无法覆盖特定领域或高度专业化的内部知识•幻觉问题LLM有时会在回答中⽣成看似合理但实际上是错误的信息•数据安全性RAGRetrieval-Augmented Generation即检索增强生成为大模型提供了从特定数据源检索到的信息以此来修正和补充生成的答案。可以总结为一个公式RAG 检索技术 LLM提示1.2 RAG工作流程RAG标准流程由索引Indexing、检索Retriever和生成Generation三个核心阶段组成。•索引阶段通过处理多种来源多种格式的文档提取其中文本将其切分为标准长度的文本块chunk并进行嵌入向量化embedding向量存储在向量数据库vector database中。•加载文件•内容提取•文本分割形成chunk•文本向量化•存向量数据库•检索阶段用户输入的查询query被转化为向量表示通过相似度匹配从向量数据库中检索出最相关的文本块。•query向量化•在文本向量中匹配出与问句向量相似的top_k个•生成阶段检索到的相关文本与原始查询共同构成提示词Prompt输入大语言模型LLM生成精确且具备上下文关联的回答。•匹配出的文本作为上下文和问题一起添加到prompt中•提交给LLM生成答案⼯作流程图解RAG标准流程1.3 工作原理简单来说RAG工作分为两条线离线准备线/在线服务线2、向量向量Vector就是文本的 “数学身份证”它把一段文字的语义信息转换成一串固定长度的数字列表让计算机能 “看懂”文字的含义并做相似度计算。简单来说就是让计算机更方便的理解不同的文本内容是否表述的是一个意思。文本嵌入模型如text-embedding-v1通过深度学习等技术从文本提取语义特征并映射为固定长度的数字序列。向量嵌入的过程我们一般选用合适的文本嵌入模型来完成。在向量匹配的过程中如何识别2段文本是否表述相似的含义主要可以通过如余弦相似度等算法来完成。比如下列案例中向量为示例仅描述概念非真实向量•A“如何快速学打篮球”è[0.2, 0.5, 0.8]•B“打篮球怎么学得快”è[0.18, 0.52, 0.79]•C“运动后吃什么好呢”è[0.9, 0.1, 0.2]通过余弦相似度算法可以计算得到A和B相似度0.999789A和C相似度0.361446由此可通过精确的数学计算去匹配2段文本是否描述同一个意思提高语义匹配的效率和精度。•生成向量的维度越多就更好的记录文本的语义特征做语义匹配会更加精准。•更多的向量会在计算、存储和匹配过程中带来更大的压力。选择合适的向量维度需要在精确和性能之间做平衡。一般1536维算是比较好的选择。3、余弦相似度向量的数字序列共同决定了向量在高维空间中的方向和长度.而余弦相似度主要就是撇除长度的影响得到方向的夹角。夹角越小越相似即方向相同。如何体现向量的方向和长度呢以一维向量为例向量[-0.5]、[0.5]、[1]的方向和长度余弦相似度是衡量两个向量方向相似程度的核心算法即判断两段文本语义是否相近。余弦相似度è两个向量的点积÷两个向量模长的乘积以A[0.5, 0.5]、B[0.7, 0.7]、C[0.7, 0.5]、D[-0.6, -0.5]为例•点积两个向量在同维度的乘积之和。•向量AB点积vec_a[0]×vec_b[0] vec_a[1]×vec_b[1] ... vec_a[n]×vec_b[n]•如AB的点积是0.5*0.7 0.5*0.7 0.74•模长单个向量不同维度的平方之和开根号如A的模长是√(0.5*0.5 0.5*0.5)•向量模长||vec|| √(vec[0]² vec[1]² ... vec[n]²)•如向量A的模长√(0.5*0.5 0.5*0.5) √是开根号import numpy as np 计算两个向量的余弦相似度衡量方向相似性剔除长度影响 参数 vec_a (np.array): 向量A vec_b (np.array): 向量B 返回 float: 余弦相似度结果范围[-1,1]越接近1方向越一致 公式 cos_sim (vec_a · vec_b) / (||vec_a|| × ||vec_b||) 拆解 1. 点积vec_a · vec_b vec_a[0]×vec_b[0] vec_a[1]×vec_b[1] ... vec_a[n]×vec_b[n] 2. 模长||vec_a|| √(vec_a[0]² vec_a[1]² ... vec_a[n]²) 3. 模长||vec_b|| √(vec_b[0]² vec_b[1]² ... vec_b[n]²) A: [0.5, 0.5] B: [0.7, 0.7] C: [0.7, 0.5] D: [-0.6, -0.5] def dev_by (vec_a, vec_b): if len(vec_a) ! len(vec_b): print(f两个向量维度不一致无法计算余弦相似度) sum 0 for a,b in zip(vec_a, vec_b): #zip 函数在这里的作用是将两个列表的对应元素配对形成一个元组的迭代器 sum a * b return sum def dev_len (dev): sum 0 for v in dev : sum v * v return np.sqrt(sum) def cosine_similarity(vec_a, vec_b): return dev_by(vec_a, vec_b) / (dev_len(vec_a) * dev_len(vec_b)) def abs_cosine_similarity(vec_a, vec_b): #如果你想对余弦相似度的计算结果取绝对值即忽略方向只关心向量是否共线 # 可以使用 Python 内置的 abs() 函数 return abs(dev_by(vec_a, vec_b) / (dev_len(vec_a) * dev_len(vec_b))) if __name__ __main__: vec_a [0.5, 0.5] vec_b [0.7, 0.7] vec_c [0.7, 0.5] vec_d [-0.6, -0.5] print(ab:, cosine_similarity(vec_a, vec_b)) print(ac:, cosine_similarity(vec_a, vec_c)) print(ad:, cosine_similarity(vec_a, vec_d)) print(*10绝对值*15) print(ab:, abs_cosine_similarity(vec_a, vec_b)) print(ac:, abs_cosine_similarity(vec_a, vec_c)) print(ad:, abs_cosine_similarity(vec_a, vec_d))三、LangChain组件1、大语言模型的使用LangChain目前支持三种类型的模型LLMs大语言模型、Chat Models(聊天模型)、Embeddings Models(嵌入模型.•LLMs:是技术范畴的统称指基于大参数量、海量文本训练的Transformer架构模型核心能力是理解和生成自然语言主要服务于文本生成场景•聊天模型:是应用范畴的细分是专为对话场景优化的LLMs核心能力是模拟人类对话的轮次交互主要服务于聊天场景•文本嵌入模型:文本嵌入模型接收文本作为输入,得到文本的向量.2、流式输出如果需要流式输出结果需要将模型的invoke方法改为stream方法即可。•invoke方法一次型返回完整结果stream方法逐段返回结果流式输出3、聊天模型的使用聊天消息包含下面几种类型使用时需要按照约定传入合适的值•AIMessage:就是AI输出的消息可以是针对问题的回答. (OpenAI库中的assistant角色•HumanMessage:人类消息就是用户信息由人给出的信息发送给LLMs的提示信息比如“实现一个快速排序方法”.(OpenAI库中的user角色•SystemMessage:可以用于指定模型具体所处的环境和背景如角色扮演等。你可以在这里给出具体的指示比如“作为一个代码专家”或者“返回json格式”.(OpenAI库中的system角色《毕业即失业》象牙塔里课陈黄四载空磨纸上枪。招聘会前人似蚁不如外卖送斜阳。注1. 课陈黄直指教材陈旧如发黄古卷暗讽课程脱离产业需求2. 纸上枪化用纸上谈兵典故讥刺高校培养的实操能力如同无用兵器3. 人似蚁以虫豸喻毕业生在招聘会卑微拥挤之态跃然纸上4. 末句送斜阳双关既指外卖员奔波至暮色又喻青春在低端岗位中虚掷from langchain_community.chat_models import ChatTongyi from dotenv import load_dotenv from langchain_core.messages import HumanMessage, AIMessage, SystemMessage load_dotenv(rF:\26_01\AI大模型RAG与Agent智能体项目实战开发\python\RAG_agent\.env) model ChatTongyi(modelqwen3-max) memess [ SystemMessage(content你是一个诗人擅长使用七言绝句风格粉刺挖苦), HumanMessage(content写一首针对现在大学生就业形式学校知识落后就业形式堪忧的粉刺诗), ] res model.stream(inputmemess) for r in res: print(r.content, end,flushTrue)4、消息的简写形式区别和优势在于使用类对象的方式如下是静态的一步到位直接就得到了Message类的类对象简写形式如下是动态的需要在运行时由LangChain内部机制转换为Message类对象好处就在于简写形式避免导包、写起来更简单更重要的是支持由于是动态需要转换步骤所以简写形式支持内部填充{变量}占位可在运行时填充具体值(后续学习提示词模板时用到5、嵌入模型的使用Embeddings Models嵌入模型的特点将字符串作为输入返回一个浮点数的列表向量。在NLP中Embedding的作用就是将数据进行文本向量化。阿里云千问模型访问方式本地Ollama模型访问方式通过langchain_ollama导入OllamaEmbeddings使用其余不变。api小结6、通用Prompts提示词优化在模型应用中非常重要LangChain提供了PromptTemplate类用来协助优化提示词。PromptTemplate表示提示词模板可以构建一个自定义的基础提示词模板支持变量的注入最终生成所需的提示词。标准写法基于chain链的写法基于PromptTemplate类可以得到提示词模板支持基于模板注入变量得到最终提示词。•zero-shot思想下可以基于PromptTemplate直接完成。•few-shot思想下需要更换为FewShotPromptTemplate后续学习

相关文章:

02-LangChain简单介绍、RAG开发

一、LangCain1、介绍LangChain由Harrison Chase创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架。LangChain自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起&…...

软考高项-第六章-项目管理概论

项目和项目集重点在于正确的做事,项目组合在于做正确的事组织过程资产:过程资产,治理文件,数据资产,知识资产,安保和安全事业环境因素:市场条件,社会和文化影响因素,监管…...

惯性导航解算及误差分析

目录 1.连续时间下三维运动的微分性质 1.1 旋转矩阵的微分方程 1.2 四元数的微分方程 1.3 旋转向量的微分方程 2.惯性导航解算 2.1 姿态更新 2.2 速度更新 2.3 位置更新 3.惯性导航误差分析 3.1 姿态误差微分方程 3.2 速度误差微分方程 3.3 位置误差方程 3.4 bias…...

手把手教程:快速设置远程开机,看完就会

今天就给大家带来一份完整、可直接照着操作的远程开机教程,即可实现无需公网 IP、一键远程唤醒,随时随地让设备为你待命。设备支持检查确认主板支持WAKE-ON-LAN(网络唤醒)功能,局域网内需具备两台设备:目标…...

资深大模型工程师详细讲解:RAG召回率优化三重微调实战

✅ 一、核心策略再解构:从“三层次”到“五维协同链路”原有“数据-索引-查询”三层结构非常精准,但为了更贴近企业级复杂场景,我们进一步抽象为 五维协同链路:维度关键目标是否可微调微调切入点1. 数据生成质量构建高质量正负样本…...

关系型数据库星型模型聚合表生成

在关系型数据库(MySQL、Oracle、SQL Server等)中,通过星型模型模拟多维分析结构,高效生成聚合表,解决报表查询慢、多维分析繁琐、实时计算压力大等核心痛点。 一、前置基础 星型模型是关系型数据库模拟多维结构的最优方…...

GNSS导航信号模拟器 卫星导航定位模拟器 GNSS卫星导航定位信号模拟器行业应用解决方案 GNSS模拟器

随着全球卫星导航系统的全面建设与深度应用,各类卫星导航定位授时终端已广泛渗透到交通、物联网、通信、测绘、消费电子等众多领域。但在终端产品的研发、测试、量产全流程中,行业长期面临诸多核心痛点:传统外场实地测试模式需投入大量人力物…...

Java 基础核心知识

文章目录1. 谈谈对AQS的理解2. fail-safe机制与fail-fast机制分别有什么作用3. new String("abc")到底创建了几个对象4. 对序列化和反序列化的理解5. 谈谈对Java中SPI的理解6. String、StringBuffer、StringBuilder区别7. Integer 的判断8. 深拷贝和浅拷贝9. 强引用、…...

csp预习day2

set#include<bits/stdc.h> using namespace std;int main(){// ios::sync_with_stdio(0);// cin.tie(0);// cout.tie(0);int n,m; //值域、询问个数scanf("%d%d",&n,&m);int set[n1]; //大小为n的随机序列for (int i 1; i < n; i){scanf(&qu…...

ARM Cortex M0 and M0+ 学习:Architecture

Block Diagram Operation Mode The ARMv6-M architecture has two operation modes and two states. In addition, it can have privileged and unprivileged access levels. Core Registers R0-R12:通用寄存器 R13(SP):存储主栈指针MSP或进程指针PSP,目的是帮助CPU在栈中…...

Ltspice-线性电流控制电流源F/电压源H

上一篇我们聊了功能强大的任意行为源&#xff08;BV/BI&#xff09;&#xff0c;它们像是一个可以编写任意公式的“万能计算器”。而在实际电路中&#xff0c;还有一类更基础、更经典的元件&#xff0c;它们遵循严格的线性比例关系&#xff0c;这就是我们今天要介绍的线性受控源…...

黑马点评-“附近商户“功能无法实现

问题分析 由于Redis版本不够&#xff0c;因此我们使用不了GEOSEARCH命令(Redis 6.2.0 或更高版本) 需要升级Redis版本 下载高版本Redis Redis8.6.2点此下载 后缀的区别: 带有 -with-Service vs 不带 with-Service&#xff1a; 包含了将 Redis 注册为 Windows 系统后台服务的相关…...

【架构师通关】理发店排队 + 车库停车,大白话秒懂“进程状态模型”与“PV操作

兄弟们&#xff0c;操作系统的进程管理一直是软考里最让人头疼的“硬骨头” &#x1f9b4;。什么“阻塞”、“挂起”、“信号量”、“PV操作”&#xff0c;听着就像天书 &#x1f4da;。 但今天&#xff0c;飞哥绝不跟你拽学术名词&#xff01;咱们就通过“去理发店剪个头” &a…...

如何在 React Native 中使用 Expo AV 高效缓存视频文件

本文详解在裸 React Native 项目中集成 expo-av 实现视频本地缓存的完整方案&#xff0c;涵盖路径处理、文件写入、URI 适配及常见兼容性问题&#xff08;如 react-native-fs 路径不被 expo-av 识别&#xff09;&#xff0c;并提供可直接运行的优化代码与关键注意事项。 本…...

mysql备份工具选择_mysqldump对InnoDB与MyISAM支持

mysqldump默认对MyISAM用表级锁、InnoDB不启用事务快照&#xff0c;混合引擎必须用--lock-all-tables保证一致性&#xff0c;且需确保REPEATABLE READ隔离级别和ROW/MIXED binlog格式。mysqldump 默认行为对 InnoDB 和 MyISAM 完全不同默认不加任何参数时&#xff0c;mysqldump…...

Go语言如何部署到K8s_Go语言Kubernetes部署教程【进阶】

Go服务容器化失败主因是镜像路径与WORKDIR不匹配、containerPort未对齐监听端口、Probe未适配程序健康接口、ConfigMap/Secret挂载权限不足&#xff0c;需逐一核验镜像内容、网络声明、文件权限及进程监听行为。Go 服务打包成容器镜像时&#xff0c;main.go 路径和 WORKDIR 不匹…...

c++如何通过文件映射mmap在多进程间实现高性能数据共享【进阶】

mmap 多进程共享必须用 MAP_SHARED&#xff0c;因其确保所有进程映射同一物理页并同步回文件&#xff1b;MAP_PRIVATE 为写时复制&#xff0c;修改不共享。需 O_RDWR 打开、ftruncate 预设大小&#xff0c;并配合适当同步机制。为什么 mmap 在多进程共享中必须用 MAP_SHARED 而…...

宝塔面板怎样实现数据库的多地异地自动备份_结合阿里云OSS与定时任务插件

宝塔面板需通过定时任务ossutilmysqldump实现阿里云OSS数据库自动备份&#xff1a;先配置ossutil及MySQL凭据文件&#xff0c;再编写含时间戳命名与NTP校时的Shell脚本&#xff0c;避免依赖无效的远程备份模块。宝塔面板怎么配置阿里云OSS自动备份数据库能&#xff0c;但得绕过…...

OpenAI估值逼近6万亿!连散户都杀入,但天价融资背后的“算计”,让人细思极恐

出品 | 网易智能 作者 | 小小 编辑 | 王凤枝 1220亿美元&#xff08;约合8800亿元人民币&#xff09;的承诺资金&#xff0c;8520亿美元&#xff08;约合6.1万亿元人民币&#xff09;的投后估值。 3月31日&#xff0c;OpenAI正式官宣了一轮规模惊人的融资&#xff0c;甚至连散户…...

【DIY小记】解决MacOS上Edge浏览器bilibili全屏卡顿的问题

近日笔者发现自己Macbook-Pro播放B站视频&#xff0c;全屏的时候必然卡顿&#xff0c;退出全屏就没事。笔者电脑的参数是&#xff1a; 芯片&#xff1a;M3系统&#xff1a;Tahoe 26.4浏览器&#xff1a;Edge 到网上一查发现《Edge浏览器在MacOS 26(Tahoe)系统上看B站卡顿》一…...

Claude Code泄露,

昨晚在我们的微信群里面&#xff0c;我的大学师兄发了一个链接出来&#xff0c;我点进去一看&#xff0c;为什么这么多的 Star&#xff0c;然后再看了下新闻&#xff0c;简直是炸裂。https://github.com/instructkr/claw-code搞过前端的都知道&#xff0c;发 npm 包之前要配 .n…...

第四天(实习无忧)

##文件结束的判定&#xff0c;编译与链接##1.文件结束的判定&#xff1a;fgetc(pf)读取结束返回EOF&#xff0c;fgets(arr,100,pf)读取结束返回NULL&#xff0c;fread(arr,sizeof(int),n,pf)读取结束返回对应的n。而成功读取到文件尾结束可以用feof(pf)判断&#xff0c;若中途因…...

OpCore-Simplify:技术赋能Hackintosh的开源工具革命

OpCore-Simplify&#xff1a;技术赋能Hackintosh的开源工具革命 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性的开源工…...

计算机毕业设计:Python中国地铁网络智能分析系统 Flask框架 数据分析 可视化 高德地图 数据挖掘 机器学习 爬虫(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

Claude Code 官方回应代码泄漏:这次,他们没有“甩锅人”

这两天&#xff0c;Claude Code 的“代码泄漏”事件在技术圈引发了不少讨论。各种版本的故事层出不穷&#xff0c;甚至还有营销号声称“新员工背锅被开除”。但从官方回应来看&#xff0c;事情的走向&#xff0c;其实完全不一样。&#x1f449; Claude Code 团队&#xff0c;正…...

如何利用 HTML 结构优化网页内容结构_通过 HTML 结构优化内容层次化对 SEO 的作用是什么

如何利用 HTML 结构优化网页内容结构_通过 HTML 结构优化内容层次化对 SEO 的作用是什么 在当今的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站成功的关键因素之一。一个好的 SEO 策略不仅能够提高网站的可见度&#xff0c;还能够吸引更多的访…...

119. 使用 Fluentd concat 过滤器插件在牧场日志中串接多行日志

Situation 地理位置Logs of multiple lines are separated across multiple log events within Pod logs and there is a need to combine them into a single event before forwarding them to a logging solution. 多行日志在 Pod 日志中被分隔在多个日志事件中&#xff0c;…...

118. 从 RKE1(Docker)迁移到 RKE2(容器化)后,JSON 日志未能正确解析

Situation 地理位置After migrating the cluster from RKE1 to RKE2, JSON logs sent to Elasticsearch are not being split into fields correctly. 在将集群从 RKE1 迁移到 RKE2 后&#xff0c;发送到 Elasticsearch 的 JSON 日志没有被正确划分为字段。 Resolution 结局T…...

117. 如何在Rancher监控中测试 AlertManager

Procedure 程序This guide demonstrates how to test Alertmanager and PrometheusRule configuration, to validate that alerts are sent successfully by Alertmanager. 本指南演示如何测试 AlertManager 和 PrometheusRule 配置&#xff0c;以验证 AlertManager 是否成功发…...

电商 SEO 优化与社交媒体营销的关系是什么_电商 SEO 优化效果如何评估

电商 SEO 优化与社交媒体营销的关系 在当今互联网时代&#xff0c;电子商务&#xff08;电商&#xff09;已成为全球经济的重要组成部分。电商 SEO 优化和社交媒体营销是两种互补的推广手段&#xff0c;它们之间的关系不仅丰富了电商平台的推广策略&#xff0c;也为企业带来了…...