Spaces:
Runtime error
Runtime error
DylanonWic
commited on
Commit
•
9fa71e3
1
Parent(s):
a02d6ac
Upload 17 files
Browse files- app.py +1 -1
- chatbot_multiagent.ipynb +49 -51
- chatbot_multiagent.py +3 -3
app.py
CHANGED
@@ -14,6 +14,6 @@ def slow_echo_chat(message, history):
|
|
14 |
|
15 |
|
16 |
# gr.ChatInterface(chat).launch()
|
17 |
-
interface = gr.ChatInterface(
|
18 |
|
19 |
interface.launch()
|
|
|
14 |
|
15 |
|
16 |
# gr.ChatInterface(chat).launch()
|
17 |
+
interface = gr.ChatInterface(chat)
|
18 |
|
19 |
interface.launch()
|
chatbot_multiagent.ipynb
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
-
"execution_count":
|
6 |
"metadata": {},
|
7 |
"outputs": [],
|
8 |
"source": [
|
@@ -15,20 +15,9 @@
|
|
15 |
},
|
16 |
{
|
17 |
"cell_type": "code",
|
18 |
-
"execution_count":
|
19 |
"metadata": {},
|
20 |
-
"outputs": [
|
21 |
-
{
|
22 |
-
"name": "stderr",
|
23 |
-
"output_type": "stream",
|
24 |
-
"text": [
|
25 |
-
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:141: LangChainDeprecationWarning: The class `ChatOpenAI` was deprecated in LangChain 0.0.10 and will be removed in 0.3.0. An updated version of the class exists in the langchain-openai package and should be used instead. To use it run `pip install -U langchain-openai` and import as `from langchain_openai import ChatOpenAI`.\n",
|
26 |
-
" warn_deprecated(\n",
|
27 |
-
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:141: LangChainDeprecationWarning: The function `format_tool_to_openai_function` was deprecated in LangChain 0.1.16 and will be removed in 1.0. Use langchain_core.utils.function_calling.convert_to_openai_function() instead.\n",
|
28 |
-
" warn_deprecated(\n"
|
29 |
-
]
|
30 |
-
}
|
31 |
-
],
|
32 |
"source": [
|
33 |
"from langchain_core.messages import HumanMessage\n",
|
34 |
"import operator\n",
|
@@ -91,7 +80,7 @@
|
|
91 |
"## tools and LLM\n",
|
92 |
"\n",
|
93 |
"retriever_tool = Tool(\n",
|
94 |
-
" name=\"
|
95 |
" func=retriever.get_relevant_documents,\n",
|
96 |
" description=\"Use this tool to retrieve information about population, community and household expenditures.\"\n",
|
97 |
")\n",
|
@@ -210,7 +199,7 @@
|
|
210 |
"workflow.add_conditional_edges(\n",
|
211 |
" \"data collector\",\n",
|
212 |
" router,\n",
|
213 |
-
" {\"
|
214 |
")\n",
|
215 |
"\n",
|
216 |
"workflow.add_conditional_edges(\n",
|
@@ -234,7 +223,7 @@
|
|
234 |
},
|
235 |
{
|
236 |
"cell_type": "code",
|
237 |
-
"execution_count":
|
238 |
"metadata": {},
|
239 |
"outputs": [],
|
240 |
"source": [
|
@@ -249,58 +238,65 @@
|
|
249 |
},
|
250 |
{
|
251 |
"cell_type": "code",
|
252 |
-
"execution_count":
|
253 |
"metadata": {},
|
254 |
"outputs": [
|
255 |
{
|
256 |
"name": "stdout",
|
257 |
"output_type": "stream",
|
258 |
"text": [
|
259 |
-
"{'analyst': {'messages': [AIMessage(content='
|
260 |
-
"----\n",
|
261 |
-
"{'data collector': {'messages': [AIMessage(content=\"I will start by identifying nearby restaurants around Lumpini Center in Lat Phrao. This will help us understand the competitive landscape. Let's gather that information now.\", response_metadata={'token_usage': {'completion_tokens': 31, 'prompt_tokens': 420, 'total_tokens': 451}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='data collector', id='run-7c940868-75aa-49d1-9d6d-6e2337fb5af7-0')], 'sender': 'data collector'}}\n",
|
262 |
"----\n",
|
263 |
-
"{'
|
264 |
"----\n",
|
265 |
-
"{'
|
266 |
"----\n",
|
267 |
-
"{'
|
268 |
"----\n",
|
269 |
-
"{'
|
270 |
"----\n",
|
271 |
-
"{'
|
272 |
-
"----\n",
|
273 |
-
"{'data collector': {'messages': [AIMessage(content=\"FINAL ANSWER: I have gathered information about nearby restaurants around Lumpini Center in Lat Phrao, including popular chains like Sizzler, The Pizza Company, KFC, Chester's Grill, and Mister Donut. Additionally, the general demographic insights indicate a densely populated area with a significant number of young professionals and families, typically with middle-income levels. This information can help in strategizing the restaurant's offerings and marketing approach. If you need further details or specific data, please let me know!\", response_metadata={'token_usage': {'completion_tokens': 100, 'prompt_tokens': 987, 'total_tokens': 1087}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='data collector', id='run-532ebc54-6ef0-4f3f-8a7e-3b9abd7a86bc-0')], 'sender': 'data collector'}}\n",
|
274 |
"----\n"
|
275 |
]
|
276 |
}
|
277 |
],
|
278 |
"source": [
|
279 |
-
"
|
280 |
-
"\n",
|
281 |
-
"
|
282 |
-
"\n",
|
283 |
-
"
|
284 |
-
"
|
285 |
-
"
|
286 |
-
"
|
287 |
-
"
|
288 |
-
"
|
289 |
-
"
|
290 |
-
"
|
291 |
-
"#
|
292 |
-
"
|
293 |
-
"
|
294 |
-
"
|
295 |
-
"
|
296 |
-
"
|
297 |
]
|
298 |
},
|
299 |
{
|
300 |
"cell_type": "code",
|
301 |
-
"execution_count":
|
302 |
"metadata": {},
|
303 |
-
"outputs": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
"source": [
|
305 |
"def submitUserMessage(user_input: str) -> str:\n",
|
306 |
" graph = workflow.compile()\n",
|
@@ -309,12 +305,12 @@
|
|
309 |
" {\n",
|
310 |
" \"messages\": [\n",
|
311 |
" HumanMessage(\n",
|
312 |
-
" content
|
313 |
" )\n",
|
314 |
" ],\n",
|
315 |
" },\n",
|
316 |
" # Maximum number of steps to take in the graph\n",
|
317 |
-
" {\"recursion_limit\":
|
318 |
" )\n",
|
319 |
" \n",
|
320 |
" events = [e for e in events]\n",
|
@@ -325,7 +321,9 @@
|
|
325 |
" \n",
|
326 |
" return response\n",
|
327 |
"\n",
|
328 |
-
"
|
|
|
|
|
329 |
]
|
330 |
}
|
331 |
],
|
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
+
"execution_count": 18,
|
6 |
"metadata": {},
|
7 |
"outputs": [],
|
8 |
"source": [
|
|
|
15 |
},
|
16 |
{
|
17 |
"cell_type": "code",
|
18 |
+
"execution_count": 19,
|
19 |
"metadata": {},
|
20 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
"source": [
|
22 |
"from langchain_core.messages import HumanMessage\n",
|
23 |
"import operator\n",
|
|
|
80 |
"## tools and LLM\n",
|
81 |
"\n",
|
82 |
"retriever_tool = Tool(\n",
|
83 |
+
" name=\"population, community and household expenditures\",\n",
|
84 |
" func=retriever.get_relevant_documents,\n",
|
85 |
" description=\"Use this tool to retrieve information about population, community and household expenditures.\"\n",
|
86 |
")\n",
|
|
|
199 |
"workflow.add_conditional_edges(\n",
|
200 |
" \"data collector\",\n",
|
201 |
" router,\n",
|
202 |
+
" {\"call_tool\": \"call_tool\", \"continue\": \"reporter\", \"__end__\": END}\n",
|
203 |
")\n",
|
204 |
"\n",
|
205 |
"workflow.add_conditional_edges(\n",
|
|
|
223 |
},
|
224 |
{
|
225 |
"cell_type": "code",
|
226 |
+
"execution_count": 20,
|
227 |
"metadata": {},
|
228 |
"outputs": [],
|
229 |
"source": [
|
|
|
238 |
},
|
239 |
{
|
240 |
"cell_type": "code",
|
241 |
+
"execution_count": 21,
|
242 |
"metadata": {},
|
243 |
"outputs": [
|
244 |
{
|
245 |
"name": "stdout",
|
246 |
"output_type": "stream",
|
247 |
"text": [
|
248 |
+
"{'analyst': {'messages': [AIMessage(content='ในการวิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว เราจะเน้นไปที่ข้อมูลที่สำคัญสำหรับการวิเคราะห์ ความเหมาะสม และโอกาสทางการตลาด ซึ่งข้อมูลที่จำเป็นประกอบไปด้วย:\\n\\n1. **ข้อมูลเกี่ยวกับพื้นที่ใก���้เคียง**:\\n - แผนที่และสถานที่ที่ใกล้เคียง เช่น ร้านอาหารที่มีอยู่ในพื้นที่, คอมเพล็กซ์การค้า, สถานที่ทำงาน เป็นต้น\\n\\n2. **ข้อมูลเกี่ยวกับการแข่งขัน**:\\n - ประเภทของร้านอาหารที่มีอยู่ในพื้นที่ เช่น ร้านอาหารไทย, ร้านอาหารนานาชาติ, ฟาสต์ฟู้ด, ฯลฯ\\n - จำนวนร้านอาหารแข่งขันที่อยู่ใกล้ ๆ และระดับการให้บริการของแต่ละร้าน\\n\\n3. **ข้อมูลประชากรในเขตนั้น**:\\n - ข้อมูลจำนวนประชากร, อายุ, เพศ และลักษณะทางเศรษฐกิจของประชาชนในพื้นที่\\n\\n4. **ข้อมูลการใช้จ่ายของครัวเรือน**:\\n - รายละเอียดเกี่ยวกับการใช้จ่ายเฉลี่ยของครัวเรือนในหมวดอาหาร และออกไปทานอาหารนอกบ้านในเขตนั้น\\n \\nเพื่อที่จะได้ข้อมูลเหล่านี้ เราจำเป็นต้องค้นหาข้อมูลจากแหล่งข้อมูลที่เหมาะสม โดยจะช่วยให้คุณสามารถวิเคราะห์ความเป็นไปได้ในการเปิดร้านอาหารได้อย่างมีประสิทธิภาพ ติดต่อฉันหากต้องการข้อมูลเพิ่มเติมหรือขั้นตอนถัดไปในการรับข้อมูลเหล่านี้!', response_metadata={'token_usage': {'completion_tokens': 338, 'prompt_tokens': 273, 'total_tokens': 611}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_507c9469a1', 'finish_reason': 'stop', 'logprobs': None}, name='analyst', id='run-d6fd295e-039a-4341-9503-36432e4fa011-0')], 'sender': 'analyst'}}\n",
|
|
|
|
|
249 |
"----\n",
|
250 |
+
"{'data collector': {'messages': [AIMessage(content='ให้ฉันค้นหาข้อมูลที่เกี่ยวข้องกับพื้นที่ใกล้เคียงลุมพินี เซ็นเตอร์ ลาดพร้าว เพื่อสร้างภาพรวมของร้านอาหารที่มีอยู่ที่นั่น รวมถึงข้อมูลประชากรและการใช้จ่ายของครัวเรือนในเขตนี้ด้วย\\n\\nเริ่มต้นด้วยการค้นหาสถานที่และร้านอาหารที่อยู่ใกล้เคียง ลุมพินี เซ็นเตอร์ ลาดพร้าว!', response_metadata={'token_usage': {'completion_tokens': 97, 'prompt_tokens': 560, 'total_tokens': 657}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='data collector', id='run-578d83e5-59ff-4a4b-a120-1f69cf161dd9-0')], 'sender': 'data collector'}}\n",
|
251 |
"----\n",
|
252 |
+
"{'reporter': {'messages': [AIMessage(content='กำลังค้นหาสถานที่และร้านอาหารที่อยู่ใกล้ลุมพินี เซ็นเตอร์ ลาดพร้าว! กรุณารอสักครู่...', response_metadata={'token_usage': {'completion_tokens': 36, 'prompt_tokens': 689, 'total_tokens': 725}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='reporter', id='run-07551b19-93b9-4b3c-a6ce-e6fc8ae0e598-0')], 'sender': 'reporter'}}\n",
|
253 |
"----\n",
|
254 |
+
"{'data collector': {'messages': [AIMessage(content='ค้นพบพื้นที่ใกล้ลุมพินี เซ็นเตอร์ ลาดพร้าว และร้านอาหารที่อยู่ในบริเวณใกล้เคียง เพื่อให้คุณได้ภาพรวมที่ชัดเจนเกี่ยวกับสถานที่ดูแลตำแหน่ง:\\n\\n1. **ลุมพินี เซ็นเตอร์** ตั้งอยู่ในพื้นที่ลาดพร้าวที่เป็นศูนย์กลางการค้า เพิ่มความสะดวกสบายในการเข้าถึง\\n2. **ร้านอาหารที่อยู่ใกล้เคียง** ได้แก่:\\n - ร้านอาหารไทย\\n - ร้านอาหารนานาชาติ\\n - ฟาสต์ฟู้ด\\n - คาเฟ่\\n\\nตอนนี้จะมีการสำรวจข้อมูลประชากรในพื้นที่นั้น ๆ และการใช้จ่ายของครัวเรือน ต่อไป!', response_metadata={'token_usage': {'completion_tokens': 166, 'prompt_tokens': 701, 'total_tokens': 867}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='data collector', id='run-6b8e4c96-ba2c-409c-a001-cfe502c7f90b-0')], 'sender': 'data collector'}}\n",
|
255 |
"----\n",
|
256 |
+
"{'reporter': {'messages': [AIMessage(content='ขออภัยที่ไม่สามารถเข้าถึงข้อมูลประชากรและการใช้จ่ายของครัวเรือนในเขตลุมพินี เซ็นเตอร์ ลาดพร้าวได้ในขณะนี้ อย่างไรก็ตาม ฉันจะสรุปข้อมูลที่มีเพื่อให้คุณได้รับภาพรวมสำหรับร้านอาหารในพื้นที่นี้:\\n\\n### รายงานเบื้องต้น: การวิเคราะห์ร้านอาหารที่ลุมพินี เซ็นเตอร์ ลาดพร้าว\\n\\n#### ข้อมูลสถานที่:\\n- **ลุมพินี เซ็นเตอร์** ตั้งอยู่ในเขตที่มีความหนาแน่นของประชากร และเป็นจุดที่มีการค้าขายที่สูง ทำให้มีศักยภาพในการดึงดูดลูกค้า\\n\\n#### ร้านอาหารที่โดดเด่นในพื้นที่:\\n- มีร้านอาหารหลากหลายประเภท เช่น ร้านอาหารไทยที่ให้บริการอาหารท้องถิ่น, ร้านอาหารนานาชาติซึ่งเหมาะกับนักท่องเที่ยวและคนทำงานในแถวนี้\\n\\n#### ข้อแนะนำ:\\n1. **แตกต่าง:** สร้างจุดขายที่แตกต่างจากคู่แข่ง เช่น การนำเสนอเมนูที่ไม่ซ้ำใคร หรือการใช้วัตถุดิบจากท้องถิ่น\\n2. **การตลาด**: ใช้สื่อออนไลน์ในการโปรโมท เพื่อเข้าถึงเนื้อหาและการเข้าถึงได้ที่ง่ายดาย \\n3. **บริการลูกค้า**: มอบประสบการณ์การบริการที่ดีเยี่ยม เพื่อสร้างความสัมพันธ์ที่ดีและดึงดูดลูกค้ากลับมา\\n\\nหากต้องการข้อมูลเพิ่มเติมหรือมีคำถามใด ๆ สามารถสอบถามเพิ่มเติมได้ค่ะ!', response_metadata={'token_usage': {'completion_tokens': 358, 'prompt_tokens': 899, 'total_tokens': 1257}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='reporter', id='run-17168f52-255a-4dbc-8374-17e52acc0ae7-0')], 'sender': 'reporter'}}\n",
|
257 |
"----\n",
|
258 |
+
"{'data collector': {'messages': [AIMessage(content='FINAL ANSWER: ฉันได้ทำการรวบรวมข้อมูลเบื้องต้นเกี่ยวกับร้านอาหารในพื้นที่ลุมพินี เซ็นเตอร์ ลาดพร้าว รวมถึงร้านอาหารที่มีอยู่และข้อแนะนำสำหรับการวิเคราะห์ทางการตลาด หากต้องการข้อมูลเพิ่มเติมในส่วนอื่น ๆ สามารถสอบถามได้ค่ะ!', response_metadata={'token_usage': {'completion_tokens': 69, 'prompt_tokens': 1233, 'total_tokens': 1302}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, name='data collector', id='run-83cd7939-6c59-48c2-80ac-21a9f917cca4-0')], 'sender': 'data collector'}}\n",
|
|
|
|
|
259 |
"----\n"
|
260 |
]
|
261 |
}
|
262 |
],
|
263 |
"source": [
|
264 |
+
"content = \"วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว\"\n",
|
265 |
+
"\n",
|
266 |
+
"graph = workflow.compile()\n",
|
267 |
+
"\n",
|
268 |
+
"events = graph.stream(\n",
|
269 |
+
" {\n",
|
270 |
+
" \"messages\": [\n",
|
271 |
+
" HumanMessage(\n",
|
272 |
+
" content\n",
|
273 |
+
" )\n",
|
274 |
+
" ],\n",
|
275 |
+
" },\n",
|
276 |
+
" # Maximum number of steps to take in the graph\n",
|
277 |
+
" {\"recursion_limit\": 10},\n",
|
278 |
+
")\n",
|
279 |
+
"for s in events:\n",
|
280 |
+
" print(s)\n",
|
281 |
+
" print(\"----\")"
|
282 |
]
|
283 |
},
|
284 |
{
|
285 |
"cell_type": "code",
|
286 |
+
"execution_count": 23,
|
287 |
"metadata": {},
|
288 |
+
"outputs": [
|
289 |
+
{
|
290 |
+
"data": {
|
291 |
+
"text/plain": [
|
292 |
+
"'The analysis framework for restaurant opportunities near Lumphini Center in Lat Phrao has been outlined, including aspects of competitive analysis, demographic insights, consumer behavior, and expenditure data considerations. To move forward, gather relevant data from local sources, and understand preferences to inform your restaurant concept effectively. If further assistance is needed, please feel free to ask!'"
|
293 |
+
]
|
294 |
+
},
|
295 |
+
"execution_count": 23,
|
296 |
+
"metadata": {},
|
297 |
+
"output_type": "execute_result"
|
298 |
+
}
|
299 |
+
],
|
300 |
"source": [
|
301 |
"def submitUserMessage(user_input: str) -> str:\n",
|
302 |
" graph = workflow.compile()\n",
|
|
|
305 |
" {\n",
|
306 |
" \"messages\": [\n",
|
307 |
" HumanMessage(\n",
|
308 |
+
" content\n",
|
309 |
" )\n",
|
310 |
" ],\n",
|
311 |
" },\n",
|
312 |
" # Maximum number of steps to take in the graph\n",
|
313 |
+
" {\"recursion_limit\": 10},\n",
|
314 |
" )\n",
|
315 |
" \n",
|
316 |
" events = [e for e in events]\n",
|
|
|
321 |
" \n",
|
322 |
" return response\n",
|
323 |
"\n",
|
324 |
+
"\n",
|
325 |
+
"content = \"วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว\"\n",
|
326 |
+
"submitUserMessage(content)"
|
327 |
]
|
328 |
}
|
329 |
],
|
chatbot_multiagent.py
CHANGED
@@ -67,7 +67,7 @@ retriever = vectorstore.as_retriever()
|
|
67 |
## tools and LLM
|
68 |
|
69 |
retriever_tool = Tool(
|
70 |
-
name="
|
71 |
func=retriever.get_relevant_documents,
|
72 |
description="Use this tool to retrieve information about population, community and household expenditures."
|
73 |
)
|
@@ -186,7 +186,7 @@ workflow.add_conditional_edges(
|
|
186 |
workflow.add_conditional_edges(
|
187 |
"data collector",
|
188 |
router,
|
189 |
-
{"
|
190 |
)
|
191 |
|
192 |
workflow.add_conditional_edges(
|
@@ -256,7 +256,7 @@ def submitUserMessage(user_input: str) -> str:
|
|
256 |
|
257 |
response = list(events[-1].values())[0]["messages"][0]
|
258 |
response = response.content
|
259 |
-
response = response.replace("FINAL ANSWER
|
260 |
|
261 |
return response
|
262 |
|
|
|
67 |
## tools and LLM
|
68 |
|
69 |
retriever_tool = Tool(
|
70 |
+
name="population, community and household expenditures",
|
71 |
func=retriever.get_relevant_documents,
|
72 |
description="Use this tool to retrieve information about population, community and household expenditures."
|
73 |
)
|
|
|
186 |
workflow.add_conditional_edges(
|
187 |
"data collector",
|
188 |
router,
|
189 |
+
{"call_tool": "call_tool", "continue": "reporter", "__end__": END}
|
190 |
)
|
191 |
|
192 |
workflow.add_conditional_edges(
|
|
|
256 |
|
257 |
response = list(events[-1].values())[0]["messages"][0]
|
258 |
response = response.content
|
259 |
+
response = response.replace("FINAL ANSWER", "")
|
260 |
|
261 |
return response
|
262 |
|