[Python]如何利用Flask搭建一個Web服務器,並透過Ngrok訪問來實現LINE Bot功能?

AI ChatBot I How to Build AI LINE Bot with Ollama, Flask and Ngrok?

Flask 是一個輕量級的Web框架,主要用於建立基於Python的Web應用和API。它可搭建webhook本地服務器,同時提供靈活的URL路由和HTTP請求處理方式,允許開發者快速啟動並測試應用功能。由於其結構簡單,開發者常用其作為建立和測試 MVP(最小可行性產品),同時其也非常適合新手作為入門學習Web開發的工具之一。

本文利用樹莓派4B搭建Flask和Ngrok來實現簡易的LINE Bot功能,其中Ngrok的安裝和建置可參考此篇文章,本篇主要著重在Flask環境建置和程式碼的部分。

Flask環境建置:

a.為了避免版本干擾,建置python venv虛擬環境

raspberry@raspberry-desktop:~/python-venv python -m venv ngrok_linebot_env raspberry@raspberry-desktop:\~/python-venv source ngrok_linebot_env/bin/active

b.在該虛擬環境中,安裝flask和line-bot-sdk

(ngrok_linebot_env) raspberry@raspberry-desktop:~/python-venv$ pip install flask line-bot-sdk

程式碼:

該程式碼範例主要是讓LINE Bot回應與請求相同的內容,相當於是一隻學人說話的鸚鵡。

python 复制代码
from flask import Flask, request, abort
from linebot.v3 import (
    WebhookHandler
)
from linebot.v3.exceptions import (
    InvalidSignatureError
)
from linebot.v3.messaging import (
    Configuration,
    ApiClient,
    MessagingApi,
    ReplyMessageRequest,
    TextMessage
)
from linebot.v3.webhooks import (
    MessageEvent,
    TextMessageContent
)
app = Flask(__name__)

#Channel Access Token 和 Channel Secret
configuration = Configuration(access_token='your Channel Access Token')
handler = WebhookHandler('your Channel Secret')

#根路徑 "/" (用於檢測flask server是否有順利運作)
@app.route("/")
def index():
    return "Hello, Flask is running!"

#LINE Bot的Webhook回調路由
@app.route("/callback", methods=['POST'])
def callback():
    #X-Line-Signature headers info
    signature = request.headers['X-Line-Signature']
    #請求資料
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    #驗證簽名並處理Webhook請求
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        app.logger.info("Invalid signature. Please check your channel access 
token/channel secret.")
        abort(400)
    return 'OK'

#訊息處理function
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
    #利用ApiClient建立與LINE Messaging API的串接
    with ApiClient(configuration) as api_client:
        line_bot_api = MessagingApi(api_client)#創建MessagingApi實例
        #ReplyMessageRequest,用於發送回覆訊息
        reply_message_request = ReplyMessageRequest(
            reply_token=event.reply_token,          
            messages=[TextMessage(text=event.message.text)]  #將接收到的訊息作為回覆訊息
        )
        
        #利用MessagingApi的reply_message_with_http_info方法發送回覆訊息
        line_bot_api.reply_message_with_http_info(reply_message_request)

if __name__ == "__main__":
    app.run(port=5000) #port=5000, 須與ngork的port=5000一致

若想讓使用者透過LINE與AI模型進行問答,可考慮與OpenAI的API進行串接,若是考量問答數據有隱私或商業機密,則可考慮搭建本地AI服務器並與之串接,如Ollama。本文封面視頻即是利用Flask和Ollama串接的LINE Bot測試效果。

相关推荐
X54先生(人文科技)15 分钟前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
今年下半年24 分钟前
从零开始搭建一套大语言模型 + LangGraph 多智能体编排 + RAG 知识库检索** 的智能问答平台
人工智能·语言模型·自然语言处理
泡海椒24 分钟前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
Lifangyun_WD31 分钟前
RTX 5090 与 RTX PRO 6000 怎么选?32GB 和 96GB 显存分别适合哪些 AI 任务
人工智能·aigc·gpu算力·芯片·gpu租赁
hqyjzsb33 分钟前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
微功夫信息技术41 分钟前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
TechEdu2026061 小时前
[人工智能]AI芯片家族与产品目录指南
人工智能·ai
不会写代码的女程序猿1 小时前
中小康养门店选型参考|明理 AI 四诊仪场景适配与投入回报分析
大数据·人工智能·科技·ai·健康医疗
T1mzhou1 小时前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
机器人猎头David1 小时前
VLA、世界模型、强化学习,在机器人里分别解决什么问题?
人工智能·机器人·机器人猎头·机器人猎头公司