LangChain for LLM Application Development 系列課程筆記
LLM鏈 (LLM Chain)
連續鏈 (Sequential Chains)
路由鏈 (Router Chain)
最基本的LLMChain
單元使用示意
在只有一個輸入和一個輸出的簡單情境下,藉由SimpleSequentialChain
串連兩個LLMChain
SimpleSequentialChain
是一個用於組合多個 LLMChain
的結構,允許按順序連續處理不同的語言任務。它比 SequentialChain
簡單,因為它直接將一個 LLMChain
的輸出作為下一個 LLMChain
的輸入,沒有額外的中間變量或複雜的資料流程管理。這種設計使得 SimpleSequentialChain
非常適合於簡單的順序任務,如在本例中先生成公司名稱,然後再為這個名稱創建描述。它簡化了連續處理步驟的實施,適合於那些需要順序處理但又不需要複雜資料管理的情景。
SimpleSequentialChain
範例中可以看到chain1產出的結果(company_name)傳遞給chain2
串連兩個LLMChain產出結果
多個輸入或輸出的情境
SequentialChain
是一種結構,用於將多個 LLMChain (語言模型鏈)依序連接起來。在這個案例中,每一個 LLMChain
代表一個特定的處理步驟(如翻譯、摘要製作等),而 SequentialChain
則確保這些步驟按順序執行。這種結構允許複雜的資料處理流程被拆分為較小、較易於管理的單元,並依序進行,從而有效地處理複雜的語言任務。
SequentialChain
output_key
指定)
Router Chain的目的是當接收到用戶的問題時,它能自動判斷哪一個範疇的模板最適合用來回答該問題。例如,如果問題是關於物理的,它將選擇物理模板來生成回答。這大大提高了回答的質量和相關性
Router Chain
prompt_infos
清單中LLMChain
,其任務是使用該範疇的模板進行問題的回答。MULTI_PROMPT_ROUTER_TEMPLATE
,其功能是根據用戶的輸入選擇最適合的範疇模板router_chain
的LLMRouterChain
router_chain
、所有範疇的destination_chains
和一個default_chain
(當無法找到適合的範疇時使用)建立了一個名為chain的MultiPromptChainprompt_infos 是一個包含四個字典的列表。每個字典代表一個專門的問答模板,旨在幫助語言模型以某一領域的專家身份回答問題。以下以physics為例
name
:模板的名稱,此處為 "physics"description
:描述此模板的用途,此處表示它適合回答有關物理的問題prompt_template
:使用先前定義的 physics_template 作為該模板的具體內容destination_chains
與default_prompt
為不同的問答領域建立專門的LLMChain物件,並同時保留一個預設的LLMChain用於通用問題
destination_chains
default_prompt
MULTI_PROMPT_ROUTER_TEMPLATE
Router Chain最核心邏輯的部分
根據一系列的候選提示和給定的輸入,導引語言模型選擇和(可能)修改最合適的提示。這有助於根據特定的問題或輸入定制語言模型的響應
destination
: 用來指定要使用的提示名稱或"DEFAULT"next_inputs
: 原始輸入的可能修改版本destination
字段必須是下面指定的候選提示名稱之一,或者如果輸入不適合任何候選提示,則可以是"DEFAULT"next_inputs
可以是原始輸入LLMRouterChain
、MultiPromptChain
將所有之前創建的專家模板、默認鏈接和路由鏈接組合起來,形成一個完整的、能夠智能地根據輸入選擇最合適回答方法的鏈接系統
設置路由模板 (router_template):
這裡使用MULTI_PROMPT_ROUTER_TEMPLATE字符串模板並替換其內部的{destinations}部分,填充之前計算的destinations_str。結果是一個自定義的模板,其中包含了所有可用的模板名稱和描述。
創建路由提示 (router_prompt):
這裡使用剛才生成的router_template來創建一個PromptTemplate物件,名稱為router_prompt。
這個提示將用於指導語言模型決定根據提供的輸入使用哪一個專家模板來回答問題。
創建路由鏈接 (router_chain):
使用上一步中的router_prompt和llm語言模型,我們創建了一個名為router_chain的LLMRouterChain物件。該物件的目的是在接收到一個輸入問題時,根據router_prompt的指引,決定使用哪一個專家模板來回答。
創建多提示鏈接 (chain):
最後,使用前面的結果創建了一個MultiPromptChain物件,名稱為chain。這個物件將協調所有的鏈接:它首先使用router_chain來決定要使用哪一個destination_chains中的專家模板。如果沒有合適的專家模板,則會使用default_chain來回答問題。