科研学习(五)

学习资料2025最新LangChain实战入门教程,从零到开始快速入门及底层原理,结合RAG构建一个完整的问答系统!赶快收藏吧!全网都没有这么全的教程!_哔哩哔哩_bilibili

记忆

帮助LLM记住你过去和他聊过的信息,在聊天机器人模型中应用广泛。

[Beta] Memory | 🦜️🔗 LangChain这里可以在官网查看更多信息,看看哪一种记忆类型适合需要

在langchain中,它提供了langchain.memory的一个库,可以直接调用ChatMessageHistory来使用这个模块,实现一个简单的memory应用

from langchain.memory import ChatMessageHistory

history = ChatMessageHistory() #初始化

可以以这样的方式去叠加history message,信息像这样数组的形式去叠加。

有了ChatMessageHistory后,可以直接把它丢进大模型里面,让大模型直接给出答案,这样就不需要以其他方式去让他得出答案

然后可以再通过

history.add_ai_message(response.content)

来添加刚刚AI回答过的信息

以此类推可以不断的新添加信息。以上这个只是最简单的一个memory类型,可以去官网查看到更多的类型,有这个会话缓存记忆

还有很多memory在其他方面的应用,后面要学习到

链(chain)是langchain的灵魂,也可以看出来chain在’langchain‘这个因为单词中组成部分,它可以自动组合不同的LLM的调用和操作,像在上次的学习中已经用到了chain中的RetrievalQA检索链

qa = RetrievalQA.from_chain_type(
    llm=chat_model,
    chain_type="stuff",
    retriever=retriever
)

总结链中几个常用的总结方法

接下来对上次的学习中的heishenghuawukong.txt用map-reduce的方法进行总结

from langchain.chains.summarize import load_summarize_chain
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    openai_api_key='xxxxxxxxxxxxxxx',
    base_url="https://api.siliconflow.cn/v1/",
    model='Qwen/Qwen2-7B-Instruct'
)
#加载文档
loader = TextLoader(file_path="heishenghuawukong.txt", encoding='utf-8')
docs = loader.load()

#分割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)
#将文档拆分为文本
chunk = text_splitter.split_documents(docs)

chain = load_summarize_chain(llm,chain_type="map_reduce",verbose=True)

chain.run(chunk)

map-reduce总结方法的部分的展示:

每一段总结

然后给出一个最后的总结,这就是map-reduce的方法

一个简单的顺序链

直接演示代码

from langchain.chains import LLMChain #LLMChain类似于chain中的链结
from langchain.prompts import PromptTemplate
from langchain.chains import SimpleSequentialChain #简单顺序链
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    openai_api_key='xxxxxxxx',
    base_url="https://api.siliconflow.cn/v1/",
    model='Qwen/Qwen2-7B-Instruct'
)
#提示词模板
template = """你的工作是想出一个用户所在地区的一个经典的地标建筑。
%用户地区
{user_location}

你的回答:
"""
#初始化
prompt_template = PromptTemplate(input_variables=["user_location"],template=template)

#地区的chain
location_chain = LLMChain(llm=llm,prompt=prompt_template)
#第二个提示词模板
template = """介绍一个地标建筑,并简要的介绍他的历史故事。
%地标建筑
{user_building}

你的回答:
"""
#初始化
prompt_template = PromptTemplate(input_variables=["user_building"],template=template)
#建筑的chain
building_chain = LLMChain(llm=llm,prompt=prompt_template)
#将两个链结在一起
sum_chain = SimpleSequentialChain(chains=[location_chain,building_chain],verbose=True)#后续还可以增加更多的chain

review = sum_chain("上海")

输出:

可以看出SimpleSequentialChain的输出方式是  Entering new SimpleSequentialChain chain...

先是说“上海的地标性建筑是东方明珠电视塔”,然后不需要用户继续操作将“东方明珠电视塔”丢给llm,自动以链条的概念去把上一个链条的输入转化为下一链条的输出,这样非常的方便。

最后完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值