LangChain 筆記

Langchain 筆記

[TOC]

AI大模型開(kāi)發(fā)做什么

LangChain 是什么?

LangChain是一個(gè)用于開(kāi)發(fā)由語(yǔ)言模型驅(qū)動(dòng)的應(yīng)用程序的框架。

Langchain是一個(gè)開(kāi)源框架,它允許開(kāi)發(fā)人員將像GPT-4這樣的大型語(yǔ)言模型與外部的計(jì)算和數(shù)據(jù)
源結(jié)合起來(lái)。

  • 具有上下文感知能力:將語(yǔ)言模型連接到上下文來(lái)源(提示指令,少量的示例,需要回應(yīng)的內(nèi)容等)
  • 具有推理能力:依賴語(yǔ)言模型進(jìn)行推理(根據(jù)提供的上下文如何回答,采取什么行動(dòng)等)

核心組件

這個(gè)框架由幾個(gè)部分組成。

  • LangChain 庫(kù):Python 和 JavaScript 庫(kù)。包含了各種組件的接口和集成,一個(gè)基本的運(yùn)行時(shí),用于將這些組件組合成鏈和代理,以及現(xiàn)成的鏈和代理的實(shí)現(xiàn)。
  • LangChain 模板:一系列易于部署的參考架構(gòu),用于各種任務(wù)。
  • LangServe:一個(gè)用于將 LangChain 鏈部署為 REST API 的庫(kù)。
  • LangSmith:一個(gè)開(kāi)發(fā)者平臺(tái),讓你可以調(diào)試、測(cè)試、評(píng)估和監(jiān)控基于任何 LLM 框架構(gòu)建的鏈,并且與 LangChain 無(wú)縫集成

這些產(chǎn)品一起簡(jiǎn)化了整個(gè)應(yīng)用程序的生命周期:

  • 開(kāi)發(fā):在 LangChain/LangChain.js 中編寫你的應(yīng)用程序。使用模板作為參考,快速開(kāi)始。
  • 生產(chǎn)化:使用 LangSmith 來(lái)檢查、測(cè)試和監(jiān)控你的鏈,這樣你可以不斷改進(jìn)并有信心地部署。
  • 部署:使用 LangServe 將任何鏈轉(zhuǎn)換為 API。

為什么要用LangChain ?

  1. 數(shù)據(jù)連接: 允許將大型語(yǔ)言模型鏈接到自己的數(shù)據(jù)源,數(shù)據(jù)庫(kù)、pdf文件或其他文檔
  2. 行動(dòng)執(zhí)行:根據(jù)信息執(zhí)行特定操作 ,如發(fā)送郵件

LangChain 底層原理

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

個(gè)人助手

學(xué)習(xí)輔助

數(shù)據(jù)分析和數(shù)據(jù)科學(xué)

LangChain 庫(kù)

LangChain 包的主要價(jià)值主張是:

  1. 組件:用于處理語(yǔ)言模型的可組合工具和集成。無(wú)論你是否使用 LangChain 框架的其余部分,組件都是模塊化的,易于使用
  2. 現(xiàn)成的鏈:用于完成高級(jí)任務(wù)的組件的內(nèi)置組合

現(xiàn)成的鏈?zhǔn)沟瞄_(kāi)始變得容易。組件使得定制現(xiàn)有鏈和構(gòu)建新鏈變得容易。

LangChain 庫(kù)本身由幾個(gè)不同的包組成。

  • langchain-core:基礎(chǔ)抽象和 LangChain 表達(dá)式語(yǔ)言。
  • langchain-community:第三方集成。
  • langchain:構(gòu)成應(yīng)用程序認(rèn)知架構(gòu)的鏈、代理和檢索策略

核心

開(kāi)始使用

LangChain 環(huán)境和監(jiān)控

LangChain 開(kāi)發(fā)賬戶密碼

zhzxweijing@126.com
PAq!@#00

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

openAPI_KEY = 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


#智譜清言
2333506a5aea4dcca0798aacd92ebb20.iqTdy7YjClLmTWsB

LangChain 調(diào)用LLM

import os

from langchain_core.output_parsers import StrOutputParser
from langchain_zhipu import ChatZhipuAI
from langchain_core.messages import HumanMessage, SystemMessage

# os.environ['http_proxy'] = '127.0.0.1:7890'
# os.environ['https_proxy'] = '127.0.0.1:7890'
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'
os.environ["ZHIPUAI_API_KEY"] = '2333506a5aea4dcca0798aacd92ebb20.iqTdy7YjClLmTWsB'
# revoke llm
# LLM model  revoke api
# 1. create model
model = ChatZhipuAI(model='glm-4-0520')
# 2. msg
msg = [
    SystemMessage(content="你是個(gè)翻譯助手"),
    HumanMessage(content=" 將下列文本內(nèi)容翻譯為英語(yǔ) < 故宮、 天壇 都有著各自不錯(cuò)的風(fēng)景>")
]
print("AI模型輸出回復(fù)結(jié)果:")
result = model.invoke(msg)
print(result)
# 3. parser
#
# result_str = StrOutputParser().invoke(result)
# print(result_str)

parser = StrOutputParser()

# 4. chain
chain = model | parser
result = chain.invoke(msg)
print(result)

在Python中,chain = model | parser 這種語(yǔ)法并不是Python內(nèi)置的語(yǔ)法,而是特定庫(kù)(如langchain)中定義的鏈?zhǔn)讲僮鞣KǔS糜趯⒍鄠€(gè)操作或組件連接在一起,形成一個(gè)處理鏈。在這個(gè)例子中,modelparser 是兩個(gè)組件,| 操作符將它們連接起來(lái),形成一個(gè)處理鏈。

具體來(lái)說(shuō):
? model 是一個(gè)語(yǔ)言模型(如ChatZhipuAI),用于生成文本。
? parser 是一個(gè)輸出解析器(如StrOutputParser),用于將模型的輸出解析為字符串。

通過(guò) chain = model | parser,你將模型和解析器連接在一起,形成一個(gè)處理鏈。當(dāng)你調(diào)用 chain.invoke(msg) 時(shí),輸入 msg 會(huì)先經(jīng)過(guò) model 處理,生成的結(jié)果再傳遞給 parser 進(jìn)行解析,最終輸出解析后的結(jié)果。

這種鏈?zhǔn)讲僮鞣氖褂梅绞筋愃朴诠艿溃╬ipe)操作,常見(jiàn)于流式處理或任務(wù)鏈的場(chǎng)景。它使得代碼更加簡(jiǎn)潔和易讀,尤其是在處理多個(gè)步驟的任務(wù)時(shí)。

如果你想了解更多關(guān)于鏈?zhǔn)秸{(diào)用的內(nèi)容,可以參考和中的相關(guān)介紹。

LangChain提示模板(PromptTemplate)

prompt_template = ChatPromptTemplate.from_messages([
    ('system', '將下文內(nèi)容翻譯為{language}'),
    ('user', '{text}')])

# 4. chain
chain = prompt_template | model | parser
# result = chain.invoke(msg)
result = chain.invoke({"language": "韓語(yǔ)", "text": "故宮、天壇都有著各自不錯(cuò)的風(fēng)景"})
print(result)

LangServer 部署應(yīng)用程序


pip install "langserve[all]"

# 4. chain
chain = prompt_template | model | parser
# result = chain.invoke(msg)
result = chain.invoke({"language": "韓語(yǔ)", "text": "故宮、天壇都有著各自不錯(cuò)的風(fēng)景"})
print(result)

app = FastAPI(title='我langchain 服務(wù)', version='0.0.1', description='我langchain翻譯服務(wù)')
from langserve import add_routes  # 導(dǎo)入add_routes函數(shù)
add_routes(app,chain,path="/chain")


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="localhost", port=8000)

聊天機(jī)器人:

需要安裝:  `pip install langchain_community`
  • Chat History: 機(jī)器人

  • 流式輸出

    循環(huán):往復(fù) ==流式== 輸出

向量數(shù)據(jù)庫(kù)和檢索器

支持從向量數(shù)據(jù)庫(kù)和其他來(lái)源檢索數(shù)據(jù),以便與LLM(大型語(yǔ)言言模型)工作流程集成。它們對(duì)于應(yīng)用程序來(lái)說(shuō)非常重要,這些應(yīng)用程序需要獲取數(shù)據(jù)以作為模型推理的一部分進(jìn)行推理,就像檢索增強(qiáng)生成(RAG)的情況一樣

需要安裝

pip install langchain-chroma

檢索器和模型結(jié)合

image-20250331110054964

Tavily 檢索工具

LangChain 構(gòu)建代理

語(yǔ)言模型本身無(wú)法執(zhí)行動(dòng)作,它們只能輸出文本。代理是使用大型語(yǔ)語(yǔ)言模型(LLM)作為推理引擎來(lái)確定要執(zhí)行的操作以及這些操作的輸入應(yīng)該是什么。然后,這些操作的結(jié)果可以反饋到代理中,代理將決定是否需要更多的操作,或者是否可以結(jié)束。

pip install langgraph 用來(lái)創(chuàng)建代理的API
  • 定義工具

      1. 無(wú)代理場(chǎng)景
    
              ![](https://upload-images.jianshu.io/upload_images/12905269-0dc8411725d143c9.png)
    

<img src="https://upload-images.jianshu.io/upload_images/12905269-27c858c59b29e088.png" style="zoom: 90%;" />

  1. 有代理場(chǎng)景
    • Travily 作為代理使用
  • 創(chuàng)建代理

          ![](https://upload-images.jianshu.io/upload_images/12905269-8d7e0471afc9da77.png)
    

Agent代理使用

LangChaing構(gòu)建RAG 的對(duì)話應(yīng)用

  1. 加載
  1. 分割

注: 檢索器 也需要引入上下文 理解

LangChain 讀取數(shù)據(jù)庫(kù)

采用鏈模式

采用代理模式

整合數(shù)據(jù)庫(kù)

LangChain 檢索視頻字幕

sqlite: 小型數(shù)據(jù)庫(kù), 實(shí)際存儲(chǔ)的是元文件, 實(shí)際數(shù)據(jù)存儲(chǔ)在文件目錄里

根據(jù)檢索條件進(jìn)行檢索

提取結(jié)構(gòu)化數(shù)據(jù)

自動(dòng)生成數(shù)據(jù)

langChain文本分類

langChain 自動(dòng)摘要

填充Stuff :

注:只能處理 token限制范圍內(nèi)的 ,小文本

映射-歸約Map-reduce: 【分而治之】 思想

注:超出文本數(shù)量, 切割 → 進(jìn)行匯總 ;適合大文本

細(xì)化refine:

詳解 TransFormer

TransFormer 之位置編碼

注 : 自注意力機(jī)制 → 特征提取 ( 提取到有用的句子)

  • Scale → 縮小規(guī)模
  • Mask →掩碼
  • SoftMax → 歸一概率 0~1

多頭注意力機(jī)制:

  • 位置編碼

    RNN 網(wǎng)絡(luò): 不需要位置編碼 ,為何transform 需要

    RNN: 向后傳 → 自帶前后順序 → 并行機(jī)制

    transform: 不考慮順序,并行處理 ,需要位置編碼

    embedding : i 詞向量長(zhǎng)度、2i偶數(shù)位、 sin角度 , Dmodel 超參數(shù)

Decoder

全部傳遞 → Mssk Inference(推理)

輸出層

  decode →      Linear + Softmax     

Bert

注:預(yù)訓(xùn)練 雙向深度 →

本文由mdnice多平臺(tái)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,505評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,017評(píng)論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,219評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,438評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,918評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容