Prompt 編寫模式:如何將思維框架賦予機器,以設計模式的形式來思考 prompt

作者 | 黃峰達 責編 | 王子彧

出品 | Phodal(ID:phodal)

如何理解 Prompt ?

如何理解 Prompt ?

prompt 通常指的是一個輸入的文字段落或短語,作為生成模型輸出的起點或引導。prompt 可以是一個問題、一段文字描述、一段對話或任何形式的文字輸入,模型會基於 prompt 所提供的上下文和語義資訊,生成相應的輸出文字。

舉個例子,對於一個語言模型,prompt 可以是 “The cat sat on the”,模型可以通過對接下來的詞語進行預測,生成類似於 “mat”、”chair”、”sofa” 等不同的輸出:

上圖為 Stable Diffusion 生成 (Prompt: The cat sat on the , Steps: 30, Sampler: Euler a, CFG scale: 7, Seed: 234310862, Size: 512×512, Model hash: d8722b4a4d, Model: neverendingDreamNED_bakedVae)

Prompt 在人工智慧語言生成領域中扮演著重要的角色,因為它可以幫助模型更好地理解使用者意圖,並生成更準確、有意義的文字內容。諸如於如下的 prompt

women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,

可以在 Stable Diffusion 生成圖片(配置了 negative prompt):

所以,質量看上去不錯,但是可能不是你想要的。在 ChatGPT 則可以生成文字,質量上也是相似的,但是對於 AI 輸出的文字來說,質量並沒有這麼直觀。

模式要素

模式要素

如果您指的是 AI 領域中的 prompt 模式,它通常是指一種輸入-輸出的資料格式,用於訓練和評估機器學習模型。下面是一個完整的定義:

1、模式名稱(Pattern Name):Prompt 模式;

2、問題描述(Problem):如何準備訓練資料,以便用於機器學習模型的訓練和評估;

3、解決方案(Solution):Prompt 模式是一種輸入-輸出資料格式,它由一個輸入文字和一個輸出文字組成。輸入文字是一個問題或指令,輸出文字是模型預測的答案或結果。通過使用這種格式,可以減少訓練資料的需求量,提高模型的泛化性能,同時也使得模型的輸出更易於理解和解釋;

4、效果(Consequences):使用 Prompt 模式可以簡化訓練資料的準備過程,提高模型的效率和準確率,同時也增加了模型的可解釋性和可理解性;

5、適用性(Applicability):Prompt 模式適用於自然語言處理領域中的各種任務,如文字分類、情感分析、問答系統、機器翻譯等。它也可以用於其他領域中需要使用自然語言作為輸入和輸出的任務;

6、結構圖(Structure):Prompt 模式的結構由一個輸入文字和一個輸出文字組成,它們被定義為模型的輸入和輸出。通常,輸入文字包括一些關鍵詞或短語,用於指定模型需要執行的任務或操作,而輸出文字則是模型的預測結果;

7、參考(References):相關的文獻包括 “GPT-3: Language Models are Few-Shot Learners”, “Zero-Shot Learning – A Comprehensive Evaluation of the Good, the Bad and the Ugly” 等。常用的機器學習框架包括 TensorFlow,PyTorch 等。

核心思想:概念與類比

核心思想:概念與類比

開始之前,可以看一下這個問題示例:

1、設計模式的要素是哪些?

2、對於 AI 領域的 prompt 編寫來說,我們通常使用的模式有哪些?

3、能將 AI 領域的 prompt 常見的設計模式用 “設計模式要素” 的格式一一表達嗎?

核心思想,將設計模式要素作為一個概念,讓 AI 類比到 prompt 裡的模式。詳細見:

1、design-pattern.analogy

2、design-pattern.analogy2

當然了,類比和定義概念不一定都會成功。

基礎模式

基礎模式

四種基礎模式:

1、特定指令 (By specific):在這種模式下,我們給模型提供一些特定資訊,例如問題或關鍵詞,模型需要生成與這些資訊相關的文字。這種模式通常用於生成答案、解釋或推薦等。特定資訊可以是單個問題或多個關鍵詞,具體取決於任務的要求。

2、指令模板 (Instruction Template):在這種模式下,我們給模型提供一些明確的指令,模型需要根據這些指令生成文字。這種模式通常用於生成類似於技術說明書、操作手冊等需要明確指令的文字。指令可以是單個句子或多個段落,具體取決於任務的要求。

3、代理模式 (By proxy):在這種模式下,可以充當了一個代理,代表某個實體(例如人、角色、機器人等)進行操作或互動。代理模式的核心思想是引入一個中介對象來控制對實際對象的訪問,從而實現一定程度上的隔離和保護。諸如於在 ChatGPT 中,”act as xxx” 可以讓 ChatGPT 充當一個代理,扮演某個角色或實體的身份,以此來處理與該角色或實體相關的任務或請求。

4、示例模式 (By demonstration):在這種模式下,我們給模型提供一些示例文字,模型需要生成與示例文字類似的文字。這種模式通常用於生成類似於給定示例的文字,例如自動生成電子郵件、產品描述、新聞報道等。示例文字可以是單個句子或多個段落,具體取決於任務的要求。

特定指令(By specific)

特定指令(By specific)

在這種模式下,我們給模型提供一些特定資訊,例如問題或關鍵詞,模型需要生成與這些資訊相關的文字。這種模式通常用於生成答案、解釋或推薦等。特定資訊可以是單個問題或多個關鍵詞,具體取決於任務的要求。

如翻譯、告訴我,以我們的開頭來說:

  • 定義一下 prompt 工程

類似的場景還可以有:

  • 翻譯一下:永和九年,歲在癸丑,暮春之初,會於會稽山陰之蘭亭,修禊事也。

  • 轉為現代漢語:永和九年,歲在癸丑,暮春之初,會於會稽山陰之蘭亭,修禊事也。

對應的,還有一系列的子模式

子模式

如我們通過下面的 prompt 轉換了 ChatGPT 輸出的子模式:

轉化為 markdown 的 “””markdown {} “”” 表格形式,其中的欄位為英語模式、中文、簡述、示例。

表格示例:

其重點是:Output Driven

其重點是:Output Driven

在提示的開頭包含所有相關資訊,包括任何上下文或期望的結果,以及長度,格式樣式等。諸如於:用 100 字總結一下 ChatGPT。

指令模板(Instruction Template)

在這種模式下,我們給模型提供一些明確的指令,模型需要根據這些指令生成文字。這種模式通常用於生成類似於技術說明書、操作手冊等需要明確指令的文字。指令可以是單個句子或多個段落,具體取決於任務的要求。

如下是一個示例:

使用 STAR 原則與下面的格式總結一下這段話:"""最近幾天,因為工作 + 興趣的原則,我在研究用 text 2 image 來展示如何演進 prompt、用 text 2 article 來展示充足 prompt 的優點、結合 GitHub Copliot 來實現 prompt 完成工作。然後,我在本地部署了一個 Stable Diffusion、使用 ChatGPT 寫作展示 text 2 article、在 IDEA 中使用 GitHub Copilot。最後,得到了多篇文章和好多的文章閱讀量、幾個 Jupyter 程式碼段、以及一些經驗。"""情境(Situation):任務(Task): 行動(Action):  -||-結果(Result):  -||-

輸出文字時要注意中英文之間插入空格,留出間隔,諸如於 “””Hello 你好”””,用這種方式輸出一下剛才的文字:

情境(Situation): 最近幾天,在工作和興趣的驅動下,研究如何使用 text 2 image 和 text 2 article 展示 prompt 演進以及結合 GitHub Copliot 來完成工作。任務(Task):研究如何使用 text 2 image 展示 prompt 的演進過程研究如何使用 text 2 article 展示 prompt 的優點結合 GitHub Copliot 來實現 prompt 完成工作行動(Action):本地部署了一個穩定的 Diffusion 模型使用 ChatGPT 撰寫文章來展示 text 2 article 的效果在 IDEA 中使用 GitHub Copilot結果(Result):得到了多篇文章和很多的文章閱讀量獲得了幾個 Jupyter 程式碼段以及相關經驗

最佳實踐

  • zero-shot、few-shot 優先,最開始可以不給示例(因為示例可能是錯的),看任務執行情況,再提供少量樣本,如果不行,再對模型進行微調。

代理模式(By proxy)

代理模式(By proxy)

Proxy 模式是指使用者可以要求 ChatGPT 以特定的身份、角色或者身份扮演某個特定的人、角色或對象來生成回答。這種模式通常用於模擬某個特定人物的語言風格和語境,生成特定情境下的對話、回答或其他形式的文字。

例子 1:公司客服

當使用 ChatGPT 來代替某個人或實體時,可以使用 by proxy 模式。例如,可以使用以下 prompt 提問 ChatGPT 代替某個公司的客服:

我是一家餐飲公司的客服,有顧客反饋說我們的菜品質量有問題,我們該怎麼處理呢?

在這種情況下,ChatGPT 會扮演客服的角色,並根據提示來回答,從而幫助公司解決問題。ChatGPT 可以使用類似以下的方式來回答:

您好,很抱歉聽到您的反饋。我們將會仔細審核您的反饋,並儘快採取相應措施來解決這個問題。為此,我們需要更多的資訊來進一步了解您的反饋,包括哪些菜品有問題,具體問題是什麼等。請問您可以提供更多的資訊嗎?

例子 2:終端計算機

這種方式可以通過讓 ChatGPT 扮演某個實體的角色,例如客服、銷售代表等等,來幫助使用者解決問題。

在 Awesome ChatGPT Prompts 中:

Human: Act as a Linux Terminal

Robot:

ChatGPT: I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. When I need to tell you something in English, I will do so by putting text inside curly brackets {like this}. My first command is pwd

示例模式(By demonstration)

在這種模式下,我們給模型提供一些示例文字,模型需要生成與示例文字類似的文字。這種模式通常用於生成類似於給定示例的文字,例如自動生成電子郵件、產品描述、新聞報道等。示例文字可以是單個句子或多個段落,具體取決於任務的要求。

示例:

任務表述 顏色代表了溫度例子1 綠色代表寒冷例子2 藍色代表寒冷例子3 紅色代表溫暖例子4 黃色代表溫暖執行 橙色代表什麼

上圖為 Cohere AI 官網的示例圖,對應的聊天記錄如下:

English: Writing about language models is fun.

Roish: Writingro aboutro languagero modelsro isro funro.

English: The weather is lovely!

Roish:

增強 Prompt

增強 Prompt

符號化模式

符號化模式

符號化方法通常通過定義符號、符號之間的關係以及基於這些關係的規則來表示知識。

簡單來說,我們可以創建一個符號來表示特寫的規則,諸如於:

"""我們來玩一個名為 gkzw 的寫作遊戲,每當我說 gkzw,你開始寫作,規則如下:1. 字數不少於 200 字。2. 文中必須出現 "小明"。明白了嗎?"""

圍繞這個模式,我們可以創建複製的規則。

反向 Prompt 模式

Negative prompt(負向提示)是一種在使用語言模型時,針對模型輸出不希望的結果而設置的一種文字輸入方式。通過使用負向提示,可以幫助模型避免輸出不良、不準確或不恰當的文字。

具體來說,負向提示通常是以否定的形式呈現的,例如在文字生成任務中,使用「不要寫…」、「不要提及…」、「不要使用…」等方式來限制模型生成不想要的文字。在情感分析任務中,使用「不是…」、「並不…」等方式來指示模型識別出一段文字的負面情感。在 QA(問答)任務中,使用「不是…」、「不包括…」等方式來指示模型回答問題時避免輸出錯誤或不準確的答案。

Negative Prompt 在 Stable Diffusion 被廣泛使用,相似的,在 ChatGPT 中,我們也會經常使用到。

諸如於:

我們能玩一個名為 kfc 的謎語創作遊戲,當我說 "kfc",你寫一個謎題,要求:1. 不少於 200 字2. 謎題不能出現肯德基、星期四、KFC3. 正文可以夾雜小語種語言,如 """他說:Ciao"""4. 謎底必須是 ###原來今天是肯德基瘋狂星期四!!###格式類似於:....

再生成模式

根據 AI 提供的資訊,再讓 AI 生成內容。

例子 1,當我們無法確定我們的 prompt 是否準確,便可以通過 AI 來幫我們豐富 prompt 。

如我在:基於編‍程、繪畫、寫作的 AI 探索與總結的例子一樣

phodal: 我想寫一段話描述一張照片,幫我美化一下:一年輕女子穿著裙子,背對著鏡頭,在海邊看著日落,太陽已經到地平線下面了,她的頭髮在風中飄動。

ChatGPT: 這張照片中的場景令人心醉,一位年輕女子穿著一條裙子,站在海邊,背對著鏡頭,凝視著地平線下的夕陽。太陽已經沉入了海面,一片金黃色的光芒在海面上瀰漫,照亮了整片海洋,彷彿這個時刻被定格在了時間的某個角落裡。女子的頭髮隨著微風輕輕飄動,輪廓被餘暉映照得柔和而溫暖。她的目光凝視著遠方,彷彿在思考著生命的意義和無盡的未來。這張照片中蘊含著一種深刻的內涵,讓人感受到時間和自然的力量,也讓人思考著自己在這個宏大而美麗的世界中的角色和意義。

再去除掉不合適的詞,進行潤色,就可以再創作:

phodal:翻譯成英語

然後再提煉直至扔至 Stable Diffusion 中:

women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,

而後,根據圖片的結果,我們再反覆修改。

控線模式

TODO:這裡需要給出更精準的定義,如何讓 ChatGPT 做到?

在沒有推出 ControlNet,對於一個 Stable Diffusion 玩家,它需要反覆地吟唱咒語,才能獲取到滿意的圖案。

在有了 ControlNet 之後,我們可以創建一個 Openpose,或者是匯入圖片從圖片生成 pose,相當於是給機器一個示例,而後生成的圖片就會有令人滿意的姿勢。

在 GitHub Copilot,我們可以通過設置輸入和輸出,結合函數名三個要素,Copilot 就能生成大致準確的程式碼:

而在必要的情況下,添加一下注釋就能更完整了:

fun listAllDirInDir(dir: String): List {// ignore hidden files}

生成的程式碼會更貼近我們的需求。

概念模式集

概念模式集

Language is Language

對於 ChatGPT 來說,語言就是語言,他不區分自然語言和程式語言,甚至有可能程式語言對它更友好。所以我們可以直接通過程式語言與之交流:

我有下列遺留程式碼,我想在接口的函數名、參數名不變的情況下(可以新參數,舊的參數不能變)加入新功能:module.exports = async function loadYamlFile(filepath, workdir = path.dirname(filepath)) {const content = await fs.readFile(filepath, 'utf8'); // 讀取檔案內容// TODO: 將 content 看做ejs模板的字串,進行渲染,如果傳入了渲染ejs時的context值不為undefined,就進行渲染,否則不進行渲染。// TODO:將渲染後的結果傳給yaml.loadconst data = yaml.load(content); // 解析YAML為JSON對象// 遍歷JSON對象,查找$ref屬性const processRef = async (obj) => {if (typeof obj === 'object' && obj !== null) { // 如果是對象if ('$ref' in obj) { // 如果包含$ref屬性const refPath = path.join(workdir, obj.$ref.split('#')[0]); // 獲取引用檔案路徑const pointer = obj.$ref.split('#')[1]; // 獲取JSON指針// TODO: 遞迴調用的時候,取出context中以obj.$ref的屬性值作為屬性名的值作為新的context向下傳遞const refData = await loadYamlFile(refPath, path.dirname(refPath)); // 遞迴讀取引用檔案const value = getValueByPointer(refData, pointer); // 修復了 # 號問題return value;} else { // 如果不包含$ref屬性,遞迴處理子屬性for (const prop in obj) {obj[prop] = await processRef(obj[prop]);}}}return obj;};

上述描述會比純自然語言更容易描述我們的需求,適合於更精細的指導。同時,不一定是程式語言,結構化的聲明式 DSL 它也可以很好的解析,如:

把我給定的輸入輸出,按照下面的格式寫成一個測試用例的描述:{desc: 'Test with $p_ref returning array',input: {filepath: './test18.yml',workdir: './test/v2',},expected: {"name": "Alice","age": 20}}

結果:

{desc: 'Test with $p_ref returning array',input: {filepath: './test19.yml',workdir: './test/v2',},expected: [{"name": "Bob"},{"name": "Alice"},{"name": "Bob"},{"name": "Alice"}]}該測試用例輸入了一個 YAML 檔案 test19.yml,該檔案中包含了一個 $flaten 屬性,其值為兩個 $p_ref 對象組成的陣列,引用了一個返回陣列的 YAML 檔案 test19_ref.yml。執行該測試用例後,期望得到的輸出是一個陣列,其中包含了兩個 $p_ref 引用結果的 flatten 後的結果。需要注意的是,由於該測試用例涉及到檔案讀取和模板渲染等操作,需要在測試前確保相關檔案和依賴庫已經正確安裝並配置好。

通過使用DSL,還可以縮短輸入和輸出的token數,從而放大 ChatGPT 的能力。

概念抽象

對於 ChatGPT 尚不存在的概念,可以通過 Google 相關的內容之後,由 ChatGPT 進行總結。

根據下面的文字重新解釋一下 ControlNet:- 官網介紹:ControlNet is a neural network structure to control diffusion models by adding extra conditions.- 模式:根據給的底圖,生成一個類似建模效果(法線貼圖)的中間圖,再生成圖片- 場景:用來實現骨骼綁定、精準控線、線稿上色、依據深度圖結構透視精準重繪等。

結果:

根據給出的文字,ControlNet是一種神經網路結構,旨在通過添加額外條件來控制擴散模型。在特定場景下,ControlNet被用於生成類似建模效果(法線貼圖)的中間圖和相關的圖像。這種技術可以被應用於多個領域,如骨骼綁定、精準控線、線稿上色、深度圖結構透視精準重繪等。具體來說,ControlNet技術可以被用來控制模型的擴散過程,從而提取特定的資訊並生成新的圖像。在骨骼綁定、線稿上色等場景中,ControlNet技術可以被用來增強圖像,使其更加真實和生動。在依據深度圖結構透視精準重繪的場景中,ControlNet技術可以被用來根據圖像的深度資訊,生成精確的重繪圖像,從而提高圖像的真實感和逼真度。

縮短:能用一句話解釋一下 ControlNet 嗎

結果:

ControlNet 是一種神經網路結構,通過添加額外的條件來控制擴散模型,從而實現圖像增強、重構和生成等功能。

概念對齊

第一步,定義

第一步,定義

phodal:自舉是指就編譯器可以自行編譯自己的編譯器。實現方法就是這個編譯器的作者用這個語言的一些特性來編寫編譯器並在該編譯器中支持這些自己使用到的特性。

第二步,試探

phodal:將自舉應用在遊戲領域,應該是怎樣的?

第三步,確認理解:

那麼,抽象一下我們新定義的自舉?

最後一問

最後一問:

PS:mmp,他一定是故意的

PS:mmp,他一定是故意的。

類比模式集(待定)

類比模式集(待定)

類比是指將一個事物或概念與另一個事物或概念進行比較,找出它們之間的相似之處,以此來推理或說明某個問題或情況。

CoT

CoT 是 “Chain of Thought” 的縮寫,是一種針對自然語言處理 (NLP) 模型的提示方法,旨在提高模型的推理能力。通過將多步驟問題分解為中間推理步驟,CoT 提示使得模型可以更有效地處理需要多步驟推理的任務,如數學問題和常識推理。與傳統提示方法不同,CoT 提示引導模型生成中間推理步驟,從而模擬人類推理的直覺過程。

TODO:(rename to Manual-Cot/Auto-CoT )

模板方法

模板方法模式是一種行為型模式,它定義了一個操作中的演算法骨架,將某些步驟延遲到子類中實現,從而使得子類可以在不改變演算法結構的情況下重新定義演算法中的某些步驟。

在接下來的例子中,我們會創建一個 muji 遊戲中。在遊戲的實現可以分為多個步驟,例如初始化遊戲、生成隨機數、獲取使用者輸入、計算得分等等,而這些步驟可以通過模板方法模式來進行實現。

我們來玩一個程式設計遊戲名為 wula,包含五個步驟:第一步. 問題分析:每一輪遊戲,你將看到一個以 "wula:" 開頭的問題,你需要分析這個問題並簡單介紹一下通常解決這個問題的方法。第二步. 程式碼編寫:你需要用 JavaScript 編寫解決這個問題的程式碼,並輸出對應的程式碼,並介紹一下你的程式碼(不少於 200 字)。第三步. 程式碼執行:你需要作為 JavaScript Console 執行第二步寫的程式碼,如果沒有給出測試資料,你需要自己隨機生成測試資料,並將這些資料輸入到程式碼中進行計算。第四步. 錯誤處理:如果你的程式碼存在錯誤或無法正常執行,你需要輸出錯誤,並回到第二步重新開始遊戲,直到你的程式碼能夠正常工作。第五步. 總結:你需要用不少於 100 字左右總結一下這個問題,以及你的解決方案,讓其他人可以簡單了解這個問題及其解決方法。示例如下:"""wula: 頭共10,足共28,雞兔各幾隻?簡介:這是一個雞兔同籠問題,{},## 雞兔同籠// 計算雞兔數量的函數function calcAnimals(heads, legs) {const rabbitCount = (legs - 2 * heads) / 2;const chickenCount = heads - rabbitCount;return {"chicken": chickenCount, "rabbit": rabbitCount};}// 計算雞兔數量const result = calcAnimals(10, 28);// 輸出結果console.log(result);程式碼的輸出結果是:{}## 總結{}"""明白這個遊戲怎麼玩了嗎?

在這個遊戲裡,我們結合了幾種不同的模式:

Instruction:讓 ChatGPT 創建了一個名為 wula 的遊戲,並定義了遊戲的步驟。

Specific:讓 ChatGPT 用 JavaScript 編寫一個程序。

Proxy:讓 ChatGPT 作為 JavaScript Console 執行程序,並返回結果。

Specific:讓 ChatGPT 做總結。

Demonstration:提供了一個示例,讓 ChatGPT 理解遊戲的步驟。

自舉模式

自舉(Boostrapping)的核心思想是利用一組基礎工具和材料來構建和生成一個新的工具或系統,從而逐步替代掉原有的基礎工具和材料。在這個過程中,新的工具或系統會逐漸變得更為高效和強大,從而實現對原有基礎工具和材料的完全替代。

如下圖所示:

如下圖所示

TODO:重新解釋,上圖出自:《Bootstrapping in Compiler Design

先看例子 1:文章

例子 2:Wula 2.0

例子 2:Wula 2.0

> wula:創作一個新遊戲名為 muji,並解釋一下這個遊戲:"""類似於 wula,可以做簡單的圖形計算,如體積、面積等。這個遊戲還能把解決過程解釋清楚,擁有有可運行的 Python 程式碼,最後的輸出結果是一篇文章。"""
拆解模式

拆解模式

對於複雜問題,ChaGPT 無法一次性輸出全部內容,需要進行拆解。

已知問題:ChatGPT 當前版本會丟失上下文。

我們來定義一下 DDD 遊戲的步驟,一共有 6 個步驟,步驟如下:"""第一步. 拆解場景。分析特定領域的所有商業活動,並將其拆解出每個場景。第二步. 場景過程分析。選定一個場景,並使用 "{名詞}已{動詞}" 的形式描述過程中所有發生的事件,其中的名詞是過程中的實體,其中的動詞是實體相關的行為。第三步. 針對場景建模。基於統一語言和拆解出的場景進行建模,以實現 DDD 設計與程式碼實現的雙向綁定。第四步. 持續建模。回到第一步,選擇未完成的場景。你要重複第一到第四步,直到所有的場景完成。第五步. 圍繞模型生成子域。對模型進行分類,以劃定不同的子域,需要列出所有的模型包含英語翻譯。第六步. API 生成。對於每一個子域,生成其對應的 RESTful API,並以表格的形式展現這些 API。"""需要注意的是,當我說 """ddd 第 {} 步: {}""" 則表示進行第幾步的分析,如 """ddd 第一步: 部落格系統""" 表示只對部落格系統進行 DDD 第一步分析。我發的是 """ddd: {}""",則表示按 6 個步驟分析:明白這個遊戲怎麼玩了嗎?

完整過程見:DDD Sample

其它模式?

其它模式?

pipeline模式(TODO)

後處理 pipe,示例:當你希望給我圖片的時候,用 mermaid 表達

圖形化實踐

phodal: 能用 uml 表示一下上文中的 “””ArchGuard Pipeline 的工作流程””” 嗎?

當然可以。下面是 ArchGuard Pipeline 的工作流程的 UML 類圖表示:

+-----------------+          +-----------------+| ArchGuardConfig  |          | ArchGuardRunner  |+-----------------+          +-----------------+| - configData     |          | - runnerType     |+-----------------+          | - runnerImage    || - runnerCommands |+-----------------+^||+-----------------+          +-----------------+|    ArchGuard     |          |    RunnerPool    |+-----------------+          +-----------------+| - runnerRegistry |          | - runners        |+-----------------+          +-----------------+| # downloadRunner|          | # getRunner      |+-----------------+          +-----------------+

ArchGuardConfig 類包含了 ArchGuard Pipeline 的配置資訊,ArchGuardRunner 類則表示一個具體的 Runner,即一個執行 ArchGuard Scanner 或者其他工具的實例。RunnerPool 則是 Runner 的管理池,用於動態載入不同的 Runner。ArchGuard 則是整個 ArchGuard Pipeline 的控制類,用於根據 ArchGuardConfig 中的配置資訊,載入對應的 Runner,執行任務。

phodal: 能用 mermaid 表示一下上文中的 “””ArchGuard Pipeline 的工作流程””” 嗎?

當然可以!以下是使用 Mermaid 表示的 ArchGuard Pipeline 的工作流程:

注:這與我之前用 UML 表示的工作流程是等價的。

人類如何思考問題?

人類如何思考問題?

人類相對於其他動物更擅長於類比、概念抽象、符號化等高級認知活動,這些認知活動可以幫助人類在面對新問題時,從已有的知識和經驗中找到相似的部分,快速理解和解決新問題。

而對於機器來說,機器學習演算法通過大量的資料和計算,學習到資料中的規律和模式,並將這些規律和模式應用到新的資料中,從而實現預測和決策等功能。例如,機器學習演算法可以通過大量的圖像資料學習到圖像的特徵,並在新的圖像中識別出相應的物體;也可以通過大量的自然語言資料學習到語言的規律,從而生成自然語言文字。

參考資源:

本文相關的模式圖片參考來源主要是:Prompt Engineering

本文經作者授權轉自「phodal」,如需轉載,請聯繫作者:

相關文章