iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
生成式 AI

Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用系列 第 15

【Day15】Dify 入門 (1):讓 Agent 幫報新聞、查資料、唬爛...還有好多好多

  • 分享至 

  • xImage
  •  

什麼是 Agent

根據〈Artificial Intelligence: A Modern Approach〉這本 AI 聖經本中對 Agent 的定義

An agent is anything that can be viewed as perceiving its environment through sensors and acting upon that environment through actuators (促動器).

任何可以透過「感知器 (sensor)」感知其環境,感知其環境,並且透過感知其環境,並且透過「執行器 (actuator)」對環境做出動作的個體,都可以叫做一個代理人 (Agent)。

有些人會把 AI Agent 翻譯成「AI 智能體」,因為其能夠觀察環境並做出動作的特性讓人覺得他特別「聰明」,但我還是會使用「代理人」或者「代理」來統稱 Agent。

因為「代理」強調的是一個自主行動者,可以執行特定任務,這樣的定義不僅包含了人工智慧的應用範疇,也可以適應於非智能的自動化系統。相比之下,「智能體」更容易讓人理解為僅涉及智慧層面的系統,而忽略其實際操作的多樣性。簡單來說就是 Agent 沒有你想的那麼聰明,它終究只是我們的代理而已。不論是 Linux 中的排程器 (scheduler);或者等一下要介紹的 LLM Agent,甚至是過去我們介紹到的 gpt-crawler,他們都可以算是 Agent。

如果你搞清楚 Agent 不是「智能體」了,大概可以猜到,其實現在常見的 AI Agent,也不過是多次呼叫 LLM,利用 Chain of thought 等技巧,隱藏這一串推理過程,讓你覺得他好像有「智慧」一樣。所以厲害的並不是 LLM 本身,而是背後的流程設計,這點請謹記在心。

Dify 的 Agent

官網對 Agent 的定義如下,包山包海,複雜任務的好幫手

智能助手(Agent Assistant),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。

我們用昨天的方法來創建一個 Agent,到建立空白應用這邊建立一個 Agent

聊天助手一樣的介面,不過這邊多了「工具」可以使用

工具有很多,等等來試試看吧

Agent 設定

注意到 Dify 右上方模型旁邊多了一個 Agent 設定

它可以讓你自訂最大迭代次數,為什麼需要這個最大迭代字數呢?剛剛有提到 Agent 不過是多次呼叫 LLM 的一個「系統」,我們又知道每次的 API 呼叫都會花錢,設定一個上限可以有效避免模型出現「停不下來」的情況。

那他要什麼時候才會知道要停下來呢?透過看到一個「結束 token」才會結束,也就是說模型要不要停下來全看他的心情

那怎麼辦,身為 API 呼叫的人就活該找罪受嗎?我是什麼很賤的人嗎 🤡?這時候前幾天我們認識的 "function calling" 就派上用場了,因為他可以限制模型輸出的 token,雖然說這樣也會導致模型變「笨」,但考量成本,這是很棒的解法了。

如果沒有 function calling 功能的模型怎麼辦呢?這時候 Dify 會用一個 Prompt engineering 方法叫做 ReAct (Reason + Act),先推理再動作。詳細介紹可以參考這篇文章

這邊以 Ollama llama3 為例,因為其沒有 function calling API 可以用,所以使用 ReAct 方法。觀察其提示詞,就可以知道它的原理了。

使用內建工具 (gpt-4 + function calling)

如果工具是灰色的,表示他需要經過授權才能夠使用,這邊我們來用免費的 DuckDuckGo 來當作搜尋引擎,做一個能夠報天氣的 Agent 吧!這邊我們用 "DuckDuckGo Image Search" 這個工具,來上 Agent 遇到與圖片相關問題的時候,就會使用工具來搜尋

這是我的設定 (沒錯就是這麼簡單)

你也可以對工具做一些設定,將鼠標移動到工具上,就會出現一個驚嘆號。這個工具可以設定「最大搜尋結果數」「圖片大小」等等

恭喜你做出一個可以查圖片的 Agent 了 🥳 就是這麼簡單,使用起來效果也還不錯

Log 日誌

你可以查看 Agent 使用工具的細節,可以發現 Agent 自動將你要找的東西 (海狸🦫) 放到 query。

或者也可以直接查看 Agent 日誌 (log) 來得到所有細節

到追蹤這邊可以看到資料經過的每一個模組,這些模組發生什麼事情

請務必熟悉日誌的使用,因為這在之後要建構複雜大型 LLM 專案很有用

使用內建工具 (llama3 + ReAct)

用一樣的方法、一樣的 query、一樣的最大迭代次數 (5次) 去問 llama3 為基底的 Agent,就知道 ReAct 的缺點 (也可能是 Llama3 8b 的缺點),不斷重複、似乎沒有終點的呼叫。

其他例子

新聞 + 圖產生器

以下是我用 webscraper 和 duckduckgo image search 做出來一個簡單的新聞產生器

小結

好像有點講太多,不過上述操作都是建立在「多次呼叫 LLM」,今天就算你不是用 Dify,底層的原理也是如此,只不過 Dify 把一切都變得十分簡單 🫶。我們明天來玩玩自定義工具和最重要的功能:知識庫 📚,期待一下吧~


上一篇
【Day14】Dify 安裝:使用 Docker 安裝、設定模型並啟動你的第一個 LLM 聊天助手
下一篇
【Day16】Dify 入門 (2):讓 Agent 使用自定義工具吧!(內含一咪咪 FastAPI)
系列文
Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言