LangChain轉換鏈:讓資料處理更精準

程序员半支烟發表於2024-06-23

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

相關文章