我的第一個 ChatGPT 聊天機器人

更新於 2023/05/19閱讀時間約 5 分鐘
由于 ChatGPT 的出現讓我們看到了聊天機器人的新可能性,我們這篇文章的目的,就是要來製作第一個屬於自己的聊天機器人。
我們先來準備範例的程式碼,並且稍後會再跟大家介紹要設計自己的 ChatGPT 聊天機器人的重要概念。

初始專案與環境設定

下載程式碼

請先使用下面這一段指令下載我們的範例程式碼。
git clone https://github.com/u8621011/HelloGPT.git

設定API key

程式碼下載完後,到【命令列視窗】輸入下方指令來複製 .env 設定檔,複製完後,修改 .env 檔裏面的OPENAI_API_KEY 變數,設定為你個人的 OpenAI API key。
cd HelloGPT
copy .env.example .env

準備 python 執行環境

#確認目前正在 HelloGPT目錄下
virtualenv env
env/bin/activate
pip install -r requirements.txt
以上環境準備好了後,請使用 Visual Studio Code 來開啟專案內的 my-first-bot.ipynb 檔。
開啟檔案後,請先選擇 vscode 的執行環境。
執行環境選擇完後,你就可以依序在 Juypter notebook Cell 上按【執行按鈕】執行 Cell了。

基本概念

要以程式碼製作自己的對話機器人,最重要的核心程式如下:
首先我們先準備好呼叫 chat api 的工具,如下:
def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
  # 呼叫 OpenAI chat completion API
  response = openai.ChatCompletion.create(
    model=model,
    messages=messages,
    temperature=temperature, # 這個參數決定了模型輸出的隨機程度
  )
  # print(str(response.choices[0].message))
  # 回傳模型生成的回應
  return response.choices[0].message["content"]
然後再準備我們要傳給 chat api 的訊息結構。
messages =  [
  {'role':'system', 'content':'你就像唐朝大詩人李白一樣,請使用四言絕句來跟我做回應。'},
  {'role':'user', 'content':'你好'},
  {'role':'assistant', 'content':'兄臺別來無恙'},
  {'role':'user', 'content':'我很好,今天你打算去哪裏?'}  
]
response = get_completion_from_messages(messages, temperature=1)
print(response)
chat completion 的 messages 資料結構,其實就是儲存使用者和機器人的對話記錄,chat api 在收到我們如上的訊息資料後,它就可以知道和使用這對話的前後文。
下方則是實際自行後的結果。
大家有沒有注意到 chat api 竟然會以文言文回覆我們?會有這樣的效果則是因為我們在 message 裏面加上了 system 這個角色的設定。

角色定義

messages 這資料結構的功能不只是保存了機器人和使用者對話記錄,它也可以讓我在正式對話前,設定機器人該扮演的角色跟它對話的背景材料。
我們可以使用的角色共有三個(system/assistant/user),他們之間的關係如下:
system 角色定義了你期待對話機器人的整體行為準則。
assistant 的部分,則是記錄對話機器人的回應。
user 的部分,則是使用者的對話。
所以 messages 裏面我們通常在第一則放 system 的系統設定,而後續則是存放著 user 跟 assistant 之間互相來來往往的訊息。
最後,我們再來多看幾個範例,大家應該會更好理解 messages 訊息的使用方法。

對話範例

範例一

我們從機器人的回應可以看出來,因為沒有其他的對話記錄,所以機器人對我們是一無所知的。

範例二

如以下的 messages,由於我們在對話過程中已經提到我們自己名字,所以在稍後我們詢問機器人我們的名字時,它就會知道怎麼回覆。

接單機器人

最後一個 messages 定檔範例,我們在 system 裏面提示了機器人它的任務,作業流程以及我們的菜單,如下:
有了這些設定後,大家可以看到機器人與我們的對話就會更有目標性,而且很讓人驚訝的是,它也記得我們 system 設定內提到的很多的細節。回覆記錄如下:
以上希望能幫助大家理解如何開始設計自己的第一個聊天機器人,當然目前這樣的設計還無法盡善盡美,其他的技巧我們日後會再陸續跟大家介紹。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
18會員
19內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Ted Chen的沙龍 的其他內容
這篇其實就是 Andrew Ng 大大與 OpenAI 合作的一門免費課程【Chatgpt Prompt Engineering For Developers - Guideline】章節的第二段筆記。很建議大家直接看原本的課程影片,內容蠻淺顯易懂的。 第一段筆記在這:開發者的 ChatGPT 提示
這篇其實就是 Andrew Ng 大大與 OpenAI 合作的一門免費課程【Chatgpt Prompt Engineering For Developers】的筆記。很建議大家直接看原本的課程影片,內容蠻淺顯易懂的。 另外因為篇幅有限,所以我們會將他的第一堂課的內容(Guidelines),拆分成
在正式以比較技術面角度來認識 ChatGPT / GPT 之前,我們先用幾個簡單的例子來認識 ChatGPT 以及語言模型可以做到怎樣的事情。 什麼是 ChatGPT? 簡單來說明,ChatGPT 是一個背後使用 GPT 語言模型的對話機器人,而它可以做什麼事情了?我們先來使用幾個常見的語言相關的任
63 個省,嗯...好多啊,可能記得起來嗎?不過開玩笑的,記憶也沒有太多意義,今天和大家分享這影片主要是因為,這影片的取景跟配樂實在是太精彩了 另外這位 Youtuber 其實關注他很久了,很喜歡他表現出來的自豪、熱愛的態度,一定是位很熱愛自己國土的人,才能堅持到現在。 比較可惜的是這部影片沒有字幕
這次看完這影片後,發現了一個蠻有趣的越南網站 - Gody。它是一個專門設計給背包客、自由行旅客的一個旅行工具平台(For 越南人)。大致上行程規劃、旅程經驗分享、甚至交友/語言交換似乎都可能在上面實現? 另外也在想,不知道下次要不要深入了解後跟大家仔細拆解、說明如何使用這個網站呢? 如果有這個興趣
人果然身處在環境中會不自覺的麻痺,看著這越南朋友遊台灣的影片,應該是自己對於台北也過分熟悉吧,所以沒有太多的衝擊。但是看著影片時,不時會出現的【原來越南語是這麼說?】的訝異,倒是有點不一樣的感覺 不過即使太過於熟悉,任何東西深掘下去,果然也是會有平常沒有注意到之處。 關於蚵仔麵線的其他 由於自己還算
這篇其實就是 Andrew Ng 大大與 OpenAI 合作的一門免費課程【Chatgpt Prompt Engineering For Developers - Guideline】章節的第二段筆記。很建議大家直接看原本的課程影片,內容蠻淺顯易懂的。 第一段筆記在這:開發者的 ChatGPT 提示
這篇其實就是 Andrew Ng 大大與 OpenAI 合作的一門免費課程【Chatgpt Prompt Engineering For Developers】的筆記。很建議大家直接看原本的課程影片,內容蠻淺顯易懂的。 另外因為篇幅有限,所以我們會將他的第一堂課的內容(Guidelines),拆分成
在正式以比較技術面角度來認識 ChatGPT / GPT 之前,我們先用幾個簡單的例子來認識 ChatGPT 以及語言模型可以做到怎樣的事情。 什麼是 ChatGPT? 簡單來說明,ChatGPT 是一個背後使用 GPT 語言模型的對話機器人,而它可以做什麼事情了?我們先來使用幾個常見的語言相關的任
63 個省,嗯...好多啊,可能記得起來嗎?不過開玩笑的,記憶也沒有太多意義,今天和大家分享這影片主要是因為,這影片的取景跟配樂實在是太精彩了 另外這位 Youtuber 其實關注他很久了,很喜歡他表現出來的自豪、熱愛的態度,一定是位很熱愛自己國土的人,才能堅持到現在。 比較可惜的是這部影片沒有字幕
這次看完這影片後,發現了一個蠻有趣的越南網站 - Gody。它是一個專門設計給背包客、自由行旅客的一個旅行工具平台(For 越南人)。大致上行程規劃、旅程經驗分享、甚至交友/語言交換似乎都可能在上面實現? 另外也在想,不知道下次要不要深入了解後跟大家仔細拆解、說明如何使用這個網站呢? 如果有這個興趣
人果然身處在環境中會不自覺的麻痺,看著這越南朋友遊台灣的影片,應該是自己對於台北也過分熟悉吧,所以沒有太多的衝擊。但是看著影片時,不時會出現的【原來越南語是這麼說?】的訝異,倒是有點不一樣的感覺 不過即使太過於熟悉,任何東西深掘下去,果然也是會有平常沒有注意到之處。 關於蚵仔麵線的其他 由於自己還算
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
回憶童年時家境拮据,第一次吃麥當勞帶來的驚喜與幸福,讓我永遠記得那份特別的滋味。從此,麥當勞成為了我記憶中的奢華。儲存在舌尖的記憶,不是滋味,而是況味。閱讀本文能帶領讀者回味童年的幸福與滿足。
Thumbnail
第一個男朋友,也是最後一個男朋友,我們在一起約莫七八年。 備受愛護的單純童年 高中畢業以前,我的生活環境幾乎不出台中烏日小鎮,八九成以上的時間都遊走在烏日國小和烏日國中之間,上了高中之後也幾乎經由校車往返於學校和家裡之間,偶爾週末一番行程報備後,才能到市區走走逛逛,而買最多的可能是零食和
Thumbnail
我是個編織愛好者。 一直以來,只編織毛衣、圍巾或帽子,從來沒有編織過包包,想嘗試學新玩意兒,便到書店買了一本日雜回家自學鉤包。 首先,先從書裡找個比較簡單的包款,然後依照書裡說的,買了所需的材料和工具。 一開始自信滿滿的鉤得可開心了,但其實在沒有人督導的情況下,自學編織的失敗率極高。雖
Thumbnail
Web Creator Guide 最近在學習用 AI 快速架站,感到最頭痛的就是決定方向後,要怎麼去產生網頁的基本資訊。 當作練習,做了這個 GPT 來加速,GPT 可以根據利基或關鍵字,快速給出標題、標語,產生 Logo 及一些基本頁面的草稿。 需注意提示洩漏的問題 如果你的 GPT 包
Thumbnail
新建專案 一開始,當我們新建立一個專案時,我們可以看到,程式編輯區會出現兩個基本的積木,分別是『當啟動時』和『重複無限次』 『當啟動時』和『重複無限次』,顧名思義就是一個只能執行一次,另一個可以一直重複執行。 寫程式時間 現在我們就來使用『5X5 LED 矩陣』來寫我們
在參與這個世界的途中,逐漸了解這個世界,期望這個世界能夠逐漸成熟發酵,成為一個更加廣闊的公共領域,影響到其他圈子。 這些都是我所參與的故事,也是屬於我的故事,或許我並不是主角,我也不太喜歡成為主角,但我想要成為觀察者,觀察這個我所期待且認為的新生公共領域-Web3。
Thumbnail
我們都是時代的見證者,有了NFT世界,也有戰爭世界,「為不公發聲」與「劃時代的意義」成為我的第一個 NFT,支持由台灣創作者發行的「加油 ! 烏克蘭」,願烏克蘭國家能得到應有的和平、自由。
Thumbnail
NFT 對於創作者來說,絕對是去年的大事件,尤其是數位藝術創作者,因為我本身是數位設計 ( 包含 banner、EDM、網頁等 ),每天最常做的事,就是去素材網站找素材,免費素材用久了,真的都會忘記每個素材背後的創作者,都是花了多少時間才產出的。 那本篇文章我會分成以下的段落做分享 :
Thumbnail
第一次起心動念要踏入NFT的世界中,是某次聽M大的podcast在推廣方格子的NFT項目,因為本身也是從事藝術相關的行業,對於這塊未知的世界多少有點好奇,看了Vocus and friends的網站介紹,覺得這個項目設計的還滿酷的
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
回憶童年時家境拮据,第一次吃麥當勞帶來的驚喜與幸福,讓我永遠記得那份特別的滋味。從此,麥當勞成為了我記憶中的奢華。儲存在舌尖的記憶,不是滋味,而是況味。閱讀本文能帶領讀者回味童年的幸福與滿足。
Thumbnail
第一個男朋友,也是最後一個男朋友,我們在一起約莫七八年。 備受愛護的單純童年 高中畢業以前,我的生活環境幾乎不出台中烏日小鎮,八九成以上的時間都遊走在烏日國小和烏日國中之間,上了高中之後也幾乎經由校車往返於學校和家裡之間,偶爾週末一番行程報備後,才能到市區走走逛逛,而買最多的可能是零食和
Thumbnail
我是個編織愛好者。 一直以來,只編織毛衣、圍巾或帽子,從來沒有編織過包包,想嘗試學新玩意兒,便到書店買了一本日雜回家自學鉤包。 首先,先從書裡找個比較簡單的包款,然後依照書裡說的,買了所需的材料和工具。 一開始自信滿滿的鉤得可開心了,但其實在沒有人督導的情況下,自學編織的失敗率極高。雖
Thumbnail
Web Creator Guide 最近在學習用 AI 快速架站,感到最頭痛的就是決定方向後,要怎麼去產生網頁的基本資訊。 當作練習,做了這個 GPT 來加速,GPT 可以根據利基或關鍵字,快速給出標題、標語,產生 Logo 及一些基本頁面的草稿。 需注意提示洩漏的問題 如果你的 GPT 包
Thumbnail
新建專案 一開始,當我們新建立一個專案時,我們可以看到,程式編輯區會出現兩個基本的積木,分別是『當啟動時』和『重複無限次』 『當啟動時』和『重複無限次』,顧名思義就是一個只能執行一次,另一個可以一直重複執行。 寫程式時間 現在我們就來使用『5X5 LED 矩陣』來寫我們
在參與這個世界的途中,逐漸了解這個世界,期望這個世界能夠逐漸成熟發酵,成為一個更加廣闊的公共領域,影響到其他圈子。 這些都是我所參與的故事,也是屬於我的故事,或許我並不是主角,我也不太喜歡成為主角,但我想要成為觀察者,觀察這個我所期待且認為的新生公共領域-Web3。
Thumbnail
我們都是時代的見證者,有了NFT世界,也有戰爭世界,「為不公發聲」與「劃時代的意義」成為我的第一個 NFT,支持由台灣創作者發行的「加油 ! 烏克蘭」,願烏克蘭國家能得到應有的和平、自由。
Thumbnail
NFT 對於創作者來說,絕對是去年的大事件,尤其是數位藝術創作者,因為我本身是數位設計 ( 包含 banner、EDM、網頁等 ),每天最常做的事,就是去素材網站找素材,免費素材用久了,真的都會忘記每個素材背後的創作者,都是花了多少時間才產出的。 那本篇文章我會分成以下的段落做分享 :
Thumbnail
第一次起心動念要踏入NFT的世界中,是某次聽M大的podcast在推廣方格子的NFT項目,因為本身也是從事藝術相關的行業,對於這塊未知的世界多少有點好奇,看了Vocus and friends的網站介紹,覺得這個項目設計的還滿酷的