【LangChain】P1 LangChain 應用程序的核心構建模塊 LLMChain 以及其三大部分

LangChain 的核心構建模塊 LLMChain

  • LangChain 應用程序的核心構建模塊
    • 語言模型 - LLMs
    • 提示模板 - Prompt templates
    • 輸出解析器 - Output Parsers
  • LLMChain 組合

在這里插入圖片描述

LangChain 應用程序的核心構建模塊

LangChain 應用程序的核心構建模塊 LLMChain 由三部分組成:

  • 語言模型 - LLMs: 語言模型是這里的核心推理引擎。為了使用 LangChain,您需要了解不同類型的語言模型以及如何使用它們。
  • 提示模板 - Prompt templates: 它為語言模型提供指令。它控制著語言模型的輸出,因此了解如何構建提示和不同的提示策略至關重要。
  • 輸出解析器 - Output Parsers: 它們將 LLM 的原始響應翻譯成更易于使用的格式,從而方便下游使用輸出。

本部分我將單獨介紹這三個組件,然后介紹將所有組件結合在一起的 LLMChain:


語言模型 - LLMs

在 LangChain 中,存在兩種語言模型:

  • LLMs: 將字符串作為輸入并返回字符串的語言模型;
    LLMs 的輸入/輸出是簡單易懂的字符串。
  • ChatModels: 聊天模型,將信息列表作為輸入并返回信息的語言模型;
    ChatModels 的輸入是一個 ChatMessage 列表,輸出是一個 ChatMessage。ChatMessage 有兩個必備組件:
    • content(內容): 這是信息的內容。
    • role(角色): 這是來自該 ChatMessage 的實體的角色。

LangChain 為這兩種語言模型提供了一個標準接口,該標準接口有兩個方法:

  • predict: 接收一個字符串,返回一個字符串;明顯是 LLMs 的方法。
  • predict_messages: 接收信息列表,返回信息;明顯是 ChatModels 的方法。

LangChain 提供了多個對象,可以輕松區分不同的角色:

  • HumanMessage(人類信息): 來自人類/用戶的 ChatMessage。
  • AIMessage(人工智能助手信息): 來自人工智能/助手的聊天信息。
  • SystemMessage(系統信息): 系統消息來自系統的聊天信息。
  • FunctionMessage(功能消息): 來自函數調用的聊天信息。

初始化 llm 與 chat_model

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAIllm = OpenAI(openai_api_key="xxx")
chat_model = ChatOpenAI(openai_api_key="xxx")
# 如果需要 API Key 可在博文下方留言

使用 predict 方法運行字符串輸入:

text = "What would be a good company name for a company that makes colorful socks?"print(llm.predict(text))
print(chat_model.predict(text))

使用 predict_message 方法運行信息列表輸入:

from langchain.schema import HumanMessagetext = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]print(llm.predict_messages(messages))
print(chat_model.predict_messages(messages))

提示模板 - Prompt templates

  • 提示模板是什么?

    在大語言模型中,開發人員通常不會直接將用戶輸入傳遞給語言模型,而是將用戶輸入添加到一個較大的文本段中,該文本段稱為 “提示模板”(Prompt Template)。

  • 提示模板的目的?

    這樣做的目的是為了為特定任務提供更多的上下文和指導,從而引導語言模型生成更有針對性的輸出。

    這種方法有助于引導語言模型的生成,使其更加專注于特定任務,同時也可以控制生成的文本的風格和內容。通過提供上下文信息,提示模板可以在不同應用場景中引導語言模型的生成,以適應不同的用戶需求。

  • 字符串提示模板案例:

    from langchain.prompts import PromptTemplateprompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")
    prompt.format(product="colorful socks")
    
  • 信息列表提示模板案例:

    from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate,
    )template = "You are a helpful assistant that translates {input_language} to {output_language}."
    system_message_prompt = SystemMessagePromptTemplate.from_template(template)
    human_template = "{text}"
    human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])chat_prompt.format_messages(input_language="English", output_language="French", text="I love programming.")
    

輸出解析器 - Output Parsers

  • 輸出解析器的作用?

    輸出解析器可將 LLM 的原始輸出轉換成下游可使用的格式。

  • 輸出解析器的類型?

    • 將 LLM 中的文本轉換為結構化信息(如 JSON);
    • 將聊天信息轉換為字符串;
    • 將調用返回的除信息外的額外信息(如 OpenAI 函數調用)轉換為字符串。
    • 等;
  • 案例:

    下案例為編寫自己的輸出解析器 – 將逗號分隔的列表轉換為列表:

    from langchain.schema import BaseOutputParserclass CommaSeparatedListOutputParser(BaseOutputParser):"""Parse the output of an LLM call to a comma-separated list."""def parse(self, text: str):"""Parse the output of an LLM call."""return text.strip().split(", ")CommaSeparatedListOutputParser().parse("hi, bye")
    # >> ['hi', 'bye']
    

LLMChain 組合

現在,我們將所有這些組合成一個鏈。
該鏈將接收輸入變量,將其傳遞給提示模板以創建提示,將提示傳遞給 LLM,然后將輸出傳遞給輸出解析器。
這是一種捆綁模塊化邏輯的便捷方法。請看測試案例:

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser# 輸出解析器部分
class CommaSeparatedListOutputParser(BaseOutputParser):"""Parse the output of an LLM call to a comma-separated list."""def parse(self, text: str):"""Parse the output of an LLM call."""return text.strip().split(", ")# 信息列表提示模板案例
template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(llm=ChatOpenAI(),prompt=chat_prompt,output_parser=CommaSeparatedListOutputParser()
)
chain.run("colors")
# >> ['red', 'blue', 'green', 'yellow', 'orange']

上一篇博文:【LangChain】P0 LangChain 是什么與準備工作
下一篇博文:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39777.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦鍵盤打不了字按哪個鍵恢復?最新分享!

“有沒有朋友知道電腦鍵盤為什么會莫名其妙就打不了字?明明用得好好的,突然就打不了字了,真的讓人很迷惑!有什么方法可以解決嗎?” 電腦鍵盤為我們的辦公提供了很大的方便,我們可以利用鍵盤輸入我們需要的文…

安防監控視頻云存儲平臺EasyCVRH.265轉碼功能更新:新增分辨率配置

安防視頻集中存儲EasyCVR視頻監控綜合管理平臺可以根據不同的場景需求,讓平臺在內網、專網、VPN、廣域網、互聯網等各種環境下進行音視頻的采集、接入與多端分發。在視頻能力上,視頻云存儲平臺EasyCVR可實現視頻實時直播、云端錄像、視頻云存儲、視頻存儲…

Python文件操作與輸入輸出:從基礎到高級應用

文章目錄 🍀引言🍀文件操作基礎🍀上下文管理器與文件自動關閉🍀文件的迭代與逐行讀取🍀文件的其他常見操作🍀輸入輸出基礎🍀 文件輸入輸出🍀格式化輸出🍀高級文件操作&am…

【BASH】回顧與知識點梳理(二十七)

【BASH】回顧與知識點梳理 二十七 二十七. 磁盤配額(Quota)27.1 磁盤配額 (Quota) 的應用與實作什么是 QuotaQuota 的一般用途Quota 的使用限制Quota 的規范設定項目 27.2 一個 XFS 文件系統的 Quota 實作范例實作 Quota 流程:設定賬號實作 Quota 流程-1&#xff1a…

jenkins gitlab 安裝

目錄 一 準備安裝環境 二 安裝gitlab軟件 三 配置gitlab 四 重新加載配置啟動gitlab 五 修改密碼 五 創建用戶組 一 準備安裝環境 sudo yum update sudo yum install -y curl policycoreutils-python openssh-server安裝 Postfix 郵件服務器,以便 Git…

qt事件系統源碼-----定時器

qt定時器的使用一般有以下幾種方式: 1、直接使用QTimer對象,綁定定時器的timeout信號; 2、使用QTimer的靜態方法singleshot方法,產生一個一次性的定時事件 3、在QObject子類中,調用startTimer方法,產生定…

矢量繪圖UI設計軟件Sketch mac中文版軟件說明

Sketch mac是一款適用于 UI/UX 設計、網頁設計、圖標制作等領域的矢量繪圖軟件。 Sketch mac軟件特點 1. 簡單易用的界面設計:Sketch 的用戶界面簡潔明了,使得用戶可以輕松上手操作,不需要復雜的學習過程。 2. 強大的矢量繪圖功能&#xff1a…

flinksql實時統計程序背壓延遲優化

問題: flinkcdcflinksql做實時讀取sls日志和實時統計業務指標,今天發現程序背壓了,業務延遲了6個小時。解決辦法: 1、資源優化 作業并發大時:在作業的高級配置的資源配置中,增加JobManager的資源&#xf…

香港服務器三網直連內地線路什么意思?好用嗎?

?  三網直連內地是指香港服務器可以直接連接中國內地的電信、聯通和移動三大運營商網絡,避免了中間網絡干線的支持。這樣可以實現直接、快速、穩定的網絡訪問,提高用戶對網絡訪問的效率,減少網絡訪問問題和擁堵的現象。 香港服務器直連內地…

XSS 跨站腳本攻擊

XSS(DOM) XSS 又稱CSS(Cross Site Scripting)或跨站腳本攻擊,攻擊者在網頁中插入由JavaScript編寫的惡意代碼,當用戶瀏覽被嵌入惡意代碼的網頁時,惡意代碼將會在用戶的瀏覽器上執行。 XSS攻擊可分為三種:分別為反射型(Reflected…

線程|線程的使用、四種實現方式

1.線程的實現方式 1.用戶級線程 開銷小,用戶空間就可以創建多個。缺點是:內核無法感知用戶級多個線程的存在,把其當作只有一個線程,所以只會提供一個處理器。 2.內核級線程 相對于用戶級開銷稍微大一點,可以利用多…

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數據以及表情嘴型 Animation 的簡單整理

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數據以及表情嘴型 Animation 的簡單整理 目錄 Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數據以及表情嘴型 Animation 的簡單整理 一、簡單介紹 二、實現原理 三、注意事項 四、實現步驟 五、關鍵代碼 一、簡…

01- vdom 和模板編譯源碼

組件渲染的過程 template --> ast --> render --> vDom --> 真實的Dom --> 頁面 Runtime-Compiler和Runtime-Only的區別 - 簡書 編譯步驟 模板編譯是Vue中比較核心的一部分。關于 Vue 編譯原理這塊的整體邏輯主要分三個部分,也可以說是分三步&am…

《vue3實戰》運用radio單選按鈕或Checkbox復選框實現單選多選的試卷制作

文章目錄 目錄 系列文章目錄 1.《Vue3實戰》使用axios獲取文件數據以及走馬燈Element plus的運用 2.《Vue3實戰》用路由實現跳轉登錄、退出登錄以及路由全局守護 3.《vue3實戰》運用Checkbox復選框實現單選多選的試卷展現(本文) 文章目錄 前言 radio是什…

Java中List排序的4種方法

開發過程中經常會遇到讀取文件內容的情況,需要判斷文件是否為文本文件,及文件編碼格式,防止無法讀取內容或亂碼出現情況。 我們可以通過 java.io.File 類包找出文件是目錄還是常規文件。java.io.File 類包含兩種方法,它們分別是&…

TCP服務器—實現數據通信

目錄 前言 1.接口介紹 2.編寫服務器 3.編寫客戶端 4.編譯鏈接 5.測試 6.總結 前言 今天我們要介紹的是使用TCP協議實現數據通信,相比于之前寫的UDP服務器實現數據信,在主體邏輯上并沒有差別。客戶端向服務器發送信息,服務器接受信息并回…

JavaEE初階:多線程 - Thread 類的基本用法

上次我們了解了多線程的五種創建方法,今天來學習Thread的基本用法。 目錄 run和start Thread常見的構造方法 Thread的幾個常見屬性 后臺線程 是否存活 線程終止 1.使用標志位 2.使用Thread自帶的標志 等待線程 run和start 首先需要理解Thread的run和star…

JavaWeb-Listener監聽器

目錄 監聽器Listener 1.功能 2.監聽器分類 3.監聽器的配置 4.ServletContext監聽 5.HttpSession監聽 6.ServletRequest監聽 監聽器Listener 1.功能 用于監聽域對象ServletContext、HttpSession和ServletRequest的創建,與銷毀事件監聽一個對象的事件&#x…

Python源碼05:使用Pyecharts畫詞云圖圖

**Pyecharts是一個用于生成 Echarts 圖表的 Python 庫。Echarts 是一個基于 JavaScript 的數據可視化庫,提供了豐富的圖表類型和交互功能。**通過 Pyecharts,你可以使用 Python 代碼生成各種類型的 Echarts 圖表,例如折線圖、柱狀圖、餅圖、散…

Glide 的超時控制相關處理

作者:newki 前言 Glide 相信大家都不陌生,各種源碼分析,使用介紹大家應該都是爛熟于心。但是設置 Glide 的超時問題大家遇到過沒有。 我遇到了,并且掉坑里了,情況是這樣的。 調用接口從網絡拉取用戶頭像&#xff0c…