alanchen1115 commited on
Commit
234804e
·
verified ·
1 Parent(s): e27ce76

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +7 -24
main.py CHANGED
@@ -22,12 +22,6 @@ from linebot.models import (
22
 
23
  from langchain.agents import create_agent
24
 
25
- # # LangChain imports (修正後)
26
- # from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
27
- # from langchain_core.tools import tool
28
- # from langchain_google_genai import ChatGoogleGenerativeAI
29
- # from langgraph.prebuilt import create_react_agent
30
-
31
  # ==========================
32
  # 環境設定與工具函式
33
  # ==========================
@@ -78,7 +72,6 @@ def get_previous_message(user_id):
78
  # LangChain 工具定義
79
  # ==========================
80
 
81
- # @tool
82
  def generate_and_upload_image(prompt: str) -> str:
83
  """根據文字提示生成圖片。"""
84
 
@@ -133,7 +126,6 @@ def generate_and_upload_image(prompt: str) -> str:
133
  # 捕捉任何執行過程中的異常(如網路中斷、記憶體錯誤等)
134
  return f"程式執行出錯: {e}"
135
 
136
- # @tool
137
  def analyze_image_with_text(image_path: str, user_text: str) -> str:
138
  """根據圖片路徑和文字提問進行分析。"""
139
  try:
@@ -152,19 +144,6 @@ def analyze_image_with_text(image_path: str, user_text: str) -> str:
152
  # LangChain 代理人設定
153
  # ==========================
154
  tools = [generate_and_upload_image, analyze_image_with_text]
155
- # # 1. 建立 LLM 模型
156
- # llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", temperature=0.1)
157
- # # 2. 定義 System Prompt (取代原本的 prompt_template)
158
- # system_prompt = """
159
- # 你是一個強大的影像生成及影像分析代理人。如果生成了圖片,請直接給出 URL。
160
- # 【重要指示】:如果使用者只是單純打招呼、閒聊或沒有提供明確的圖片需求,請直接用文字友善回覆,絕對不要呼叫任何工具。
161
- # """
162
- # # 3. 直接建立包含 Executor 功能的 Agent
163
- # agent_executor = create_react_agent(
164
- # model=llm,
165
- # tools=tools,
166
- # prompt=system_prompt
167
- # )
168
 
169
  system_prompt = """
170
  你是一個強大的影像生成及影像分析代理人。如果生成了圖片,請直接給出 imageUrl。
@@ -212,7 +191,7 @@ def handle_message(event):
212
  user_text = f"請分析這張圖片 {image_path},問題是:{user_text}"
213
  user_message_history[user_id].pop()
214
 
215
- agent_input = {"messages": [{"role": "user", "content": user_text}]} # {"messages": [("user", user_text)]}
216
  try:
217
  response = agent_executor.invoke(agent_input)
218
  # 1. 先取得原始內容 (可能是字串,也可能是列表)
@@ -229,9 +208,13 @@ def handle_message(event):
229
  # 如果已經是字串,直接指派
230
  out = raw_content
231
  # 搜尋 URL 邏輯
232
- urls = re.findall(r'https?://[^\s<>"]+|www\.[^\s<>"]+', out)
233
- image_url = next((u for u in urls if any(ext in u.lower() for ext in ['.png', '.jpg'])), None)
 
 
234
  if image_url:
 
 
235
  line_bot_api.reply_message(
236
  event.reply_token,
237
  [
 
22
 
23
  from langchain.agents import create_agent
24
 
 
 
 
 
 
 
25
  # ==========================
26
  # 環境設定與工具函式
27
  # ==========================
 
72
  # LangChain 工具定義
73
  # ==========================
74
 
 
75
  def generate_and_upload_image(prompt: str) -> str:
76
  """根據文字提示生成圖片。"""
77
 
 
126
  # 捕捉任何執行過程中的異常(如網路中斷、記憶體錯誤等)
127
  return f"程式執行出錯: {e}"
128
 
 
129
  def analyze_image_with_text(image_path: str, user_text: str) -> str:
130
  """根據圖片路徑和文字提問進行分析。"""
131
  try:
 
144
  # LangChain 代理人設定
145
  # ==========================
146
  tools = [generate_and_upload_image, analyze_image_with_text]
 
 
 
 
 
 
 
 
 
 
 
 
 
147
 
148
  system_prompt = """
149
  你是一個強大的影像生成及影像分析代理人。如果生成了圖片,請直接給出 imageUrl。
 
191
  user_text = f"請分析這張圖片 {image_path},問題是:{user_text}"
192
  user_message_history[user_id].pop()
193
 
194
+ agent_input = {"messages": [{"role": "user", "content": user_text}]}
195
  try:
196
  response = agent_executor.invoke(agent_input)
197
  # 1. 先取得原始內容 (可能是字串,也可能是列表)
 
208
  # 如果已經是字串,直接指派
209
  out = raw_content
210
  # 搜尋 URL 邏輯
211
+ # 1. 使用更精確的 Regex 排除右括號
212
+ urls = re.findall(r'https?://[^\s<>"\)]+|www\.[^\s<>"\)]+', out)
213
+ # 2. 尋找圖片網址
214
+ image_url = next((u for u in urls if any(ext in u.lower() for ext in ['.png', '.jpg', '.jpeg', '.gif'])), None)
215
  if image_url:
216
+ # 確保 image_url 不會包含 markdown 殘留物
217
+ image_url = image_url.split(')')[0]
218
  line_bot_api.reply_message(
219
  event.reply_token,
220
  [