文章目錄
- 介紹
- 優勢
- 運行接口
介紹
LCEL的全稱是Lang Chain Expression Language。其實他的用處就是使用“|”運算符鏈接LangChain應用的各個組件。
是一種聲明式的方法來鏈接Langchain組件。LCEL從第一天起就被設計為支持將原型投入生產,無需代碼更改,從最簡單的“提示詞+大型語言模型”鏈到最復雜的鏈(我們看到有人成功在生產環境中運行包含數百個步驟的LCEL鏈)。
優勢
以下是您可能想要使用 LCEL 的一些原因:
- 一流的流式支持: 使用 LCEL構建鏈時,您將獲得最佳的首次令牌時間(從開始到第一個輸出塊出現的時間)。對于某些鏈,這意味著例如我們直接從大型語言模型流式傳輸令牌到流式輸出解析器,您將以與大模型供應商輸出原始令牌相同的速度返回解析后的增量輸出塊。
- 異步支持: 使用 LCEL 構建的任何鏈都可以通過同步 API(例如,在您的 Jupyter 筆記本中進行原型設計)以及異步
API(例如,在 LangServe 服務器中)進行調用。這使得在原型和生產中使用相同的代碼成為可能,具有出色的性能,并能夠在同一服務器上處理多個并發請求。 - 優化的并行執行: 每當您的 LCEL鏈有可以并行執行的步驟時(例如,如果您從多個檢索器獲取文檔),我們會自動執行,無論是在同步接口還是異步接口中,以實現盡可能小的延遲。
- 重試和回退: 為您的 LCEL 鏈的任何部分配置重試和回退。這是使您的鏈在規模上更可靠的好方法。我們目前正在努力為重試/回退添加流式支持,以便您可以在沒有任何延遲成本的情況下獲得額外的可靠性。
- 訪問中間結果: 對于更復雜的鏈,訪問中間步驟的結果通常非常有用,即使在最終輸出生成之前。這可以用來讓最終用戶知道正在發生某些事情,或者僅僅是為了調試你的鏈。你可以流式傳輸中間結果,并且它在每個 LangServe 服務器上都可用。
- 輸入和輸出模式 輸入和輸出模式為每個 LCEL 鏈提供了從鏈的結構推斷出的 Pydantic 和 JSONSchema模式。這可以用于輸入和輸出的驗證,并且是 LangServe 的一個重要組成部分。
- 無縫的 LangSmith 跟蹤 隨著你的鏈變得越來越復雜,理解每一步究竟發生了什么變得越來越重要。 使用 LCEL,所有步驟都會自動記錄到 LangSmith 以實現最大程度的可觀察性和可調試性。
運行接口
為了盡可能簡化自定義鏈的創建,它們實現了一個"Runnable"協議。許多LangChain組件實現了Runnable協議,包括聊天模型、大型語言模型、輸出解析器、檢索器、提示詞模板等。此外,還有一些用于處理可運行對象的有用原語,您可以在下面閱讀。
這是一個標準接口,使得定義自定義鏈以及以標準方式調用它們變得簡單。 標準接口包括:
- stream: 流式返回響應的塊
- invoke: 在輸入上調用鏈
- batch: 在輸入列表上調用鏈
這些也有相應的異步方法,應該與asyncio的await語法一起使用以實現并發:
- astream: 異步流式返回響應的塊
- ainvoke: 異步調用鏈上的輸入
- abatch: 異步調用鏈上的輸入列表
- astream_log: 在發生時流式返回中間步驟,除了最終響應
- astream_events: 測試版 在鏈中發生時流式事件 (在 langchain-core 0.1.14 中引入)
每個組件的 輸入類型 和 輸出類型 不同:
所有可運行的組件都暴露輸入和輸出 模式 以檢查輸入和輸出:
- input_schema: 從可運行組件的結構自動生成的輸入 Pydantic 模型
- output_schema: 從可運行組件的結構自動生成的輸出 Pydantic 模型