ChatGPT 顯然不太擅長某部分的問題,但我們可以加入一些巧妙的設計,讓它在窘迫時,可以呼叫外部工具來解決問題。
在〈利用LangChain實作ChatPDF:問個問題,輕鬆找出文件重點〉這篇文章,也和大家介紹到大型語言模型加上LangChain 如同魔法般的應用方式,只要使用LangChain工具,就能用聊天的方式,快速了解文件內容。不過,我們都知道大型語言模型仍有些弱點,例如看不懂圖片、也不太會計算數學,更不知道現在是何年何月。那麼,有沒有辦法加上一些工具,讓我們在請LLM幫忙做事時,只要遇到它不擅長的事情(例如:數學計算、查詢日期時間)就能呼叫外部工具協助解決問題呢?就像人會拿出計算機算帳或是手錶看時間一樣。 是的!這就是這篇文章想告訴你的。
先讓我們來問問ChatGPT兩個簡單的問題:
1.數學計算:2.34的3.45次方是多少?
實際答案是:18.78。從上圖可以看到,ChatGPT顯然答錯了!而且多試幾次就會發現答案不太一樣。
2.詢問日期:今天的日期是?
實際上寫文的日期是2023-06-29,ChatGPT顯然又回答錯了!
在本文中想和大家分享一個解決的方法是使用LangChain中的agents
- agents是什麼呢?
agent是一個可以為大型語言模型加上其他功能的程式工具,可以簡單理解為agent能在對話過程中,選擇並使用現有的工具(例如計算機)。agent也可以存取(access)一些工具,並根據用戶的對話來決定使用哪些工具。
實作解析
要使用agent ,需要三個要件:
- 一個基礎LLM
- 一個想要使用的工具,例如計算機
- 一個agent,主要是用來擔任控制選擇和調用現有工具的角色
實例化一個LLM,這裡的作用是使用語言模型作為agent的推理工具,我們會希望這裡盡可能精確,因此temperature會設為0,將隨機性減至最低
接下來我們要實例化計算機,可以創建自定義的工具,也可直接使用langchain中的工具。我們在這創建一個計算機,並實例化,再裝進工具箱(tools)中。實際用的工具是python的内置函数 eval(),eval() 可以放入「一行字串」,並把輸入的字串,轉換成可執行的程式碼後並執行,所以python一般可直接執行的數學計算在這都可以執行。
請注意,在我們創建的工具中都要有 name 和 description 這兩種屬性(Attribute).告訴agent這個工具的名字和描述,這不只是提供可讀性,而是有意義的,agent藉由這個描述得知這是"Calculator"可用來計算數學表達式(‘use this tool to evaluate a math expression.’)。
接下來建立agent實例,在這之中有幾個參數,指定的agent是chat-conversational-react-description,這讓我們使用聊天模型創建agent,而tools和llm就是我們剛才介紹的:
到這裡我們就可以先嘗試使用它了。讓我們問些數學問題,看看agent是如何運作的。
在這兩個問題中都可以看到agent呼叫了我們的計算機並把要計算的字串傳入,最終給出了正確答案!
Q1:
{
"action": "Calculator",
"action_input": "3 * 2 - 1.001 + 3"
}
'output': '7.9990000000000006'
Q2:
{
"action": "Calculator",
"action_input": "2.34**3.45"
}
'output': '18.78428669635901'
還有更好玩的!讓我們問問應用問題:如果瑪麗有四個蘋果,喬治帶來兩盒半蘋果(蘋果盒子裡有八個蘋果),我們有多少個蘋果?
可以看到在計算的部分,agent呼叫了計算機,並給出了正確答案。
{
"action": "Calculator",
"action_input": "4 + (2.5 * 8)"
}
'output': '24.0'
那如果我們詢問非數學問題呢?
{
"action": "Final Answer",
"action_input": "The capital of Taiwan is Taipei."
}
'output': 'The capital of Taiwan is Taipei.'
可以看到agent沒有啟用計算機,而是用它原本的知識回答,告訴我們台灣的首都是台北。
結語
在這篇文章中,我們利用LangChain中的agent實作連接外部工具,協助ChatGPT補足短版,agent是不是非常聰明的設計呢!希望你喜歡今天的內容,接著可以再去玩玩LangChain開發更多好用的功能囉。
參考資料
1.https://learn.deeplearning.ai/langchain/lesson/7/agents
2.https://edge.aif.tw/express-langchain-chatpdf/
3.https://python.langchain.com/docs/modules/agents/
4.https://www.pinecone.io/learn/langchain-agents/#what-are-agents
5.https://colab.research.google.com/drive/1wOQCqsGVz9du7jqN_kupR57smclQ6DF7?usp=sharing
6.https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide
(撰稿工程師:莊智宇)