LangChain 筆記

Langchain 筆記

[TOC]

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

LangChain 是什么?

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

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

  • 具有上下文感知能力:將語言模型連接到上下文來源(提示指令,少量的示例,需要回應(yīng)的內(nèi)容等)
  • 具有推理能力:依賴語言模型進(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è)開發(fā)者平臺(tái),讓你可以調(diào)試、測(cè)試、評(píng)估和監(jiān)控基于任何 LLM 框架構(gòu)建的鏈,并且與 LangChain 無縫集成

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

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

為什么要用LangChain ?

  1. 數(shù)據(jù)連接: 允許將大型語言模型鏈接到自己的數(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. 組件:用于處理語言模型的可組合工具和集成。無論你是否使用 LangChain 框架的其余部分,組件都是模塊化的,易于使用
  2. 現(xiàn)成的鏈:用于完成高級(jí)任務(wù)的組件的內(nèi)置組合

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

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

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

核心

開始使用

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

LangChain 開發(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)容翻譯為英語 < 故宮、 天壇 都有著各自不錯(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 這種語法并不是Python內(nèi)置的語法,而是特定庫(kù)(如langchain)中定義的鏈?zhǔn)讲僮鞣?。它通常用于將多個(gè)操作或組件連接在一起,形成一個(gè)處理鏈。在這個(gè)例子中,modelparser 是兩個(gè)組件,| 操作符將它們連接起來,形成一個(gè)處理鏈。

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

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

這種鏈?zhǔn)讲僮鞣氖褂梅绞筋愃朴诠艿溃╬ipe)操作,常見于流式處理或任務(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": "韓語", "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": "韓語", "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ù)和其他來源檢索數(shù)據(jù),以便與LLM(大型語言言模型)工作流程集成。它們對(duì)于應(yīng)用程序來說非常重要,這些應(yīng)用程序需要獲取數(shù)據(jù)以作為模型推理的一部分進(jìn)行推理,就像檢索增強(qiáng)生成(RAG)的情況一樣

需要安裝

pip install langchain-chroma

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

image-20250331110054964

Tavily 檢索工具

LangChain 構(gòu)建代理

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

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

      1. 無代理場(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容