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

人工智能 开发
本文主要介绍了LangChain中的转换链(TransformChain)的概念,它主要用在需要对输入的内容进行转换的场景下。

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

转换链的概念

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

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

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

转换链的使用场景

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

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

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

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

使用转换链的案例

比如,给定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)

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

总结

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

责任编辑:赵宁宁 来源: 程序员半支烟
相关推荐

2018-05-07 14:52:27

区块链扶贫

2020-05-25 11:16:31

编制

2012-11-19 16:08:21

病毒攻击AVAR

2016-10-19 13:18:28

数据驱动分析

2012-03-23 15:27:24

阿拉丁

2015-05-05 11:18:18

大数据Hadoop技术处理

2014-07-17 15:05:49

阿里云ODPS数据处理

2021-04-02 15:02:42

开源技术 工具

2017-05-16 09:00:46

2016-12-27 15:01:08

人工智能机器识别

2024-07-12 14:07:04

2017-03-20 09:17:36

2024-09-25 14:16:35

2024-06-24 00:05:00

Python代码

2024-01-31 23:22:35

vaexPython

2019-08-27 17:32:10

数据处理PandasPython

2024-10-24 17:03:19

AWK数据处理

2020-11-02 15:56:04

大数据数据库技术

2018-12-07 14:50:35

大数据数据采集数据库
点赞
收藏

51CTO技术栈公众号