精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

LangChain的LCEL和Runnable你搞懂了嗎

人工智能
本篇主要聊了LangChain的LCEL表達(dá)式,以及LangChain鏈的原理,以及常用的幾個(gè)Runnable的定義和應(yīng)用場(chǎng)景。

LangChain的LCEL估計(jì)行業(yè)內(nèi)的朋友都聽過(guò),但是LCEL里的RunnablePassthrough、RunnableParallel、RunnableBranch、RunnableLambda又是什么意思?什么場(chǎng)景下用?

一、LCEL的定義和原理

LangChain的核心是Chain,即對(duì)多個(gè)組件的一系列調(diào)用。

LCEL是LangChain 定義的表達(dá)式語(yǔ)言,是一種更加高效簡(jiǎn)潔的調(diào)用一系列組件的方式。

LCEL使用方式就是:以一堆管道符("|")串聯(lián)所有實(shí)現(xiàn)了Runnable接口的組件。

比如這樣:

prompt_tpl = ChatPromptTemplate.from_messages(
    [
        ("system", "{parser_instructions}"),
        ("human", "列出{cityName}的{viewPointNum}個(gè)著名景點(diǎn)。"),
    ]
)

output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()

model = ChatOpenAI(model="gpt-3.5-turbo")

chain = prompt_tpl | model | output_parser

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

所以LangChain為了讓組件能以LCEL的方式快速簡(jiǎn)潔的被調(diào)用,計(jì)劃將所有組件都實(shí)現(xiàn)Runnable接口。比如我們常用的PromptTemplate 、LLMChain 、StructuredOutputParser 等等。

管道符("|")在Python里就類似or運(yùn)算(或運(yùn)算),比如A|B,就是A.or(B)。

那對(duì)應(yīng)到LangChain的Runnable接口里,這個(gè)or運(yùn)算是怎么實(shí)現(xiàn)的呢?一起看到源碼:

LangChain通過(guò)or將所有的Runnable串聯(lián)起來(lái),在通過(guò)invoke去一個(gè)個(gè)執(zhí)行,上一個(gè)組件的輸出,作為下一個(gè)組件的輸入。

LangChain這風(fēng)格怎么有點(diǎn)像神經(jīng)網(wǎng)絡(luò)呀,不得不說(shuō),這個(gè)世界到處都是相似的草臺(tái)班子。嗨!

總結(jié)起來(lái)講就是:LangChain的每個(gè)組件都實(shí)現(xiàn)了Runnable,通過(guò)LCEL方式,將多個(gè)組件串聯(lián)到一起,最后一個(gè)個(gè)執(zhí)行每個(gè)組件的invoke方法。上一個(gè)組件的輸出是下一個(gè)組件的輸入。

二、Runnable的含義和應(yīng)用場(chǎng)景

1.RunnablePassthrough

① 定義

RunnablePassthrough 主要用在鏈中傳遞數(shù)據(jù)。RunnablePassthrough一般用在鏈的第一個(gè)位置,用于接收用戶的輸入。如果處在中間位置,則用于接收上一步的輸出。

② 應(yīng)用場(chǎng)景

比如,依舊使用上面的例子,接受用戶輸入的城市,如果輸入城市是南京,則替換成北京,其余不變。代碼如下。此處的{}和RunnablePassthrough.assign()是同一個(gè)語(yǔ)義。

chain = (
    {
        "cityName": lambda x: '北京' if x["cityName"] == '南京' else x["cityName"],
        "viewPointNum": lambda x: x["viewPointNum"],
        "parser_instructions": lambda x: x["parser_instructions"],
    }
    | prompt_tpl
    | model
    | output_parser
)

2.RunnableParallel

① 定義

RunnableParallel看名字里的Parallel就猜到一二,用于并行執(zhí)行多個(gè)組件。通過(guò)RunnableParallel,可以實(shí)現(xiàn)部分組件或所有組件并發(fā)執(zhí)行的需求。

② 應(yīng)用場(chǎng)景

比如,同時(shí)要執(zhí)行兩個(gè)任務(wù),一個(gè)列出城市著名景點(diǎn),一個(gè)列出城市著名書籍。

prompt_tpl_1 = ChatPromptTemplate.from_messages(
    [
        ("system", "{parser_instructions}"),
        ("human", "列出{cityName}的{viewPointNum}個(gè)著名景點(diǎn)。"),
    ]
)
prompt_tpl_2 = ChatPromptTemplate.from_messages(
    [
        ("system", "{parser_instructions}"),
        ("human", "列出關(guān)于{cityName}歷史的{viewPointNum}個(gè)著名書籍。"),
    ]
)

output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()

model = ChatOpenAI(model="gpt-3.5-turbo")

chain_1 = prompt_tpl_1 | model | output_parser
chain_2 = prompt_tpl_2 | model | output_parser
chain_parallel = RunnableParallel(view_point=chain_1, book=chain_2)

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

3.RunnableBranch

① 定義

RunnableBranch主要用于多分支子鏈的場(chǎng)景,為鏈的調(diào)用提供了路由功能,這個(gè)有點(diǎn)類似于LangChain的路由鏈。我們可以創(chuàng)建多個(gè)子鏈,然后根據(jù)條件選擇執(zhí)行某一個(gè)子鏈。

② 應(yīng)用場(chǎng)景

比如,有多個(gè)回答問(wèn)題的鏈,先根據(jù)問(wèn)題找到分類,然后在使用具體的鏈回答問(wèn)題。

model = ChatOpenAI(model="gpt-3.5-turbo")
output_parser = StrOutputParser()

# 準(zhǔn)備2條目的鏈:一條物理鏈,一條數(shù)學(xué)鏈
# 1. 物理鏈
physics_template = """
你是一位物理學(xué)家,擅長(zhǎng)回答物理相關(guān)的問(wèn)題,當(dāng)你不知道問(wèn)題的答案時(shí),你就回答不知道。
具體問(wèn)題如下:
{input}
"""
physics_chain = PromptTemplate.from_template(physics_template) | model | output_parser

# 2. 數(shù)學(xué)鏈
math_template = """
你是一個(gè)數(shù)學(xué)家,擅長(zhǎng)回答數(shù)學(xué)相關(guān)的問(wèn)題,當(dāng)你不知道問(wèn)題的答案時(shí),你就回答不知道。
具體問(wèn)題如下:
{input}
"""
math_chain = PromptTemplate.from_template(math_template) | model | output_parser

# 4. 其他鏈
other_template = """
你是一個(gè)AI助手,你會(huì)回答一下問(wèn)題。
具體問(wèn)題如下:
{input}
"""
other_chain = PromptTemplate.from_template(other_template) | model | output_parser


classify_prompt_template = """
請(qǐng)你對(duì)以下問(wèn)題進(jìn)行分類,將問(wèn)題分類為"數(shù)學(xué)"、"物理"、"其它",不需要返回多個(gè)分類,返回一個(gè)即可。
具體問(wèn)題如下:
{input}

分類結(jié)果:
"""
classify_chain = PromptTemplate.from_template(classify_prompt_template) | model | output_parser

answer_chain = RunnableBranch(
    (lambda x: "數(shù)學(xué)" in x["topic"], math_chain),
    (lambda x: "物理" in x["topic"], physics_chain),
    other_chain
)

final_chain =  {"topic": classify_chain, "input": itemgetter("input")} | RunnableLambda(print_info) | answer_chain
# final_chain.invoke({"input":"地球的半徑是多少?"})
final_chain.invoke({"input":"對(duì)y=x求導(dǎo)的結(jié)果是多少?"})

4.RunnableLambda

① 定義

要說(shuō)牛批還得是RunnableLambda,它可以將Python 函數(shù)轉(zhuǎn)換為 Runnable對(duì)象。這種轉(zhuǎn)換使得任何函數(shù)都可以被看作 LCEL 鏈的一部分,我們把自己需要的功能通過(guò)自定義函數(shù) + RunnableLambda的方式包裝一下,集成到 LCEL 鏈中,這樣算是可以跟任何外部系統(tǒng)打通了。

② 應(yīng)用場(chǎng)景

比如,在執(zhí)行過(guò)程中,想在中間插入一段自定義功能(如 打印日志 等),可以通過(guò)自定義函數(shù) + RunnableLambda的方式實(shí)現(xiàn)。

def print_info(info: str):
    print(f"info: {info}")
    return info

prompt_tpl_1 = ChatPromptTemplate.from_messages(
    [
        ("system", "{parser_instructions}"),
        ("human", "列出{cityName}的{viewPointNum}個(gè)著名景點(diǎn)。"),
    ]
)

output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()

model = ChatOpenAI(model="gpt-3.5-turbo")

chain_1 = prompt_tpl_1 | model | RunnableLambda(print_info) | output_parser


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

三、總結(jié)

本篇主要聊了LangChain的LCEL表達(dá)式,以及LangChain鏈的原理,以及常用的幾個(gè)Runnable的定義和應(yīng)用場(chǎng)景,希望對(duì)你有幫助。

責(zé)任編輯:趙寧寧 來(lái)源: 程序員半支煙
相關(guān)推薦

2018-10-20 16:05:12

iOSAPP開發(fā)

2019-08-28 08:57:05

2021-10-10 20:36:49

Android Root權(quán)限

2018-08-10 05:06:03

提速降費(fèi)營(yíng)運(yùn)商漫游

2023-06-16 14:10:00

TCPUDP網(wǎng)絡(luò)通信

2022-05-06 09:21:21

TypeScriptinterfacetype

2024-04-07 08:23:01

JS隔離JavaScript

2011-06-14 12:56:55

SQL Server復(fù)災(zāi)

2024-12-19 08:00:00

人工智能LLMLangChain

2022-04-07 08:20:22

typeinterface前端

2022-06-07 08:14:35

PGPAGETUPLE

2022-11-28 07:10:57

2024-03-05 18:19:07

localhostLinux數(shù)據(jù)庫(kù)

2022-06-06 07:58:52

勒索軟件惡意軟件解密

2022-01-06 07:59:32

WebGPUOpenGL引擎

2022-03-08 15:01:48

負(fù)載均衡IP服務(wù)器

2023-10-27 07:39:44

IOC容器Spring

2023-12-26 08:12:14

LCEL語(yǔ)法異步

2024-08-12 12:30:27

2020-10-25 08:45:38

IPv6網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产suv精品一区二区四区视频| 欧洲综合视频| 久久久久国产精品| 精品少妇一区二区三区视频免付费| 97精品国产97久久久久久粉红| www日本在线| 国产美女诱惑一区二区| 最新中文字幕亚洲| 熟妇高潮一区二区| 桃色一区二区| 亚洲精品大片www| 欧美极品色图| www.色亚洲| 日本强好片久久久久久aaa| 精品少妇v888av| 午夜理伦三级做爰电影| 粉嫩av国产一区二区三区| 激情亚洲一区二区三区四区 | 国产精品久久夜| http;//www.99re视频| 无码人妻丰满熟妇精品区| 欧美va亚洲va日韩∨a综合色| 亚洲美女www午夜| 一级片免费在线观看视频| 亚洲最大网站| 亚洲午夜久久久久久久久电影网| 日韩免费毛片| 天天操天天插天天射| 国内精品第一页| 日韩女优人人人人射在线视频| 久久免费少妇高潮99精品| 日本欧美视频| 精品调教chinesegay| 亚洲女人在线观看| 国产精品久久久久久久久免费高清| 亚洲成人资源在线| 粉嫩av一区二区三区天美传媒| 日本中文字幕电影在线观看| 大白屁股一区二区视频| 国产精品直播网红| 精品一区二区无码| 亚洲综合电影一区二区三区| 久久久久久亚洲| 紧身裙女教师波多野结衣| 操欧美老女人| 亚洲欧美另类人妖| 精品人妻一区二区三区香蕉 | 欧美精品欧美精品系列c| 老牛影视av牛牛影视av| 国产精品1024| 91福利入口| 国产精品系列视频| 九九九久久久精品| 国产精品亚洲片夜色在线| 成人黄色免费网| 日本亚洲欧美天堂免费| 国产成人精品久久| av一级在线观看| 美女精品网站| 国产精品久久综合av爱欲tv| 日韩免费av网站| 久久久久久亚洲精品杨幂换脸| 日本免费久久高清视频| 国产尤物在线视频| 免费在线播放第一区高清av| 欧美在线一区二区三区四| 欧美一区二区三区网站| 日韩专区中文字幕一区二区| 国产精品吊钟奶在线| 伊人久久成人网| 久久国内精品视频| 92国产精品久久久久首页 | 欧美重口乱码一区二区| 黄色片免费在线| 亚洲综合图区| 国产日韩三级在线| 天天综合色天天综合色hd| 日韩在线观看www| 亚洲欧美日韩国产综合| 成人毛片100部免费看| 伊人在我在线看导航| 亚洲国产精品视频| 97av视频在线观看| 韩国理伦片久久电影网| 日韩视频在线永久播放| 亚洲少妇18p| 视频一区在线观看| 久久精品视频在线| 久久免费公开视频| 石原莉奈在线亚洲三区| 成人黄色免费片| 亚洲精品成人电影| 91在线观看污| 一区二区三区三区在线| 免费毛片在线看片免费丝瓜视频| 精品人伦一区二区三区蜜桃网站| 9久久婷婷国产综合精品性色| 99综合99| 亚洲欧美另类国产| 一区二区国产精品精华液| 在线日韩视频| 国产剧情日韩欧美| 香蕉视频黄在线观看| 亚洲国产精品t66y| 欧美日韩福利在线| 四虎4545www精品视频| 日韩欧美中文字幕制服| 乐播av一区二区三区| 欧美伊人久久| 欧美综合在线第二页| 国产精品久久久午夜夜伦鲁鲁| 懂色一区二区三区免费观看| 日韩高清dvd| 久草在线视频网站| 欧美日韩成人高清| 黄色污在线观看| 国产精品88久久久久久| 91精品国产高清自在线看超| 97成人在线观看| 99久久精品国产导航| 天堂v在线视频| 激情都市亚洲| 精品福利一区二区三区 | 国产精品福利一区| 九色自拍视频在线观看| 999精品视频在线观看| 亚洲欧洲在线观看| 国产精品6666| 国产一区二区三区四区五区美女| 欧美精品一区二区三区久久| 国产网站在线| 亚洲精品一区二区精华| 久久久久久久麻豆| 男女激情视频一区| 欧美日韩在线观看一区二区三区| xxx.xxx欧美| 日韩欧美aaaaaa| 国产一区在线观看免费| 日韩极品在线观看| 欧美高清性xxxxhd| 女人让男人操自己视频在线观看| 欧美一区二区三区免费在线看 | 久久爱www成人| 4438全国成人免费| 色欲av伊人久久大香线蕉影院| 亚洲免费资源在线播放| www.成人黄色| 91久久久精品国产| 成人春色激情网| 午夜在线视频播放| 欧美三级电影网| 538精品视频| 欧美a级理论片| 日韩精品一区二区三区四区五区| 欧美xxx网站| 亚洲人成网7777777国产| www成人在线| 91热门视频在线观看| 亚洲色欲综合一区二区三区| 一本色道久久综合狠狠躁的番外| 欧美怡春院一区二区三区| 无码国产精品高潮久久99| 婷婷中文字幕一区三区| 草草地址线路①屁屁影院成人| 一区二区自拍| 久久99精品久久久久久水蜜桃| 欧美私密网站| 一个人www欧美| 一区二区三区日| 亚洲免费观看高清在线观看| 三上悠亚 电影| 亚洲国产精品一区| 欧美大香线蕉线伊人久久| 91大神在线观看线路一区| 日韩在线视频一区| www.99视频| 精品久久久久久久中文字幕| 精品国产av无码| 久久99久久精品| 国产成人永久免费视频| 亚洲8888| 亚洲xxxx18| 成人bbav| 在线精品91av| 亚洲av综合色区无码一二三区| 亚洲国产成人91porn| 在线观看国产精品一区| 国产一区二区三区蝌蚪| 亚洲一区二区三区av无码| 免费不卡中文字幕在线| 96pao国产成视频永久免费| av影院在线| 正在播放欧美一区| 手机av在线免费| 亚洲成av人电影| 国产精品一区二区三区免费 | 亚洲高清免费观看高清完整版在线观看| 男人的天堂影院| 蜜臀精品一区二区三区在线观看 | 宅男网站在线免费观看| 日韩精品免费在线| 97在线播放免费观看| 亚洲网友自拍偷拍| 男人天堂资源网| 99国产精品久久久久久久久久| 中文字幕在线导航| 亚洲国产第一| 一本久道久久综合| 欧美一区 二区| 成人激情av在线| 国产精品av一区二区三区| 欧美成人在线免费视频| 精品视频三区| 日韩三级中文字幕| 最新中文字幕免费| 精品人伦一区二区三区蜜桃免费| 一区二区三区影视| 国产欧美日韩综合| 中文字幕第3页| 国产精品自拍网站| 天堂精品一区二区三区| 蜜桃精品一区二区三区| 国产精品男人爽免费视频1| av在线资源| 欧美日产国产成人免费图片| 在线观看av的网站| 日韩h在线观看| 成人黄色免费视频| 欧美人成免费网站| 看黄色一级大片| 色欧美乱欧美15图片| 日产电影一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 2019男人天堂| 国产亚洲欧美中文| 国产又爽又黄无码无遮挡在线观看| 国产精品123| 久久久久久久久久久影视| 精品一区二区三区在线播放视频| 爱情岛论坛vip永久入口| 性欧美精品高清| 波多野结衣家庭教师视频| 亚洲黄色成人| 浮妇高潮喷白浆视频| 国产一区二区中文| 日韩极品视频在线观看| 欧美日韩一卡| 精品视频在线观看一区二区| 欧美精品二区| 欧美亚洲色图视频| 国产精品国码视频| 黄色成人在线看| 在线免费高清一区二区三区| 日韩精品一区二区三区四| 欧美大片专区| 免费高清一区二区三区| 狠狠入ady亚洲精品经典电影| 成人污网站在线观看| 欧美99在线视频观看| 国产激情在线看| 激情久久久久| 国产主播在线看| 久久婷婷久久| 午夜国产一区二区三区| 激情深爱一区二区| 三级黄色片播放| 成人一二三区视频| 人妻无码一区二区三区| 国产亚洲欧美中文| 日本女人性生活视频| 亚洲人成网站在线| 精品视频一区二区在线观看| 午夜精品久久久久久久 | 尤物在线精品| 丰满少妇被猛烈进入高清播放| 日韩高清欧美激情| 粉色视频免费看| 国产不卡在线视频| 熟妇人妻久久中文字幕| 国产欧美日韩视频在线观看| 欧美爱爱免费视频| 亚洲国产日韩a在线播放性色| 国产免费观看av| 欧美吞精做爰啪啪高潮| 99国产精品久久久久久久成人| 日韩精品一区二区三区在线播放 | 日韩在线观看网址| 色综合999| 日本精品视频在线| 97精品资源在线观看| 国产午夜精品一区| 日韩成人精品一区| 成年人看的毛片| 蜜桃91丨九色丨蝌蚪91桃色| 中文字幕视频观看| 国产欧美精品一区二区三区四区| 成人免费毛片东京热| 色悠悠亚洲一区二区| www.国产黄色| 一本色道久久综合狠狠躁篇的优点 | 成人综合婷婷国产精品久久蜜臀| 色无极影院亚洲| 亚洲国产另类av| 中文字幕一区二区三区四区视频| 亚洲的天堂在线中文字幕| 免费看美女视频在线网站| 国内偷自视频区视频综合| 日本国产亚洲| 欧美理论一区二区| 欧美1区2区| 99re精彩视频| 久久综合国产精品| 美女视频黄免费| 欧美日高清视频| 欧美777四色影视在线| 欧美日韩ab片| 日韩在线激情| 日韩资源av在线| 亚洲国产专区校园欧美| 亚洲综合123| 国产精品久久久久久久久久久免费看 | 欧美mv日韩| 日韩av播放器| 99国产精品99久久久久久| 色在线观看视频| 欧美精品乱码久久久久久| 精品推荐蜜桃传媒| …久久精品99久久香蕉国产| 中文字幕一区二区三区四区久久| 一区二区在线观看网站| 日韩电影在线免费看| 瑟瑟视频在线观看| 精品久久久久久久久久久久久| 亚洲第一成年人网站| 久久综合伊人77777蜜臀| 国产黄色精品| 蜜桃久久精品乱码一区二区| 国产亚洲成人一区| 欧美xxxxx精品| 亚洲国产aⅴ天堂久久| 亚洲国产日韩在线观看| 欧美成人在线免费视频| 亚洲一二三区视频| 麻豆视频传媒入口| 国产一区二区三区不卡在线观看 | 午夜精品aaa| 成人午夜视频一区二区播放| 久久99国产精品自在自在app| 欧美日韩午夜电影网| 日韩专区第三页| 成人在线视频一区| 黄色激情视频在线观看| 亚洲第一精品久久忘忧草社区| 波多野结衣精品| 精品国产区在线| 翔田千里一区二区| 色无极影院亚洲| 欧美视频一区二| 青青青青在线| 亚洲a在线播放| 国内精品久久久久久久影视蜜臀 | 黑人久久a级毛片免费观看| 成人在线国产视频| 99久久国产综合精品麻豆| 日韩久久中文字幕| 一区二区三区视频观看| 欧洲精品久久久久毛片完整版| 影音先锋男人的网站| 高清在线成人网| 国产一级精品视频| 国产一区二区三区毛片| 亚洲高清国产拍精品26u| 久久久成人精品一区二区三区| 懂色中文一区二区在线播放| 在线观看免费av片| 中文在线不卡视频| 国产一区二区在线观| 欧美 日韩 亚洲 一区| 国产色综合久久| 国产视频在线一区| 久久久久久久电影一区| 国产免费播放一区二区| 中文字幕视频三区| 亚洲高清视频的网址| 超碰免费97在线观看| 亚洲自拍小视频免费观看| 亚洲精品欧洲| 黑人と日本人の交わりビデオ| 日韩三级视频在线观看| 精品3atv在线视频| 粉嫩av一区二区三区天美传媒| 久久久久99精品国产片| 国产又粗又长又大视频| 久久久女人电视剧免费播放下载| 国产一区二区精品福利地址| 国产大学生av| 91福利在线播放| 黄色影院在线看| 婷婷久久伊人| 99久久婷婷国产综合精品|