【LangChain入門 3 Prompts組件】聊天提示詞模板 ChatPromptTemplate

文章目錄

  • 一、 聊天信息提示詞模板
    • 1.1 使用關鍵字
    • 1.2 使用SystemMessage, HumanMessage, AIMessage來定義消息
    • 1.3 使用MessagesPlaceholder 在特定未知添加消息列表
  • 二、關鍵類介紹
    • 2.1 ChatPromptTemplate 類
      • 2.1.1 from_messages()
      • 2.1.2 format_messages()
      • 2.1.3 format_prompt()
    • 2.2 SystemMessage, HumanMessage,AIMessage類

一、 聊天信息提示詞模板

聊天信息提示詞模板(char prompt template)

聊天模型以聊天信息作為輸入,這個聊天消息列表的內容也可以通過提示詞模板進行管理。
這些聊天消息與原始字符不同,因為每個消息都與“角色role”關聯。

列如,在OpenAI的Chat Completion API中,OpenAI的聊天模板,給不同的聊天信息定義了三種角色類型,分別是助手(Assisant)、人類(human)、或系統(System)角色:

  • 助手(Assisant)消息指當前消息是AI回答的內容
  • 人類(user)消息指的是你發給AI的內容
  • 系統(system)消息通常是用來給AI身份進行描述

1.1 使用關鍵字

以下是創建聊天信息模板的例子
這個例子是通過文本描述來定義系統、助手等,關鍵字必須
Use one of 'human', 'user', 'ai', 'assistant', or 'system'

from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOllama(model="deepseek-r1:7b", 
)
chat_prompt = ChatPromptTemplate.from_messages([("system", "你是西天取經的人工智能助手,你的名字叫齊天智能"),("human",  "你好"),("ai", "您好,我是西天取經的人工智能助手,請問有什么可以幫助您?"),("human", "{user_input}")
])message = chat_prompt.format(user_input="你叫什么")
response = llm.invoke(message)
print(llm.invoke(message).content)

1.2 使用SystemMessage, HumanMessage, AIMessage來定義消息

實際開發中,這個方式多一些,比較清晰

from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import HumanMessagePromptTemplate
chat_template = ChatPromptTemplate.from_messages([SystemMessage(content=("你是西天取經的人工智能助手,你的名字叫齊天智能")),HumanMessage(content=("你好")),AIMessage(content=("您好,我是西天取經的人工智能助手,請問有什么可以幫助您?")),HumanMessagePromptTemplate.from_template("{text}"),]
)message = chat_template.format_messages(text="你叫什么")
print(message)
print("----------------------")
print(llm.invoke(message).content)

1.3 使用MessagesPlaceholder 在特定未知添加消息列表

這個提示詞模板負責在特定位置添加消息列表。
在前面兩段中,我們看到了如何格式化兩條消息,每條消息都是一個字符串,但是我們希望用戶傳入一個消息列表,我們將其插入到特定位置,該怎么辦?
這里可以使用MessagesPlaceholder的方式

如下代碼,這將會生成兩條消息,第一條是系統消息,第二條是我們傳入的HumanMessage。 如果我們傳入了5條消息,那么總共會生成6條消息(系統消息加上傳入的5條消息)、這對于將一系列消息插入到特定位置非常有用。

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import MessagesPlaceholder, MessagesPlaceholder
prompt_template = ChatPromptTemplate.from_messages([SystemMessage(content=("你是西天取經的人工智能助手,你的名字叫齊天智能")),# 你可以傳入一組消息MessagesPlaceholder("msgs"),HumanMessagePromptTemplate.from_template("{text}"),]
)message = prompt_template.invoke({"msgs":[HumanMessage(content="你好"),AIMessage(content="您好,我是西天取經的人工智能助手,請問有什么可以幫助您?")],"text": "你叫什么"})# print("----------------")
print(llm.invoke(message).content )

二、關鍵類介紹

2.1 ChatPromptTemplate 類

LangChain 中用于構建聊天模型提示的類,它允許用戶通過定義一系列消息模板來生成對話內容。
主要用于:創建聊天模型的輸入提示,這些提示由多個消息組成,每個消息都有一個角色(如系統、用戶或 AI)。它支持動態填充變量,能夠根據輸入參數生成具體的聊天消息列表。

2.1.1 from_messages()

從消息列表創建 ChatPromptTemplate 實例

  • 輸入參數為messages: 一個包含消息模板的列表。每個消息模板可以是一個元組(角色,模板字符串),也可以是一個 MessagePromptTemplate 的實例。

2.1.2 format_messages()

根據輸入參數格式化消息模板,生成具體的聊天消息列表。

  • 輸入參數為一個字典,包含模板中需要填充的變量及其值。
  • 返回值:一個包含具體消息的列表,每個消息都是 SystemMessageHumanMessageAIMessage 的實例。

2.1.3 format_prompt()

格式化提示模板,返回一個 PromptValue 對象,可以轉換為字符串或消息列表。
**參數:**一個字典,包含模板中需要填充的變量及其值。

prompt_value = chat_template.format_prompt(name="Bob", user_input="What is your name?")
print(prompt_value.to_messages())

2.2 SystemMessage, HumanMessage,AIMessage類

AIMessage類 為例:
AIMessage 是 LangChain 中的一種消息類型,表示由 AI 模型生成的消息。一般LLM的回答,都是AIMessage

記一下以下幾個參數

  • content:表示消息的內容,通常是字符串形式的文本。
AIMessage(content="Hello, how can I help you today?")
  • role: 指定消息的角色。在 AIMessage 中,role 通常固定為 “assistant”,表示消息是由 AI 助手生成的。
AIMessage(content="Here is the answer.", role="assistant")
  • additional_kwargs:Dict格式,用于存儲額外的關鍵字參數,例如工具調用信息。可以用于擴展消息的功能,例如存儲工具調用信息、元數據等。
AIMessage(content="I need to call the weather API.",additional_kwargs={"tool_calls": [{"type": "weather_api", "args": {"location": "Beijing"}}]}
)

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

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

相關文章

Flutter TextFormField 完全手冊與設計最佳實踐

目錄 1. 引言 2. TextFormField 的基本用法 3. 主要屬性 4. 自定義 TextFormField 樣式 4.1 設置邊框樣式 4.2 設置輸入格式限制 4.3 多行輸入 5. 結論 相關推薦 1. 引言 在 Flutter 中,TextFormField 是 TextField 的擴展版本,專為表單輸入設計…

HC-05與HC-06藍牙配對零基礎教程 以及openmv識別及遠程傳輸項目的概述

這個是上一年的項目,之前弄得不怎么完整,只有一個openmv的,所以openmv自己去我主頁找,這篇主要講藍牙 這個是我在使用openmv連接單片機1然后單片機1與單片機2通過藍牙進行通信 最終實現的效果是:openmv識別到圖形和數…

【Docker系列一】Docker 簡介

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

Vue 入門到實戰 五

第5章 過渡與動畫 目錄 5.1 單元素/組件過渡 5.1.1 過渡class 5.1.2 CSS 過渡 5.1.3 CSS 動畫 5.1.4 同時使用過渡和動畫 5.1.5 JavaScript 鉤子方法 5.2 多元素/組件過渡 5.2.1 多元素過渡 5.2.2 多組件過渡 5.3 列表過渡 5.3.1 列表的普通過渡 5.3.2 列表的平滑…

Apache SeaTunnel腳本升級及參數調優實戰

最近作者針對實時數倉的Apache SeaTunnel同步鏈路,完成了雙引擎架構升級與全鏈路參數深度調優,希望本文能夠給大家有所啟發,歡迎批評指正! Apache SeaTunnel 版本 :2.3.9 Doris版本:2.0.6 MySQL JDBC Conne…

C++ 時間操作:獲取有史以來的天數與文件計數器

C 時間操作:獲取有史以來的天數與文件計數器 在C中,時間操作是一個非常重要的功能,尤其是在需要處理日期、時間戳或定時任務時。本文將介紹如何利用C的時間操作功能,實現以下兩個目標: 獲取從Unix紀元時間&#xff0…

Python Bug修復案例分析:Python 中常見的 IndentationError 錯誤 bug 的修復

在 Python 編程的世界里,代碼的可讀性和規范性至關重要。Python 通過強制使用縮進來表示代碼塊的層次結構,這一獨特的設計理念使得代碼更加清晰易讀。然而,正是這種對縮進的嚴格要求,導致開發者在編寫代碼時,稍有不慎就…

【論文筆記】Transformer

Transformer 2017 年,谷歌團隊提出 Transformer 結構,Transformer 首先應用在自然語言處理領域中的機器翻譯任務上,Transformer 結構完全構建于注意力機制,完全丟棄遞歸和卷積的結構,這使得 Transformer 結構效率更高…

CI/CD(三) 安裝nfs并指定k8s默認storageClass

一、NFS 服務端安裝(主節點 10.60.0.20) 1. 安裝 NFS 服務端 sudo apt update sudo apt install -y nfs-kernel-server 2. 創建共享目錄并配置權限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允許匿名訪問 sudo chmod 777 /dat…

【QA】單件模式在Qt中有哪些應用?

單例設計模式確保一個類僅有一個實例,并提供一個全局訪問點來獲取該實例。在 Qt 框架中,有不少類的設計采用了單例模式,以下為你詳細介紹并給出相應代碼示例。 1. QApplication QApplication 是 Qt GUI 應用程序的核心類,每個 Q…

存儲過程觸發器習題整理1

46、{blank}設有商品表(商品號,商品名,單價)和銷售表(銷售單據號,商品號,銷售時間,銷售數量,銷售單價)。其中,商品號代表一類商品,商品號、單價、銷售數量和銷售單價均為整型。請編寫…

基于ChatGPT、GIS與Python機器學習的地質災害風險評估、易發性分析、信息化建庫及災后重建高級實踐

第一章、ChatGPT、DeepSeek大語言模型提示詞與地質災害基礎及平臺介紹【基礎實踐篇】 1、什么是大模型? 大模型(Large Language Model, LLM)是一種基于深度學習技術的大規模自然語言處理模型。 代表性大模型:GPT-4、BERT、T5、Ch…

單表達式倒計時工具:datetime的極度優雅(智普清言)

一個簡單表達式,也可以優雅自成工具。 筆記模板由python腳本于2025-03-22 20:25:49創建,本篇筆記適合任意喜歡學習的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值:在于輸出思考與經驗,而不僅僅是知識的簡單復述。 Pyth…

最優編碼樹的雙子性

現在看一些書,不太愿意在書上面做一些標記,也沒啥特殊的原因。。哈哈。 樹的定義 無環連通圖,極小連通圖,極大無環圖。 度 某個節點,描述它的度,一般默認是出度,分叉的邊的條數。或者說孩子…

MiB和MB

本文來自騰訊元寶 MiB 和 ?MB 有區別,盡管它們都用于表示數據存儲的單位,但它們的計算方式不同,分別基于不同的進制系統。 1. ?MiB(Mebibyte)? ?MiB 是基于二進制的單位,使用1024作為基數。1 MiB 102…

Labview和C#調用KNX API 相關東西

敘述:完全沒有聽說過KNX這個協議...................我這次項目中也是簡單的用了一下沒有過多的去研究 C#調用示例工程鏈接(labview調用示例在 DEBUG文件夾里面) 通過網盤分享的文件:KNX調用示例.zip 鏈接: https://pan.baidu.com/s/1NQUEYM11HID0M4ksetrTyg?pwd…

損失函數理解(二)——交叉熵損失

損失函數的目的是為了定量描述不同模型(例如神經網絡模型和人腦模型)的差異。 交叉熵,顧名思義,與熵有關,先把模型換成熵這么一個數值,然后用這個數值比較不同模型之間的差異。 為什么要做這一步轉換&…

Kubernetes的Replica Set和ReplicaController有什么區別

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理應用程序副本的兩種資源,它們有類似的功能,但 ReplicaSet 是 ReplicationController 的增強版本。 以下是它們的主要區別: 1. 功能的演進 ReplicationController 是 Kubernete…

信息系統運行管理員教程3--信息系統設施運維

第3章 信息系統設施運維 信息系統設施是支撐信息系統業務活動的信息系統軟硬件資產及環境。 第1節 信息系統設施運維的管理體系 信息系統設施運維的范圍包含信息系統涉及的所有設備及環境,主要包括基礎環境、硬件設備、網絡設備、基礎軟件等。 信息系統設施運維…

如何通過Python實現自動化任務:從入門到實踐

在當今快節奏的數字化時代,自動化技術正逐漸成為提高工作效率的利器。無論是處理重復性任務,還是管理復雜的工作流程,自動化都能為我們節省大量時間和精力。本文將以Python為例,帶你從零開始學習如何實現自動化任務,并通過一個實際案例展示其強大功能。 一、為什么選擇Pyt…