Spaces:
Sleeping
Sleeping
| from flask import Flask, request, abort | |
| from linebot import LineBotApi, WebhookHandler | |
| from linebot.exceptions import InvalidSignatureError | |
| from linebot.models import MessageEvent, TextMessage, TextSendMessage | |
| import os | |
| import google.generativeai as genai | |
| from function import retrieve_resume_info, search_jobs | |
| # 初始化 Flask | |
| app = Flask(__name__) | |
| # 設定 Line Bot API 和 WebhookHandler | |
| api = LineBotApi(os.getenv('LINE_TOKEN')) | |
| handler = WebhookHandler(os.getenv('LINE_SECRET')) | |
| # 設定 Gemini API | |
| GEMINI_API_KEY = os.getenv('GEMINI_API_KEY') | |
| genai.configure(api_key=GEMINI_API_KEY) | |
| if not GEMINI_API_KEY: | |
| raise ValueError("GEMINI_API_KEY not found. Please set the environment variable!") | |
| # 設定 function mapping | |
| functions = {"search_jobs": search_jobs, "retrieve_resume_info": retrieve_resume_info} | |
| def call_function(function_call): | |
| function_name = function_call.name | |
| function_args = function_call.args | |
| return functions[function_name](**function_args) | |
| # 根路徑測試 | |
| def hello(): | |
| return 'Hello, this is Gemini AI 求職 & 履歷助手!' | |
| # Line Webhook 回調 | |
| def callback(): | |
| signature = request.headers['X-Line-Signature'] | |
| body = request.get_data(as_text=True) | |
| app.logger.info("Request body: " + body) | |
| try: | |
| handler.handle(body, signature) | |
| except InvalidSignatureError: | |
| print("電子簽章錯誤, 請檢查密鑰是否正確?") | |
| abort(400) | |
| return 'OK' | |
| def handle_message(event): | |
| user_text = event.message.text.strip() | |
| model = genai.GenerativeModel(model_name="gemini-1.5-flash", tools=functions.values()) | |
| response = model.generate_content(user_text) | |
| part = response.candidates[0].content.parts[0] | |
| if part.function_call: | |
| result = call_function(part.function_call) | |
| final_response = model.generate_content( | |
| f"使用者的問題是:「{user_text}」。\n根據 function 查詢結果,{result}。\n請根據這些資訊,給出自然且完整的回答,不要捏造。在回答前先告訴使用者你呼叫的函式名稱!" | |
| ) | |
| reply_text = final_response.text | |
| else: | |
| reply_text = part.text | |
| api.reply_message(event.reply_token, TextSendMessage(text=reply_text)) | |
| if __name__ == "__main__": | |
| app.run(host='0.0.0.0', port=7860) | |