langchain Prompt大語言模型使用技巧詳解
簡介
prompts是大語言模型的輸入,他是基于大語言模型應(yīng)用的利器。沒有差的大語言模型,只有差的prompts。
寫好prompts才能發(fā)揮大語言模型300%的功力。
理論上,要寫好prompts其實不是那么容易的,但是langchain把這個理論變成了現(xiàn)實,一起來看看吧。
好的prompt
有時候,不是我們使用的語言模型不夠好,而是因為我們寫的prompt不夠優(yōu)秀。
以下是一些寫好大語言模型的prompts的幾條原則:
- 具體和詳細(xì):prompts應(yīng)該具有明確的問題或任務(wù),同時包含足夠的細(xì)節(jié)和背景信息,以便大語言模型能夠理解和回答。
- 可理解和可回答:prompts應(yīng)該明確清晰,讓大語言模型能夠理解并且回答。避免使用過于抽象、模糊或帶有攻擊性的語言。
- 有情境和背景:prompts應(yīng)該包含足夠的情境和背景信息,讓大語言模型能夠理解問題的重要性和意義,并在回答中提供有意義的信息。
- 有目標(biāo)和方向:prompts應(yīng)該明確問題或任務(wù)的目標(biāo)和方向,以便大語言模型能夠為需要的信息提供清晰和有用的答案。
- 可擴(kuò)展和可定制:prompts應(yīng)該設(shè)計成易于擴(kuò)展和定制,以適應(yīng)不同的應(yīng)用場景和用戶需求。
因為很多時候,在類似的場景中,我們的prompts的大體結(jié)構(gòu)是一樣的,只有具體的細(xì)節(jié)描述有所不同,這時候,就需要用到prompt template.
什么是prompt template
prompt template就是一個prompt的模板,通過prompt template,我們可以快速的生成多個prompt。
基本上prompt template已經(jīng)幫我們描述好了場景,要做的事情。我們只需要填入具體的內(nèi)容即可。
下面是一個prompt template的簡單例子:
from langchain import PromptTemplate
template = """/
假如你是一個金融公司的理財經(jīng)理,請你分析一下{stock}這只股票。
"""
prompt = PromptTemplate.from_template(template)
prompt.format(stock="騰訊控股")
假如你是一個金融公司的理財經(jīng)理,請你分析一下騰訊控股這只股票。這樣,對于用戶來說,只需要輸入需要問詢的股票名稱即可。其他的一長串文字就不需要了,大大節(jié)省了prompt構(gòu)建的時間。
當(dāng)然,這只是一個非常簡單的例子,你還可以在prompt template中設(shè)置回答的格式,提供具體的例子等等,從而得到更好的回復(fù)。
在langchain中創(chuàng)建prompt template
簡單點說prompt template就是一個格式化輸入的東西。在langchain中,對應(yīng)的工具類叫做PromptTemplate。
上面的簡單例子中,我們已經(jīng)大體看到了如何使用PromptTemplate。
在上例中,我們調(diào)用了PromptTemplate.from_template方法,傳入了一個template的字符串。
在template的字符串中,我們用括號定義了一個變量。最后調(diào)用prompt.format方法,指定變量的名稱和值,完成prompt的最終創(chuàng)建。
另外,prompt template中還可以指定多個變量:
template = "請告訴我一個關(guān)于{personA}的{thingsB}"
prompt_template = PromptTemplate.from_template(template)
prompt_template.format(personA="小張", thingsB="故事")只需要在format中指定變量名稱即可。
除了是用PromptTemplate.from_template方法之外,我們還可以直接使用PromptTemplate的構(gòu)造函數(shù)來創(chuàng)建prompt。
PromptTemplate的構(gòu)造函數(shù)可以接受兩個參數(shù):input_variables和template。
input_variables是template中的變量名字,它是一個數(shù)組。
template就是模板的具體內(nèi)容,是個字符串。
比如,我們可以構(gòu)造無變量的模板:
no_input_prompt = PromptTemplate(input_variables=[], template="這是一個無參數(shù)模板。") no_input_prompt.format()
我們還可以構(gòu)造帶參數(shù)模板:
one_input_prompt = PromptTemplate(input_variables=["stock"], template="假如你是一個金融公司的理財經(jīng)理,請你分析一下{stock}這只股票。")
one_input_prompt.format(stock="騰訊控股")還有多個參數(shù)的模板:
multiple_input_prompt = PromptTemplate(
input_variables=["personA", "thingsB"],
template="請告訴我一個關(guān)于{personA}的{thingsB}"
)
multiple_input_prompt.format(personA="小張", thingsB="故事")Chat特有的prompt template
之前在介紹langchain的時候有跟大家提到過,chat雖然是基于LLM的,但是和基本的LLM還有有區(qū)別的。
最主要的區(qū)別在于,chat消息是不同角色的。比如在openai中,chat消息就可以被分為AI, human或者system這幾種角色。
這樣做雖然復(fù)雜了一點,但是可以更好的對消息進(jìn)行分類處理。
我們看下langchain中關(guān)于chat的PromptTemplate有哪些:
from langchain.prompts import (
ChatPromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)和普通的prompt template一樣,我們可以調(diào)用MessagePromptTemplate的from_template來創(chuàng)建對應(yīng)的prompt:
template="現(xiàn)在你的角色是{role},請按該角色進(jìn)行后續(xù)的對話."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)當(dāng)然你可以通過構(gòu)造函數(shù)來創(chuàng)建prompt:
prompt=PromptTemplate(
template="現(xiàn)在你的角色是{role},請按該角色進(jìn)行后續(xù)的對話.",
input_variables=["role"],
)有了一個或者多個MessagePromptTemplates之后,就可以使用這些MessagePromptTemplates來構(gòu)建ChatPromptTemplate了:
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt]) chat_prompt.format_prompt(role="醫(yī)生", text="幫我看看我的顏值還行嗎?").to_messages()
總結(jié)
好了, 基本的langchain中的prompt template已經(jīng)介紹完畢。大家去試試看吧。
以上就是langchain Prompt大語言模型使用技巧詳解的詳細(xì)內(nèi)容,更多關(guān)于langchain Prompt大語言模型的資料請關(guān)注腳本之家其它相關(guān)文章!
- ollama搭建本地ai大模型并應(yīng)用調(diào)用的操作方法
- 大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)
- Docker?AIGC等大模型深度學(xué)習(xí)環(huán)境搭建步驟最新詳細(xì)版
- 前端AI機(jī)器學(xué)習(xí)在瀏覽器中訓(xùn)練模型
- AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型
- django數(shù)據(jù)模型on_delete, db_constraint的使用詳解
- TensorFlow入門使用 tf.train.Saver()保存模型
- Python從零開始訓(xùn)練AI模型的實用教程
相關(guān)文章
Gradio機(jī)器學(xué)習(xí)模型快速部署工具接口狀態(tài)
這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具接口狀態(tài)的原文翻譯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Python實現(xiàn)Mysql全量數(shù)據(jù)同步的腳本分享
這篇文章主要為大家詳細(xì)介紹了基于Python如何實現(xiàn)Mysql全量數(shù)據(jù)同步的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06
一篇文章帶你學(xué)習(xí)Python3的高階函數(shù)
這篇文章主要為大家詳細(xì)介紹了Python3的高階函數(shù),主要介紹什么是高階函數(shù),高階函數(shù)的用法以及幾個常見的內(nèi)置的高階函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
一波神奇的Python語句、函數(shù)與方法的使用技巧總結(jié)
這篇文章主要介紹了一波神奇的Python函數(shù)與方法的使用技巧總結(jié),包括裝飾器和with語句等的不常見用法,需要的朋友可以參考下2015-12-12
Python編程django實現(xiàn)同一個ip十分鐘內(nèi)只能注冊一次
這篇文章主要介紹了Python編程django實現(xiàn)同一個ip十分鐘內(nèi)只能注冊一次的相關(guān)內(nèi)容,具有一定參考價值。需要的朋友可以了解下。2017-11-11
python函數(shù)聲明和調(diào)用定義及原理詳解
這篇文章主要介紹了python函數(shù)聲明和調(diào)用定義及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12

