【大模型】LangChain基础学习

news2024/11/15 10:40:09

前言:LangChain是一个用于构建端到端语言模型应用的框架

目录

  • 1. 基础知识
  • 2. 基本使用
    • 2.1 安装
    • 2.2 启动示例
    • 2.3 使用prompt
    • 2.4 输出解析器
  • 3. 相关应用
    • 3.1 RAG
  • 参考文献

1. 基础知识

六大组件

  • 模型(Models):包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts):使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes):构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory):通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你。
  • 链(Chains):LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成任务。
  • 代理(Agents):另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使智能Agent成为可能。

基本架构
在这里插入图片描述

2. 基本使用

2.1 安装

pip install openai
pip install langchain
pip install langchain-openai

注意

  1. 如果安装后使用langchain报错如下,说明pydantic版本过高,重新安装这个库,降到1.10.13

pydantic.errors.PydanticUserError: If you use @root_validator with pre=False (the default) you MUST specify skip_on_failure=True. Note that @root_validator is deprecated and should be replaced with @model_validator.

  1. langchain-openai安装不上,需要python3.8及以上

安装后需要设置openAI环境变量,可以用以下几种方式:
(1)终端

export OPENAI_API_KEY="..."

(2)python代码设置

os.environ["OPENAI_API_KEY"] = "..."

2.2 启动示例

  • 示例一:
from langchain.llms import OpenAI

llm = OpenAI(temperature=0.9)

text = "What would be a good company name for a company that makes colorful socks?"
print(llm(text))
  • 示例二:
# 初始化模型
from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

# 安装并初始化选择的LLM,就可以尝试使用它
llm.invoke(" LangSmith 是什么?")

2.3 使用prompt

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are good at math."),
    ("user", "{input}")
])

chain = prompt | llm
print(chain.invoke({"input": "1+1=?"}))

2.4 输出解析器

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 初始化模型
llm = ChatOpenAI()

# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "您是世界级的技术文档编写者。"),
    ("user", "{input}")
])

# 使用输出解析器
output_parser = StrOutputParser()

# 将其添加到上一个链中
chain = prompt | llm | output_parser

# 调用它并提出同样的问题。答案是一个字符串,而不是ChatMessage
chain.invoke({"input": "Langsmith 如何帮助进行测试?"})

3. 相关应用

3.1 RAG

在这里插入图片描述

  • 加载数据
  • 转为embedding存储
  • 查询操作转为对应的embedding
  • 查找与查询操作最相似的向量

可以与多种数据库结合使用,这里以faiss数据库为例,该数据库利用 Facebook AI 相似性搜索 (FAISS) 库。

  • 安装
pip install faiss-cpu
  • 存储向量
from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS

# 加载文档,将其分割成块,嵌入每个块并将其加载到向量存储中。
raw_documents = TextLoader('../../../state_of_the_union.txt').load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
db = FAISS.from_documents(documents, OpenAIEmbeddings())
  • 相似性搜索
embedding_vector = OpenAIEmbeddings().embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)
  • 检索链
    该链将接收一个传入的问题,查找数据库中相关文档,然后将这些文档与原始问题一起传递给LLM,要求它回答原始问题。
from langchain.chains.combine_documents import create_stuff_documents_chain

prompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:

<context>
{context}
</context>

Question: {input}""")

# 创建链,该链获取文档列表并将它们全部格式化为提示,然后将该提示传递给LLM。它传递所有文档,因此应该确保它适合正在使用的 LLM 上下文窗口
document_chain = create_stuff_documents_chain(llm, prompt)

# 可以直接通过传入文档来运行它
from langchain_core.documents import Document

text ="langsmith can let you visualize test results"
document_chain.invoke({
    "input": "Langsmith 如何帮助进行测试?",
    "context": [Document(page_content=text)]
})
  • 对话检索链
    该链将接收最新的输入和对话历史记录,并使用 LLM 生成搜索查询。
from langchain.chains import create_history_aware_retriever
from langchain_core.prompts import MessagesPlaceholder

# First we need a prompt that we can pass into an LLM to generate this search query

prompt = ChatPromptTemplate.from_messages([
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
    ("user", "鉴于上述对话,生成一个搜索查询以查找以获取与对话相关的信息")
])
retriever_chain = create_history_aware_retriever(llm, retriever, prompt)

# 通过传入用户提出后续问题来测试
from langchain_core.messages import HumanMessage, AIMessage

chat_history = [HumanMessage(content="LangSmith 可以帮助测试我的 LLM 应用程序吗?"), AIMessage(content="Yes!")]
retriever_chain.invoke({
    "chat_history": chat_history,
    "input": "告诉我怎么做"
})

参考文献

[1]【LangChain】向量存储(Vector stores)
[2]【AI大模型】初识LangChain的快速入门指南(附入门文档)

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

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

相关文章

2024年“羊城杯”粤港澳大湾区网络安全大赛 PWN部分

2024年“羊城杯”粤港澳大湾区网络安全大赛 PWN部分 Author&#xff1a;Ns100kUp From&#xff1a;极安云科-服务中心 Data&#xff1a;2024/08/27 Copyright:本内容版权归属极安云科&#xff0c;未经授权不得以任何形式复制、转载、摘编和使用。培训、环境、资料、考证 公众号…

LabVIEW开发高温摩擦试验机

采用LabVIEW软件开发高温摩擦试验机&#xff0c;特别是在航空轴承摩擦学性能测试中的应用。通过详细介绍系统的设计、组成、工作原理及其实现&#xff0c;展示了该系统在动态监测轴承状态参数中的关键作用&#xff0c;以及其在提高测试效率和准确性方面的优势。 项目背景 轴承…

AMBA-CHI协议详解(八)

AMBA-CHI协议详解&#xff08;一&#xff09; AMBA-CHI协议详解&#xff08;二&#xff09; AMBA-CHI协议详解&#xff08;三&#xff09; AMBA-CHI协议详解&#xff08;四&#xff09; AMBA-CHI协议详解&#xff08;五&#xff09; AMBA-CHI协议详解&#xff08;六&#xff09…

FTP(File Transfer Protocol,文件传输协议)

FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上交换文件的协议&#xff0c;它定义了文件传输时使用的命令和响应。FTP是最古老的互联网协议之一&#xff0c;至今仍被广泛使用。以下是FTP的一些关键特点和信息&#xff1a; 工作…

学生用什么类型投影仪比较好?2024开学季最值得买的装备当贝X5S投影仪

9月开学季来临&#xff0c;全国的学生们都将陆续开学&#xff0c;暑假结束接下来也只有周末的时间可以让孩子劳逸结合&#xff0c;怎么样才能在忙碌的学业中既能轻松学到知识又能浏览到大量的信息&#xff1f;给孩子看纪录片就是一个好方法&#xff0c;现在比较流行周末家长给孩…

spring security 相关过滤器

Spring Security 提供了 30 多个过滤器。默认情况下Spring Boot 在对 SpringSecurity 进入自动化配置时&#xff0c;会创建一个名为 SpringSecurityFilerChain 的过滤器&#xff0c;并注入到Spring容器中&#xff0c;这个过滤器将负责所有的安全管理&#xff0c;包括用户认证、…

22行为型设计模式——解释器模式

一、解释器模式 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;主要用于解析和解释特定的语言或表达式。它的核心思想是为语言中的每种语法规则定义一个解释器&#xff0c;通过这些解释器将语言的表示形式转换为可执行的操作。解释器…

240831-RAG新利器之Kotaemon的安装与配置

A. 用户界面 该项目既可以作为功能性 RAG UI&#xff0c;既可以用于对文档进行 QA 的最终用户&#xff0c;也可以用作想要构建自己的 RAG 管道的开发人员。对于最终用户&#xff1a; - 一个干净且简约的用户界面&#xff0c;用于基于RAG的QA。 - 支持 LLM API 提供程序&#xf…

最小栈

最小栈 这题难就难在要能在常数时间内检索到最小元素。 单纯用一个变量记录最小值是无法实现常数时间内获取最小元素的&#xff0c;这个时候我们根据栈的特性&#xff0c;另开一个辅助栈&#xff0c;存储我们的栈里每个时刻的最小值。代码&#xff1a; class MinStack {stac…

idea的全局配置

这样一来&#xff0c;每次创建新项目完就不用每次改配置了

内存管理篇-16二级页表工作原理

1.修正上节课的转换图 上节课的页表的一级页表其实并不完全正确&#xff0c;一般虚拟页帧和物理页帧号不会都占用实际字段&#xff0c;这样毕竟很浪费内存。 2.再分析一下页表的开销情况&#xff1a; 一级页表&#xff1a;以4KB物理页为映射单位&#xff0c;每个进程4MB的虚…

【Python】家庭用电数据的时序分析

Household Electricity Consumption | Kaggle 目录 数据简介 探索分析 数据清洗 用电占比 趋势分析 序列分解 周期分析 周期分解 分析小结 数据简介 240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据&#xff0c;收集于2007年1…

HTB-Appointment(SQL注入-万能钥匙)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Appointment靶场&#xff0c;这一章节 我们涉及到一些web安全的相关知识 渗透过程 信息搜集 我们通过端口扫描&#xff0c;得知对方开启了http80端口思路&#xff1a;尝试扫描下敏感目录 目录扫描(gob…

PTH哈希传递攻击

PTH哈希传递攻击&#xff08;Pass The Hash&#xff09; 一、PTH简介 1、攻击原理 在使用 NTLM 身份验证的系统或服务上&#xff0c;用户密码永远不会以明文形式通过网络发送。 Windows 上的应用程序要求用户提供明文密码&#xff0c;然后调用 LsaLogonUser 类的 API&#x…

AR 眼镜之-系统通知定制(通知中心)-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 系统通知定制 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;通知弹窗消失 2&#xff09;通知中心显示 2. &#x1f4a0; 通知弹窗消失 2.1 通知弹窗显示时长到期后自动消失 2.2 将通知添加到通知…

vue3中ref绑定的节点顺序错乱

问题复现 眨眼睛这个是修正过了的&#xff0c;小友的应该是ref直接绑定navigationTextList对吧&#xff0c; 按正常想法肯定是既然这个数组会动态更新&#xff0c;我只需要index不就能确定是哪个节点啦&#xff0c;倘若只是静态数据应该不会有什么问题&#xff0c; ⚠️但如果出…

想了个创业的点子问老婆,她说你这不就是外包公司吗

年近35&#xff0c;老在想着万一毕业了咋整&#xff0c;其他的技能也不会&#xff0c;只能去“吉祥三保”、“铁人三项”了&#xff0c;但是吧又不甘心这十来年的“手艺”&#xff0c;又想着这几年大环境下那么多失业的同行&#xff0c;是不是也都有这方面的需求&#xff0c;于…

#读书#经济#《宏观经济学》by N.Gregory Mankiw 第十版 - 第2篇 古典理论:长期中的经济 - 第6章 开放的经济 - 6.3 汇率

在前面两节讨论了产品与服务以及资本在国家之间的流动之后&#xff0c;本节深入讨论了进行这些交易的价格&#xff0c;即两个国家之间进行贸易往来时使用的汇率。从介绍实际汇率和名义汇率的概念开始&#xff0c;讨论实际汇率和贸易余额的关系、两种汇率的决定因素以及财政政策…

九、JMeter之压力测试

文章目录 一、什么是压力测试二、压力测试关注点&#xff08;一&#xff09;压力测试分为两种测试场景&#xff08;二&#xff09;压测设置参数1.线程数&#xff1a;用于设置并发数量&#xff0c;也就是多少个用户同时访问2.Rame-Up Period(in seconds)&#xff1a;控制每隔多少…

广电手机卡靠谱吗?

广电手机卡&#xff0c;作为中国广播电视网络集团有限公司&#xff08;简称“中国广电”&#xff09;官方发行的手机卡&#xff0c;是中国第四大运营商推出的移动通信产品。其靠谱性可以从以下几个方面进行评估&#xff1a; 一、网络覆盖与信号质量 网络覆盖广泛&#xff1a;广…