掌握高效大模型任務流搭建術(二):鏈式流程如何賦能 AI 處理能力提升

前言:

在上一篇文章中,我們初步探索了 LangChain 的基礎鏈式操作——LLMChain。它巧妙地將大語言模型(LLM)與提示模板(Prompt Template)相結合,為模型交互邏輯的封裝提供了一種簡潔而高效的方式。

然而,LangChain 的強大之處遠不止于此。在 LLMChain 的基礎上,LangChain 還提供了眾多實用的 Chain 工具,其中 Sequential Chain 尤為引人注目。Sequential Chain 可以被視為一種高級的工作流工具,它專為那些需要多步驟連續處理的大語言模型任務量身定制。

在現實的工作場景中,我們常常會遇到這樣的情況:任務的完成并非僅僅依靠簡單的問答就能達成,而是需要經過一系列復雜的邏輯推理和信息處理步驟。Sequential Chain 正是為解決這一難題而生。它能夠將這些分散的步驟有序地串聯起來,使得每一步的輸出無縫地成為下一步的輸入,從而實現整個任務的連貫處理。無論是對復雜問題進行逐步拆解、逐層提取關鍵信息,還是進行多階段的推理分析,Sequential Chain 都能大顯身手,極大地提高工作效率,為完成多步驟任務提供堅實有力的支撐。

在 LangChain 的 Sequential Chain 設計中,主要存在兩種類型:

? ? ?SimpleSequentialChain?:它適用于單一輸入和輸出的場景,每個鏈僅處理一個輸入,并基于此生成一個輸出。
? ? ?SequentialChain:這種類型能夠處理多個輸入和多個輸出,從而可以勝任更復雜的任務邏輯和數據流情況。

借助這兩種鏈類型,LangChain 有能力靈活地應對從簡單到復雜的多步驟任務,為開發者構建基于大語言模型的工作流提供高效的工具支持。

1:Simple Sequential Chain

Simple Sequential Chain 是 LangChain 中一種較為基礎的鏈式結構,主要用于將多個鏈依次串聯起來。其工作流程是,第一個鏈接收輸入,經過處理后生成輸出,這個輸出隨即作為第二個鏈的輸入,以此類推,直至最后一個鏈生成最終的結果。

從圖中可以看出,整個流程是線性和連續的,非常適合處理單一輸入和單一輸出的簡單任務場景。通過這種方式,任務被分解為多個獨立的步驟,易于管理和調試,同時保持邏輯的清晰性和處理的高效性。

接下來我們嘗試調用這個鏈-還是要先導入必要的庫

import os

from langchain_community.chat_models.tongyi import ChatTongyi

from langchain.chains import LLMChain

from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate

from langchain.memory import ConversationBufferMemory

from langchain.chains import SimpleSequentialChain

# 設置 API 密鑰

os.environ["DASHSCOPE_API_KEY"] = 'sk-63f00f6776fd4f64beb06ed5edf197eb'

# 初始化通義千問模型

llm = ChatTongyi()

# 第一個提示模板,用于生成公司名稱

first_prompt = ChatPromptTemplate.from_template(

? ? "用一句話描述一個制作 {product} 的公司最合適的名稱是什么?"

)

# 鏈 1:根據產品生成公司名稱

chain_one = LLMChain(llm=llm, prompt=first_prompt)

# 第二個提示模板,用于生成公司描述

second_prompt = ChatPromptTemplate.from_template(

? ? "為以下公司寫一段 20 個詞的描述:{company_name}"

)

# 鏈 2:根據公司名稱生成公司描述

chain_two = LLMChain(llm=llm, prompt=second_prompt)

# 第三個提示模板,用于生成廣告語

third_prompt = ChatPromptTemplate.from_template(

? ? "根據以下公司描述生成一句創意廣告語:{company_description}"

)

# 鏈 3:根據公司描述生成廣告語

chain_three = LLMChain(llm=llm, prompt=third_prompt)

# 構建包含三個鏈的 SimpleSequentialChain

overall_simple_chain = SimpleSequentialChain(

? ? chains=[chain_one, chain_two, chain_three], ?# 將新鏈加入到鏈的順序中

? ? verbose=True# 輸出詳細日志

)

# 輸入產品信息,運行整個鏈

prodcut = '褲子'

print(overall_simple_chain.run(product))

從這里我們可以看出,利用這個SimpleSequentialChain鏈可以輕松構建出完整的工作流程。以總結一篇論文為例,我們的目標并不是簡單地讓大模型直接總結整篇文章,而是將任務拆解成更細的步驟:先讓模型分別總結第一段、第二段和第三段的內容,然后再對這些部分的總結進行匯總。通過這種將復雜問題逐步拆解的方式,可以顯著提升模型的回復質量和能力,確保結果更加精準和全面。

2:? ?Sequential Chain

? ? ?SequentialChain 是 LangChain 中一種功能強大的鏈式結構,相較于 SimpleSequentialChain,它提供了更高的靈活性和復雜性。SequentialChain 允許多個鏈并行處理不同的輸入,并且能夠將多個輸出進行合并或分別傳遞到后續的鏈中。從流程設計的角度來看,SimpleSequentialChain 只支持單一的線性順序,而 SequentialChain 則支持更復雜的流程設計,可以滿足更廣泛的業務需求。這種設計使得 SequentialChain 在處理復雜的多步驟任務時更加高效和靈活,能夠更好地適應各種復雜的場景和任務需求。

具體來說,SequentialChain 比 SimpleSequentialChain 的優勢在于:

? 輸入靈活性?:SequentialChain 支持用戶同時傳遞多個輸入,這些輸入可以分別進入不同的鏈條。例如,用戶可以將不同的數據集或參數分別傳遞給 Chain 1 和 Chain 3。
? 輸出管理?:每個鏈的輸出不僅可以作為下一個鏈的輸入,還可以分發到多個后續鏈。例如,Chain 2 和 Chain 3 的輸出都可以傳遞給 Chain 4。
? 多路合并:最后的鏈(如 Chain 4)可以整合來自多個鏈條的結果,生成最終輸出。這種設計使得 SequentialChain 在處理復雜的多步驟任務時更加靈活和強大,能夠更好地適應各種復雜的場景和任務需求。

假如我們希望按著圖片上的模式來進行定制Sequential Chain的話,第一步其實還是要先把SequentialChain導入

以下是一個完整示例:

import os

from langchain_community.chat_models.tongyi import ChatTongyi

from langchain.chains import LLMChain

from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate

from langchain.chains import SequentialChain

# 設置 API 密鑰

os.environ["DASHSCOPE_API_KEY"] = 'sk-63f00f6776f197ea'

# 初始化通義千問模型

llm = ChatTongyi()

# 提示模板 1:將評論翻譯成中文

first_prompt = ChatPromptTemplate.from_template(

? ? "將以下評論翻譯成中文:"

? ? "\n\n{Review}"

)

# 鏈 1:輸入= Review,輸出= Chinese_Review

chain_one = LLMChain(

? ? llm=llm,

? ? prompt=first_prompt,

? ? output_key="Chinese_Review"# 定義輸出變量的名稱

)

# 提示模板 2:總結中文評論

second_prompt = ChatPromptTemplate.from_template(

? ? "請用一句話總結以下評論:"

? ? "\n\n{Chinese_Review}"

)

# 鏈 2:輸入= Chinese_Review,輸出= summary

chain_two = LLMChain(

? ? llm=llm,

? ? prompt=second_prompt,

? ? output_key="summary"# 定義輸出變量的名稱

)

# 提示模板 3:檢測評論的語言

third_prompt = ChatPromptTemplate.from_template(

? ? "以下評論是用什么語言寫的:\n\n{Review}"

)

# 鏈 3:輸入= Review,輸出= language

chain_three = LLMChain(

? ? llm=llm,

? ? prompt=third_prompt,

? ? output_key="language"# 定義輸出變量的名稱

)

# 提示模板 4:根據總結和語言生成回復

fourth_prompt = ChatPromptTemplate.from_template(

? ? "根據以下總結和指定語言,以一個商家的視角,寫一條對應語言的后續回復(最終只需要輸出一條即可):"

? ? "\n\n總結: {summary}\n\n語言: {language}"

)

# 鏈 4:輸入= summary, language,輸出= followup_message

chain_four = LLMChain(

? ? llm=llm,

? ? prompt=fourth_prompt,

? ? output_key="followup_message"# 定義輸出變量的名稱

)

# 創建 SequentialChain,將所有鏈條整合為一個流程

# 輸入= Review,輸出= Chinese_Review, summary, followup_message

overall_chain = SequentialChain(

? ? chains=[chain_one, chain_two, chain_three, chain_four], ?# 定義鏈條的順序

? ? input_variables=["Review"], ?# 定義輸入變量

? ? output_variables=["Chinese_Review", "summary", "followup_message"], ?# 定義輸出變量

)

# 提取評論并運行鏈條

review = 'I love this product!' ?

print(overall_chain(review))

通過這個例子,我們可以清晰地看到,由于這種鏈式結構允許自定義內部的輸入和輸出,它非常適合處理復雜的任務場景,例如:

1. 整合來自不同渠道的信息(如數據分析和用戶行為總結)。
2. 將任務分解為多個步驟進行處理,然后匯總結果。
3. 創建復雜的工作流程,例如多步驟問答、多段落文本生成和多維度分析等。

這種鏈式結構的靈活性和可定制性使其成為處理復雜任務的理想選擇,能夠有效地支持各種高級應用場景。

小結

SimpleSequentialChain 適合于那些需要單一輸入和單一輸出的場景,任務按照順序一步步處理,每一步的輸出直接成為下一步的輸入。這種結構簡單直觀,非常適合那些邏輯線性、步驟明確且清晰的工作流程。

而 SequentialChain 則是對 SimpleSequentialChain 的擴展,它支持多輸入和多輸出,提供了更大的靈活性。這種結構能夠將復雜的任務分解成多個部分,并通過明確的輸入輸出變量將它們連接起來,從而實現更復雜的流程設計和任務整合。

通過這兩種鏈結構,我們不僅可以清晰地定義任務邏輯,還可以靈活地適應不同的場景需求。例如,在多語言客戶服務場景中,SequentialChain 可以輕松地完成從評論翻譯、總結、語言檢測到個性化回復生成的整個工作流程。

總的來說,無論是處理單一線性任務,還是需要多路并行和輸出合并的復雜流程,LangChain 提供的鏈式工具都能顯著提高大語言模型任務的執行效率和可擴展性,為開發者構建智能化工作流提供了強有力的支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72650.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72650.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72650.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛擬卡 WildCard (野卡) 保姆級開卡教程

本文首發于只抄博客,歡迎點擊原文鏈接了解更多內容。 前言 本篇教程為 WildCard 的介紹以及開卡教學,要了解不同平臺(Grok、Talkatone 等)的訂閱方式請移步《訂閱教程》分類 當我們想要充值國外平臺會員時,一般都需要使…

計算機數據庫三級刷題總結(博主89分已過,總結的內容分享)

計算機數據庫三級刷題總結(博主89分已過,總結的內容分享) 文章目錄 計算機數據庫三級刷題總結(博主89分已過,總結的內容分享)一、 數據庫設計階段二、事務相關三、數據庫設計順序四、數據庫三級模式與二層映…

記錄一些面試遇到的問題

重載和重寫的區別 重載是overload,覆蓋是override 重載屬于編譯時多態,覆蓋屬于運行時多態 運行時多態和編譯時多態 運行時多態指的是在運行的時候才知道要調用哪一個函數,編譯時多態是指在編譯的時候就知道調用哪一個函數。 運行時多態…

HBuilder X 使用 TortoiseSVN 設置快捷鍵方法

HBuilder X 使用 TortoiseSVN 設置快捷鍵方法 單文件:(上鎖,解鎖,提交,更新) 安裝好 TortoiseSVN ,或者 按圖操作: 1,工具欄中 【自定義快捷鍵】 2,點擊 默認的快捷鍵設置&…

JmeterHttp請求頭管理出現Unsupported Media Type問題解決

JmeterHttp請求頭管理出現Unsupported Media Type問題解決 大多數的app與pc端壓測的時候都會出現這種情況 當我們在jemter測試當中當中遇見Unsupported Media Type,有一種可能就是我們請求的網頁的content-Type的類型與我們測試的時候的類型不一致 解決方法 可以添…

Spring AI 1.0.0-M6 快速開始(一)

Spring AI 1.0.0-M6 入門一、存儲庫二、依賴管理完整maven 入門 Spring 是JAVA中我們經常使用的框架之一,Spring AI不斷的發展迭代目前已經到M6版本據說上半年會出一個穩定版本。 本節提供了如何開始使用Spring AI的M6。 一、存儲庫 1.0 M6 -添加Spring存儲庫 需…

頂點著色器和片段著色器

在Unity渲染中,**頂點著色器(Vertex Shader)和片段著色器(Fragment Shader)**是圖形渲染管線中的兩個核心階段。我們可以通過一個比喻來理解它們的分工:想象你要畫一幅由三角形組成的3D模型,頂點…

Impacket工具中的橫向滲透利器及其使用場景對比詳解

在滲透測試中,橫向移動(Lateral Movement)是指攻擊者在獲得一個系統的控制權限后,通過網絡進一步滲透到其他系統的過程。Impacket 是一款強大的滲透測試工具集,提供了多種實現橫向滲透的腳本,常見的工具包括…

設計模式|策略模式 Strategy Pattern 詳解

目錄 一、策略模式概述二、策略模式的實現2.1 策略接口2.2 具體策略類2.3 上下文類2.4 客戶端代碼2.5 UML類圖2.6 UML時序圖 三、優缺點3.1 ?優點3.2 ? 缺點 四、最佳實踐場景4.1 適合場景描述4.2 具體場景 五、擴展5.1 繼承復用機制和復合策略5.2 對象管理:優化策…

迷你世界腳本顯示板管理接口:DisPlayBoard

顯示板管理接口:DisPlayBoard 迷你世界 更新時間: 2023-04-26 10:21:14 具體函數名及描述如下: 序號 函數名 函數描述 1 showBoard(...) 對玩家顯示顯示板 2 hideBoard(...) 對玩家隱藏顯示板 3 setBoardPicture 對玩家設置顯示板的圖片…

尚硅谷爬蟲note14

一、scrapy scrapy:為爬取網站數據是,提取結構性數據而編寫的應用框架 1. 安裝 pip install scrapy 或者,國內源安裝 pip install scrapy -i https://pypi.douban.com/simple 2. 報錯 報錯1)building ‘twisted.te…

merge函數

merge函數 今天在刷lc,從靈神題解中學到的 來源:560. 和為 K 的子數組 - 力扣(LeetCode) java8 merge()方法被引入到HashMap類中,用于簡化鍵值對操作,在處理鍵值對時,提供一個重新映射函數來決…

Notepad++ 8.6.7 安裝與配置全攻略(Windows平臺)

一、軟件定位與核心優勢 Notepad 是開源免費的代碼/文本編輯器,支持超過80種編程語言的高亮顯示,相比系統自帶記事本具有以下優勢: 輕量高效:啟動速度比同類軟件快30%插件擴展:支持NppExec、JSON Viewer等200插件跨文…

建筑兔零基礎自學python記錄39|實戰詞云可視化項目——章節分布10(上)

這次我們來制作《紅樓夢》各章節的分布情況: 源代碼: import pandas as pd import numpy as np import matplotlib.pyplot as pltdf_hlm pd.read_csv("hlm.txt", names["hlm_texts"]).dropna()df_hlm df_hlm[~df_hlm.hlm_texts.s…

C++:#ifndef 頭文件保護機制詳解

在C開發中,頭文件可能會被多個源文件包含,導致編譯錯誤。為了避免這種情況,我們使用了頭文件保護機制(防止重復包含)。 頭文件保護的原理 通過預處理指令#ifndef(如果沒有定義)和#define&…

利用MQ自動取消未支付超時訂單最佳實踐

一、利用MQ自動取消未支付超時訂單最佳實踐 1、基于 RocketMQ 延遲消息 1.1:延遲消息 當消息寫入到 Broker 后,不會立刻被消費者消費,需要等待指定的時長后才可被消費處理的消息,稱為延時消息。 1.2:實現流程 &am…

基于 ChatGPT 創建專屬 GPTs

文章目錄 基于 ChatGPT 創建專屬 GPTs一、效果展示1.1 中文命名專家1.2 行程小助手 二、核心配置2.1 Instructions2.3 Actions 三、Agent 簡介3.1 功能框架3.2 工作流程3.3 意圖識別 四、數據流程 基于 ChatGPT 創建專屬 GPTs ChatGPT 具備定制 GPTs 的能力,能夠通…

Spring Boot WebFlux 中 WebSocket 生命周期解析

Spring Boot WebFlux 中的 WebSocket 提供了一種高效、異步的方式來處理客戶端與服務器之間的雙向通信。WebSocket 連接的生命周期包括連接建立、消息傳輸、連接關閉以及資源清理等過程。此外,為了確保 WebSocket 連接的穩定性和可靠性,我們可以加入重試…

【數據挖掘】異構圖與同構圖

在圖論(Graph Theory)中,異構圖(Heterogeneous Graph)和同構圖(Homogeneous Graph)是兩種不同的圖結構概念,它們的主要區別在于節點和邊的類型是否單一。 1. 異構圖(Hete…

Golang實踐錄:go發布版本信息收集

go發布版本信息收集。 背景 本文從官方、網絡資料收羅有關go的發布歷史概況。主要目的是能快速了解golang不同版本的變更。鑒于官方資料為英文,為方便閱讀,使用工具翻譯成中文,重要特性參考其它資料補充/修改。由于發布版本內容較多&#xf…