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

五分鐘理透 LangChain 的 Chain

人工智能
本文主要聊了 LangChain 中的 Chain 概念。Chain 是 LangChain 中的核心組件,我們對多個組件的一系列調用就是Chain。

LangChain幾乎是LLM應用開發的第一選擇,它的野心也比較大,它致力于將自己打造成LLM應用開發的最大社區。而LangChain最核心的部分非 Chain 莫屬。

那Chain到底是個啥,概念比較模糊,像霧像雨又像風,這篇文章將帶你快速理透 LangChain 中的 Chain 概念。

1. Chain是核心

LangChain的Chain到底是什么?一句話總結:Chain是指對 LangChain 多個組件的一系列調用。

再看看官網的解釋:Chain是指調用的序列 - 無論是調用 LLM、工具還是數據預處理步驟,主要支持的方法是使用 LCEL。

官網里還提到了LCEL,LCEL是LangChain 表達式語言,是一種更加高效簡介的鏈接 LangChain 組件的方式,也是官網推薦的方式。

從下圖官網的描述,也可以看到,Chain可以是從最簡單的“prompt + LLM”鏈 到 最復雜的鏈(運行了包含 100 多個步驟的鏈)。

2. 為什么需要Chain

我們所期待的LLM是能處理許多復雜任務,而非簡單的一問一答,也不是簡單的處理單一任務。

所以,最終我期待的LLM處理任務的流程應該是這樣,它中間的復雜過程對用戶來說是一個黑盒:

既然定位是完成復雜任務,那自然就需要通過某個機制將多個單一任務串起來,形成一個大的鏈條,多個步驟共同完成某個復雜任務。

Chain可以將多個步驟連接到一起,最終完成各種復雜繁瑣的任務。這就是Chain存在的必要性了。我很喜歡LangChain的Logo,很形象地表達了這一思想。

Chain需要對多個組件一系列的調用或者一系列的串聯,這樣才能完成復雜任務。當然,我們也可以把 Chain 看作是流水線。通過使用 Chain,你可以將各個步驟定義為獨立的模塊,然后按順序串聯起來。這樣不僅大大簡化了代碼邏輯,也使得整個流程更加直觀和易于管理。

而LCEL的存在,也只是為了讓構建鏈的過程更簡單,讓鏈的表達力更清晰更簡單。

接下來,我將通過一個示例展示沒有 Chain 和有Chain的2種實現方式,以便更清晰地理解 Chain 的價值。

3. 如果沒有Chain

這里舉個例子,比如:我們給LLM輸入一段項目描述,讓LLM給這個項目起一個名稱和Slogan。

如果不使用Chain的話,我們可以這樣實現。

# 本次需求:我們給LLM輸入一段項目描述,讓LLM給這個項目起一個名稱和Slogan
# 以下是實現:

from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser


proj_desc = """
    我們本次的項目是去森林里探險救援,我們有一個10人小隊,
    我們要到達一個叫做“蝴蝶谷”的目的地,去那里解救一位被困的科學家。
    這期間我們可能會遇到許多危險,我們需要共同合作,互相幫助,歷經磨難,才能到達目的地。
    我們的任務是要在5天內到達目的地并且救出探險家,才算完成這次探險,否則任務失敗,我們將受到懲罰。
    出發前我們要各自準備好自己的裝備和干糧,加油!
"""


def name_slogan_by_desc(project_desc):
    """
    根據項目描述,生成項目名稱和slogan
    """
    str_parser = StrOutputParser()

    promt_template_project_name = "請你根據<desc>標簽里的關于某個項目的描述,生成一個項目名稱,只需要返回項目名稱。<desc>{project_desc}</desc>"
    promt_project_name = PromptTemplate.from_template(promt_template_project_name)
    final_promt_project_name = promt_project_name.invoke({"project_desc": project_desc})
    res_project_name = model.invoke(final_promt_project_name)
    parsed_res_project_name = str_parser.invoke(res_project_name)


    promt_template_slogan = "請你根據<desc>標簽里的關于某個項目的描述,和這個項目的名稱{project_name},給這個項目起一個slogan,slogan要求干脆簡潔積極向上,只返回slogan。<desc>{project_desc}</desc>"
    promt_slogan = PromptTemplate.from_template(promt_template_slogan)
    final_promt_slogan = promt_slogan.invoke(
        {"project_desc": project_desc, "project_name": parsed_res_project_name}
    )
    response_slogan = model.invoke(final_promt_slogan)
    parsed_response_slogan = str_parser.invoke(response_slogan)


    final_result = {
        "project_name": parsed_res_project_name,
        "slogan": parsed_response_slogan,
    }
    return final_result

# 輸入項目描述,輸出項目名稱和slogan
result = name_slogan_by_desc(proj_desc)
print(result)

執行結果如下:

{'project_name': '蝴蝶谷救援行動', 'slogan': '拯救科學家,共同合作,蝴蝶谷等你來!'}

可以看到,實現過程比較繁瑣,變量和代碼也多,不夠直觀,很容易出錯。這還只是簡單場景,如果碰到復雜場景就更麻煩了。

4. 因為有了Chain

接下來,我們使用 LangChain 的 Chain 功能,來實現相同的功能。代碼如下:

# 本次需求:我們給LLM輸入一段項目描述,讓LLM給這個項目起一個名稱和Slogan
# 以下是實現:

from operator import itemgetter
from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.chains import LLMChain, SequentialChain

proj_desc = """
    我們本次的項目是去森林里探險救援,我們有一個10人小隊,
    我們要到達一個叫做“蝴蝶谷”的目的地,去那里解救一位被困的科學家。
    這期間我們可能會遇到許多危險,我們需要共同合作,互相幫助,歷經磨難,才能到達目的地。
    我們的任務是要在5天內到達目的地并且救出探險家,才算完成這次探險,否則任務失敗,我們將受到懲罰。
    出發前我們要各自準備好自己的裝備和干糧,加油!
"""

def name_slogan_by_desc(project_desc):
    """
    根據項目描述,生成項目名稱和slogan
    """

    # 第1條鏈
    promt_template_project_name = "請你根據<desc>標簽里的關于某個項目的描述,生成一個項目名稱,只需要返回項目名稱。<desc>{project_desc}</desc>"
    chain_one = LLMChain(
        llm=model,
        prompt=PromptTemplate.from_template(promt_template_project_name),
        output_parser=StrOutputParser(),
        output_key="project_name",
    )

    # 第2條鏈
    promt_template_slogan = "請你根據<desc>標簽里的關于某個項目的描述,和這個項目的名稱{project_name},給這個項目起一個slogan,slogan要求干脆簡潔積極向上,只返回slogan。<desc>{project_desc}</desc>"
    chain_two = LLMChain(
        llm=model,
        prompt=PromptTemplate.from_template(promt_template_slogan),
        output_parser=StrOutputParser(),
        output_key="slogan",
    )

    # 串聯兩條鏈
    sequential_chain = SequentialChain(
        chains=[chain_one, chain_two],
        input_variables=["project_desc"],
        output_variables=["project_name", "slogan"],
    )
    final_res = sequential_chain(project_desc)

    final_result = {
        "project_name": final_res["project_name"],
        "slogan": final_res["slogan"],
    }
    return final_result

# 輸入項目描述,輸出項目名稱和slogan
result = name_slogan_by_desc(proj_desc)
print(result)

執行結果如下:

{'project_name': '蝴蝶谷救援行動', 'slogan': '團結合作,共赴蝴蝶谷'}

可以看到代碼更簡潔,也很直觀,當然,也可以使用LCEL讓整個鏈條更加簡潔清晰。

5. LCEL表達式

LCEL方式的代碼如下:

# 本次需求:我們給LLM輸入一段項目描述,讓LLM給這個項目起一個名稱和Slogan
# 以下是實現:

from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

proj_desc = """
    我們本次的項目是去森林里探險救援,我們有一個10人小隊,
    我們要到達一個叫做“蝴蝶谷”的目的地,去那里解救一位被困的科學家。
    這期間我們可能會遇到許多危險,我們需要共同合作,互相幫助,歷經磨難,才能到達目的地。
    我們的任務是要在5天內到達目的地并且救出探險家,才算完成這次探險,否則任務失敗,我們將受到懲罰。
    出發前我們要各自準備好自己的裝備和干糧,加油!
"""

def name_slogan_by_desc(project_desc):
    """
    根據項目描述,生成項目名稱和slogan
    """

    # 第1條鏈
    promt_template_project_name = "請你根據<desc>標簽里的關于某個項目的描述,生成一個項目名稱,只需要返回項目名稱。<desc>{project_desc}</desc>"
    chain_one = (
        PromptTemplate.from_template(promt_template_project_name)
        | model
        | {"project_name": StrOutputParser(), "project_desc": lambda x: project_desc}
    )

    # 第2條鏈
    promt_template_slogan = "請你根據<desc>標簽里的關于某個項目的描述,和這個項目的名稱{project_name},給這個項目起一個slogan,slogan要求干脆簡潔積極向上,只返回slogan。<desc>{project_desc}</desc>"
    chain_two = (
        PromptTemplate.from_template(promt_template_slogan)
        | model
        | {"slogan": StrOutputParser(), "project_info": lambda x: chain_one}
    )

    # 串聯兩條鏈
    final_chain = chain_one | chain_two
    final_res = final_chain.invoke({"project_desc": project_desc})

    final_result = {
        "project_name": final_res["project_info"]["project_name"],
        "slogan": final_res["slogan"],
    }

    return final_result

# 輸入項目描述,輸出項目名稱和slogan
result = name_slogan_by_desc(proj_desc)
print(result)

普通方式和LCEL方式的核心代碼對比:

普通方式:

LCEL方式:

責任編輯:趙寧寧 來源: 程序員半支煙
相關推薦

2024-06-25 12:25:12

LangChain路由鏈

2023-05-25 08:02:09

構建工具源碼JS

2009-11-16 10:53:30

Oracle Hint

2025-03-13 06:22:59

2024-12-11 07:00:00

面向對象代碼

2020-06-16 08:47:53

磁盤

2025-01-07 08:11:06

ArrayArrayList場景

2021-09-07 09:40:20

Spark大數據引擎

2021-06-07 09:51:22

原型模式序列化

2019-08-09 10:33:36

開發技能代碼

2009-10-22 16:18:19

Oracle表空間

2024-09-18 08:21:24

JavaScriptTypeScriptprototype

2025-01-20 08:50:00

2009-11-05 14:53:54

Visual Stud

2021-10-19 07:27:08

HTTP代理網絡

2023-09-07 23:52:50

Flink代碼

2022-12-16 09:55:50

網絡架構OSI

2009-11-16 09:53:56

PHP上傳類

2009-11-17 14:50:50

Oracle調優

2025-01-21 07:39:04

Linux堆內存Golang
點贊
收藏

51CTO技術棧公眾號

精品久久久av| 欧美巨大另类极品videosbest | 91国产精品视频在线观看| 最新国产在线观看| 成人性色生活片免费看爆迷你毛片| 57pao精品| 欧美午夜激情影院| 国产精品对白久久久久粗| 91久久精品一区二区三区| 日本老太婆做爰视频| 天天影院图片亚洲| 蜜臀久久99精品久久久画质超高清| 美女撒尿一区二区三区| 在线观看福利片| 亚洲亚洲一区二区三区| 欧美日韩亚洲综合| 日韩精品―中文字幕| 免费在线观看av| 久久久亚洲精品一区二区三区 | 亚洲自拍偷拍麻豆| 天堂√在线观看一区二区| 亚洲国产精品视频在线| 另类专区欧美蜜桃臀第一页| 6080yy精品一区二区三区| 亚洲伦理一区二区三区| 神马久久一区二区三区| 精品88久久久久88久久久| 天天操天天干天天做| 日韩欧美精品电影| 天天综合日日夜夜精品| 国产91视频一区| 欧美三级黄网| 国产日韩精品一区二区三区 | 人妻妺妺窝人体色www聚色窝| 蜜臀久久久99精品久久久久久| 欧美有码在线观看| 日韩欧美性视频| 欧美精品激情| 美女视频久久黄| 欧美三级黄色大片| 欧美黄色录像片| 一区二区三区回区在观看免费视频| 亚洲精品中文字幕在线播放| 91在线一区| 日韩欧美综合一区| 国产裸体视频网站| 亚洲图色一区二区三区| 日韩欧美成人激情| 少妇极品熟妇人妻无码| 亚洲啊v在线免费视频| 在线不卡的av| 亚洲制服中文字幕| 电影91久久久| 91精品国产综合久久久久久久 | 99久久这里有精品| 69堂精品视频| 91在线第一页| 在线观看视频一区二区三区| 欧美xxx久久| 美女搡bbb又爽又猛又黄www| 精品av导航| 日韩国产高清视频在线| 无码人妻精品一区二区三区温州| 女仆av观看一区| 亚洲精品影视在线观看| 久久久久久久久久久久| 第一sis亚洲原创| 最新中文字幕亚洲| 天天操天天操天天操天天操天天操| 久久国产成人精品| 草民午夜欧美限制a级福利片| 国产在线免费看| 亚洲先锋影音| 久久久久久久久久av| 国产毛片aaa| 日韩黄色在线观看| 91免费欧美精品| 午夜激情小视频| 欧美激情在线看| 久久久无码中文字幕久...| 欧美videos另类精品| 欧美日韩午夜剧场| 污污的网站18| 91国内精品| 亚洲人成电影在线观看天堂色| 老司机福利在线观看| 综合激情一区| 欧美亚洲成人网| 伊人久久亚洲综合| 岛国精品在线观看| 亚洲国产精品www| 国产精品蜜臀| 欧美午夜精品一区| 韩国黄色一级片| 欧美日韩国产在线观看网站| 欧美成人合集magnet| 99热国产在线观看| 久久99国产精品尤物| 精品一区二区不卡| 免费在线观看av片| 一本大道综合伊人精品热热| 四虎成人在线播放| 九色精品国产蝌蚪| 欧美激情精品久久久久久| 欧美特级黄色片| 成人中文字幕合集| 曰韩不卡视频| 色尼玛亚洲综合影院| 欧美一级夜夜爽| 黄色片在线观看免费| 亚洲激情午夜| 91色视频在线导航| 国产大学生校花援交在线播放| 亚洲一区二区精品视频| 天天摸天天舔天天操| 偷拍自拍一区| 欧美精品18videos性欧| 在线视频 91| 久久午夜电影网| av网站大全免费| 亚洲综合视频| 中文字幕在线成人| 久久久久久不卡| av在线播放不卡| 菠萝蜜视频在线观看入口| 久久人体av| 中文字幕日韩av| 免费一级a毛片| 久久久久久久网| 日韩欧美国产免费| 欧美亚洲大陆| 97国产suv精品一区二区62| 国产人妖一区二区| 自拍av一区二区三区| 天天插天天操天天射| 国产一区二区观看| 青青久久av北条麻妃海外网| 天堂8在线视频| 亚洲国产日韩综合久久精品| 18深夜在线观看免费视频| 亚洲综合色网| 91福利入口| 日本精品600av| 日韩欧美一区二区不卡| 日本一级二级视频| 国产一级精品在线| 热久久最新网址| 午夜久久av| 欧美激情精品久久久| 成人乱码一区二区三区| 亚洲午夜精品网| 人妻av一区二区| 亚洲在线免费| 日本在线一区| 欧美大陆国产| 久久视频在线看| 国产黄色片网站| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲 小说 欧美 激情 另类| 久久久久一区| 色综合久久久久久久久五月| 国产精品亚洲成在人线| 日韩在线播放一区| va婷婷在线免费观看| 亚洲综合精品自拍| 最新在线黄色网址| 视频一区二区三区入口| 亚洲欧洲国产精品久久| 国产一区二区三区黄网站| 久久99久久99精品中文字幕| 狠狠人妻久久久久久综合麻豆| 午夜激情久久久| 性欧美13一14内谢| 麻豆91精品视频| 国产传媒久久久| 亚洲第一福利专区| 国产精品爽爽ⅴa在线观看| 黄色成人在线| 日韩成人av网址| 中文字幕视频二区| 亚洲黄色性网站| 爱爱免费小视频| 久久99国产精品成人| 日韩国产成人无码av毛片| 亚州综合一区| 国产日产欧美精品| 国产美女一区视频| 国产亚洲一区二区在线| 国产高潮在线观看| 一本色道久久综合亚洲精品按摩| 中文乱码字幕高清一区二区| 成人性色生活片免费看爆迷你毛片| 日韩 欧美 高清| 亚洲五月综合| 日韩高清国产精品| 99久久婷婷国产综合精品青牛牛| 日本一区二区在线播放| 1区2区3区在线视频| 亚洲欧洲黄色网| 亚洲成人精品女人久久久| 色综合视频一区二区三区高清| 日韩精品一区二区亚洲av性色| 97久久超碰精品国产| 亚洲免费黄色录像| 久久久人人人| 久久精品xxx| 99精品小视频| 日本成人三级电影网站| 97人人澡人人爽91综合色| 国产欧美日韩免费看aⅴ视频| av伦理在线| 久久久精品网站| 国产精品四虎| 精品一区电影国产| 成人免费公开视频| 欧美久久久久久久久中文字幕| 国产又大又黄又粗| 一区二区日韩av| 免费看特级毛片| 欧美国产综合一区二区| 黄色av网址在线观看| 国产成人精品www牛牛影视| 一本色道久久亚洲综合精品蜜桃 | 亚洲尤物视频在线| 国产麻豆视频在线观看| 国产日韩欧美精品综合| 人妻丰满熟妇aⅴ无码| 99麻豆久久久国产精品免费优播| 韩国一区二区在线播放| 久久国产欧美日韩精品| 国产综合免费视频| 鲁大师影院一区二区三区| 午夜精品久久久久久久无码| 激情欧美一区二区三区| 欧美黄网在线观看| 一个色综合网| 手机成人av在线| 欧美国产小视频| 超碰成人在线免费观看| 欧美激情黄色片| 制服丝袜综合日韩欧美| 97色伦图片97综合影院| 正义之心1992免费观看全集完整版| 成人免费看片39| 亚洲一区二区在线看| 色乱码一区二区三区网站| 无码免费一区二区三区免费播放| 精品理论电影在线| 日日夜夜精品网站| 色喇叭免费久久综合网| 在线观看一区二区三区三州| 99热在线成人| 欧美日韩dvd| 在线日韩电影| 免费黄色福利视频| 男人操女人的视频在线观看欧美| 亚洲免费一级视频| 狠狠色狠狠色综合系列| 男人女人拔萝卜视频| 成人深夜在线观看| 五级黄高潮片90分钟视频| 久久九九国产精品| 国产精品一区二区亚洲| 亚洲欧美日韩在线| 国产一级特黄视频| 欧美性猛交xxxx富婆弯腰| 91porny九色| 91精品国产色综合久久不卡蜜臀| 性猛交富婆╳xxx乱大交天津| 亚洲国产精品女人久久久| 日韩精品视频在线观看一区二区三区| 亚洲欧美第一页| 欧美成人二区| 久久久噜噜噜久久| 欧美色片在线观看| 99在线视频首页| 欧美精品第一区| 国产精品波多野结衣| 精品成人在线| www.99在线| 国产成人精品免费在线| 91中文字幕永久在线| 17c精品麻豆一区二区免费| 国产一级性生活| 欧美色精品天天在线观看视频| 国产黄色片网站| 夜夜嗨av色一区二区不卡| 91麻豆国产福利在线观看宅福利| 668精品在线视频| 91成人短视频在线观看| 精品麻豆av| 国产精品国产三级国产在线观看| 久久亚洲中文字幕无码| 久久99热狠狠色一区二区| 中国xxxx性xxxx产国| 国产精品久久久久天堂| 日韩美女一级片| 欧美日韩午夜在线| 亚州精品国产精品乱码不99按摩| 日韩有码在线播放| 小h片在线观看| 97人人澡人人爽| 大胆日韩av| 欧美视频在线播放一区| 国产精品自产自拍| 日本欧美一区二区三区不卡视频| 亚洲一二三区在线观看| 一级黄在线观看| 亚洲色图第一页| 成人女同在线观看| 亚洲自拍偷拍第一页| 成人羞羞动漫| 国产二区视频在线播放| 粉嫩av一区二区三区| 国产亚洲精品久久久久久豆腐| 欧美色道久久88综合亚洲精品| 超碰福利在线观看| 久久久国产一区| 欧洲亚洲精品久久久久| 久久久福利视频| 好吊日精品视频| www.久久com| 国产精品久久久久影院亚瑟| 天天爽夜夜爽人人爽| 日韩国产中文字幕| 免费电影视频在线看| 亚洲一区二区在线| 亚洲国产一区二区三区在线播放| 日本888xxxx| 国产喂奶挤奶一区二区三区| 日韩欧美不卡视频| 亚洲国产日韩精品在线| 精品精品导航| 粉嫩av四季av绯色av第一区| 中文字幕亚洲精品乱码| 日本亚洲一区二区三区| 亚洲欧美日韩综合aⅴ视频| 国产又粗又黄又爽| 久久久国产精品视频| 电影91久久久| 蜜桃网站在线观看| 国产精品2024| 妺妺窝人体色www婷婷| 日韩一级黄色大片| 青草在线视频| 国产精品久久国产精品| 亚洲国产清纯| 国产ts丝袜人妖系列视频 | 久久99亚洲热视| 99re热精品视频| 中国丰满熟妇xxxx性| 丁香婷婷深情五月亚洲| 中国一级特黄毛片| 国产视频综合在线| 日韩毛片一区| 亚洲砖区区免费| 国产精品亚洲第一| 久久久久亚洲av片无码下载蜜桃| 精品av久久707| 成人性生交大片免费观看网站| 日本一区二区精品| 美女在线观看视频一区二区| www.av免费| 亚洲国产精彩中文乱码av在线播放| 超碰91在线观看| 日本一区二区三区在线视频| 美国三级日本三级久久99| 日本不卡一二区| 亚洲第一区中文字幕| 自拍偷拍亚洲视频| 在线观看欧美一区| 成人午夜激情在线| 9i精品福利一区二区三区| 色偷偷88888欧美精品久久久 | 天堂8中文在线最新版在线| 日韩免费av电影| 国产中文字幕精品| 日韩乱码一区二区| 中文字幕日韩av综合精品| 日韩免费精品| 国产极品美女高潮无套久久久| 国产精品久久久久久一区二区三区| 午夜精品久久久久久久第一页按摩 | 久久黄色精品视频| 一本色道久久综合亚洲精品小说| 精品亚洲二区| 欧美 日韩精品| 亚洲三级免费电影| 手机福利在线| 亚洲最大成人在线| 美女精品一区| 国产性生活网站| 一个色综合导航| 精品欠久久久中文字幕加勒比| 欧美伦理片在线观看| 亚洲在线视频免费观看| www.中文字幕久久久| 国产一区二区三区av在线| 麻豆精品视频在线观看视频| 日本一本高清视频|