国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LangChain輸出解析器與鏈的深度解析

本文將詳細(xì)介紹LangChain的輸出解析器OutputParser的使用方法,以及如何基于LangChain的LCEL構(gòu)建鏈。我們將通過實例來展示這些功能,幫助您更好地理解和使用LangChain。

一、輸出解析器OutputParser

1.1 為什么需要OutputParser

在使用LangChain構(gòu)建LLM應(yīng)用的常規(guī)流程中,我們需要進行Prompt輸入、調(diào)用LLM、以及處理LLM的輸出。有時候,我們期望LLM給到的數(shù)據(jù)是格式化的數(shù)據(jù),這樣可以方便我們進行后續(xù)的處理。

為了實現(xiàn)這個目標(biāo),我們需要在Prompt里設(shè)置好要求,然后LLM會在輸出內(nèi)容后,再將內(nèi)容傳給輸出解析器,輸出解析器會將內(nèi)容解析成我們預(yù)期的格式。

流程圖

1.2 代碼實踐

1.2.1 調(diào)用系統(tǒng)自帶的輸出解析器

我們可以使用系統(tǒng)自帶的輸出解析器來解析LLM的結(jié)果。例如,我們可以將LLM的結(jié)果解析為逗號分隔的列表。以下是一個示例,它詢問某個城市有N個景點。

from langchain_openai import ChatOpenAI
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "{parser_instructions}"),
    ("human", "列出{cityName}的{viewPointNum}個著名景點。")
])

output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()
# 查看解析器的指令內(nèi)容
print(parser_instructions)

final_prompt = prompt.invoke({"cityName": "南京", "viewPointNum": 3, "parser_instructions": parser_instructions})

model = ChatOpenAI(model="gpt-3.5-turbo",
                   openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                   openai_api_base="https://api.aigc369.com/v1")
response = model.invoke(final_prompt)
print(response.content)

ret = output_parser.invoke(response)
print(ret)

1.2.2 自定義格式的輸出解析器

除了使用系統(tǒng)自帶的輸出格式,我們還可以使用自定義的輸出格式。使用步驟如下:

  • 定義數(shù)據(jù)結(jié)構(gòu)類,繼承pydantic的BaseModel

  • 使用輸出解析器PydanticOutputParser

  • 后續(xù)是常規(guī)操作:生成prompt、調(diào)用LLM執(zhí)行、將輸出按照Parser解析

以下是一個示例,它給LLM一段書籍的介紹,讓他按照指定的格式總結(jié)輸出。

from typing import List

from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI


class BookInfo(BaseModel):
    book_name: str = Field(description="書籍的名字")
    author_name: str = Field(description="書籍的作者")
    genres: List[str] = Field(description="書籍的體裁")


output_parser = PydanticOutputParser(pydantic_object=BookInfo)
# 查看輸出解析器的內(nèi)容,會被輸出成json格式
print(output_parser.get_format_instructions())

prompt = ChatPromptTemplate.from_messages([
    ("system", "{parser_instructions} 你輸出的結(jié)果請使用中文。"),
    ("human", "請你幫我從書籍的概述中,提取書名、作者,以及書籍的體裁。書籍概述會被三個#符號包圍。\n###{book_introduction}###")
])

book_introduction = """
《朝花夕拾》原名《舊事重提》,是現(xiàn)代文學(xué)家魯迅的散文集,收錄魯迅于1926年創(chuàng)作的10篇回憶性散文, [1]1928年由北京未名社出版,現(xiàn)編入《魯迅全集》第2卷。
此文集作為“回憶的記事”,多側(cè)面地反映了作者魯迅青少年時期的生活,形象地反映了他的性格和志趣的形成經(jīng)過。前七篇反映他童年時代在紹興的家庭和私塾中的生活情景,后三篇敘述他從家鄉(xiāng)到南京,又到日本留學(xué),然后回國教書的經(jīng)歷;揭露了半殖民地半封建社會種種丑惡的不合理現(xiàn)象,同時反映了有抱負(fù)的青年知識分子在舊中國茫茫黑夜中,不畏艱險,尋找光明的困難歷程,以及抒發(fā)了作者對往日親友、師長的懷念之情 [2]。
文集以記事為主,飽含著濃烈的抒情氣息,往往又夾以議論,做到了抒情、敘事和議論融為一體,優(yōu)美和諧,樸實感人。作品富有詩情畫意,又不時穿插著幽默和諷喻;形象生動,格調(diào)明朗,有強烈的感染力。
"""

model = ChatOpenAI(model="gpt-3.5-turbo",
                   openai_api_key="sk-BuQK7SGbqCZP2i2z7fF267AeD0004eF095AbC78d2f79E019",
                   openai_api_base="https://api.aigc369.com/v1")
final_prompt = prompt.invoke({"book_introduction": book_introduction,
                              "parser_instructions": output_parser.get_format_instructions()})
response = model.invoke(final_prompt)
print(response.content)
result = output_parser.invoke(response)
print(result)

二、利用LCEL構(gòu)建鏈

2.1 LCEL是啥

LCEL是LangChain 表達(dá)式語言(LangChain Expression Language)的簡稱。使用LCEL可以快速將各種鏈組合到一起,那鏈又是啥呢?

在LangChain里,只要一個類實現(xiàn)了Runnable接口,并且有invoke方法,都可以成為鏈。實現(xiàn)了Runnable接口的類,可以拿上一個鏈的輸出作為自己的輸入。

LCEL構(gòu)建鏈

2.2 使用區(qū)別

2.2.1 不使用LCEL

如果我們不使用LCEL,代碼寫起來可能會比較繁瑣,invoke方法會滿天飛。比如這樣:

final_prompt = prompt.invoke({"book_introduction": book_introduction,
                              "parser_instructions": output_parser.get_format_instructions()})
response = model.invoke(final_prompt)
result = output_parser.invoke(response)

2.2.2 使用LCEL

如果我們使用LCEL,代碼會變得更加簡潔,表達(dá)力也會更強。比如這樣:

chain = prompt | model | output_parser
ret = chain.invoke({"book_introduction": book_introduction,
                    "parser_instructions": output_parser.get_format_instructions()})

LangChain輸出解析器與鏈的深度解析文章來源地址http://www.zghlxwxcb.cn/article/775.html

到此這篇關(guān)于LangChain輸出解析器與鏈的深度解析的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/775.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請聯(lián)系站長進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 深度解析JVM類加載器與雙親委派模型

    深度解析JVM類加載器與雙親委派模型

    Java虛擬機(JVM)是Java程序運行的核心,其中類加載器和雙親委派模型是JVM的重要組成部分。本文將深入討論這兩個概念,并解釋它們在實際開發(fā)中的應(yīng)用。 1. 什么是類加載器? 類加載器是JVM的一部分,負(fù)責(zé)加載Java類的字節(jié)碼文件。Java應(yīng)用程序中的每個類都必須由類加載器

    2024年01月17日
    瀏覽(107)
  • LangChain 67 深入理解LangChain 表達(dá)式語言30 調(diào)用tools搜索引擎 LangChain Expression Language (LCEL)

    LangChain 67 深入理解LangChain 表達(dá)式語言30 調(diào)用tools搜索引擎 LangChain Expression Language (LCEL)

    LangChain系列文章 LangChain 50 深入理解LangChain 表達(dá)式語言十三 自定義pipeline函數(shù) LangChain Expression Language (LCEL) LangChain 51 深入理解LangChain 表達(dá)式語言十四 自動修復(fù)配置RunnableConfig LangChain Expression Language (LCEL) LangChain 52 深入理解LangChain 表達(dá)式語言十五 Bind runtime args綁定運行時參數(shù)

    2024年01月23日
    瀏覽(130)
  • HTTP深度解析:構(gòu)建高效與安全網(wǎng)絡(luò)的關(guān)鍵知識

    HTTP深度解析:構(gòu)建高效與安全網(wǎng)絡(luò)的關(guān)鍵知識

    1. HTTP基礎(chǔ)及其組件 我首先想和大家分享的是HTTP的基礎(chǔ)知識。HTTP,即超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上最常用的協(xié)議之一。它定義了瀏覽器和服務(wù)器之間數(shù)據(jù)交換的規(guī)則,使得網(wǎng)頁內(nèi)容可以從服務(wù)器傳輸?shù)轿覀兊臑g覽器上。想象一下,每當(dāng)你點擊一個鏈接或輸入網(wǎng)址時,就是HT

    2024年02月04日
    瀏覽(114)
  • VPN深度解析:構(gòu)建安全網(wǎng)絡(luò)的關(guān)鍵技術(shù)

    VPN,即虛擬私人網(wǎng)絡(luò)(Virtual Private Network),是一種網(wǎng)絡(luò)技術(shù),用于在公共網(wǎng)絡(luò)上創(chuàng)建一個安全的網(wǎng)絡(luò)連接。它允許用戶通過加密的隧道在互聯(lián)網(wǎng)上發(fā)送和接收數(shù)據(jù),從而保護數(shù)據(jù)免受攔截和窺探。VPN不僅加密數(shù)據(jù),還能隱藏用戶的IP地址,提供匿名性和繞過地理位置限制的能

    2024年01月17日
    瀏覽(119)
  • Python生成器深度解析:構(gòu)建強大的數(shù)據(jù)處理管道

    生成器是Python的一種核心特性,允許我們在請求新元素時再生成這些元素,而不是在開始時就生成所有元素。它在處理大規(guī)模數(shù)據(jù)集、實現(xiàn)節(jié)省內(nèi)存的算法和構(gòu)建復(fù)雜的迭代器模式等多種情況下都有著廣泛的應(yīng)用。在本篇文章中,我們將從理論和實踐兩方面來探索Python生成器

    2024年02月07日
    瀏覽(126)
  • 深度解析 Docker Registry:構(gòu)建安全高效的私有鏡像倉庫

    深度解析 Docker Registry:構(gòu)建安全高效的私有鏡像倉庫

    ??個人主頁:程序員 小侯 ??CSDN新晉作者 ??歡迎 ??點贊?評論?收藏 ?收錄專欄:大數(shù)據(jù)系列 ?文章內(nèi)容:Docker Registry ??希望作者的文章能對你有所幫助,有不足的地方請在評論區(qū)留言指正,大家一起學(xué)習(xí)交流!?? Docker Registry是Docker生態(tài)系統(tǒng)中關(guān)鍵的組件,負(fù)責(zé)存儲

    2024年02月04日
    瀏覽(92)
  • 前端UI組件庫深度解析:構(gòu)建現(xiàn)代化的用戶體驗

    在當(dāng)今的前端開發(fā)中,UI組件庫已經(jīng)成為了我們工具箱中不可或缺的一部分。這些庫可以極大地提高我們的工作效率,同時也使我們能夠?qū)W⒂趯崿F(xiàn)真正的業(yè)務(wù)邏輯,而不是重復(fù)地編寫UI代碼。本篇博客將詳細(xì)地探討UI組件庫的核心概念,特性以及如何有效地使用它們。 UI組件

    2024年02月10日
    瀏覽(131)
  • 深入探究C++中的STL:容器、迭代器與算法全解析

    Standard Template Library:標(biāo)準(zhǔn)模板庫 是一個基于泛型的C++類模板庫由Alexander Stepanov于1994年開發(fā) 其目的是為了提供一致通用和高效的數(shù)據(jù)結(jié)構(gòu)和算法,同時不限制用戶所處理的數(shù)據(jù)類型和編程范式。STL的原型最初由Andrew Koenig和其它C++專家小組進行設(shè)計并在1995年C++標(biāo)準(zhǔn)委員會的推

    2024年02月05日
    瀏覽(100)
  • 從方法論到最佳實踐,深度解析企業(yè)云原生 DevSecOps 體系構(gòu)建

    從方法論到最佳實踐,深度解析企業(yè)云原生 DevSecOps 體系構(gòu)建

    作者:匡大虎 安全一直是企業(yè)上云關(guān)注的核心問題。隨著云原生對云計算基礎(chǔ)設(shè)施和企業(yè)應(yīng)用架構(gòu)的重定義,傳統(tǒng)的企業(yè)安全防護架構(gòu)已經(jīng)不能夠滿足新時期下的安全防護要求。為此企業(yè)安全人員需要針對云原生時代的安全挑戰(zhàn)重新進行系統(tǒng)性的威脅分析并構(gòu)建適合企業(yè)自身

    2024年01月25日
    瀏覽(106)
  • calcite在flink中的二次開發(fā),介紹解析器與優(yōu)化器

    calcite在flink中的二次開發(fā),介紹解析器與優(yōu)化器

    關(guān)于calcite的概念相關(guān)的內(nèi)容,在我另一篇帖子 深入理解flinksql執(zhí)行流程,擴展解析器實現(xiàn)語法的擴展 首先闡述一下 codegen: Codegen是基于ObjectWeb ASM的低開銷的java代碼生成器,他可以根據(jù)預(yù)先填好的規(guī)則與條件,通過編譯代碼,自動生成java類 在遞歸調(diào)用各個節(jié)點 DataStreamRel 的

    2024年02月22日
    瀏覽(127)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包