Skip to content

Commit

Permalink
Merge pull request #54 from eepson123tw/feature/gpt-prompt
Browse files Browse the repository at this point in the history
Feature/gpt prompt
  • Loading branch information
eepson123tw committed Nov 5, 2023
2 parents bf17590 + 4e676f6 commit be14248
Show file tree
Hide file tree
Showing 7 changed files with 262 additions and 10 deletions.
18 changes: 9 additions & 9 deletions docs/.vitepress/cache/deps/_metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,55 +5,55 @@
"vue": {
"src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "0c42c586",
"fileHash": "3a432cb4",
"needsInterop": false
},
"vitepress > @vue/devtools-api": {
"src": "../../../../node_modules/@vue/devtools-api/lib/esm/index.js",
"file": "vitepress___@vue_devtools-api.js",
"fileHash": "cc248f1f",
"fileHash": "c95d6aae",
"needsInterop": false
},
"busuanzi.pure.js": {
"src": "../../../../node_modules/busuanzi.pure.js/index.js",
"file": "busuanzi__pure__js.js",
"fileHash": "e070a5cb",
"fileHash": "9cd7a776",
"needsInterop": true
},
"element-plus": {
"src": "../../../../node_modules/element-plus/es/index.mjs",
"file": "element-plus.js",
"fileHash": "386033f4",
"fileHash": "49c14243",
"needsInterop": false
},
"gitalk": {
"src": "../../../../node_modules/gitalk/dist/gitalk.js",
"file": "gitalk.js",
"fileHash": "5f4ce802",
"fileHash": "906b6abf",
"needsInterop": true
},
"dayjs": {
"src": "../../../../node_modules/dayjs/dayjs.min.js",
"file": "dayjs.js",
"fileHash": "e1ba915c",
"fileHash": "8582d127",
"needsInterop": true
},
"dayjs/plugin/utc.js": {
"src": "../../../../node_modules/dayjs/plugin/utc.js",
"file": "dayjs_plugin_utc__js.js",
"fileHash": "41b3be09",
"fileHash": "0cab3621",
"needsInterop": true
},
"dayjs/plugin/relativeTime": {
"src": "../../../../node_modules/dayjs/plugin/relativeTime.js",
"file": "dayjs_plugin_relativeTime.js",
"fileHash": "4eae9017",
"fileHash": "858161b6",
"needsInterop": true
},
"dayjs/locale/zh-tw": {
"src": "../../../../node_modules/dayjs/locale/zh-tw.js",
"file": "dayjs_locale_zh-tw.js",
"fileHash": "70d1c055",
"fileHash": "25e24037",
"needsInterop": true
}
},
Expand Down
Binary file added docs/assets/images/gpt/prompt-apple.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/images/gpt/prompt-link-agent.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/images/gpt/singular-point.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/router/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const nav = [
],
},
{ text: "BackEnd", link: "/view/backend/jwt" },
{ text: "前端異聞錄", link: "/view/smallTalk/frontend-job-smalltalk" },
{ text: "前端異聞錄", link: "/view/smallTalk/gpt-prompt-learning" },
];

export const sidebar = {
Expand Down
4 changes: 4 additions & 0 deletions docs/router/smallTalk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ const smallTalkRouter = {
text: "ChatGPT 橫空出世,工程師該如何看待這現象?",
link: "/view/smallTalk/chatgpt-smalltalk",
},
{
text: "Prompt 指令魔術師",
link: "/view/smallTalk/gpt-prompt-learning",
},
],
collapsed: true,
};
Expand Down
248 changes: 248 additions & 0 deletions docs/view/smallTalk/gpt-prompt-learning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
---
layout: doc
date: 2023-11-05 15:50:37
description: Prompt、Prompt-engineering、指令魔術師
title: Prompt 指令魔術師
---

# Prompt 指令魔術師

<PageInfo/>

如果有一個工具可以處理日常的繁重工作,讓我們專注於思考、創造和組織,那麼我們是否能擺脫不斷回想的繁瑣任務,並有更多時間追求我們真正感興趣的事情?在這樣的背景下,我嘗試使用像 `chat-gpt` 這樣的工具,發現了一些能夠幫助我們工作和生活的有用提示。現在,讓我們進一步討論這些提示。

## GPT、NLP、LLM 是什麼,奇點接近了嗎?

`生成式預訓練轉換器 GPT(Generative Pre-trained Transformer)`: 是一種具體的語言模型,它是基於Transformer架構的深度學習模型,用於處理和生成自然語言文本。GPT模型是NLP領域中的一種特定技術,它通過預訓練大量的文本數據來學習語言的結構和語義,然後可以用於各種NLP任務,如文本生成、文本分類、問答等。

`自然語言處理 NLP(Natural Language Processing`: 是一個更廣泛的領域,它涉及處理和理解自然語言的一切方面。NLP包括了各種技術和方法,用於處理文本數據,從而使計算機能夠理解、解釋和生成自然語言文本。NLP不僅包括語言模型(如GPT),還包括語音識別、機器翻譯、情感分析、信息擷取、文本分類、對話系統等多種子領域和應用。

`大型語言模型(Large Language Model)`:指那些由大量文本數據預訓練而成的深度學習模型,它們能夠理解和生成自然語言文本。

`ChatGPT`: ChatGPT 是基於 GPT 的變種,專門設計用於對話和對話式應用。它被優化用於生成自然、流暢的對話,並且可以用於構建聊天機器人、虛擬助手和其他對話系統。

> 簡單來說,GPT 是一種語言處理技術,而 ChatGPT 是用於建立更自然對話的一種應用。這些技術都屬於 NLP 領域。
:::info
GPT(Generative Pre-trained Transformer)的應用:

- 文本生成:例如,生成文章、故事、詩歌等文本。
- 問答系統:用於回答關於特定主題的問題。
- 語言翻譯:將一種語言的文本翻譯成另一種語言。

自然語言處理(NLP)的應用:

- 語音識別:例如,將語音轉換成文本,用於語音助手(如Siri或Google助手)。
- 情感分析:分析文本中的情感,判斷情感是正面、負面還是中性。
- 文本分類:將文本分為不同的類別,如新聞分類、垃圾郵件過濾等。

大型語言模型的例子:

- GPT-3:擁有1750億個參數,用於文本生成和多項NLP任務。
- BERT:用於文本理解,廣泛應用於問答和文本分類。
- XLNet:自回歸的語言模型,在多項NLP任務中表現出色。

:::

---

![singular-point 人類的奇點](/assets/images/gpt/singular-point.png)

## Prompt 是什麼?

Prompt(提示詞)是用於指導 GPT 或 LLM(語言模型)生成文本的輸入。它是一個包含了模型所需指令、問題、上下文或示例等信息的文字或句子。

Prompt 的目的是引導模型生成特定類型或主題的文本回應。

基本 Prompt 應包含以下結構:

```markdown

指令:想要模型执行的特定任务或指令。

上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。

输入数据:用户输入的内容或问题。

输出指示:指定输出的类型或格式。

ex:
我需要你告訴我,蘋果是什麼?我是個大學生,輸出須考量到我的知識量。
輸出為 markdown 等等。

```


### 寫出更好 Prompt

一個好的 Prompt 需要明確的**引導**、具體的問題或任務、上下文信息、使用關鍵詞以及不斷的測試和調整。這些要點有助於確保模型能夠生成更好的文本內容。

:::tip
最重要部分可能是「清晰的引導面向」。需要確保 prompt 提供明確的指示,告訴模型應該生成什麼類型的文本,以及期望的動作或回應。如果引導面向不清晰或模糊,模型可能會產生不符合預期的結果。
:::

```markdown
一般描述
- "蘋果是什麼?"

```

```markdown
加強指示
- "請描述蘋果的不同品種以及它們的特點和用途。"
```


是否有不一樣的感覺了呢?

若將 GPT 視為一個可溝通的對象,我們是否也需要清晰的溝通流程呢?

大概就是這種感覺~

若我們更加地加強結構體及描述呢?會不會更接近我們想要的回答?

```markdown
“請詳細描述蘋果,包括其植物分類、品種、營養價值以及在文化背景中的角色。目標是提供一個全面而易於理解的解釋,適合對植物學和營養學感興趣的普通受眾。”
```

讓我們來比較三句 Prompt 的差異,使用 `GPT 3.5 模型` 詢問,是否就有看出差異了呢?


![prompt-apple 比較三個 Prompt](/assets/images/gpt/prompt-apple.png)

:::tip
還能使用下列的指令再去加強,Prompt的結構,達到更好的效果。

- 將指令放在提示的開頭,並使用特殊符號(如###或""")來分隔指令和上下文。
- 在指令中明確所需的上下文、結果、長度、格式和風格。
- 透過示例明確指出所需的輸出格式,以便於程式化地可靠地解析多個輸出。
- 針對代碼生成,使用特定的“leading words”來引導模型遵循特定的寫作模式。
:::



### Prompt 該如何應用

Prompt 可以涵蓋可以涵蓋各種主題,例如技術、生活、職業、教育等等。

- 教育

```markdown
Prompt: 如何在教育領域中更有效地應用創新技術?
```

- 信件

```markdown
Prompt: 如何寫一封令人難忘的正式信件?
```

- 心理輔導

```markdown
Prompt: 如何在心理輔導中幫助患者管理壓力和焦慮?
```

當然這只是些一般的範例,如果我們針對一些更特殊的情況,寫些 Agent Prompt 協助我們呢?

- 讀取網頁連結,然後輸出結果,並統整這份報告
- 貼上信件截圖,並請他依照情境回覆
- 讀取 PDF EXCEL 等文檔,輸出視覺化的分析圖表

若能做到以上這些,是不是能節省並提升我們的時間呢?


## 再次提升 Prompt

提供個讀取網頁連結的 Prompt,`需啟用 GPT 4且網頁允許爬蟲`

```markdown
# Role: Link_Agent 分析機器人

## 當前任務描述
作為 Link_Agent 分析機器人,我的任務是根據用戶提供的網絡連結,進行深入分析並撰寫報告。這包括摘要網頁內容、識別關鍵點、評估信息源的可靠性、進行批判性分析,以及探討相關的問題和機會。

## 指令流程

1. **開啟連結**:自動使用瀏覽工具開啟提供的連結。
2. **內容摘要**:撰寫網頁內容的簡要摘要,特別強調對用戶研究或問題陳述的重要部分。
3. **識別關鍵點**:從文本中識別最少三個關鍵點,若有更多則提出更多要點,這些點對理解主題至關重要。
4. **評估來源**:檢查來源的可靠性,並提供可靠性評估的簡要說明。
5. **批判性分析**:對於連結中提出的信息和觀點,進行批判性分析,並與相關領域的已知事實或數據進行對比。
6. **檢查程式碼或關鍵字**:檢查文本中是否包含程式碼或相關關鍵字。如果存在,需要進一步搜索相關資源並統整,以便加入整合分析。
7. **問題與機會**:分析文本中提到的問題和機會,並提供對用戶項目或研究的潛在益處的見解。

## 整合分析

"""
在完成上述步驟後,將所有信息整合,提供一份結構化的結論性報告。這份報告應總結分析的發現,報告須符合視覺區塊枚舉式的提出要點,並依照指令流程的步驟,提出可能的行動建議或後續研究方向,回覆語言為繁體中文。
"""
```

![prompt-link-agent Link_Agent 分析機器人](/assets/images/gpt/prompt-link-agent.png)

是不是很神奇呢~

## 自定義模型及進階技巧

還有更多種的 Prompt,例如給與人格特質或是專業技能。

- 人物模型

```markdown

- 你是個英文老師,我需要你協助我的英文自傳 XXXX
- 你是個健身高手,建議我訓練菜單 XXXX

```

- 更進階的 Prompt 技巧

```markdown

- 少量樣板題示 (Chain-of-Thought Prompting)
- 思維樹(Tree of Thoughts,ToT)
- 鏈示思考(CoT)
- Prompt 函數
- 背景、角色、任務、要求等概念組合

---

# Role: CoT、ToT、RAG和ART Prompt Agent
此角色的任務是與使用者互動,確認其欲探索的對象或主題。確認後,利用鏈式思考(CoT)、思維樹(ToT)、檢索增強生成(RAG)和自動推理工具(ART)的結合,對該對象進行深入分析並提供全面的答案。

🔎 請問您想要了解哪個對象或主題?
✅ 確認後,將按照以下結構化prompt進行解析:

- 🔍 問題:[對象]是什麼? (CoT起始點)
- 📝 定義階段:定義[對象]。 (CoT)
- 🎨 特徵階段:描述[對象]的外觀、口味和質地。 (CoT)
- 🛠️ 用途階段:列出[對象]的可能用途。 (ToT的探索階段)
- 🌱 生長階段:解釋[對象]的生長或製造環境。 (ToT的推理階段)
- 🌟 意義階段:討論[對象]在營養、文化或科學上的意義。 (ToT的評估階段)
- 🔎 檢索增強:進行深入檢索以確保所有信息都是基於最新和最準確的數據。 (RAG概念)
- 🤖 自動推理:利用可用的工具和資源,進行自動推理以提供更深入的分析。 (ART概念)

結合這些方法,我們將提供一個結構化且深入的回答,涵蓋從基本定義到[對象]在不同領域中的重要性。

"""
需維持中立且統一的回答,再詢始時詢問使用者,欲詢問的知識,並以更廣泛的視角搜尋(Prompt模板)這個問題,
最後將 temperature 設定為 0,若回覆太長,則使用段落回覆我。

"""


---

```

## Reference

- [提示工程指南](https://www.promptingguide.ai/zh)
- [best-practices-for-prompt-engineering-with-openai-api](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api)
- [Prompt store](https://github.com/eepson123tw/GPT-Prompts)

若有其他疑問或是更好建議,可以詢問並留言給我~


<GitTalk/>

0 comments on commit be14248

Please sign in to comment.