提示詞是一個小白最容易上手大模型的方式,提示詞就是你告訴大模型應該如何去完成一項工作的系統性的命令,所以寫一個好的提示詞是比較關鍵的,那么如何寫好一個提示詞呢?
要寫好提示詞,其實就像我們要把一些命令清晰地傳達出來,大家想象我們在職場中要交給別人一個任務的時候,比如讓分析師去分析下數據,我們一般是不是要告訴這個分析師對應的工作任務是什么,然后有哪些對應的業務的背景信息,這個分析的樣例之前有沒有呢,這個任務完成后給你的交付物應該是什么,是ppt還是一個word或者一個表格就行了呢?
1.1: 提示詞框架
一個任務去如何完成是上述的一個步驟,所以我們去寫提示詞的時候也是遵循一個大體的框架,就是如下幾步:
1: 設定好角色
2: 確定好任務目標
3: 描述清晰背景
4: 給定些樣例
5:明確輸出格式
當然,這個對應的提示詞可能我們自己寫起來比較麻煩,有的時候我們只需要確定好任務目標后,使用些現成的提示詞工具去擴展,然后改寫下就行,比如Kimi和阿里云百煉的提示詞優化工具;
1.2: 提示詞模版
有了上述的對應的框架,我們自己就可以構建對應的提示詞了,但是如果我們自己想讓我們的應用去回答用戶的問題,肯定不能讓用戶自己去寫對應的提示詞,那么這個對應的提示詞的一些內嵌的信息我們自己要規定好,把客戶的問題透出去讓客戶自己寫就行,所以我們自己可以先規定一個提示詞模版,如下所示:
構建提示詞模板
prompt_template_string = ("你是公司的客服小蜜,你需要簡明扼要的回答用戶的問題""【注意事項】:\n""1. 依據上下文信息來回答用戶問題。\n""2. 你只需要回答用戶的問題,不要輸出其他信息\n""以下是參考信息。" "---------------------\n" "{context_str}\n" "---------------------\n" "問題:{query_str}\n。""回答:"
) rag.update_prompt_template(query_engine,prompt_template_string)
1.3: 如何構建高效的提示詞
1.3.1: 清晰表達需求,并且使用分隔符 ,這個可以讓大模型更加清晰的明白任務是什么,并且使用分隔符可以幫它明白對應的背景信息和輸入是什么,有什么具體要求1.3.2: 指定對應的角色和受眾,說白了這個就是讓大模型知道它是誰,它在為誰工作1.3.3: 提供少量樣本,對于一些專業領域的東西,可能大模型還不是很精通,所以可以提供少量樣本讓他學習下,以便可以讓他在這個對應的領域更加精通點1.3.4: 指定好輸出格式,畢竟我們在編寫程序應用的時候,結構化的輸出格式能更好的讓我們去分析數據1.3.5: 給模型一些思考的時間,這樣可以讓模型的回答更加完善,畢竟我們自己去經過對應的比較長的思考對于問題的回答會更加好嘛
所以一個比較好的示例如下:
question_task= """
【任務要求】
請根據用戶的主題,結合下面【樣例】給的例子,理解和使用一致的風格和結構繼續創作內容,不要輸出多余的內容。
---
【輸出要求】
最終輸出需要以Markdown格式呈現,請注意,在你的回答中包含所有必要的Markdown元素,如標題、列表、鏈接、圖片引用、加粗等,以便于閱讀、后續編輯和保存。
---
【樣例】
### 示例1: 制作簡易書簽
# 簡易書簽制作教程## 材料清單
- 彩色卡紙
- 剪刀
- 裝飾貼紙
- 鉛筆## 步驟
1. 選擇一張彩色卡紙。
2. 用鉛筆在卡紙上畫出一個長方形,尺寸約為2英寸 x 6英寸。
3. 沿著鉛筆線剪下長方形。
4. 使用裝飾貼紙對書簽進行個性化裝飾。
5. 完成!現在你有了一個獨一無二的書簽。## 結束語
希望這個教程能幫助你制作出滿意的書簽!---
【用戶輸入】
以下是用戶的要求創作的主題:
"""
question_doc = "制作手工賀卡"question = question_task + question_doc
ask_llm(question, query_engine)
1.4: 如何讓提示詞進行意圖識別
按照上面的步驟我們設計好了對應的提示詞后,如果問大模型一個問題,然后大模型答非所問,比如下面這種情況,你讓大模型去審查句子,但是由于它的召回文本挺多相關性內容,導致大模型回答錯誤,
所以有的時候我們可以決定用不用rag應用,這就要在前面做個判斷,進行下意圖識別,如果是正常的就讓大模型正常回答,如果涉及到專業領域就讓rag回答,所以對應的提示詞就需要更改下,讓提示詞幫忙進行意圖識別
1.5: 當提示詞遇見了推理模型怎么辦
在DeepSeek出現之前,很多時候我們在編寫提示詞的時候是需要思維鏈(COT)的,什么意思呢?就是說我們想讓模型回答的更精確,我們是需要告訴模型該如何一步步去思考一個問題,然后把對應的答案給到我們,讓模型思考的慢一點,這樣就可以給到我們相應的解決方案,如下所示:
但是DeepSeek出現了之后,相信大家都知道Deepseek基本上已經內嵌了思維鏈,所以我們就不需要去寫cot了,這樣反而會干擾對應的推理模型,導致它的思考出現了偏差,反而給出的答案不嚴謹
綜上所述,當推理大模型出現了之后可能我們不需要寫那么詳細的提示詞,但是提示詞還是需要寫的,而且在寫提示詞的時候最關鍵的一點是要明白,我們一定要清晰地明白一個點:清晰有效的任務目標是很重要的,提供豐富且有效的背景信息