LangChain转换链:让数据处理更精准
上篇文章《5分钟了解LangChain的路由链》里主要介绍了路由链,核心类是LLMRouterChain和MultiPromptChain。本文介绍LangChain里的另外1个重要的链:转换链。
1. 转换链的概念
在开发AI Agent(智能体)时,我们经常需要对输入数据进行预处理,这样可以更好地利用LLM。LangChain提供了一个强大的工具——转换链(TransformChain),它可以帮我们轻松实现这一任务。
转换链(TransformChain)主要是将 给定的数据 按照某个函数进行转换,再将 转换后的结果 输出给LLM。 所以转换链的核心是:根据业务逻辑编写合适的转换函数。
其实,转换链的设计也很精妙,从源码可以看出,它只是做了一条链,然后具体的任务完全丢给了外部的函数来实现。在LangChain里只要是链,就可以随处链接。

2. 转换链的使用场景
转换链只有1个核心类,TransformChain。
有时,我们在将数据发送给LLM之前,希望对其做一些操作时(比如替换一些字符串、截取部分文本等等),就会用到转换链。TransformChain 在 NLP 中很重要,有些场景还很实用。
一般使用转换链有几个固定步骤:
- 根据需求定义转换函数
transform_func,入参和出参都是字典。 - 实例化转换链
TransformChain。 - 因为转换链只能做内容转换的事情,后续的操作还需要LLM介入,所以需要实例化
LLMChain。 - 最终通过顺序连
SimpleSequentialChain将TransformChain和LLMChain串起来完成任务。
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转换链:让数据处理更精准的更多相关文章
- Karmada v1.3:更优雅 更精准 更高效
摘要:最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服). 本文分享自华为云社区 ...
- 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)
原文:如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) 我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输 ...
- 谷歌黑客语法(google hacking)让你的搜索更精准有效
Google Hacking的含义原指利用Google Google搜索引擎搜索信息来进行入侵的技术和行为: 现指利用各种搜索引擎搜索信息来进行入侵的技术和行为,但我们也可以利用这个在互联网上更加便捷 ...
- 编程思想转换&体验Lambda的更优写法和Lambda标准格式
编程思想转换做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不,我们只是为了做这件事情而不得不创建一个对象. 我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓. 传递 ...
- “体检医生”黑科技|让AI开发更精准,ModelArts更新模型诊断功能
摘要:华为云AI开发平台ModelArts黑科技加持AI研发,让模型开发更高效.更简单,降低AI在行业的落地门槛.全面的可视化评估以及智能诊断功能,使得开发者可以直观了解模型各方面性能,从而进行针对性 ...
- Font Awesome 供更精准的图标搜索
https://www.thinkcmf.com/font/font_awesome/icon/address-book
- html5 javascript 新增加的高级选择器更精准更实用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- c/c++ 模板函数的重载
模板函数的重载 普通函数可以重载,模板函数也可以重载,但规则复杂 有下面2个函数,名字相同,返回值相同就,参数不同,符合重载. template<typename T> std::stri ...
- AI带你省钱旅游!精准预测民宿房源价格!
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- LCA树链剖分
LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点. 比如这棵树 结点5和6的LCA是2,12和7的LC ...
随机推荐
- 数据可视化之pyecharts模块
1.简介 pyecharts 是一个用于生成 Echarts 图表的类库. Echarts 是百度开源的一个数据可视化 JS 库.主要用于数据可视化. # 安装 # 安装v1版本之上的有一些报错 py ...
- RK 平台安装 ubuntu 系统
一.简介 之前有介绍到 ARM 平台移植 ubuntu 的操作流程,在 RK 系列的平台同样适用,所以这里就不介绍怎么一步步的去对 ubuntu 进行移植,而是怎么将移植的过程编写成脚本,这样便可以在 ...
- linux终端显示git分支的配置
1.查看现有配置 $ echo $PS1 2.显示git分支 打开./.bashrc文件 添加以下几行命令: git_branch() { git branch 2> /dev/null | s ...
- Ubuntu 20.04 安装和配置MySql5.7的详细教程
Ubuntu 20.04 安装和配置MySql5.7的详细教程 https://www.jb51.net/article/202399.htm
- 03 elasticsearch学习笔记-IK分词器?
目录 1. 什么是IK分词器 2. 下载IK分词器 3. 使用kibana测试! 4. 创建自定义词典 5. Analysis 1. 什么是IK分词器 2. 下载IK分词器 下载地址,版本要和ES的版 ...
- C++ placement new学习
通常创建对象使用new操作,但这样无法指定在具体某一块内存开辟空间创建对象.而如果 可以指定开辟空间的内存位置,我们可以编写内存池高效的复用同一个内存位置,这样可以避免系统频繁申请可用内存 所占用的时 ...
- 5GC 关键技术之网络切片
目录 文章目录 目录 前文列表 网络切片的需求来自于业务对网络提出的差异化要求 基于 3 大业务场景的切片 基于切片资源访问对象的切片 网络切片的商业价值 网络切片的底层技术支撑 网络切片的粒度 网络 ...
- 线程安全使用 HashMap 的四种技巧
这篇文章,我们聊聊线程安全使用 HashMap 的四种技巧. 1方法内部:每个线程使用单独的 HashMap 如下图,tomcat 接收到到请求后,依次调用控制器 Controller.服务层 Ser ...
- Stable Diffusion 术语表
Stable Diffusion 术语表 说明 原文地址:https://theally.notion.site/The-Definitive-Stable-Diffusion-Glossary-1d ...
- QShop商城--项目介绍
QShop商城-项目介绍 QShop商城,是全新推出的一款轻量级.高性能.前后端分离的电商系统,支持微信小程序,前后端源码100%开源,完美支持二次开发,让您快速搭建个性化独立商城. 技术架构:.Ne ...