【langchain快速入门】langchain初探:chain、检索(利用向量查询、少样本增强LLM能力)、agent、langserve初探

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。

一. 架构

LangChain 简化了LLM应用程序生命周期的每个阶段:
在这里插入图片描述

 

二. 快速入门

快速入门中我们将学到如下技能

  • 将从一个简单的LLM链开始,它只依赖于提示模板中的信息来回复。
  • 我们将添加聊天记录,以创建一个对话检索链。这使您可以以聊天方式与此LLM进行交互,因此它会记住以前的问题。
  • 我们将构建一个代理,该代理利用LLM来确定是否需要获取数据来回答问题。
  • 使用LangServe为您的应用程序提供服务

 

1. LLM Chain:LLM问答步骤串联成链

实现了:

  1. langchain调用openai
  2. 使用OpenApi进行模型对话
  3. 通过(提示模版)设置system来指导chat回答
  4. 将上面的步骤组成调用链,以便调用
  5. 输出解析器:使用字符提取器提取回答
from langchain_openai import ChatOpenAI  

# 1. 调用大模型  
# 通过langchain设置chatapi  
llm = ChatOpenAI()  
llm.invoke("how can langsmith help with testing?")  

# 2. 使用提示模版:更加专业的回答
# 使用提示模板来指导其回答。 # 提示模板将原始用户输入转换为更好的输入以供LLM使用。  
from langchain_core.prompts import ChatPromptTemplate  
  
prompt = ChatPromptTemplate.from_messages([  
    ("system", "You are world class technical documentation writer."),  
    ("user", "{input}")  
])  
  
# 3. 引入字符解析器:提取ChatMessage中的回答 
from langchain_core.output_parsers import StrOutputParser  
  
output_parser = StrOutputParser()  
  
#4. 将前面三步组成调用链
chain = prompt | llm | output_parser  
  
#5. 链调用
Output = chain.invoke({
   
   "input": "how can langsmith help with testing?"})  
# 答案现在将是一个字符串(而不是ChatMessage)。  
print(Output)

 

2. Retrieval Chain: 检索链:检索文档来提供专业材料

2.1. 检索链(利用向量查询提供context)

利用检索器检索文档并给LLM提供上下文

总体思路
为了正确回答原始问题(“langsmith如何帮助测试?”),我们需要为LLM提供附加上下文。我们可以通过检索来实现这一点。

  • 我们可以把数据传递给LLM,检索工具仅搜索(HOW?)相关数据并传递给LLM。
  • 我们从检索器中查找相关文档,然后将它们传递给提示符prompt。检索器可以由任何东西支持一个SQL表、互联网等。在本例中,我们将填充一个向量存储并将其用作检索器。

有关向量存储的更多信息,请参阅此文档

 

  1. 加载数据 加载数据:使用BeautifulSoup(opens in a new tab)加载网页数据
    shell pip install beautifulsoup4

  2. 数据加载到向量存储中生成索引

    • 需要嵌入模型向量存储
    • 文档分片
    • 使用嵌入模型将文档导入向量存储:这里使用一个简单的本地向量存储FAISS
  3. 创建文档链:用来创建问答链

  4. 基于文本链与检索器创建检索链,这样就能基于文档来回答具体问题。


  
# 1. 加载要索引的数据。  
# 使用WebBaseLoader加载网页数据  
from langchain_community.document_loaders import WebBaseLoader  
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")  
docs = loader.load()  
  
# 2. 文档分片,并通过向量存储构建文档索引   
from langchain_openai import OpenAIEmbeddings  
embeddings = OpenAIEmbeddings()  
# FAISS:轻量化的本地存储  
from langchain_community.vectorstores import FAISS  
from langchain_text_splitters import RecursiveCharacterTextSplitter  
#文档分片
text_splitter = RecursiveCharacterTextSplitter()  
documents = text_splitter.split_documents(docs)  
# 分片数据添加索引
vector = FAISS.from_documents(documents, embeddings)  
  
# 3. 创建文本检索链(prompt+llm),来接收文档和问题  
# 现在,我们在向量存储中索引了这些数据,我们将创建一个检索链。该链将接收一个输入问题,查找相关文档,然后将这些文档连同原始问题一起传递给LLM,并要求它回答原始问题。  
from langchain_openai import ChatOpenAI  
llm = ChatOpenAI(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值