LangChain转换链:让数据处理更精准

news/2024/9/22 23:31:07

上篇文章《5分钟了解LangChain的路由链》里主要介绍了路由链,核心类是LLMRouterChainMultiPromptChain。本文介绍LangChain里的另外1个重要的链:转换链

1. 转换链的概念

在开发AI Agent(智能体)时,我们经常需要对输入数据进行预处理,这样可以更好地利用LLM。LangChain提供了一个强大的工具——转换链(TransformChain),它可以帮我们轻松实现这一任务。

转换链(TransformChain)主要是将 给定的数据 按照某个函数进行转换,再将 转换后的结果 输出给LLM。 所以转换链的核心是:根据业务逻辑编写合适的转换函数。

其实,转换链的设计也很精妙,从源码可以看出,它只是做了一条链,然后具体的任务完全丢给了外部的函数来实现。在LangChain里只要是链,就可以随处链接。

2. 转换链的使用场景

转换链只有1个核心类,TransformChain

有时,我们在将数据发送给LLM之前,希望对其做一些操作时(比如替换一些字符串、截取部分文本等等),就会用到转换链TransformChain 在 NLP 中很重要,有些场景还很实用。

一般使用转换链有几个固定步骤:

  1. 根据需求定义转换函数transform_func,入参和出参都是字典。
  2. 实例化转换链TransformChain
  3. 因为转换链只能做内容转换的事情,后续的操作还需要LLM介入,所以需要实例化LLMChain
  4. 最终通过顺序连SimpleSequentialChainTransformChainLLMChain串起来完成任务。

3. 使用转换链的案例

比如,给定LLM一篇很长的文章,但是我只想让LLM帮我总结文章前3自然段的内容,同时,总结之前,我还需要将自然段里的 部分字段 替换成 给定字段。

具体代码如下:

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, TransformChain, SimpleSequentialChain
from langchain_openai import OpenAI, ChatOpenAIfile_content = ""
with open("./file_data.txt", "r") as file:file_content = file.read()# 定义转换函数,截取文章前8段,再替换部分字符串
def transform_func(data):text = data["input_text"]shortened_text = "\n".join(text.split("\n")[:7])transform_shortened_text: str = shortened_text.replace("PVC", "PersistentVolumeClaim").replace("PV", "PersistentVolume")return {"output_text": transform_shortened_text}# 定义转换链
transform_chain = TransformChain(input_variables=["input_text"],output_variables=["output_text"],transform=transform_func,
)# 定义LLM
model = ChatOpenAI(model_name="gpt-3.5-turbo",openai_api_key="sk-xxxxxx",openai_api_base="https://api.302.ai/v1",
)# 定义提示词模板 和 LLM链
prompt_template = """
请你对下面的文字进行总结:
{output_text}总结:
"""prompt = PromptTemplate(input_variables=["output_text"], template=prompt_template)
llm_chain = LLMChain(llm=model,prompt=prompt,
)# 使用顺序链连接起来
final_chain = SimpleSequentialChain(chains=[transform_chain, llm_chain])
res = final_chain.run(file_content)
print(res)

代码执行结果符合预期。总结的结果很精通,同时也是按照给定的字符串返回的。

4. 总结

这篇博客主要介绍了LangChain中的**转换链(TransformChain)**的概念,它主要用在需要对输入的内容进行转换的场景下。希望对你有帮助!

=====>>>>>> 关于我 <<<<<<=====

本篇完结!欢迎点赞 关注 收藏!!!

原文链接:https://mp.weixin.qq.com/s/Kz1cdBBPNt1JzZTaQeGd5g

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

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

相关文章

Windows Api如何创建一个快捷方式并且在开始菜单搜索到自己的应用

原文链接:http://cshelloworld.com/home/detail/1804473083243925504 当我们点击win10系统搜索框的时候,输入名称 ,win10会帮助我们匹配到对应的应用。这里搜索框实际上就是windows系统的开始菜单。 接下来我们随便找一个应用,右键,然后点击 打开文件位置,我们来看下这个…

解决 Xshell 无法使用 zsh 的 prompt style

为了更好的阅读体验,请点击这里 先学习一下 zsh 的配置吧~ 参考资料 从 0 开始:教你如何配置 zsh powerlevel10k 如何给 Xshell 配置呢 当我安装完 oh-my-zsh、powerlevel10k、fast-syntax-highlighting、以及若干(powerlevel10k 官方推荐)字体后,发现 powerlevel10k 的 r…

部署web应用用什么

图 fastapi 一般用Uvicorn

MySQL-14.MySQL事务日志

C-14.MySQL事务日志 事务有4种特性:原子性,一致性,隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。 事务的原子性,一致性和持久性由事务的redo日志和undo日志来保证。REDO LOG称为重做日志,提供再写入操作,恢复提交事务修改的页…

创新实训(八)——题目相关的逻辑处理解释

题目部分 题目是整个OJ系统的练习基础,无论是平时学生的练习还是比赛时的准备用题,题目系统在OJ中都是至关重要的。在controllers文件夹下,负责题目部分的代码文件分别为:problem_set.php,problem.php,problem_statistics.php,problem_data_manage.php,problem_statement_m…

创新实训(10)- 大模型服务进一步完善邮件服务

之前为应付中期检查简单接入了一个基础服务,并未对 prompt 词等做太深入的细分,为了实现更人性化的效果,我对大模型的服务进行了更进一步的完善 首先是前端的效果: 超级用户端:一般用户端:三个按钮分别对应 AI 整理格式,AI 基础纠错,AI 结合题目和代码详细检查错误。 前…

多面体

这个triangles的八个数组什么意思看不懂啊

模拟集成电路设计系列博客——7.3.1 并联比较型ADC基本介绍

7.3.1 并联比较型ADC基本介绍 并联比较型ADC(后续都称作Flash ADC)是实现超高速转换器的标准方式。Flash ADC的输入信号被并行的馈入\(2^N\)个比较器中,如下图所示:每个比较器被连接到电阻串的节点上。任何连接到电阻串节点的比较器,如果\(V_{ri}\)大于\(V_{in}\)有着1的输…