---
# System prepended metadata

title: 【生成式AI導論 2024】第4講：訓練不了人工智慧？你可以訓練你自己 (中) — 拆解問題與使用工具
tags: [生成式AI導論 2024]

---

# 【生成式AI導論 2024】第4講：訓練不了人工智慧？你可以訓練你自己 (中) — 拆解問題與使用工具

## 強化模型的能力

> [上一堂課](/Px9cUHeWRC-Uf3psmuL8gA)提到了
>  
> 1. 將prompt加上神奇咒語
> 2. 供額外資訊。

### 把任務分多步驟來解

#### 把複雜的任務拆解成多個步驟

* ![image](https://hackmd.io/_uploads/r1yUy5Soyl.png)
* 例如把寫報告拆成:列大綱->寫各段->作摘要
![image](https://hackmd.io/_uploads/SyW8CcHsJg.png)
* 這就是為什麼在神奇咒語中叫模型think step by step思考結果會比較好，因為會把過程列出來，以數學問題為例:

  * 這是叫模型用chain of thought 的結果![image](https://hackmd.io/_uploads/S10-yoBi1x.png)
  * 可以看作就是把任務分成多步驟![image](https://hackmd.io/_uploads/HkbXkjriyg.png)

#### 檢查自己的答案

* ![image](https://hackmd.io/_uploads/B1onNsSjJx.png)
* 也可以叫語言模型在檢查一次自己產生的結果，就像我們會檢查考卷一樣，再看一次有機會發現錯誤
* 因此Constitutional AI這篇論文就使用了這樣的步驟:

  1. 根據prompt產生答案
  2. 叫模型根據產生的答案檢查是否有錯誤或是違反善良風俗的地方
  3. 根據原本的回答跟檢查的結果產生新的答案

#### 同一個問題每次答案都不同

* 為什麼同一個問題每次答案會不同?
  * 因為語言模型給出的是每個字的機率，而不是直接選出字，等於給一個文字骰子後再去骰骰子。只是比較有可能骰出特定幾個字，但不一定只會骰出那個字。![image](https://hackmd.io/_uploads/BJE77jHi1g.png)
* 透過每次答案不同的這個特性，可以多問幾次，再取最可靠的答案，這樣的步驟叫做**Self-Consistency**![image](https://hackmd.io/_uploads/rkmw4iHsJe.png)

#### 組合全部

* 最終結合全部![image](https://hackmd.io/_uploads/HJvMBjBokx.png)

* 就會變成像這樣的步驟，先分為多個步驟，在每個步驟中去多次思考，然後取可靠的答案進入下階段。這種方法稱為**Tree of Thoughts(TOT)**![image](https://hackmd.io/_uploads/BkMMBiHjJg.png)
* 還有其他很多XX of Thought的方法，但都是把任務拆成小任務，讓語言模型去各個擊破。![image](https://hackmd.io/_uploads/Sk9hBoSs1x.png)

### 讓語言模型有使用工具的能力

* 語言模型也有不擅長的事，如計算。
* 語言模型不能直接當成搜尋引擎，因為他就是文字接龍，沒有資料庫告訴他最新的消息。

#### 使用搜尋引擎作為工具

* 等於把專業問題跟資料一起丟給模型![image](https://hackmd.io/_uploads/rJ4LLorj1x.png)
* 這個技術就是**Retrieval Augmented Generation(RAG)**
* 這項技術其實沒有很困難，因為完全沒有改變模型，只是多給他一些資料。
* 透過這樣的改變，就可以讓你的模型跟別人的不一樣，例如你有獨佔的資料庫，就可以得到特別的答案。

#### 使用寫程式作為工具

* 以GPT4而言，他會直接寫程式碼去計算數學式子，並且執行取得答案。
![image](https://hackmd.io/_uploads/SkI_6iSiyg.png)
![image](https://hackmd.io/_uploads/SkhuaiSjJx.png)
* 這種方式稱為**Program of Thought(POT)**，用寫一段程式取代文字接龍。

#### 使用文字生圖AI作為工具

* 可以讓GPT自己產生文字遊戲的圖片

#### 語言模型如何使用工具?

* 一樣使用文字接龍，但使用特殊symbol去呼叫工具。在```呼叫工具```與```結束使用工具```之間的文字就是操作工具的指令。![image](https://hackmd.io/_uploads/S1ors3Bs1x.png)
* 想要知道如何使用工具，可以去看[【生成式AI】能夠使用工具的AI：New Bing, WebGPT, Toolformer](/bF_zT_vYQzm3cvfIg7YKHg)
* 但畢竟使用工具的指令也是生成的，所以使用工具也有可能會出錯。例如叫他把"畫一隻狗"翻成英文，有可能會翻成英文，同時順便呼叫畫圖工具畫一隻狗給你。![image](https://hackmd.io/_uploads/HysYhhBoJe.png)
* [Any Tool](https://arxiv.org/abs/2402.04253)這篇文章說明了如何讓語言模型把使用工具這件事用到極致。
