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


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

  • 相关阅读:
    RemObjects Elements多用途软件开发工具链
    Kubernetes CoreDNS 详解
    java技术专家面试指南80问【java学习+面试宝典】(六)
    html文件中引入.ts文件并运行
    [矩阵论] Unit 4. 矩阵的广义逆 - 知识点整理
    docker系列-报错以及解决指南
    log4j2
    C++ Primer第16章——模版与泛型编程
    小白学习-ElasticSearch教程(4) -文档查询之bool查询
    Redis的BitMap使用
  • 原文地址:https://www.cnblogs.com/mangod/p/18263710