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

【大模型】LangChain基础学习

前言: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.kler.cn/a/284668.html

相关文章:

  • 任何使用 Keras 进行迁移学习
  • 第四十五章 Vue之Vuex模块化创建(module)
  • 一键生成本地SSL证书:打造HTTPS安全环境
  • 设计模式之工厂模式,但是宝可梦
  • 前端,location.reload刷新页面
  • sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?
  • 某大厂前端面试题
  • 自然语言处理与深度学习的结合
  • Eureka简介与开发
  • Axure RP实战:打造高效文字点选验证码
  • 销冠大模型案例
  • (一) 初入MySQL 【认识和部署】
  • Promise学习
  • k8s-pod 实战六 (如何在不同的部署环境中调整startupprobe的参数?)
  • [QCTF2018]X-man-A face1
  • 基于STM32的智能物料运载小车:OpenMV和OpenCV结合图像识别与运动控制算法优化(代码示例)
  • Linux和Unix的区别及为什么鸿蒙系统不用Unix的原因
  • 安卓中synchronized 关键字 的作用和介绍
  • java篇 常用工具类 0x05:基本类型的自动装箱拆箱
  • 通过Amazon Bedrock上的Stability AI模型开发生成式AI应用(上篇)
  • MySQL——基础操作
  • 证书学习(三).p12证书颁发的5个步骤、如何在线生成证书、证书工具网站推荐
  • 设计模式 14 命令模式
  • 算法训练营|图论第二天 99.岛屿数量 100.岛屿的最大面积
  • 1999-2023年上市公司年报文本数据(PDF+TXT)
  • 一文解决CLion控制台(cmd)问题【超详细】