自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 程序員從零開始學(xué) LangChain —提示詞組件

開發(fā) 前端
今天給大家介紹了一下 LangChain? 的提示詞組件,有了提示詞和提示詞模板組件我們就可以更加方便的跟各種 LLMs 進(jìn)行交互,并且可以更加靈活的構(gòu)造屬于自己的模板,今天的分享就到這里,感興趣的小伙伴可以去試試哦。

前面的文章了不起給大家介紹了 LangChain 的一些基本知識,沒看過的小伙伴可以點(diǎn)擊這里去看下,今天了不起給大家介紹一下 LangChain 的第一個很重要的組件提示詞 Prompt。

什么提示詞

用過 ChatGPT 的小伙伴都知道,我們提供輸入,然后 ChatGPT 會提供回答,這里我們提供的輸入在 LLM 領(lǐng)域有一個專業(yè)名詞就叫做提示詞。

我們在使用 ChatGPT 的時候,有時候會設(shè)置很多默認(rèn)的角色,并且常用的提示詞有很多,比如

  1. 我想讓你擔(dān)任 Android 開發(fā)工程師面試官。我將成為候選人,您將向我詢問 Android 開發(fā)工程師職位的面試問題。我希望你只作為面試官回答。不要一次寫出所有的問題。我希望你只對我進(jìn)行采訪。問我問題,等待我的回答。不要寫解釋。像面試官一樣一個一個問我,等我回答。我的第一句話是“面試官你好”
  2. 我想讓你充當(dāng) Linux 終端。我將輸入命令,您將回復(fù)終端應(yīng)顯示的內(nèi)容。我希望您只在一個唯一的代碼塊內(nèi)回復(fù)終端輸出,而不是其他任何內(nèi)容。不要寫解釋。除非我指示您這樣做,否則不要鍵入命令。當(dāng)我需要用英語告訴你一些事情時,我會把文字放在中括號內(nèi)[就像這樣]。我的第一個命令是 pwd

圖片

上面的這些內(nèi)容算是一種稍微復(fù)雜的提示詞,而且我們可以看到,這些常用的提示詞結(jié)構(gòu)其實(shí)都比較相似,因此為了更加的通用,我們可以使用一個模板來表達(dá),比如:我希望你擔(dān)任一個 {xxx},我將會提供 {yyy},你會按照 {zzz} 等等這種形式來組裝。

提示詞模板

上面提到了,為了更加通用的使用提示詞,LangChain 定義了一個提示詞模板的組件,通過提示詞模板組件我們可以創(chuàng)建提示詞,方便開發(fā)者更好的使用提示詞。

from langchain import PromptTemplate


template = """
I want you to act as a naming consultant for new companies.
What is a good name for a company that makes {product}?
"""

prompt = PromptTemplate(
    input_variables=["product"],
    template=template,
)
prompt.format(product="colorful socks")
# -> I want you to act as a naming consultant for new companies.
# -> What is a good name for a company that makes colorful socks?

如上所示,我們先創(chuàng)建一個提示詞模板字符串,其中用{product} 來替代需要替換的內(nèi)容,接著通過構(gòu)造 PromptTemplate 的時候傳遞 input_variables["product"] 參數(shù),表示 product 是一個需要被替換的變量,最后通過 format 方法來設(shè)置真實(shí)要替換的內(nèi)容。

此外我們可以構(gòu)造無輸入變量的提示詞模板,也可以構(gòu)造多輸入?yún)?shù)的模板,如下所示

from langchain import PromptTemplate

# An example prompt with no input variables
no_input_prompt = PromptTemplate(input_variables=[], template="Tell me a joke.")
no_input_prompt.format()
# -> "Tell me a joke."

# An example prompt with one input variable
one_input_prompt = PromptTemplate(input_variables=["adjective"], template="Tell me a {adjective} joke.")
one_input_prompt.format(adjective="funny")
# -> "Tell me a funny joke."

# An example prompt with multiple input variables
multiple_input_prompt = PromptTemplate(
    input_variables=["adjective", "content"], 
    template="Tell me a {adjective} joke about {content}."
)
multiple_input_prompt.format(adjective="funny", cnotallow="chickens")
# -> "Tell me a funny joke about chickens."

序列化提示詞模板

我們可以將制作好的提示詞模板進(jìn)行序列化,存放的 json 或者 yaml 文件中,然后在其他地方可以加載使用,LangChain 會根據(jù)存放文件的后綴名來寫入對應(yīng)格式的數(shù)據(jù)。

prompt_template.save("awesome_prompt.json") # Save to JSON file

from langchain.prompts import load_prompt
loaded_prompt = load_prompt("awesome_prompt.json")

assert prompt_template == loaded_prompt

零樣本提示詞和小樣本提示詞

說明提示詞模板過后,我們再來了解一下什么是零樣本提示詞和小樣本提示詞。

零樣本提示詞

圖片

如下圖所示,我們通過直接詢問 ChatGPT 一句話是積極、中性還是消極的情緒,其中我們并沒有告訴 ChatGPT 什么樣的情緒是積極的,什么樣是中性以及什么樣是消極的。

但是 ChatGPT 能夠很好的回答出來,這是因?yàn)?nbsp;ChatGPT 已經(jīng)學(xué)習(xí)了大量網(wǎng)絡(luò)上的內(nèi)容,這種情況就是我們所說的零樣本提示。因?yàn)槲覀兲釂栔安]有給 ChatGPT 任務(wù)示例和樣本。

小樣本提示詞

顧名思義小樣本提示詞表示我們在進(jìn)行提問的時候會提供少量的小樣本提示詞給到 ChatGPT,讓 ChatGPT 根據(jù)我們提供發(fā)小樣本來學(xué)習(xí)進(jìn)行回答。

之所以有小樣本提示詞是因?yàn)樵陔S著我們跟 ChatGPT 溝通對話次數(shù)的增加的時候,有時候話題會逃逸,所以我們改變每次傳遞的上下文信息,而是只傳遞小樣本指示詞,可以讓我們的話題始終保持初始狀態(tài)。

另外一個是由于我們跟 ChatGPT 的對話每次都是收費(fèi)的,會根據(jù)我們傳遞的上下文的長度來計費(fèi),通過這種方式我們也可以減少傳遞的內(nèi)容,避免長對話內(nèi)容被傳遞增加費(fèi)用。

舉個例子

User: 從現(xiàn)在起你是一個充滿哲學(xué)思維的心靈導(dǎo)師,當(dāng)我每次輸入一個疑問時你需要用一句富有哲理的名言警句來回答我,并且表明作者和出處\n\n\n要求字?jǐn)?shù)不少于15個字,不超過30字,每次只返回一句且不輸出額外的其他信息,你需要使用中文和英文雙語輸出\n\n\n當(dāng)你準(zhǔn)備好的時候只需要回復(fù)“我已經(jīng)準(zhǔn)備好了”(不需要輸出任何其他內(nèi)容)

我作業(yè)寫不完怎么辦

“行動是治愈恐懼的良藥?!?- 威廉·詹姆斯\n"Action is the antidote to fear." - William James

論文被拒了怎么辦

“失敗是成功之母?!?- 俗語\n"Failure is the mother of success." - Chinese proverb

使用樣例

圖片

總結(jié)

今天給大家介紹了一下 LangChain 的提示詞組件,有了提示詞和提示詞模板組件我們就可以更加方便的跟各種 LLMs 進(jìn)行交互,并且可以更加靈活的構(gòu)造屬于自己的模板,今天的分享就到這里,感興趣的小伙伴可以去試試哦。

參考資料

官方文檔:https://python.langchain.com/en/latest/modules/prompts.html

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2023-06-02 07:37:12

LLM?大語言模型

2024-08-01 11:21:52

2022-02-16 22:57:57

Mitmproxy抓包工具

2015-08-24 14:59:06

Java線程

2011-04-06 15:55:50

開發(fā)webOS程序webOS

2024-12-09 09:44:34

機(jī)器學(xué)習(xí)模型分類器

2015-08-26 10:01:20

iOS開發(fā)

2023-02-20 09:55:00

微服務(wù)框架單體架構(gòu)

2024-07-30 09:22:44

PostgreSQL數(shù)據(jù)庫工具

2015-11-17 16:11:07

Code Review

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2019-01-18 12:39:45

云計算PaaS公有云

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2024-12-06 17:02:26

2015-03-06 17:24:56

Android應(yīng)用安全安卓應(yīng)用安全

2011-04-29 10:46:32

iPhone開發(fā)入門iPhoneiOS

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云計算軟件計算機(jī)網(wǎng)絡(luò)

2024-05-15 14:29:45

2023-10-27 11:01:31

網(wǎng)絡(luò)性能VLAN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號