整理并翻譯自DeepLearning.AI×LangChain的官方課程:Chains(源代碼可見)
Chains
直譯鏈,表達的意思更像是對話鏈,對話鏈的背后是思維鏈
LLM Chain(LLM鏈)
首先介紹了一個最簡單的例子,LLM Chain:
將一個大語言模型和prompt模板組合起來調用LLMChain
,即可得到一個LLMChain對象,該對象的run
實現的功能即給定輸入自動使用prompt模板生成prompt,調用LLM得到回復。
Sequential Chains(順序鏈)
順序鏈是另外一種類型的鏈,它的基本思想是以一個鏈的輸出是下一個鏈的輸入這種方式組合的多個鏈。
目前有2種類型的順序鏈:
- SimpleSequentialChain:單個輸入/輸出組合
- SequentialChain:多個輸入輸出組合
SimpleSequentialChain
調用SimpleSequentialChain
,傳入兩個構建好的LLM Chain即可構建一個順序鏈,第一個LLM Chain的輸出是第二個LLM Chain的輸入,同樣也可以指定verbose=true
將打印對話歷史。
圖示如下:
SequentialChain
第一個chain將review翻譯為英文,第二個chain則提取摘要。
第三個chain識別review的類型。
第四個chain使用指定語言類型和摘要生成回復。
注意點是這些chain里面的變量名稱要對齊,否則會報錯。
即將構建的順序鏈如下圖所示:
運行一下:
結果:
視頻可能看不太清楚,整條鏈的輸入輸出的依賴關系是依靠每一個子鏈都設置一個output_key
,在下一個鏈的prompt模板里以{output_key}
的形式指定來實現的,寫python的朋友估計已經習以為常了,其他語言的小伙伴可能需要點時間思考,如下圖:
Router Chain 路由鏈
先決定輸入要分發到哪個子鏈,再分發到對應的子鏈:
定義回答多個學科的多個prompt模板:
為每個學科的prompt模板添加一些說明信息:
為了實現路由鏈,引入了MultiPromptChain
和LLMRouterChain
定義LLM,訓練prompt模板列表,構建子鏈:
再構建一個默認鏈(用來兜底):
定義路由提示詞模板:
定義路由鏈(注意output_parser指定的是RouterOutputParser
對象):
現在,組合起來構建路由鏈:
chain = MultiPromptChain(router_chain=router_chain, destination_chains=destination_chains, default_chain=default_chain, verbose=True)
嘗試運行一下物理題:
嘗試運行一下數學題:
如果輸入一個不屬于路由內的學科,比如下面的生物,則會兜底走默認鏈,由于GPT也具備生物學知識,所以也可以給出有效回答: