日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

LangChain 鏈:一種革命性的方式來利用語言模型的力量

LangChain 鏈:一種革命性的方式來利用語言模型的力量

文章圖片

LangChain 鏈:一種革命性的方式來利用語言模型的力量

文章圖片

LangChain 鏈:一種革命性的方式來利用語言模型的力量

文章圖片

LangChain 鏈:一種革命性的方式來利用語言模型的力量
LangChain框架的核心是“鏈(Chains)”的概念 —— 一系列按特定順序執(zhí)行任務的相互連接的組件 。 但這些鏈(Chains)到底是什么 , 它們又是如何提升語言模型的能力的呢?在本文中 , 我們將深入 LangChain 的世界 , 探索其核心概念、基礎鏈類型和實際應用 。


從將復雜任務分解為可管理的步驟到在多次調(diào)用間保持上下文 , LangChain 提供了一個強大的框架來構建復雜的語言應用程序 。


一、什么是 LangChain 中的鏈?用一句話來說:鏈是一個端到端的包裝器 , 包含多個單獨組件按定義的順序執(zhí)行 。






鏈是 LangChain 的核心概念之一 。 鏈允許超越對語言模型的單個 API 調(diào)用 , 而是將多個調(diào)用邏輯地串聯(lián)起來 。 這樣 , 允許開發(fā)人員組合多個組件來創(chuàng)建一個連貫的應用程序 。


使用鏈的一些原因包括:

  • 將復雜任務分解為可以由不同模型或工具順序處理的較小步驟 。 這允許我們利用不同系統(tǒng)的不同優(yōu)勢 。
  • 在調(diào)用間添加狀態(tài)和內(nèi)存 。 一個調(diào)用的輸出可以作為下一個調(diào)用的輸入 , 以提供上下文和狀態(tài) 。
  • 在調(diào)用間添加額外的處理、過濾或驗證邏輯 。
  • 更容易地調(diào)試和檢測一系列調(diào)用 。


二、LangChain 中的基礎鏈類型LLMChain、RouterChain、SimpleSequentialChain 和 TransformChain 被認為是許多其他更復雜鏈的基礎構建塊 。 它們提供了基本的模式 , 如串聯(lián)大語言模型、條件邏輯、順序工作流和數(shù)據(jù)轉(zhuǎn)換 。
  • LLMChain:串聯(lián)對大語言模型的多個調(diào)用 , 適用于分解復雜提示 。
  • RouterChain:允許基于邏輯條件性地路由到不同的鏈 , 啟用分支邏輯 。
  • SimpleSequentialChain:順序串聯(lián)多個鏈 , 適用于線性工作流 。
  • TransformChain:在鏈間應用數(shù)據(jù)轉(zhuǎn)換 , 有助于數(shù)據(jù)整理和預處理 。


其他關鍵鏈類型如 Agents 和 RetrievalChain 在這些基礎上構建 , 以實現(xiàn)更高級的用例 , 如目標導向的對話和基于知識的生成 。


然而 , 這四個基礎提供了 LangChain 中鏈構造的基本模式 。


三、LLMChain最常用的鏈類型是 LLMChain 。







LLMChain 由一個提示模板、一個大語言模型和一個可選的輸出解析器組成 。 例如 , 可以創(chuàng)建一個鏈 , 它接收用戶輸入 , 用提示模板格式化它 , 然后將格式化后的響應傳遞給一個大語言模型 。 可以通過組合多個鏈 , 或?qū)㈡溑c其他組件組合來構建更復雜的鏈 。


使用 LLMChain 與直接向大語言模型傳遞提示的主要區(qū)別在于:
  • LLMChain 允許將多個提示串聯(lián)在一起 , 而直接傳遞提示只允許一個 。 使用 LLMChain , 可以將復雜提示分解為多個更簡單的提示并將它們串聯(lián)起來 。
  • LLMChain 在提示間保持狀態(tài)和內(nèi)存 。 一個提示的輸出可以作為下一個提示的輸入來提供上下文 。 直接傳遞提示缺乏這種記憶 。
  • LLMChain 使得在提示間添加預處理邏輯、驗證和檢測更容易 。 這有助于調(diào)試和質(zhì)量控制 。
  • LLMChain 提供了一些便利方法 , 如 apply 和 generate , 使運行鏈變得簡單 。


四、創(chuàng)建一個 LLMChain要創(chuàng)建一個 LLMChain , 需要指定:
  • 要使用的語言模型
  • 提示模板

【LangChain 鏈:一種革命性的方式來利用語言模型的力量】



這段代碼定義了一個提示模板 , 并使用 OpenAI 模型創(chuàng)建了一個 LLMChain 實例 。 通過調(diào)用 LLMChain 并傳入具體參數(shù) , 可以獲得生成的有趣短故事 。


代碼示例如下:
from langchain import PromptTemplate OpenAI LLMChain# 初始化 OpenAI 模型llm = OpenAI(temperature=0)# 定義提示模板prompt_template = \"像一個喜劇演員一樣 , 寫一個超級有趣的兩句關于{thing的短篇故事?\"# 創(chuàng)建 LLM 鏈llm_chain = LLMChain( llm=llm prompt=PromptTemplate.from_template(prompt_template))# 調(diào)用 LLM 鏈并傳入具體參數(shù)result = llm_chain(\"一個小孩把他爸爸的筆記本電腦藏了起來\")print(result)

執(zhí)行上述代碼 , 會產(chǎn)生如下提示信息:
LangChainDeprecationWarning: The class `LLMChain` was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use RunnableSequence e.g. `prompt | llm` instead.
意思是類 LLMChain 在LangChain 0.1.17中已棄用 , 并將在1.0中刪除 。


輸出結果:





使用新版的LangChain 0.2.x 框架 , 可以使用如下示例代碼:
from langchain_core.prompts import PromptTemplatefrom langchain_openai import ChatOpenAI# 初始化 ChatOpenAI 模型llm = ChatOpenAI(model_name=OPENAI_MODEL temperature=0)# 定義提示模板prompt_template = \"像一個喜劇演員一樣 , 寫一個超級有趣的兩句關于{thing的短篇故事?\"prompt = PromptTemplate.from_template(prompt_template)# 創(chuàng)建 LLM 鏈llm_chain = prompt | llm# 調(diào)用 LLM 鏈并傳入具體參數(shù)result = llm_chain.invoke(\"一個小孩把他爸爸的筆記本電腦藏了起來\")print(result)

輸出結果:





代碼說明:
(1)導入必要的庫:
PromptTemplate:用于定義提示模板 。
ChatOpenAI:用于初始化 ChatOpenAI 模型 。


(2)初始化 ChatOpenAI 模型:
llm = ChatOpenAI(model_name=OPENAI_MODEL temperature=0):創(chuàng)建一個 ChatOpenAI 模型實例 , 設置模型名稱為 OPENAI_MODEL , 溫度為 0 , 以獲得更確定性的輸出 。


(3)定義提示模板:
prompt_template:定義一個提示模板字符串 , 內(nèi)容為 \"像一個喜劇演員一樣 , 寫一個超級有趣的兩句關于{thing的短篇故事?\" 。 其中 {thing 是占位符 , 將在后續(xù)調(diào)用中替換為具體參數(shù) 。
prompt = PromptTemplate.from_template(prompt_template):使用 PromptTemplate 類從模板字符串創(chuàng)建提示模板對象 。


(4)創(chuàng)建 LLM 鏈:
llm_chain = prompt | llm:使用管道符號 (|) 創(chuàng)建一個 LLM 鏈 , 將提示模板和 ChatOpenAI 模型連接起來 。


(5)調(diào)用 LLM 鏈并傳入具體參數(shù):
result = llm_chain.invoke(\"一個小孩把他爸爸的筆記本電腦藏了起來\"):調(diào)用 llm_chain 的 invoke 方法 , 并傳入具體參數(shù) \"一個小孩把他爸爸的筆記本電腦藏了起來\" , 獲取生成的結果 。
print(result):打印生成的結果 。


這段代碼定義了一個提示模板 , 并使用 ChatOpenAI 模型創(chuàng)建了一個 LLM 鏈 。 通過調(diào)用 llm_chain.invoke 并傳入具體參數(shù) , 可以獲得生成的有趣短故事 。


當有一個輸入列表并希望讓大語言模型為每個輸入生成文本時 , 它將為列表中的每個輸入字典運行 LLMChain 并返回一個輸出列表 。


五、批處理首先 , 在批量中 , 如果你需要提出多個問題或命令 , 可以通過將提示列表保存在 Python 列表中 , 然后使用批量調(diào)用 , 而不是循環(huán) 。


這段代碼的目的是批量處理一系列文本輸入項 , 并展示每個輸入項對應的處理結果 。


# 輸入列表input_list = [ {\"thing\": \"女生喜歡大叔\" {\"thing\": \"失明的眼科醫(yī)生\" {\"thing\": \"一個不會做數(shù)學的數(shù)據(jù)科學家\"
# 調(diào)用 batch 方法outputs = llm_chain.batch(input_list)# 遍歷 outputs 列表 , 該列表包含了 batch 方法對每個輸入項的處理結果for index output in enumerate(outputs): # 使用 enumerate 函數(shù)獲取索引和值 , 并將索引轉(zhuǎn)換為從1開始的序號 , 以便與輸入列表的序號對應 print(f\"Input {index + 1: {input_list[index
['thing'
\") print(f\"Output: {output\\")


llm_chain.batch(input_list)這行代碼調(diào)用了llm_chain對象的batch方法 , 并傳入input_list作為參數(shù) 。 這個batch方法是用來批量處理input_list中的每一個輸入項(即每個字典中的'thing'值) 。


輸出結果:

\u0002

    推薦閱讀