一起學習大模型 - langchain里的 PromptTemplate詳細介紹

系列文章目錄

一起學習大模型 - 大模型的交互工具prompt簡介與運用

一起學習大模型 - langchain里的PromptTemplate詳細介紹

一起學習大模型 - langchain里PromptTemplate錯誤排查總結


文章目錄

  • 系列文章目錄
  • 前言
  • 一、 安裝 LangChain
  • 二、 基本用法
    • 1. 導入庫并定義模板
    • 2. 填充模板
  • 三、 進階用法
    • 1. 使用多個變量
    • 2. 嵌套模板
    • 3. 動態變量
  • 四、 應用模板與大模型交互
  • 五、疑問解答
    • 1. 舉例說明
    • 2. 更詳細的例子
  • 總結


前言

上一篇文章我們講了Prompt的概念和作用(大模型的交互工具 prompt簡介與運用),以及如何在langchain里實現一個PromptTemplate。這篇文章我們詳細介紹下 LangChain Prompt Template 的用法。

一、 安裝 LangChain

首先,確保你已經安裝了 LangChain 庫:

pip install langchain

二、 基本用法

1. 導入庫并定義模板

from langchain.prompts import PromptTemplate# 定義一個簡單的模板
template = "請用簡明的語言介紹一下{topic}。"# 創建 PromptTemplate 對象
prompt_template = PromptTemplate(input_variables=["topic"],  # 模板中使用的變量template=template  # 模板字符串
)

2. 填充模板

# 定義輸入變量
input_variables = {"topic": "人工智能"}# 使用輸入變量填充模板
prompt = prompt_template.format(**input_variables)
print(prompt)  # 輸出: 請用簡明的語言介紹一下人工智能。

三、 進階用法

LangChain 的 PromptTemplate 還支持更多復雜的用法,如嵌套模板和動態變量。

1. 使用多個變量

template = "請用簡明的語言介紹一下{topic},并解釋它的{aspect}。"prompt_template = PromptTemplate(input_variables=["topic", "aspect"],template=template
)input_variables = {"topic": "機器學習", "aspect": "應用"}
prompt = prompt_template.format(**input_variables)
print(prompt)  # 輸出: 請用簡明的語言介紹一下機器學習,并解釋它的應用。

2. 嵌套模板

可以創建嵌套的模板,以便在復雜的情況下重用模板。

base_template = "請用簡明的語言介紹一下{topic}。"
aspect_template = base_template + " 并解釋它的{aspect}。"prompt_template = PromptTemplate(input_variables=["topic", "aspect"],template=aspect_template
)input_variables = {"topic": "深度學習", "aspect": "基本原理"}
prompt = prompt_template.format(**input_variables)
print(prompt)  # 輸出: 請用簡明的語言介紹一下深度學習。并解釋它的基本原理。

3. 動態變量

LangChain 支持動態生成輸入變量。

def generate_topic():return "自然語言處理"template = "請用簡明的語言介紹一下{topic}。"prompt_template = PromptTemplate(input_variables=["topic"],template=template
)# 使用動態生成的變量填充模板
input_variables = {"topic": generate_topic()}
prompt = prompt_template.format(**input_variables)
print(prompt)  # 輸出: 請用簡明的語言介紹一下自然語言處理。

四、 應用模板與大模型交互

以下示例展示如何將創建的 prompt 應用于與 OpenAI 的大模型進行交互:

import openai
from langchain.prompts import PromptTemplate# 定義和創建 PromptTemplate 對象
template = "請用簡明的語言介紹一下{topic}。"
prompt_template = PromptTemplate(input_variables=["topic"],template=template
)# 填充模板
input_variables = {"topic": "人工智能"}
prompt = prompt_template.format(**input_variables)
print("生成的 prompt:", prompt)# 設定 OpenAI API 密鑰
openai.api_key = 'your-api-key'# 調用 OpenAI API 生成內容
response = openai.Completion.create(engine="davinci-codex",  # 或者使用 "gpt-4" 模型prompt=prompt,max_tokens=150  # 設置生成內容的長度
)# 打印模型的響應
print("模型的響應:", response.choices[0].text.strip())

五、疑問解答

有的同學應該會有下面的疑問

想問一下 prompt = prompt_template.format(**input_variables) 這個代碼里的 **
的作用是什么

在 Python 中,** 運算符用于將字典解包(unpack)成關鍵字參數(keyword arguments)。它將字典中的鍵值對傳遞給函數或方法,使每個鍵值對變成單獨的關鍵字參數。

具體到你的代碼 prompt = prompt_template.format(**input_variables),這里的 **input_variables 作用是將 input_variables 字典中的鍵值對解包成 format 方法的關鍵字參數。

1. 舉例說明

假設 input_variables 字典如下:

input_variables = {"topic": "人工智能"}

使用 ** 解包后,相當于調用:

prompt = prompt_template.format(topic="人工智能")

這意味著字典中的鍵 topic 被作為關鍵字參數名,而對應的值 人工智能 被作為關鍵字參數值傳遞給 format 方法。

2. 更詳細的例子

考慮一個更復雜的示例,包含多個鍵值對:

input_variables = {"topic": "機器學習", "aspect": "應用"}

使用 ** 解包后,相當于調用:

prompt = prompt_template.format(topic="機器學習", aspect="應用")

這樣,format 方法就能識別并替換模板字符串中的 {topic}{aspect} 占位符。

通過這種方式,** 運算符使代碼更簡潔和靈活,能夠方便地將字典中的值傳遞給函數或方法。

總結

通過以上示例,我們可以看到 LangChain 的 PromptTemplate 是如何靈活地創建和管理提示模板的。這些模板可以極大地簡化生成復雜提示的過程,并且可以方便地與大型語言模型進行交互。無論是簡單的單變量模板,還是復雜的多變量和嵌套模板,LangChain 都能提供強大的支持。

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

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

相關文章

API接口通道如何設置?

API接口通道如何設置? 如果分站點的AI接口使用openai(站點后臺->系統配置->AI參數配置->AI接口),則需要在超管后臺配置接口通道,其他方式則無需在超管后臺配置接口通道 1、進入超管后臺選擇接口通道&#x…

一鍵批量轉換,高效輕松管理:解鎖不同格式圖片統一處理新體驗,讓圖片管理更高效

在信息爆炸的時代,圖片管理成為了一個不容忽視的問題。我們時常面臨各種格式的圖片文件,不同的格式不僅增加了管理的難度,還可能導致兼容性問題。如何快速高效地管理不同格式的圖片,成為了現代人面臨的一大挑戰。現在,…

網上幫別人開網店賣貨的騙局!

小紅書幫別人開店賣貨的騙局主要涉及到一些不法分子利用小紅書平臺的流量和用戶信任度,通過虛假宣傳、承諾高額利潤等手段,誘騙用戶開店并**所謂的“賺錢機會”。 這些騙局往往以“輕松創業、快速致富”為誘餌,吸引那些對創業充滿熱情但缺乏經…

Redis常用命令——List篇

提到List,我們第一時間想到的就是鏈表。但是在Redis中,List更像是一種雙端隊列,例如C中的deque。它可以快速高效的對頭部和尾部進行插入和刪除操作。本片文章主要對List列表的相關命令進行詳解,希望本篇文章會對你有所幫助。 文章…

MedSegDiff-V2: Diffusion-Based Medical Image Segmentation with Transformer 論文總結

標題:MedSegDiff-V2: Diffusion-Based(基于擴散模型)Medical Image Segmentation(醫學圖像分割)with Transformer 論文(AAAI):https://ojs.aaai.org/index.php/AAAI/article/view/28…

【避坑全攻略】如何讓私人的LLM擁有一個嗓子——ChatTTS

OpenAI 發布 GPT4o 之后,使得越來越多的人都開始幻想屬于自己的AI“伴侶”,這最讓人驚艷的就是他們出色的TTS技術。而在此之前,主流的開源TTS有 XTTS 2 和 Bark。而近日,一個名為 ChatTTS 文本轉語音項目爆火出圈,引來…

Python中的random.choices詳解

1. 什么是random.choices函數? random.choices是Python標準庫中random模塊提供的一個函數,用于從給定的序列中隨機選擇一個值。這個函數可以用于實現隨機抽樣、按照概率進行選擇等功能。 random.choices(population, weightsNone, *, cum_weightsNone,…

.gitignore 文件

一.什么是 .gitignore 文件 在任何當前工作的 Git 倉庫中,每個文件都是這樣的: 追蹤的(tracked)- 這些是 Git 所知道的所有文件或目錄。這些是新添加(用 git add 添加)和提交(用 git commit 提…

汽美汽修店管理系統會員小程序的作用是什么

汽車后市場汽美汽修賽道同樣存在著大量商家,連鎖品牌店或個人小店等,門店扎堆且區域覆蓋面積廣,當然每天車來車往也有不少生意。 隨著線上化程度加深和商家不斷拓展市場的需要,傳統運營模式可能難以滿足現狀,尤其是年…

Element - UI <el-table-column>多選數據提交后禁用已提交的多選框

1. 通過 selection-change"selectionChange" 將已選擇的數據存入selectData數組中 <el-table :data"tableData" class"my-5" selection-change"selectionChange" > //多選框已選擇的數據 const selectData ref([]); const sel…

在線圖片測試用例

開發中經常需要mock圖片&#xff0c;下面是可用于測試的在線圖片URL示例&#xff0c; https://picsum.photos/200/200?random2 https://picsum.photos/200/200?random1 https://picsum.photos/300/200?random2 https://picsum.photos/300/200?random1 說明&#xff1a…

前端環境配置(后端使用前端版,簡易版非專業前端)

聲明本人不是專業做前端的&#xff0c;只是平常開發有時候需要運行前端代碼&#xff0c;記錄一下配置環境。 安裝nvm nvm 即 (node version manager)&#xff0c;好處是方便切換 node.js 版本。 自己網上下載安裝包即可&#xff0c;傻瓜式安裝。 安裝注意事項 要卸載掉現有的 …

HALCON-從入門到入門-圖像格式的互相轉換

1.廢話 上次說到了圖片的讀取和寫入到本地&#xff0c;這次說一下圖片的格式相關。 位圖和矢量圖 photoshop處理出來的圖片肯定叫做圖片&#xff0c;那么coreDraw處理出來的圖片是不是也叫圖片。 之間就有區分&#xff0c;一種叫做位圖&#xff0c;一種叫做矢量圖 位圖和矢…

AI大模型探索之路-實戰篇13: 從對話到報告:打造能記錄和分析的Agent智能數據分析平臺

系列篇章&#x1f4a5; AI大模型探索之路-實戰篇4&#xff1a;深入DB-GPT數據應用開發框架調研 AI大模型探索之路-實戰篇5&#xff1a;探索Open Interpreter開放代碼解釋器調研 AI大模型探索之路-實戰篇6&#xff1a;掌握Function Calling的詳細流程 AI大模型探索之路-實戰篇7…

echarts 圖表不顯示的問題

是這樣的&#xff0c;點擊詳情&#xff0c;再點擊統計&#xff0c;切換的時候就不會顯示echarts圖表&#xff0c;剛開始使用的是next Tick&#xff0c;沒有使用定時器&#xff0c;后來加上了定時器就實現了如下所示&#xff1a; 代碼是如下 const chartContainer ref(null); …

【面試題-011】如何設計一個三高系統

設計一個“三高”系統&#xff08;即高可用、高性能、高并發&#xff09;需要綜合考慮系統架構、技術選型、運維管理等多個方面。以下是一些關鍵的設計原則和步驟&#xff1a; 1. 確定系統需求和目標 高可用&#xff1a;系統需要能夠承受故障&#xff0c;并在故障發生時快速恢…

【Text2SQL 論文】DBCopilot:將 NL 查詢擴展到大規模數據庫

論文&#xff1a;DBCopilot: Scaling Natural Language Querying to Massive Databases ???? Code: DBCopilot | GitHub 一、論文速讀 論文認為目前的 Text2SQL 研究大多只關注具有少量 table 的單個數據庫上的查詢&#xff0c;但在面對大規模數據庫和數據倉庫的查詢時時卻…

618商品網頁制作編程示例開發案列優質學習資料資源工具與案列應用場景開發文檔教程資料】

創建一個簡單的商品網頁可以用HTML、CSS和JavaScript來實現。這種網頁會包括商品的圖片、名稱、描述、價格和購買按鈕等。下面是一個詳細的源碼案例及其講解&#xff1a; 1. 文件結構 假設我們有以下文件結構&#xff1a; /product-page/imagesproduct.jpgindex.htmlstyle.c…

UML靜態圖-對象圖

概述 靜態圖包含類圖、對象圖和包圖的主要目的是在系統詳細設計階段&#xff0c;幫助系統設計人員以一種可視化的方式來理解系統的內部結構和代碼結構&#xff0c;包括類的細節、類的屬性和操作、類的依賴關系和調用關系、類的包和包的依賴關系。 對象圖與類圖之間的關系&…

python中獲取文件和圖片類型的方法

目錄 一. 使用第三方庫 filetype安裝 filetype 庫&#xff1a;示例代碼&#xff1a; 二. 使用第三方庫 Pillow&#xff08;針對圖片&#xff09;安裝 Pillow 庫&#xff1a;示例代碼&#xff1a; 三. 使用Python標準庫imghdr&#xff08;針對圖片&#xff09;示例代碼&#xff…