上篇文章《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, ChatOpenAI file_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

LangChain转换链:让数据处理更精准的更多相关文章

  1. Karmada v1.3:更优雅 更精准 更高效

    摘要:最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服). 本文分享自华为云社区 ...

  2. 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

    原文:如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) 我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输 ...

  3. 谷歌黑客语法(google hacking)让你的搜索更精准有效

    Google Hacking的含义原指利用Google Google搜索引擎搜索信息来进行入侵的技术和行为: 现指利用各种搜索引擎搜索信息来进行入侵的技术和行为,但我们也可以利用这个在互联网上更加便捷 ...

  4. 编程思想转换&体验Lambda的更优写法和Lambda标准格式

    编程思想转换做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不,我们只是为了做这件事情而不得不创建一个对象. 我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓. 传递 ...

  5. “体检医生”黑科技|让AI开发更精准,ModelArts更新模型诊断功能

    摘要:华为云AI开发平台ModelArts黑科技加持AI研发,让模型开发更高效.更简单,降低AI在行业的落地门槛.全面的可视化评估以及智能诊断功能,使得开发者可以直观了解模型各方面性能,从而进行针对性 ...

  6. Font Awesome 供更精准的图标搜索

    https://www.thinkcmf.com/font/font_awesome/icon/address-book

  7. html5 javascript 新增加的高级选择器更精准更实用

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. c/c++ 模板函数的重载

    模板函数的重载 普通函数可以重载,模板函数也可以重载,但规则复杂 有下面2个函数,名字相同,返回值相同就,参数不同,符合重载. template<typename T> std::stri ...

  9. AI带你省钱旅游!精准预测民宿房源价格!

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  10. LCA树链剖分

    LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点. 比如这棵树 结点5和6的LCA是2,12和7的LC ...

随机推荐

  1. 开发日志:企业微信实现扫码登录(WEB)

    一:获取扫码登陆所需的参数:appid,secret,agentid 登录企业微信:https://work.weixin.qq.com/ 扫码登录文档:https://work.weixin.qq. ...

  2. 快速入门一篇搞定RocketMq-实现微服务实战落地

    1.RocketMq介绍 RocketMQ起源于阿里巴巴,最初是为了解决邮件系统的高可靠性和高性能而设计的.在2016年开源分布式消息中间件,并逐渐成为Apache顶级项目.现在是Apache的一个顶 ...

  3. 基于 RedHat 系的 Linux 常用命令 & 常见系统设定

    闲言碎语 除特定指明外,本文默认基于 RedHat Enterprise Linux 8+ 的阐述. 基于CentOS推出的开源系统,国内的阿里推出Anolis OS,华为的OpenEuler.为填补 ...

  4. 【Oracle故障处理】ORA-00845: MEMORY_TARGET not supported on this system

    场景:由于需要用RMAN恢复数据库,提取以前的数据表中的数据.虚拟机为节省资源调小了内存,启动数据库报了 如下错误: ORA-00845: MEMORY_TARGET not supported on ...

  5. CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数

    CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数 背景 测试CMSInitiatingOccupancyFraction参数,测试结果和我的预期不符,所以花了一 ...

  6. Docker推送镜像到Dockerhub

    登录docker hub官网注册账号 https://hub.docker.com/signup 登录账户,创建一个仓库 "Create Repository"--> 输入命 ...

  7. postgresql 去重&查最新一组记录 关键词partition by

  8. 让创意在幻觉中肆虐: 认识Illusion Diffusion AI

    人工智能新境界 在不断发展的人工智能领域,一款非凡的新工具应运而生,它能将普通照片转化为绚丽的艺术品.敬请关注Illusion Diffusion,这是一个将现实与想象力完美融合的AI驱动平台,可创造 ...

  9. c++ 友元类 友元类方法

    一.友元类 #pragma once #include"Tv.h" class Remote { public: void chanDown(Tv& tv); }; #pr ...

  10. 『手撕Vue-CLI』拉取模板名称

    前言 好,经过上篇文章的介绍,已经可以有处理不同指令的能力了,接下来我们就来处理 vue create 指令,这个指令的本质就是从网络上下载提前准备好的模板,然后再自动安装模板中相关依赖. 所以实现 ...