ChatGPT Prompt Engineering for Developers
Base LLMではなくfine-tuned LLMを対象とする1.5時間程度の講座 Guideline
Principle 1: Write clear and specific instructions
Tactic 1: デリミタを使って命令と入力をわかりやすくする
Delimiters can be anything like: `, """, < >, <tag> </tag>, :
Tactic 2: 構造化された出力を促す
Tactic 3: インプットが条件に合うか判断させる
Principle 2: Give the model time to “think”
Tactic 1: タスクを完了させるためのステップを指定する
Tactic 2: 結論を急がせずに解法を検討させる
Iterative
アイデア > 実装 > 実験 > エラー分析を繰り返す
マーケティング向けの要約タスク
Issue 1: The text is too long
語数の制限を入れる
Use at most 50 words, Use at most 300 characters etc.
超過することもある
Issue 2. Text focuses on the wrong details
フォーカスして欲しい箇所を指定する
技術詳細を書け、製品番号を最後に書け etc.
Issue 3. Description needs a table of dimensions
HTMLでの出力を指示する
完璧なプロンプトを知っていることよりも、プロンプトの開発プロセスを確立することが大事 実験する
うまくいかなかった結果を分析する
指示を明晰にし、考える時間を与える
たくさんの例とともにプロンプトを改良する
Summarize
カスタマーレビューの要約タスク
要約する際の焦点を指定することで目的に合わせた有用なサマリができる 抜粋(Extract)もできる
Inferring
positive, negativeの2値で回答
インプットテキストに当てはまる感情を5つ答えよ
怒っているか、いないかの2値で回答
プロダクト名・会社名をレビューから抽出する
code:json
{
"Sentiment": "positive",
"Anger": false,
"Item": "lamp with additional storage",
"Brand": "Lumina"
}
長い文章からトピックを特定する
任意のトピックに当てはまる文章かどうかを判定する
ニュースアラートシステムを実装できる
code:python
prompt = f"""
Determine whether each item in the following list of \
topics is a topic in the text below, which
is delimited with triple backticks.
Give your answer as list with 0 or 1 for each topic.\
List of topics: {", ".join(topic_list)}
Text sample: '''{story}'''
"""
response = get_completion(prompt)
print(response)
code:text
nasa: 1
local government: 0
engineering: 0
employee satisfaction: 1
federal government: 1
Transforming
Tone
話し方をフォーマルにしたりカジュアルにしたりできる
Format Conversion
JSONをHTMLに変換
Spell Check, Grammer Check
修正前後のテキストを比較すれば校正の赤字のような表現ができる
Expanding
生成する文章のランダムさを指定するパラメータ
0であれば一貫した回答になり、1に近づくほどランダムになる
信頼性や予測性が必要なら0にする
Chatbot
roleとcontentで文脈を表現する
最初にsystemで役割や背景や文脈を与える
code:python
messages = [
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},
{'role':'user', 'content':'tell me a joke'},
{'role':'assistant', 'content':'Why did the chicken cross the road'},
{'role':'user', 'content':'I don\'t know'} ]
最後に自然言語の回答を構造化する
code:python
messages = context.copy()
messages.append(
{'role':'system', 'content':'create a json summary of the previous food order. Itemize the price for each item\
The fields should be 1) pizza, include size 2) list of toppings 3) list of drinks, include size 4) list of sides include size 5)total price '},
)
#The fields should be 1) pizza, price 2) list of toppings 3) list of drinks, include size include price 4) list of sides include size include price, 5)total price '}, response = get_completion_from_messages(messages, temperature=0)
print(response)
code:text
Here's a summary of your order:
`
{
"pizza": {
"type": "cheese",
"size": "medium",
"price": 9.25
},
"toppings": [],
"drinks": [],
"sides": [
{
"type": "fries",
"size": "small",
"price": 3.50
}
],
"total_price": 12.75
}
`
Let me know if everything looks good or if you'd like to add anything else to your order.