人工智能應用通識教程 課件 LangChain_第1頁
人工智能應用通識教程 課件 LangChain_第2頁
人工智能應用通識教程 課件 LangChain_第3頁
人工智能應用通識教程 課件 LangChain_第4頁
人工智能應用通識教程 課件 LangChain_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

LangChain核心模塊(Model/Memory/Chain)【課程目標】1、學習langchain的Model、Chain、Memory三大模塊2、基于三大模塊的功能完成客服助手的開發【課程重難點】1、JsonOutputParser的使用2、定義PydanticBaseModel的使用3、RunnableWithMessageHistory的使用思考:當我們直接調用大模型API時,會遇到哪些問題?無上下文記憶?每次對話都是“一次性”的,模型無法關聯并記住上一輪的對話內容。?例如:問完“什么是人工智能?”,再問“它有什么應用?”,模型可能無法理解“它”的指代對象。調用方式零散?文本生成、對話管理、工具調用等功能,都需要編寫不同的API調用代碼,缺乏統一的框架。?業務邏輯分散,代碼重復冗余,不僅開發效率低,后期也難以維護和擴展。復雜業務難以構建?如何讓模型先聯網搜索最新資料,再根據資料撰寫報告??如何在多輪對話中精準控制模型的角色人設?原生API接口功能單一,很難直接實現這些復雜的業務邏輯流程。什么是LangChainLangChain正是為了解決這些痛點而生的主流大模型應用開發框架。它通過標準化的模塊化設計,像“膠水”一樣將各種能力粘合起來,是當前開發RAG(檢索增強生成)、智能Agent、對話機器人的核心工具。統一接口屏蔽不同大模型廠商的API差異,開發適配更簡單。模塊化組件提供模型、記憶、提示詞、工具等可復用的基礎組件。LangChain讓大模型應用開發變得更簡單、更高效、更強大三大核心模塊為了高效學習,我們首先要建立一個清晰的整體認知:Chain為載體、Model為算力、Memory為上下文。ChatModel·模型層基礎算力|底層基石??定位:應用的“發動機”和“大腦”,提供核心計算能力。?作用:統一各大廠商模型的調用接口,負責處理復雜邏輯推理與文本生成任務。Memory·記憶層上下文支撐|中層連接??定位:應用的“短期記憶”或“對話日記本”,解決模型遺忘問題。??作用:管理和存儲多輪對話歷史,為模型提供必要的上下文信息,確保對話的連貫性。Chain·鏈路層業務核心|頂層應用??定位:應用的“業務骨架”或“工作流流水線”,連接一切組件。??作用:串聯提示詞、模型、記憶等各個獨立組件,將其封裝為一個可執行的業務邏輯單元。核心依賴關系:Chain主動調用ChatModel并集成Memory,共同構建完整的智能應用閉環ChatModel模塊什么是ChatModelChatModel是LangChain對所有大模型能力的統一抽象封裝層,旨在解決不同模型平臺之間的碎片化問題。屏蔽底層差異無需為OpenAI、Google、阿里等不同廠商編寫特定適配代碼,統一封裝各類模型細節,降低適配成本。提供標準化接口極大提升開發效率與靈活性,支持在不同模型間一鍵切換,快速進行效果對比與選型,避免供應商鎖定。簡單來說:ChatModel模塊讓你可以“一招鮮,吃遍天”,用統一的方式調用全世界的大模型。ChatModel模塊的特點與傳統的LLM(輸入輸出均為純文本)不同,ChatModel的輸入和輸出都是結構化的消息(Message)。這種結構化方式更符合人類對話的模式,能夠有效保留上下文語境,實現自然流暢的多輪交互。輸入(Input)?SystemMessage:設定AI角色、性格與行為準則,定義“人設”。?HumanMessage:代表用戶發起的提問或指令。?AIMessage:模型歷史回復,維持多輪對話的上下文。輸出(Output)通常返回一個AIMessage對象,其中包含模型基于輸入上下文生成的具體回復內容,格式規范,易于解析和處理。ChatOpenAI:ChatModel接口的具體實現核心定位:接口的具體實現ChatOpenAI是LangChain中ChatModel抽象接口的一個關鍵具體實現。它負責將上層統一的方法調用(如invoke,stream)轉化為對底層特定模型API(如OpenAIAPI)的實際HTTP請求。核心方法:與模型交互?invoke(input,config=None):最常用方法,發送請求并等待完整結果,config為字典類型?stream(input,config=None):獲取流式輸出,逐塊接收響應,適合實時聊天。方法參數詳解?包含模型名稱、模型請求地址以及請求鑒權所需的api_key等請求大模型服務所需要的必要信息。model核心參數llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0.7,max_tokens=1024,top_p=0.9,frequency_penalty=0.1,presence_penalty=0.0,api_key="你的APIKey",base_url="模型地址")參數取值作用說明model根據模型名稱確認指定使用的OpenAI模型temperature0-1控制輸出隨機性:值越高越創意發散,值越低越精準確定max_tokens根據模型信息自行設定限制單次響應的最大token長度,控制生成內容篇幅top_p0.9核采樣:只從概率最高的前90%詞匯中選擇,平衡多樣性與準確性frequency_penalty0.1降低重復詞匯/句子的概率,輕微減少內容冗余presence_penalty0不強制引入新話題,保持回答聚焦api_key密鑰字符串OpenAI官方身份憑證,用于接口調用鑒權base_urlAPI地址模型服務請求的接口基礎地址,默認官方地址ChatModel基礎使用#1.導入必要的類與消息對象fromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,SystemMessage#2.初始化模型實例并配置參數llm=ChatOpenAI(model="模型名",api_key="你的api_key",base_url="模型地址")#2.直接提問response=llm.invoke("請用一句話介紹LangChain是什么")#3.輸出結果print(response.content)代碼核心邏輯拆解01/模塊導入:引入`ChatOpenAI`模型類和構建對話所需的`SystemMessage`與`HumanMessage`消息對象。02/實例化:創建模型實例,通過參數指定底層大模型類型與生成隨機性(temperature)。03/模型調用:使用`invoke()`方法將消息列表傳入模型,觸發計算并獲取回復。054/結果處理:從返回的響應對象中提取`.content`屬性,即可得到模型生成的文本內容。拓展:ChatModel流式輸出演示#使用stream()方法進行流式調用

forchunkinllm.stream("介紹一下大模型嵌入技術的應用場景"):#end=""確保不換行,flush=True確保立即輸出print(chunk.content,end="",flush=True)代碼核心解讀?將原有的invoke()方法替換為stream()方法即可開啟流式生成。

?stream()返回一個可迭代對象,需通過for循環逐塊獲取生成內容。

?打印時設置end=""和flush=True實現不間斷的實時輸出。交互體驗升級實現類似“人類打字”的動態實時輸出效果。

用戶無需等待模型完整生成后才能看到內容,而是隨著模型的思考過程逐字閱讀,大幅減少了等待焦慮,顯著提升交互體驗。課堂練習基于上一頁“ChatModel基礎使用”的代碼,填寫自己的api_key、模型名以及模型請求接口后運行并打印模型請求,并進行改造,完成prompt模板的使用?(10分鐘)其中系統提示詞要求如下:你是一個專業的客服分析系統。你的任務是在對話上下文中提取關鍵信息并生成工單。重要規則:1.從對話歷史中提取客戶信息2.判斷問題類型和緊急程度3.給出置信度評分chain模塊傳統調用大模型請求實現大家是否還記得我們之前使用langchain請求大模型的方式我們需要手動的調用格式化prompt、請求大模型、解析大模型響應各環節編排任務,有沒有一種方式能夠像coze搭建工作流一樣編排任務呢?更簡潔的編排方式——Chain`Chain`是LangChain的業務編排核心,本質上是一個將組件連接起來、實現業務邏輯的可復用的工作流流水線。形象比喻如果說`Model`是工人,`Prompt`是圖紙,`Memory`是記錄本...那么`Chain`就是把這些要素組織起來,按照特定流程完成復雜任務的自動化“智能生產線”。核心作用?串聯零散組件(Prompt,Model,Tools等)

?將單一的模型能力,封裝為可落地的、解決實際問題的復雜業務邏輯LCEL語法(重點)LCEL(LangChainExpressionLanguage)作為鏈式語法。它取代了傳統的`LLMChain`等類,是目前企業級開發的主流標準。LCEL基本語法LCEL(LangChainExpressionLanguage):一種聲明式編排語言,利用Python管道符`|`無縫串聯不同的AI組件。??核心思想:代碼即流程圖

數據像水流一樣從左向右流經各個組件,邏輯直觀,將復雜工作流轉化為簡單的線性結構。提示詞模板(Prompt)|大語言模型(LLM)|輸出解析器(Parser)1.提示詞模板(Prompt)負責接收用戶輸入并格式化指令。

??輸入:含變量的字典

??輸出:格式化的`ChatMessage`對象列表2.大語言模型(LLM)核心計算單元,基于指令生成文本內容。

??輸入:消息列表(ChatMessage)

??輸出:模型生成結果(`AIMessage`)3.輸出解析器(Parser)將模型原始輸出轉換為易處理的數據格式。

??輸入:原始模型回復(AIMessage)

??輸出:干凈的字符串、JSON或自定義類?優勢總結:組件完全解耦,支持獨立測試與靈活替換,極大提升代碼的可維護性與擴展性。LCEL基本語法的數據流轉標準結構:提示詞模板|大語言模型|輸出解析器定義的不只是業務流程,更是數據流轉的方向和節點LCEL鏈式語法使用#1.初始化模型llm=ChatOpenAI(model="gpt-3.5-turbo",api_key="你的API_KEY",)#3.定義提示詞模板(支持system/user結構化消息)prompt=ChatPromptTemplate.from_messages([("system","你是一個專業的客服分析系統............"),("user","{input}")])#4.定義輸出解析器parser=StrOutputParser()#5.鏈式組裝(LangChain標準LCEL寫法)chain=prompt|llm|parser#6.執行調用,需注意以鏈式語法創建時向大模型發送請求的不再是llm對象而是我們定義的chain對象response=chain.invoke({"input":"什么是LangChain鏈式調用?"})print(response)這里出現了一個新的概念:解析器,它是用來做什么的呢?核心:結果解析器將大模型返回的原始文本,轉化為代碼可直接利用的結構化數據,是連接LLM與應用邏輯的關鍵橋梁。它解決了非結構化自然語言到工程化可用數據的轉換難題,讓AI的輸出不再是“一次性文本”,而是可被程序邏輯復用的精準信息。StrOutputParser|極簡文本輸出直接將模型消息對象轉為純字符串,是最基礎也最常用的解析器。適用于聊天對話、創意文本生成、簡單問答等僅需原生文本內容的場景,無需復雜數據處理。JsonOutputParser|字典結構化將JSON格式的字符串解析為Python字典(dict)。適用于結構化信息抽取、API請求參數提取、工具函數調用后的結果標準化,讓數據可被鍵值對快速索引與使用。解析器是LLM應用的「數字翻譯官」。它將人類可讀的自然語言,精準轉化為機器可執行的程序語言。在實際開發中,解析器的選型直接決定了應用的穩定性與開發效率。選型心法:從簡入繁,按需進階

簡單文本用Str,數據結構用JsonStrOutputParser解析器核心作用:文本歸一化作為LangChain中最基礎的解析器,它能直接剝離模型返回結果中的元數據與格式封裝,將消息對象轉換為純凈的字符串類型。這一過程剔除了所有冗余信息,讓開發者可以直接獲取到可閱讀、可直接處理的原始文本內容。fromlangchain_core.output_parsersimportStrOutputParserparser=StrOutputParser()#初始化解析器chain=prompt|llm|parser#構建調用鏈res=chain.invoke({"input":"你好"})#執行調用適用場景:輕量文本交互適用于聊天機器人對話、通用文案生成、簡單問答系統等場景。當業務邏輯不需要復雜的JSON結構或列表數據,僅需處理純文本內容時,使用該解析器能以最小的性能開銷完成數據轉換,是構建快速原型和輕量級應用的首選方案。關鍵價值:極簡與通用無需任何配置即可開箱即用,極大降低了開發門檻。它兼容幾乎所有主流大模型的基礎輸出格式,不會引入額外的依賴項。在構建快速迭代的應用時,這種“所見即所得”的解析方式能讓開發人員將精力聚焦于業務邏輯本身,而非數據格式的轉換處理。JsonOutputParser解析器【重點】核心作用:JSON到Dict的無縫轉換當我們要求大模型的回復內容輸出JSON格式時,解析器自動將大模型返回的JSON格式字符串解析為Python原生字典對象。無需手動處理字符串切割、格式校驗與異常捕獲,直接通過鍵名即可訪問目標數據,讓結構化數據的提取與業務邏輯對接變得簡潔、高效且不易出錯。結構化數據提取針對用戶評價、新聞報道等非結構化文本,精準提取關鍵信息并轉化為可直接計算的字典格式,替代傳統的正則表達式匹配,大幅降低開發成本與維護難度。智能信息抽取在復雜的多字段信息提取任務中,自動將模型輸出的分散文本規整為結構化對象。無論是提取商品屬性還是簡歷信息,都能確保數據的一致性與可訪問性。工具調用結果處理作為Agent智能體的關鍵組件,快速解析大模型工具調用(FunctionCall)返回的JSON響應。將參數與執行結果直接映射為程序變量,無縫銜接后續業務邏輯的自動化執行。JsonOutputParser第一步:定義PydanticBaseModel子類PydanticBaseModel是實現結構化輸出的核心基石。作為一款強大的Python庫,它不僅用于數據解析與驗證,更在大模型應用中充當了“翻譯官”的角色——將大模型生成的自由文本,轉化為程序可直接使用的、強類型的結構化數據對象。1、自定義class并繼承BaseModel2、自定義類型的字段并用Filed進行修飾3、使用Filed中的description屬性進行類字段描述注:pydantic語法中類字段的定義與python略有不同:name:類型其中name為字段名,類型為字段數據類型。代碼示例:定義Ticket模型classTicket(BaseModel):summary:str=Field(description="問題摘要")suggested_solution:str=Field(description="建議解決方案")confidence_score:float=Field(description="置信度(0-1)",ge=0,le=1)安裝依賴庫使用pip命令安裝LangChain核心庫:

pipinstallpydanticJsonOutputParser第二步:實例化解析器直接使用JsonOutParser類進行實例化,在實例化過程中并為pydantic_object入參賦值,賦值內容為第一步定義的BaseModel子類JsonOutputParser第三步:翻譯BaseModel1、在prompt定義時預留輸出格式要求占位符:{format_instructions}2、使用partial()方法進行輸出格式的填充3、使用get_format_instruction()翻譯BaseModel并當作partial()函數的入參注意:get_format_instruction函數中入參變量名要與prompt中占位符的名稱一致JsonOutputParser第四步:組裝調用鏈并打印PydanticField深度解析:靈魂所在Field函數是Pydantic模型的“靈魂”,它讓我們能為字段注入豐富的元數據與驗證規則。這些信息不僅是代碼層面的數據校驗準則,更是JsonOutputParser與大模型溝通的語言,幫助生成更精準、更符合業務預期的結構化輸出指令。核心關鍵:description——給LLM的“說明書”

這是Field最核心的屬性,直接定義了字段的語義與內容標準。它相當于開發者寫給大模型的“需求文檔”,清晰、具體的描述能有效避免模型生成“格式合規但內容偏離”的無效數據,是確保輸出質量的第一道防線。??描述的顆粒度決定輸出質量:setup:str=Field(description="笑話的鋪墊部分,用于引出笑點的問題或情景")進階:加入場景與邏輯特征(如“雙關語”、“預期違背”),讓LLM理解內容背后的創作意圖,而非僅停留在字面定義。核心洞察:細節即指令大模型無法“猜”出你的業務細節。一個優秀的description應當包含:字段的業務含義、內容的格式要求、典型的場景案例以及內容的邊界條件。描述越具體,模型的輸出就越精準,這也是實現“一次定義,多次復用”高效開發的核心策略。Field屬性:default&default_factorydefault:靜態常量賦值核心作用:為字段直接綁定一個固定不變的默認值。在類定義階段即完成初始化,所有實例共享該初始值(對于不可變類型安全)。適用場景:當默認值是確定的、不會變化的常量時使用,例如用戶的默認成年年齡、接口的默認分頁大小等靜態配置。classUserProfile(BaseModel):name:str#所有新用戶默認年齡設為18age:int=Field(default=18)default_factory:動態函數生成核心作用:傳入一個可調用對象(如函數)。每次創建新實例時才調用該函數生成值,有效避免可變默認參數帶來的副作用。適用場景:生成唯一ID、當前時間戳等動態值;或初始化空列表、空字典等可變對象,是處理動態默認值的最佳實踐。classOrder(BaseModel):#每次創建訂單生成新的唯一ID和時間id:str=Field(default_factory=lambda:uuid4().hex)items:list=Field(default_factory=list)Field屬性:數值與字符串約束數值約束(int/float)針對整數和浮點數類型,通過邊界值與倍數規則精準限定數值范圍,是處理價格、數量、評分等業務數據的基礎校驗手段。gt/lt大于/小于,設定數值的嚴格排他邊界,如價格必須大于0。ge/le大于等于/小于等于,包含臨界值,如庫存數量下限為1。classProduct(BaseModel):

price:float=Field(gt=0,description="價格必須大于0")

quantity:int=Field(ge=1,le=100,description="數量1-100")字符串約束(str)針對文本內容進行結構化校驗,是確保用戶名、郵箱、地址等關鍵信息合規的核心手段,支持靈活的格式定義。min_length設定字符最小長度,防止無效的過短輸入。max_length限制字符最大長度,控制存儲與展示成本。pattern正則表達式匹配,校驗復雜格式。classUser(BaseModel):

username:str=Field(min_length=3,max_length=20)

課堂練習基于上一個課堂練習,請自行設計BaseModel子類,并改造prompt,填充輸出格式信息,完成基JsonOutputParser的大模型輸出內容解析要求:1、需使用Filed描述子類字段

2、打印解析后的JSON。時間:15分鐘Memory(記憶)模塊大家回想一下,第五次課程時我們對歷史消息處理的步驟是什么呢?chathistory=[]resp=stream_chat_response(llm=llm,prompt=prompt,system_prompt=system_prompt,user_question=user_input,chat_history=chat_history)#更新歷史chat_history.append(HumanMessage(content=user_input))chat_history.append(AIMessage(content=response))關鍵點:需要手動維護歷史信息定義一個空列表封裝用戶問題與系統回復將問題與回復按順序存入列表處理大模型響應核心區別解析:from_template()vsfrom_messages()langchain為我們提供了運行時添加歷史的功能(Memory:上下文管理),核心知識點為:InMemoryChatMessageHistory+RunnableWithMessageHistoryInMemoryChatMessageHistory-對話記憶的基石核心概念:單會話的“記憶容器”LangChain中管理對話上下文的基礎類,本質是一個按時間排序的消息數組。它僅負責存儲和管理單個用戶與AI的交互記錄,不直接參與大模型推理,是實現短期記憶、維持對話連續性的底層核心組件。add_user_message()向歷史中追加用戶發起的消息,明確標記消息來源為人類用戶,構建對話的“提問端”。add_ai_message()記錄AI模型生成的回復內容,形成對話的“響應端”,讓交互過程形成完整的閉環。clear()安全地清空當前會話的所有歷史數據,釋放內存資源,常用于開啟全新對話或重置上下文。messages屬性返回包含所有歷史消息的完整列表,支持開發者直接讀取、遍歷或對原始對話數據進行二次加工。常用方法add_message屬性通過HumanMessage、AIMessage等message對象添加InMemoryChatMessageHistory基本使用關鍵API:RunnableWithMessageHistory參數核心參數與配置易錯點解析實現上下文對話的基礎,重點關注input_messages_key/history_messages_key與Prompt模板變量名的精確對應。runnable[必需]你想要賦予“記憶能力”的原始基礎鏈(Runnable),是整個邏輯的執行主體。get_session_history[必需]一個工廠函數,接收session_id,返回對應會話的BaseChatMessageHistory實例,負責歷史數據存取。input_messages_key[必需]調用invoke方法時,入參字典中代表“用戶最新提問”的鍵名。history_messages_key[必需]Prompt模板中用于“注入歷史對話記錄”的占位符變量名。這是歷史與當前會話結合的關鍵。output_messages_key[可選]若需在最終的輸出中包含完整的對話消息列表(而非僅文本),可指定此鍵名來接收。核心避坑指南:確保input_messages_key/history_messages_key與Prompt模板中定義的變量名100%一致,包括大小寫。RunnableWithMessageHistory使用

第一步:定義存儲容器新增session_history工廠函數注意:1、這部分代碼為成熟解決方案使用時基本一致,無需修改2、session_id為會話id,大家可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論