<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>033 - 個人作品 on 嗡嗡的隨手筆記</title>
        <link>https://wongwongnotes.com/categories/033---%E5%80%8B%E4%BA%BA%E4%BD%9C%E5%93%81/</link>
        <description>Recent content in 033 - 個人作品 on 嗡嗡的隨手筆記</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <copyright>嗡嗡</copyright>
        <lastBuildDate>Sun, 10 Dec 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://wongwongnotes.com/categories/033---%E5%80%8B%E4%BA%BA%E4%BD%9C%E5%93%81/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上</title>
        <link>https://wongwongnotes.com/posts/life-and-work/portfolio/works/gpt-linebot-python-flask-for-vercel/</link>
        <pubDate>Sun, 10 Dec 2023 00:01:29 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/life-and-work/portfolio/works/gpt-linebot-python-flask-for-vercel/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2022/12/%E6%88%AA%E5%9C%96-2022-12-12-%E4%B8%8B%E5%8D%8811.24.29.png" alt="Featured image of post 【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上" /&gt;&lt;h2 id=&#34;chatgpt-linebot-using-python-flask-on-vercel&#34;&gt;ChatGPT-Linebot using python flask on vercel&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;作者註：本專案因為作者我的免費 API 額度已經用完了，然後我現在使用的是 &lt;mark&gt;ChatGPT Plus&lt;/mark&gt;，&lt;br&gt;
如果之後要我本人更新可能要等我哪天改用 ChatGPT API 了&amp;hellip;&lt;br&gt;
現在最新的版本感謝網友 @willismax 提供的 PR：https://github.com/howarder3/GPT-Linebot-python-flask-on-vercel/pull/17&lt;br&gt;
但同樣的因為我沒有 ChatGPT API 的額度了&amp;hellip; 所以也沒辦法測就直接 merge 了，&lt;br&gt;
如果不能動再請大家幫忙發個 Issues/PR，感謝大大們🙏&lt;/p&gt;&lt;/blockquote&gt;
&lt;li&gt;last updated: 2023/10/9
&lt;ul&gt;
&lt;li&gt;更新說明 by @willismax，與修正的 &lt;a class=&#34;link&#34; href=&#34;https://github.com/willismax/GPT-Linebot-python-flask-on-vercel&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;repo&lt;/a&gt; (merged)&lt;/li&gt;
&lt;li&gt;vercel.json修正，改為第2版&lt;/li&gt;
&lt;li&gt;修正單純安裝Flask 2.2.2 會與 Werkzeug 衝突的問題，在 requirements.txt 添加 Werkzeug 2.3.7 (&lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/77213053/importerror-cannot-import-name-url-quote-from-werkzeug-urls&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;參考stack overflow&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;本篇教學無經驗的新手也可學習，無須寫任何程式。&lt;/mark&gt;&lt;br&gt;
無經驗預計 15 ~ 20 分鐘都可以完成。老手最快可能 5 分鐘就搞定&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;這是使用 python flask 套件撰寫的 gpt-linebot&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;不需寫 code&lt;/mark&gt;，只需去網頁設定一些內容，新手 15 分鐘內也能建立自己的 gpt-linebot&lt;/li&gt;
&lt;li&gt;Why flask? 簡單好用，且支援 vercel&lt;/li&gt;
&lt;li&gt;Why vercel? &lt;mark&gt;免費&lt;/mark&gt;！！！免費額度就很夠一般使用，是 heroku 不再免費後的好選擇&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;註：ChatGPT 與 gpt 是同樣任務的模型，而目前透過 API 只能使用到 GPT-3 (本程式使用的方法)&lt;/del&gt;&lt;br&gt;
&lt;del&gt;而非 ChatGPT 使用的 GPT-3.5&lt;/del&gt;&lt;br&gt;
已經改為 GPT-4，與最新的 ChatGPT 相同，只是改為使用 OpenAI API 的方式實現&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;安裝步驟&#34;&gt;安裝步驟&lt;/h2&gt;
&lt;p&gt;主要會有四個地方要去：(&lt;mark&gt;這部份不看也沒關係，以下照著做就可以了！&lt;/mark&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我的 github repo：透過 python 串接 openai 的 API，並透過 linebot sdk 提供簡單的訊息回復&lt;/li&gt;
&lt;li&gt;openai：申請 OpenAI 的 API KEY&lt;/li&gt;
&lt;li&gt;line developer：創建機器人&lt;/li&gt;
&lt;li&gt;vercel：提供訊息回復，雖然是 serverless 但已經很符合我們的需求&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;step-1-至-github-fork-專案&#34;&gt;step 1. 至 github fork 專案&lt;/h3&gt;
&lt;p&gt;去我這個專案的 &lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/GPT-Linebot-python-flask-on-vercel&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;github repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;按下面的按鈕，&lt;br&gt;
fork 一份檔案到自己的帳號底下，等等我們會使用到&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;可以的話，旁邊的 Star 也幫我按一下，是對創作者最大的鼓勵！&lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.27.12.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.27.12.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.27.12_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.27.12_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;step-2-申請-openai-的-api-key&#34;&gt;step 2. 申請 OpenAI 的 API KEY&lt;/h3&gt;
&lt;p&gt;可以直接去&lt;a class=&#34;link&#34; href=&#34;https://beta.openai.com/docs/quickstart/build-your-application&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;這裡&lt;/a&gt;，一直往下拉，找到這個按鈕，並生成一個 API KEY&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.11.22.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.11.22.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.11.22_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.11.22_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;請務必複製下來，這個 KEY 我們取名為 OPENAI_API_KEY &lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;step-3-去-line-developer-建立一個新的機器人&#34;&gt;step 3. 去 line developer 建立一個新的機器人&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;這邊熟悉的人動作應該超快，可以略過，&lt;br&gt;
以下教學是針對完全沒經驗的新手&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;我們先到&lt;a class=&#34;link&#34; href=&#34;https://developers.line.biz/zh-hant/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt; line developer 的首頁&lt;/a&gt;註冊一下，&lt;br&gt;
註冊完後，點選 Messaging API。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.32.33.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.32.33.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.32.33_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.32.33_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;step-3-1-創建新的-channel&#34;&gt;step 3-1. 創建新的 channel&lt;/h4&gt;
&lt;p&gt;第一次使用要創建一個新的 provider 與 channel，&lt;br&gt;
一個 provider 可以有很多 channel，&lt;br&gt;
「&lt;mark&gt;而一個 channel 對應的就是一個 chatbot&lt;/mark&gt;」，&lt;br&gt;
這邊以下都照自己想要的名字跟事實填就好。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.36.49.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.36.49.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.36.49_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.36.49_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;step-3-2-在-basic-settings-的分頁取得-line_channel_secret&#34;&gt;step 3-2. 在 Basic Settings 的分頁，取得 LINE_CHANNEL_SECRET&lt;/h4&gt;
&lt;p&gt;在 Basic Settings 的分頁，往下找到 channel secret&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.40.36.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.40.36.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.40.36_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.40.36_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;請務必複製下來，這個 KEY 我們取名為 LINE_CHANNEL_SECRET &lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4 id=&#34;step-3-3-在-messaging-api-的分頁進行一些機器人初始設定-並加機器人好友&#34;&gt;step 3-3. 在 Messaging API 的分頁，進行一些機器人初始設定 (並加機器人好友)&lt;/h4&gt;
&lt;p&gt;再來我們去上方，選擇 Messaging API 的分頁，&lt;br&gt;
我們先關閉一些可能會吵的東西 (預設的自動回復之類的)，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;這邊可以順便掃一下 QR code 或透過 line ID ，加機器人的 line 好友！&lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;我自己是設定如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.06.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.06.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.06_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.06_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;允許加入群組要注意使用 openai 額度可能會超快&lt;/li&gt;
&lt;li&gt;「&lt;mark&gt;自動回復訊息必關！！！&lt;/mark&gt;」，那是 line 的自動回復，不是我們要的&lt;/li&gt;
&lt;li&gt;歡迎訊息也可以關，這邊我是開著&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;step-3-4-在-messaging-api-的分頁取得-line_channel_access_token&#34;&gt;step 3-4. 在 Messaging API 的分頁，取得 LINE_CHANNEL_ACCESS_TOKEN&lt;/h4&gt;
&lt;p&gt;最後，在 Messaging API 的分頁的最下面，&lt;br&gt;
找到 channel access token，點選右邊發行，並把他記下來。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.14.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.14.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.14_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%886.41.14_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark&gt;請務必複製下來，這個 KEY 我們取名為 LINE_CHANNEL_ACCESS_TOKEN &lt;/mark&gt;&lt;br&gt;
請不要把這金鑰分享給別人，別人可能會拿去作壞事！！！&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;mark&gt;然後這邊網頁先不要關，等等還會用到！！！！&lt;/mark&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-4-去-vercel-設定相關的環境變數完成啟動機器人&#34;&gt;step 4. 去 vercel 設定相關的環境變數，完成啟動機器人！&lt;/h3&gt;
&lt;h4 id=&#34;step-4-1-新增-project&#34;&gt;step 4-1. 新增 project&lt;/h4&gt;
&lt;p&gt;去 &lt;a class=&#34;link&#34; href=&#34;https://vercel.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;vercel 首頁&lt;/a&gt;，add new project&lt;/p&gt;
&lt;p&gt;Import Git Repository，選擇你剛剛 fork 的專案 import&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.39.19.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.39.19.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.39.19_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.39.19_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;step-4-2-設定環境變數&#34;&gt;step 4-2. 設定環境變數&lt;/h4&gt;
&lt;p&gt;選擇「Environment Variables」，把我們剛剛紀錄的 OPENAI_API_KEY、LINE_CHANNEL_SECRET、LINE_CHANNEL_ACCESS_TOKEN 都設定至環境變數，&lt;br&gt;
按下 Deploy 等待一下就完成囉！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.46.13.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.46.13.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.46.13_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.46.13_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完成後我們可以看到會有以下的三個環境變數&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.47.23.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.47.23.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.47.23_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%887.47.23_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;step-4-3-deploy-完成後可以簡單確認是否有成功&#34;&gt;step 4-3. deploy 完成後，可以簡單確認是否有成功&lt;/h4&gt;
&lt;p&gt;去部屬完成的 vercel 頁面，紅框處可以拿到我們要用的網址，&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;把這個網址複製下來，等等要用&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;這個網址我們也可以點開，應該會出現我們在程式預先寫好的 Hello, World! (應該是一個只有 Hello, World! 的網頁)&lt;br&gt;
我們可以藉此確定程式有正常的被 Deploy&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-14-%e4%b8%8a%e5%8d%881.25.48.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-14-%e4%b8%8a%e5%8d%881.25.48.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-14-%e4%b8%8a%e5%8d%881.25.48_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-14-%e4%b8%8a%e5%8d%881.25.48_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;step-5-設定-webhook&#34;&gt;step 5. 設定 webhook&lt;/h3&gt;
&lt;p&gt;回到  line developer 的 Messaging API 分頁，&lt;br&gt;
將剛剛 step 4-3. 的網址填入，並在後面加上 「/webhook」，例如下圖&lt;br&gt;
可以用 Verify 看看有沒有問題，通常應該會是寫「Success」&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「&lt;mark&gt;記得開啟下面的使用 Use webhook &lt;/mark&gt;」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%889.29.23.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%889.29.23.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%889.29.23_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-13-%e4%b8%8b%e5%8d%889.29.23_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;完成圖範例&#34;&gt;完成圖範例&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.24.29.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.24.29.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.24.29_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.24.29_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.21.45.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.21.45.webp 1600w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.21.45_800w.webp 800w, https://wongwongnotes.com/images/restored/2022/12/%e6%88%aa%e5%9c%96-2022-12-12-%e4%b8%8b%e5%8d%8811.21.45_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【Side Project】(全圖文教學) 用 Python flask 實作 ChatGPT 的 Linebot，並部屬至 Vercel 上&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;此-linebot-的其他一些內建功能&#34;&gt;此 linebot 的其他一些內建功能&lt;/h2&gt;
&lt;h3 id=&#34;機器人說話開關&#34;&gt;機器人「說話開關」&lt;/h3&gt;
&lt;p&gt;這個本來是我除錯用的，因為有時候回復一些怪東西會很吵，&lt;br&gt;
意外得到好評，所以這個功能就被保留下來&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;輸入「說話」：機器人開啟說話模式，預設是開啟的&lt;/li&gt;
&lt;li&gt;輸入「閉嘴」：機器人暫停說話模式 (&lt;mark&gt;但一段時間會自動再起動&lt;/mark&gt;)，閉嘴後將不會對任何對話有反應。輸入「說話」可再次開啟對話。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;其他環境參數功能&#34;&gt;其他環境參數功能&lt;/h3&gt;
&lt;p&gt;參考自 &lt;a class=&#34;link&#34; href=&#34;https://github.com/memochou1993/gpt-ai-assistant?fbclid=IwAR25uqLdKoDKEQd591fSjyM2sDJJR3Xb-VgcXDIFV_7i3RMWWv2oiyG26RQ&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;memochou1993/gpt-ai-assistant&lt;/a&gt; 的作法，下列參數也可藉由設定 vercel 的環境變數來作調控。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
  &lt;th&gt;環境變數名稱&lt;/th&gt;
  &lt;th&gt;預設值&lt;/th&gt;
  &lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;OPENAI_MODEL&lt;/td&gt;
  &lt;td&gt;text-davinci-003&lt;/td&gt;
  &lt;td&gt;請參考 OpenAI 對 [model](https://beta.openai.com/docs/api-reference/completions/create#completions/create-model) 的敘述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;OPENAI_TEMPERATURE&lt;/td&gt;
  &lt;td&gt;0&lt;/td&gt;
  &lt;td&gt;請參考 OpenAI 對 [temperature](https://beta.openai.com/docs/api-reference/completions/create#completions/create-temperature) 的敘述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;OPENAI_FREQUENCY_PENALTY&lt;/td&gt;
  &lt;td&gt;0&lt;/td&gt;
  &lt;td&gt;請參考 OpenAI 對 [frequency_penalty](https://beta.openai.com/docs/api-reference/completions/create#completions/create-frequency_penalty) 的敘述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;OPENAI_PRESENCE_PENALTY&lt;/td&gt;
  &lt;td&gt;0.6&lt;/td&gt;
  &lt;td&gt;請參考 OpenAI 對 [presence_penalty](https://beta.openai.com/docs/api-reference/completions/create#completions/create-presence_penalty) 的敘述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;OPENAI_MAX_TOKENS&lt;/td&gt;
  &lt;td&gt;240&lt;/td&gt;
  &lt;td&gt;請參考 OpenAI 對 [max_tokens](https://beta.openai.com/docs/api-reference/completions/create#completions/create-max_tokens) 的敘述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;MSG_LIST_LIMIT&lt;/td&gt;
  &lt;td&gt;20&lt;/td&gt;
  &lt;td&gt;prompt 參數往回參照的句數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;INIT_LANGUAGE&lt;/td&gt;
  &lt;td&gt;zh&lt;/td&gt;
  &lt;td&gt;決定初始語言，可設置為 &#34;zh&#34; 或 &#34;en&#34;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;todo-list--future-work&#34;&gt;TODO List &amp;amp; Future Work&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;目前基本功能都已經有了，然後我比較忙可能沒空一直更新QQ&lt;br&gt;
&lt;mark&gt;還有很多可以優化的地方，歡迎提供 PR！&lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; (已調整完成) 回復文字感覺不是很順 (可能需要研究一下 API 使用方法)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;[x] (已調整完成) 記憶功能 
...&lt;/li&gt;
&lt;blockquote&gt;
&lt;p&gt;目前算法是「&lt;mark&gt;紀錄使用者與 AI 的前20句對話&lt;/mark&gt;」，嘗試推論出下一句話應該要說什麼。以達成延續話題的效果。&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;靈感來源&#34;&gt;靈感來源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;感謝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/memochou1993/gpt-ai-assistant?fbclid=IwAR25uqLdKoDKEQd591fSjyM2sDJJR3Xb-VgcXDIFV_7i3RMWWv2oiyG26RQ&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;memochou1993/gpt-ai-assistant&lt;/a&gt; 提供的 node.js 版本串接 vercel 示範，讓我有了想把 python linebot 也串進 vercel 的靈感，(目前感覺下來，免費又好用(?))&lt;/li&gt;
&lt;li&gt;感謝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Lanznx/HealthLineBot&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lanznx/HealthLineBot&lt;/a&gt; 給了一個很好的 python Django 範例，然而我不會 Django XD，vercel 官方文件好像也沒有提到這部份，總之後來就改成了 flask 版本，也符合 linebot 推薦的範例。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;參考資料&#34;&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Line 官方提供的 python flask 製作 linebot 的 sample code &lt;a class=&#34;link&#34; href=&#34;https://github.com/line/line-bot-sdk-python&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;line/line-bot-sdk-python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vercel 官方提供的 python runtime Flask 範例 &lt;a class=&#34;link&#34; href=&#34;https://vercel.com/docs/concepts/functions/serverless-functions/runtimes/python#python-version&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Deploy an example with Flask&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 8014
Post Date: 2023-12-10 00:01:29
Categories: 043 - 個人作品
Tags: 作品集, python, 043, 個人作品, 043 - 個人作品
--&gt;
</description>
        </item>
        <item>
        <title>【作品集】自製 line chatbot (含賭場功能、教育功能、遊樂場功能)</title>
        <link>https://wongwongnotes.com/posts/life-and-work/portfolio/works/my-line-chatbot/</link>
        <pubDate>Mon, 11 Jun 2018 00:47:53 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/life-and-work/portfolio/works/my-line-chatbot/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2018/06/line-chatbot-education-576x1024.jpg" alt="Featured image of post 【作品集】自製 line chatbot (含賭場功能、教育功能、遊樂場功能)" /&gt;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;這個是我在研究所課餘時，所做的 line chatbot 小秘書，&lt;br&gt;
主要功能為透過 line chatbot 提供小遊戲的功能，&lt;br&gt;
後續的更新還有新增賭場的功能，透過連動 google sheet 的方式作為我們的 database，&lt;br&gt;
我的 line chatbot 能有一個簡易的後端資料庫，能儲存每一個人的財產。&lt;br&gt;
後續還有提供教育的功能，讓使用者可以自行教導 line chatbot 說話。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;當時具體成就：一週最高可以有 100萬次的 reply (如下圖)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2018/06/line-chatbot-100wreply.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2018/06/line-chatbot-100wreply.webp 1600w, https://wongwongnotes.com/images/restored/2018/06/line-chatbot-100wreply_800w.webp 800w, https://wongwongnotes.com/images/restored/2018/06/line-chatbot-100wreply_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製 line chatbot (含賭場功能、教育功能、遊樂場功能)&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;相關教學投影片&#34;&gt;相關教學投影片&lt;/h2&gt;
&lt;p&gt;可參考我的另外一篇文章：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://wongwongnotes.com/posts/life-and-work/portfolio/ppt/python-line-chatbot/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wongwongnotes.com/posts/life-and-work/portfolio/ppt/python-line-chatbot/&lt;/a&gt;&lt;/p&gt;
&lt;iframe src=&#34;https://docs.google.com/presentation/d/e/2PACX-1vQyCv6FYZhdISt0v-m9tNkf9QBSbsqMW-6FF7SQPjzBm1tsER5tKhQKOpGpxfeTFgk5veVEGWRdL0yi/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;640&#34; height=&#34;380&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;
&lt;hr&gt;
&lt;h2 id=&#34;所有功能總覽&#34;&gt;所有功能總覽&lt;/h2&gt;
&lt;h3 id=&#34;使用說明書&#34;&gt;【使用說明書】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!使用說明書」、「!說明書」、「!help」&lt;/li&gt;
&lt;li&gt;「!helptxt」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;健康教育類&#34;&gt;【健康教育類】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!教育」、「!調教」&lt;/li&gt;
&lt;li&gt;「!學圖」、「!智乃看圖片」、「!給智乃看圖」、「!智乃看圖圖」&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2018/06/line-chatbot-education-576x1024.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2018/06/line-chatbot-education-576x1024.webp 1600w, https://wongwongnotes.com/images/restored/2018/06/line-chatbot-education-576x1024_800w.webp 800w, https://wongwongnotes.com/images/restored/2018/06/line-chatbot-education-576x1024_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製 line chatbot (含賭場功能、教育功能、遊樂場功能)&#34;  &gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/_BuLsnEDKSw&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/olVuY-a5qZU&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h3 id=&#34;遊戲抽抽類--小遊戲&#34;&gt;【遊戲抽抽類】 -　「小遊戲」&lt;/h3&gt;
&lt;li&gt;【 關鍵10秒鐘 】
&lt;ul&gt;
&lt;li&gt;「!tick」&lt;/li&gt;
&lt;li&gt;「!stop」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;【 多人競技場 】
&lt;li&gt;多人競技場
&lt;ul&gt;
&lt;li&gt;「!pkall」&lt;/li&gt;
&lt;li&gt;「!pkalloff」&lt;/li&gt;
&lt;li&gt;「!pkstart」&lt;/li&gt;
&lt;li&gt;「!pkrule」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;多人競技場(進階)
&lt;ul&gt;
&lt;li&gt;「!pkkall」&lt;/li&gt;
&lt;li&gt;「!pkkalloff」&lt;/li&gt;
&lt;li&gt;「!pkkstart」&lt;/li&gt;
&lt;li&gt;「!pkkrule」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/li&gt;
&lt;li&gt;【 計時賽模式 】
&lt;li&gt;計時賽模式
&lt;ul&gt;
&lt;li&gt;「!tpk」&lt;/li&gt;
&lt;li&gt;「!tpkoff」&lt;/li&gt;
&lt;li&gt;「!tpklb」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;計時賽模式(進階)
&lt;ul&gt;
&lt;li&gt;「!tpkk」&lt;/li&gt;
&lt;li&gt;「!tpkkoff」&lt;/li&gt;
&lt;li&gt;「!tpkklb」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/li&gt;
&lt;li&gt;【 對決模式 】
&lt;li&gt;對決模式
&lt;ul&gt;
&lt;li&gt;「!pk」&lt;/li&gt;
&lt;li&gt;「!pkoff」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;對決模式(進階)
&lt;ul&gt;
&lt;li&gt;「!pkk」&lt;/li&gt;
&lt;li&gt;「!pkkoff」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/li&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/rDe013bEgX4&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;li&gt;【 21 點 】
&lt;ul&gt;
&lt;li&gt;「!21」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/lcI_xWmJNi0&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;li&gt;【幾Ａ幾Ｂ】
&lt;ul&gt;
&lt;li&gt;「!ab」、「!幾A幾B」&lt;/li&gt;
&lt;li&gt;「abreset」、「!abreset」&lt;/li&gt;
&lt;li&gt;「abrecord」、「!abrecord」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;【終極密碼】
&lt;ul&gt;
&lt;li&gt;「!終極密碼」、「!password」、「!psword」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/Ziv_XRTlAT4&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;li&gt;【定時炸彈】
&lt;ul&gt;
&lt;li&gt;「!boom」、「!定時炸彈」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;【撲克比大小】
&lt;ul&gt;
&lt;li&gt;「!比大小」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;【機會、命運請選擇？】
&lt;ul&gt;
&lt;li&gt;「機會命運」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;【梭哈】
&lt;ul&gt;
&lt;li&gt;「!sh」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;h3 id=&#34;居家控制類&#34;&gt;【居家控制類】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!開燈」、「開燈」&lt;/li&gt;
&lt;li&gt;「!關燈」、「關燈」&lt;/li&gt;
&lt;li&gt;「!關機」、「關機」&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/XeHRyaSmG0g&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/HSW_mTFVWSU&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h3 id=&#34;如果很餓的話--好餓&#34;&gt;【如果很餓的話】 -　「好餓」&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!抽食物」&lt;/li&gt;
&lt;li&gt;「!抽飲料」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;做點筆記吧&#34;&gt;【做點筆記吧！】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!addnote」&lt;/li&gt;
&lt;li&gt;「!delnote」&lt;/li&gt;
&lt;li&gt;「!shownote」&lt;/li&gt;
&lt;li&gt;「!restorenote」&lt;/li&gt;
&lt;li&gt;「!backupnote」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-帳號相關-&#34;&gt;【 帳號相關 】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!newac」&lt;/li&gt;
&lt;li&gt;「!money」、「!tibi」&lt;/li&gt;
&lt;li&gt;「!reborn」&lt;/li&gt;
&lt;li&gt;「!leaderboard」、「!排行榜」、「!lb」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-遊戲排名相關---散步打排名lzbotapriltestbot-限定功能&#34;&gt;【 遊戲排名相關 】 -　「!散步打排名」(lzbot、apriltestbot 限定功能)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「即時排名」、「即時戰況」、「排名」、「排行」、「分數」、「戰況」、「score」&lt;/li&gt;
&lt;li&gt;「%數」、「%」&lt;/li&gt;
&lt;li&gt;「一位差」&lt;/li&gt;
&lt;li&gt;「分數差」&lt;/li&gt;
&lt;li&gt;「場數差」&lt;/li&gt;
&lt;li&gt;「追擊時間」、「脫褲子」&lt;/li&gt;
&lt;li&gt;「時速」&lt;/li&gt;
&lt;li&gt;「場速」&lt;/li&gt;
&lt;li&gt;「活動進度」、「進度」&lt;/li&gt;
&lt;li&gt;「剩餘時間」&lt;/li&gt;
&lt;li&gt;「房號」、「room」、「rm」、「r」&lt;/li&gt;
&lt;li&gt;「r1」、「room1」&lt;/li&gt;
&lt;li&gt;「r2」、「room2」&lt;/li&gt;
&lt;li&gt;「!fire」&lt;/li&gt;
&lt;li&gt;「!stone」&lt;/li&gt;
&lt;li&gt;「!pt」&lt;/li&gt;
&lt;li&gt;「!lz」&lt;/li&gt;
&lt;li&gt;「!ptstone」&lt;/li&gt;
&lt;li&gt;「!ptcal」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-模擬抽獎機---抽抽lzbotapriltestbot-限定功能&#34;&gt;【 模擬抽獎機 】 -　「!抽抽」(lzbot、apriltestbot 限定功能)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!cgss單抽」&lt;/li&gt;
&lt;li&gt;「!cgss十連」、「!cgss十抽」、「!cgss10連」、「!cgss10抽」&lt;/li&gt;
&lt;li&gt;「!bgd單抽」&lt;/li&gt;
&lt;li&gt;「!bgd十連」、「!bgd十抽」、「!bgd10連」、「!bgd10抽」、「!gbp十連」、「!gbp十抽」、「!gbp10連」、「!gbp10抽」&lt;/li&gt;
&lt;li&gt;「!sc單抽」&lt;/li&gt;
&lt;li&gt;「!sc十連」、「!sc十抽」、「!sc10連」、「!sc10抽」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;算命抽籤類&#34;&gt;【算命抽籤類】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!機率」&lt;/li&gt;
&lt;li&gt;「!抽數字」&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/-xEfzH617Cg&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h3 id=&#34;不知幹嘛類&#34;&gt;【不知幹嘛類】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「貼圖辣」、「貼圖啦」、「貼圖」、「貼圖喇」&lt;/li&gt;
&lt;li&gt;「母湯」&lt;/li&gt;
&lt;li&gt;「母湯電影版」&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/Z0sp7XFl_JA&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h3 id=&#34;如果覺得太吵的話--開關&#34;&gt;【如果覺得太吵的話】 -　「!開關」&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!說話」 : 轉換為active mode&lt;/li&gt;
&lt;li&gt;「!閉嘴」 : 轉換為slient mode&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;如果壞掉了要維修&#34;&gt;【如果壞掉了要維修】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「!壞掉啦」、「呼叫工程師」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;測試區&#34;&gt;【測試區】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「test」 : Hello World !!!&lt;/li&gt;
&lt;li&gt;「state」 : 取得現在狀態(啟動模式/靜音模式)&lt;/li&gt;
&lt;li&gt;「!getinfo」 : 取得資訊&lt;/li&gt;
&lt;li&gt;「!網速」、「網速」、「speed」、「!speed」 : 取得回應速度&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;開發過程-fb-心得&#34;&gt;開發過程 FB 心得&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/posts/10210144000751363&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;開發過程FB - 1&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/posts/10210162854062684&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;開發過程FB - 2&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 667
Post Date: 2018-06-11 00:47:53
Categories: 043 - 個人作品
Tags: 作品集, python, 043, 個人作品, 043 - 個人作品
--&gt;</description>
        </item>
        <item>
        <title>【作品集】自製打地鼠機 第4代</title>
        <link>https://wongwongnotes.com/posts/life-and-work/portfolio/works/whack-a-mole/</link>
        <pubDate>Sun, 08 Apr 2018 02:30:12 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/life-and-work/portfolio/works/whack-a-mole/</guid>
        <description>&lt;h2 id=&#34;自製打地鼠機-第4代&#34;&gt;自製打地鼠機 第4代&lt;/h2&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/-fOLVDIJHy8&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/videos/10209866678178472/?permPage=1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;開發過程FB&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;自製打地鼠機-第3代&#34;&gt;自製打地鼠機 第3代&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/videos/vb.1678740578/10208645566291438/?type=2&amp;amp;video_source=user_video_tab&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;開發過程FB&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;自製打地鼠機-第2代&#34;&gt;自製打地鼠機 第2代&lt;/h2&gt;
&lt;hr&gt;
&lt;h2 id=&#34;自製打地鼠機-第1代&#34;&gt;自製打地鼠機 第1代&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/videos/10206603529361791/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;開發過程FB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/videos/10206603529361791/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.facebook.com/weng.hao.5/videos/10206603529361791/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/x-SETBGANWA&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;!--
Post ID: 593
Post Date: 2018-04-08 02:30:12
Categories: 043 - 個人作品
Tags: 作品集, arduino, 043, 個人作品, 043 - 個人作品
--&gt;
</description>
        </item>
        <item>
        <title>【作品集】自製音樂遊戲機</title>
        <link>https://wongwongnotes.com/posts/life-and-work/portfolio/works/music-machine/</link>
        <pubDate>Wed, 18 Jan 2017 00:38:46 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/life-and-work/portfolio/works/music-machine/</guid>
        <description>&lt;h2 id=&#34;自製音樂遊戲機&#34;&gt;自製音樂遊戲機&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.facebook.com/weng.hao.5/videos/vb.1678740578/10206782495275827/?type=2&amp;amp;theater&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;作品FB連結&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/xjV8kjSKDI8&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;!--
Post ID: 658
Post Date: 2017-01-18 00:38:46
Categories: 043 - 個人作品
Tags: 作品集, arduino, 043, 個人作品, 043 - 個人作品
--&gt;
</description>
        </item>
        <item>
        <title>【作品集】自製乒乓球小遊戲</title>
        <link>https://wongwongnotes.com/posts/life-and-work/portfolio/works/pingpong/</link>
        <pubDate>Thu, 29 Oct 2015 00:50:32 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/life-and-work/portfolio/works/pingpong/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/migrated/fcIdzCo.jpg" alt="Featured image of post 【作品集】自製乒乓球小遊戲" /&gt;&lt;h2 id=&#34;自製乒乓球小遊戲&#34;&gt;自製乒乓球小遊戲&lt;/h2&gt;
&lt;p&gt;「v3.2」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_L582UIKpnL_10.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_L582UIKpnL_10.py&lt;/a&gt;&lt;br&gt;
&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/wujHxs8.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/migrated/wujHxs8.webp 1600w, https://wongwongnotes.com/images/restored/migrated/wujHxs8_800w.webp 800w, https://wongwongnotes.com/images/restored/migrated/wujHxs8_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製乒乓球小遊戲&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「v3.2」&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;修正冰凍太準連續發球得分bug&lt;/li&gt;
&lt;li&gt;新增文字提示&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/v5Biqvm.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/migrated/v5Biqvm.webp 1600w, https://wongwongnotes.com/images/restored/migrated/v5Biqvm_800w.webp 800w, https://wongwongnotes.com/images/restored/migrated/v5Biqvm_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製乒乓球小遊戲&#34;  &gt;&lt;br&gt;
「v3.1」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_L582UIKpnL_8.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_L582UIKpnL_8.py&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「v3.1」&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;場地變大&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;p&gt;「v3.0」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_L582UIKpnL_9.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_L582UIKpnL_9.py&lt;/a&gt;&lt;br&gt;
&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/Axg1KFm.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/migrated/Axg1KFm.webp 1600w, https://wongwongnotes.com/images/restored/migrated/Axg1KFm_800w.webp 800w, https://wongwongnotes.com/images/restored/migrated/Axg1KFm_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製乒乓球小遊戲&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「v3.0」&lt;br&gt;
龐大而緩慢的敵人，卻有能使出技能的潛力，&lt;br&gt;
這樣的敵人你是否能打倒它呢???&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;1.新增會瞬間移動的點(紫色兩點會互相傳送)&lt;br&gt;
2.敵人每energy達到5會發動技能：mirror&lt;br&gt;
(效果：使玩家上下相反5秒鐘)&lt;/p&gt;
&lt;p&gt;「v2.0」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_L582UIKpnL_2.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_L582UIKpnL_2.py&lt;/a&gt;&lt;br&gt;
&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/yUFYMcp.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/migrated/yUFYMcp.webp 1600w, https://wongwongnotes.com/images/restored/migrated/yUFYMcp_800w.webp 800w, https://wongwongnotes.com/images/restored/migrated/yUFYMcp_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製乒乓球小遊戲&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「v2.0」&lt;br&gt;
更強的敵人來襲！善用你的技能打倒他吧！&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;1.新增energy系統，每切球一次可取得1點energy&lt;br&gt;
2.新增玩家技能：freeze&lt;br&gt;
消耗energy：5&lt;br&gt;
效果：冰凍對方5秒鐘(期間即使碰到仍會回彈)&lt;br&gt;
3.AI強化&lt;/p&gt;
&lt;p&gt;「v1.1」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_QUCQLHCKKO_0.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_QUCQLHCKKO_0.py&lt;/a&gt;&lt;br&gt;
&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/fcIdzCo.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/migrated/fcIdzCo.webp 1600w, https://wongwongnotes.com/images/restored/migrated/fcIdzCo_800w.webp 800w, https://wongwongnotes.com/images/restored/migrated/fcIdzCo_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【作品集】自製乒乓球小遊戲&#34;  &gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「v1.0」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_j7jnEsSTm3_2.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_j7jnEsSTm3_2.py&lt;/a&gt;&lt;br&gt;
1.單人模式(與電腦pk)&lt;br&gt;
2.切球方向判定 依切球方向而改變球的方向(同時有殺球的速度效果)&lt;br&gt;
3.切球=殺球 速度*1.5倍&lt;br&gt;
3.1 擋球可恢復原速度&lt;br&gt;
3.2 再被切回來會再疊加倍率 最快50倍速(放心你玩不到這倍速的XD)&lt;br&gt;
4.新增：11分定勝負&lt;br&gt;
「v1.1」&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.codeskulptor.org/#user40_QUCQLHCKKO_0.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.codeskulptor.org/#user40_QUCQLHCKKO_0.py&lt;/a&gt;&lt;br&gt;
去掉背景跑數據的版本&lt;/p&gt;&lt;/blockquote&gt;
&lt;!--
Post ID: 671
Post Date: 2015-10-29 00:50:32
Categories: 043 - 個人作品
Tags: 作品集, python, 043, 個人作品, 043 - 個人作品
--&gt;</description>
        </item>
        
    </channel>
</rss>
