日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

LangChain應用開發指南-熟用LCEL語法掌握Chain的精髓

來源: 責編: 時間:2023-12-26 09:30:07 340觀看
導讀引言LangChain的核心概念是Chain,它是一種由多個流程構件組成的有向圖,可以對輸入的文本進行各種轉換和處理,輸出你想要的結果。LangChain提供了一種專門的表達式語言,叫做LCEL(LangChain Expression Language),它可以讓你用

引言

LangChain的核心概念是Chain,它是一種由多個流程構件組成的有向圖,可以對輸入的文本進行各種轉換和處理,輸出你想要的結果。LangChain提供了一種專門的表達式語言,叫做LCEL(LangChain Expression Language),它可以讓你用簡潔和靈活的語法來定義和操作Chain,無需編寫復雜的代碼。s1x28資訊網——每日最新資訊28at.com


s1x28資訊網——每日最新資訊28at.com

今天我將帶領大家使用LCEL語法來構建和組合Chain,實現強大的LLM應用。s1x28資訊網——每日最新資訊28at.com


s1x28資訊網——每日最新資訊28at.com

本文為一個系列,之前內容沒有看過的小伙伴可以點擊鏈接查看:AI課程合集s1x28資訊網——每日最新資訊28at.com


s1x28資訊網——每日最新資訊28at.com

LCEL語法基礎

LCEL是一個用于構建復雜鏈式組件的語言,它支持流式處理、并行化、日志記錄等功能。LCEL的基本語法規則是使用|符號將不同的組件連接起來,形成一個鏈式結構。|符號類似于Unix的管道操作符,它將一個組件的輸出作為下一個組件的輸入,從而實現數據的傳遞和處理。s1x28資訊網——每日最新資訊28at.com

LCEL的語法非常簡潔和靈活,它可以用于各種場景和任務。例如,我們可以使用LCEL來實現以下功能:s1x28資訊網——每日最新資訊28at.com

  • 生成一個關于某個主題的笑話:我們可以將一個提示模板和一個語言模型組合起來,形成一個鏈式結構,如下所示:
prompt = BasePromptTemplate("tell me a short joke about {topic}")model = ChatModel()output_parser = StrOutputParser()joke = ({"topic": RunnablePassthrough()} | prompt | model | output_parser)

這個鏈式結構的作用是,首先根據用戶輸入的主題,生成一個提示,然后將提示傳遞給語言模型,讓它生成一個笑話,最后將笑話轉換為字符串,返回給用戶。我們可以用以下代碼來測試這個鏈式結構:s1x28資訊網——每日最新資訊28at.com

joke.invoke("ice cream")# > "Why did the ice cream go to therapy? /n/nBecause it had too many toppings and couldn't find its cone-fidence!"

通過以上案例,我們能夠了解如何使用LCEL語言構建一個生成笑話的鏈式結構。我將為您解釋其中的每一步:s1x28資訊網——每日最新資訊28at.com

圖片s1x28資訊網——每日最新資訊28at.com

  • 首先,我們傳入用戶想要的主題,例如 "ice cream",作為輸入。
  • 通過{"topic": RunnablePassthrough()},將輸入轉化為字典類型{"topic": "ice cream"}
  • 然后,我們使用提示模板組件,根據用戶輸入的主題,生成一個提示,例如"tell me a short joke about ice cream",并將其封裝為一個PromptValue類型的對象。這個對象可以適用于不同類型的語言模型,因為它可以生成字符串或消息序列。
  • 接著,我們使用大語言模型,會根據提示模板生成的提示,生成一段文本,例如"Why did the ice cream go to therapy?/nBecause it had too many toppings and couldn't cone-trol itself!",并將其封裝為一個ChatMessage類型的對象。這個對象包含了生成者、內容和時間等信息。
  • 最后,我們使用輸出解析器組件,根據用戶的需求,將語言模型生成的文本轉換為不同的格式或類型,例如字符串。這樣,用戶就可以方便地獲取和使用生成的內容。

為什么要用LCEL?

LCEL語法的核心思想是:一切皆為對象,一切皆為鏈。這意味著,LCEL語法中的每一個對象都實現了一個統一的接口:Runnable,它定義了一系列的調用方法(invoke, batch, stream, ainvoke, …)。這樣,你可以用同樣的方式調用不同類型的對象,無論它們是模型、函數、數據、配置、條件、邏輯等等。而且,你可以將多個對象鏈接起來,形成一個鏈式結構,這個結構本身也是一個對象,也可以被調用。這樣,你可以將復雜的功能分解成簡單的組件,然后用LCEL語法將它們組合起來,形成一個完整的應用。s1x28資訊網——每日最新資訊28at.com

LCEL語法還提供了一些組合原語,讓你可以更靈活地控制鏈式結構的行為,例如:s1x28資訊網——每日最新資訊28at.com

  • 并行化:你可以使用parallel原語將多個對象并行執行,提高效率和性能。
  • 回退:你可以使用fallback原語為某個對象指定一個備選對象,當主對象執行失敗時,自動切換到備選對象,保證應用的可用性和穩定性。
  • 動態配置:你可以使用config原語為某個對象指定一個配置對象,根據運行時的輸入或條件,動態地修改對象的參數或屬性,增加應用的靈活性和適應性。

LCEL語法的優勢

為了更好地理解LCEL語法的優勢,我們可以將它與傳統的編程語言進行對比,看看如果不使用LCEL語法,我們需要做哪些額外的工作。我們仍以上述笑話的生成鏈為例。s1x28資訊網——每日最新資訊28at.com

這段代碼非常簡潔和清晰,只需要幾行就可以實現我們想要的功能。而且,這段代碼還具有很高的可擴展性和靈活性,例如:s1x28資訊網——每日最新資訊28at.com

  • 如果我們想要以流式的方式獲取笑話,我們只需要改變調用方法,使用stream代替invoke
# 調用笑話對象,傳入一個主題字符串,得到一個笑話字符串的流joke.stream("dog")
  • 如果我們想要同時處理多個主題,我們只需要改變調用方法,使用batch代替invoke
# 調用笑話對象,傳入一個主題字符串的列表,得到一個笑話字符串的列表joke.batch(["dog", "cat", "banana"])
  • 如果我們想讓請求異步執行只需要
joke.ainvoke("dog")
  • 模型的變更也十分簡單,只需要變更modal變量的定義即可
prompt = BasePromptTemplate("tell me a short joke about {topic}")# 改用gpt-3.5-turbo的llmmodel = OpenAI(model="gpt-3.5-turbo")output_parser = StrOutputParser()joke = ({"topic": RunnablePassthrough()} | prompt | model | output_parser)
  • 同時LCEL標準模型中的對象都可以直接增加同類型對象作為fallbacks,操作上只需要執行with_fallbacks方法即可。由于整條鏈亦是LCEL標準模型,因而鏈亦可配置fallbacks
# 增加OpenAI的llm作為ChatModel的fallbacksprompt = BasePromptTemplate("tell me a short joke about {topic}")model = ChatModel()fallback_llm = OpenAI(model="gpt-3.5-turbo")modal_with_fallback = model.with_fallbacks([fallback_llm])output_parser = StrOutputParser()joke = ({"topic": RunnablePassthrough()} | prompt | modal_with_fallback | output_parser)

以上只是一些簡單的例子,你可以根據自己的需求,使用LCEL語法提供的更多的組合原語,實現更復雜的功能和效果。s1x28資訊網——每日最新資訊28at.com

那么,如果我們不使用LCEL語法,而是使用傳統的編程語言,我們需要做哪些額外的工作呢?我們以Python為例,看看我們需要寫多少代碼,才能實現與LCEL語法相同的功能。s1x28資訊網——每日最新資訊28at.com

圖片代碼對比s1x28資訊網——每日最新資訊28at.com

從上面的代碼可以看出,如果我們不使用LCEL語法,而是使用傳統的編程語言,我們需要寫很多的代碼,才能實現與LCEL語法相同的功能。而且,這些代碼還存在很多的問題,例如:s1x28資訊網——每日最新資訊28at.com

  • 代碼的可讀性和可維護性很差,需要花費很多的時間和精力去理解和修改。
  • 代碼的可擴展性和靈活性很低,需要對代碼進行大量的修改,才能實現不同的功能和效果。
  • 代碼的可復用性和可移植性很差,需要對代碼進行大量的修改,才能適應不同的場景和平臺。

因此,我們可以看出,LCEL語法相比傳統的編程語言,具有很多的優勢,它可以讓我們更高效、更簡單、更靈活地構建復雜的AI應用。s1x28資訊網——每日最新資訊28at.com

總結

在本文中,我們介紹了如何使用LangChain的LECL語法。我們介紹了LECL的基本語法以及基于LECL的流、異步等多種用法,并對比了不適用LECL語法開發的情況。s1x28資訊網——每日最新資訊28at.com

我們希望本文能夠幫助你了解LangChain中特色的LECL語法,鼓勵你嘗試使用LangChain開發自己的應用。s1x28資訊網——每日最新資訊28at.com

參考資料:s1x28資訊網——每日最新資訊28at.com

  • [1] Why use LCEL.https://python.langchain.com/docs

本文鏈接:http://www.www897cc.com/showinfo-26-54153-0.htmlLangChain應用開發指南-熟用LCEL語法掌握Chain的精髓

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入ReactiveFeign:反應式遠程接口調用的最佳實踐

下一篇: 使用React微前端的完整指南

標簽:
  • 熱門焦點
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 徐汇区| 马公市| 军事| 崇仁县| 吉木乃县| 白河县| 区。| 大同市| 乌审旗| 山阴县| 板桥市| 萨嘎县| 荣成市| 满洲里市| 霍邱县| 荥阳市| 左云县| 武鸣县| 临夏县| 云林县| 嘉祥县| 盐亭县| 兴化市| 枣强县| 台东县| 岱山县| 明水县| 永德县| 临高县| 青铜峡市| 临清市| 宁远县| 中超| 西丰县| 枣强县| 开远市| 滨州市| 苗栗市| 泰兴市| 额敏县| 普定县|