參考來源

這是個python的範例,我改用Javascript寫,並抽出重點

const messages = [
    {
        role: "system",
        content: `你是一個專業的 AI 助手,會一步一步解釋你的推理過程。對每一步,請提供一個描述你在該步驟中所做工作的標題,並附上內容。決定你是否需要再進行一步,或是已經準備好給出最終答案。請在句尾回應'next_action'('continue' 或 'final_answer')。盡可能使用多的推理步驟,至少 3 步。意識到你作為大型語言模型(LLM)的限制,以及你能做和不能做的事情。在你的推理過程中,包含對替代答案的探索。考慮到你可能是錯的,如果你的推理有錯,錯在哪裡。徹底測試所有其他可能性。你可能是錯的。當你說你正在重新檢視時,實際上要重新檢視,並使用另一種方法來進行。不要只是說你正在重新檢視。使用至少 3 種方法來推導答案。使用最佳實踐。`,
    },
    { 
        role: "user", 
        content: ${prompt} 
    },
    {
        role: "assistant",
        content: "謝謝!我現在將按照我的指示一步一步思考,從分解問題後的開始部分開始。",
    },
]

上面的system prompt,讓AI使用3種方式驗證自己寫出來的東西對不對。

在System prompt後,就是發問並請AI開始整理回答

// 思維鏈程式碼

let stepCount = 1;
let totalThinkingTime = 0;

while (true) {
    const startTime = Date.now();
    const stepData = await makeApiCall(messages, 300);
    
    const endTime = Date.now();
    const thinkingTime = (endTime - startTime) / 1000;
    totalThinkingTime += thinkingTime;

    messages.push({ role: "assistant", content: stepData });

    if (stepData.indexOf("final_answer") >= 0 || stepCount > 3) {
        break;
    }
    
    stepCount += 1;
}

整段邏實其實很簡單,就是把AI回答內容再丟回給他反思,直到AI覺得答案是正確的為止。

下面兩個近期用來評論AI的問題,在使用思維鏈的方式後, llama-3.1-8b gemma2-9b-it 甚至 gemma-7b-it 都有不錯的正確率

`strawberry`單字中裡有幾個`r`

3.11 與 3.8 這兩個數字誰比較大?

已下是回傳的對話記錄:

步驟 1:問題理解

我需要計算 strawberry 這個單字中有多少個 r。這個問題很簡單,但是我會一步一步地思考。

步驟 2:字串分解

我會把 strawberry 這個單字分解成每個字母:s-t-r-a-w-b-e-r-r-y。現在,我可以開始計算 r 的數量了。

步驟 3:計算 r 的數量

從分解的字串中,我可以看到有 3 個 r。因此,我可以得出結論:strawberry 這個單字中有 3 個 r

步驟 4:檢查替代答案

我會檢查一下是否有其他可能的答案。例如,如果我錯過了某個 r,或者如果我計算錯誤了。然而,根據我的計算,答案是 3。

步驟 5:確認答案\n我會確認一下我的答案是否正確。根據我的計算,答案是 3。因此,我可以得出結論:strawberry 這個單字中有 3 個 r

結論

根據我的計算,我可以得出結論:strawberry 這個單字中有 3 個 r

最終答案是

strawberry 這個單字中有 3 個 r