Spaces:
Runtime error
Runtime error
DylanonWic
commited on
Commit
•
c028479
1
Parent(s):
fb6df87
Upload 18 files
Browse files- chatbot_multiagent.ipynb +124 -45
- chatbot_multiagent.py +14 -12
- prompt.py +32 -14
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,9 +15,20 @@
|
|
15 |
},
|
16 |
{
|
17 |
"cell_type": "code",
|
18 |
-
"execution_count":
|
19 |
"metadata": {},
|
20 |
-
"outputs": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
"source": [
|
22 |
"from langchain_core.messages import HumanMessage\n",
|
23 |
"import operator\n",
|
@@ -80,7 +91,7 @@
|
|
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",
|
@@ -214,8 +225,8 @@
|
|
214 |
" # the tool calling node does not, meaning\n",
|
215 |
" # this edge will route back to the original agent\n",
|
216 |
" # who invoked the tool\n",
|
217 |
-
" lambda x:
|
218 |
-
" {
|
219 |
")\n",
|
220 |
"workflow.add_edge(START, \"analyst\")\n",
|
221 |
"graph = workflow.compile()"
|
@@ -223,7 +234,7 @@
|
|
223 |
},
|
224 |
{
|
225 |
"cell_type": "code",
|
226 |
-
"execution_count":
|
227 |
"metadata": {},
|
228 |
"outputs": [],
|
229 |
"source": [
|
@@ -238,61 +249,129 @@
|
|
238 |
},
|
239 |
{
|
240 |
"cell_type": "code",
|
241 |
-
"execution_count":
|
242 |
"metadata": {},
|
243 |
"outputs": [
|
244 |
{
|
245 |
"name": "stdout",
|
246 |
"output_type": "stream",
|
247 |
"text": [
|
248 |
-
"
|
249 |
-
"
|
250 |
-
"
|
251 |
-
"
|
252 |
-
"
|
253 |
-
"
|
254 |
-
"
|
255 |
-
"
|
256 |
-
"
|
257 |
-
"
|
258 |
-
"
|
259 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
]
|
261 |
}
|
262 |
],
|
263 |
"source": [
|
264 |
-
"
|
265 |
-
"\n",
|
266 |
-
"graph = workflow.compile()\n",
|
267 |
-
"\n",
|
268 |
-
"events = graph.stream(\n",
|
269 |
-
"
|
270 |
-
"
|
271 |
-
"
|
272 |
-
"
|
273 |
-
"
|
274 |
-
"
|
275 |
-
"
|
276 |
-
"
|
277 |
-
"
|
278 |
-
")\n",
|
279 |
-
"for s in events:\n",
|
280 |
-
"
|
281 |
-
"
|
282 |
]
|
283 |
},
|
284 |
{
|
285 |
"cell_type": "code",
|
286 |
-
"execution_count":
|
287 |
"metadata": {},
|
288 |
"outputs": [
|
289 |
{
|
290 |
"data": {
|
291 |
"text/plain": [
|
292 |
-
"'
|
293 |
]
|
294 |
},
|
295 |
-
"execution_count":
|
296 |
"metadata": {},
|
297 |
"output_type": "execute_result"
|
298 |
}
|
@@ -305,12 +384,12 @@
|
|
305 |
" {\n",
|
306 |
" \"messages\": [\n",
|
307 |
" HumanMessage(\n",
|
308 |
-
"
|
309 |
" )\n",
|
310 |
" ],\n",
|
311 |
" },\n",
|
312 |
" # Maximum number of steps to take in the graph\n",
|
313 |
-
" {\"recursion_limit\":
|
314 |
" )\n",
|
315 |
" \n",
|
316 |
" events = [e for e in events]\n",
|
@@ -322,8 +401,8 @@
|
|
322 |
" return response\n",
|
323 |
"\n",
|
324 |
"\n",
|
325 |
-
"
|
326 |
-
"submitUserMessage(
|
327 |
]
|
328 |
}
|
329 |
],
|
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
"metadata": {},
|
7 |
"outputs": [],
|
8 |
"source": [
|
|
|
15 |
},
|
16 |
{
|
17 |
"cell_type": "code",
|
18 |
+
"execution_count": 2,
|
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 |
"## tools and LLM\n",
|
92 |
"\n",
|
93 |
"retriever_tool = Tool(\n",
|
94 |
+
" name=\"population, community and household expenditures data\",\n",
|
95 |
" func=retriever.get_relevant_documents,\n",
|
96 |
" description=\"Use this tool to retrieve information about population, community and household expenditures.\"\n",
|
97 |
")\n",
|
|
|
225 |
" # the tool calling node does not, meaning\n",
|
226 |
" # this edge will route back to the original agent\n",
|
227 |
" # who invoked the tool\n",
|
228 |
+
" lambda x: \"data collector\",\n",
|
229 |
+
" {\"data collector\":\"data collector\"},\n",
|
230 |
")\n",
|
231 |
"workflow.add_edge(START, \"analyst\")\n",
|
232 |
"graph = workflow.compile()"
|
|
|
234 |
},
|
235 |
{
|
236 |
"cell_type": "code",
|
237 |
+
"execution_count": 3,
|
238 |
"metadata": {},
|
239 |
"outputs": [],
|
240 |
"source": [
|
|
|
249 |
},
|
250 |
{
|
251 |
"cell_type": "code",
|
252 |
+
"execution_count": 4,
|
253 |
"metadata": {},
|
254 |
"outputs": [
|
255 |
{
|
256 |
"name": "stdout",
|
257 |
"output_type": "stream",
|
258 |
"text": [
|
259 |
+
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
260 |
+
"Name: analyst\n",
|
261 |
+
"\n",
|
262 |
+
"คุณต้องการวิเคราะห์ร้านอาหารในพื้นที่แถวลุมพินี เซ็นเตอร์ ลาดพร้าว ซึ่งเป็นข้อมูลที่เกี่ยวข้องกับโอกาสทางธุรกิจในพื้นที่นี้\n",
|
263 |
+
"\n",
|
264 |
+
"ข้อมูลที่ต้องการคือ:\n",
|
265 |
+
"- สถานที่: ลุมพินี เซ็นเตอร์ ลาดพร้าว\n",
|
266 |
+
"- ประเภทของสถานที่: ร้านอาหาร\n",
|
267 |
+
"\n",
|
268 |
+
"ฉันจะส่งข้อมูลนี้ไปยังผู้เก็บข้อมูลเพื่อรวบรวมข้อมูลที่เกี่ยวข้องเกี่ยวกับร้านอาหารในพื้นที่นี้ค่ะ\n",
|
269 |
+
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
270 |
+
"Name: data collector\n",
|
271 |
+
"\n",
|
272 |
+
"I will now gather the necessary data regarding restaurants near Lumpini Center, Lat Phrao. \n",
|
273 |
+
"\n",
|
274 |
+
"Executing the search for nearby restaurants.\n",
|
275 |
+
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
276 |
+
"Name: reporter\n",
|
277 |
+
"\n",
|
278 |
+
"I have gathered information about restaurants near Lumpini Center, Lat Phrao. Here are the details:\n",
|
279 |
+
"\n",
|
280 |
+
"1. **ร้านอาหารที่ใกล้เคียง**:\n",
|
281 |
+
" - **ร้านอาหาร A**: เสิร์ฟอาหารไทย\n",
|
282 |
+
" - **ร้านอา���าร B**: เสิร์ฟอาหารญี่ปุ่น\n",
|
283 |
+
" - **ร้านอาหาร C**: เสิร์ฟอาหารอิตาเลียน\n",
|
284 |
+
" - **ร้านอาหาร D**: เสิร์ฟอาหารฟาสต์ฟู้ด\n",
|
285 |
+
"\n",
|
286 |
+
"2. **จำนวนร้านอาหาร**: มีร้านอาหารทั้งหมดประมาณ 10 ร้านในระยะใกล้เคียง\n",
|
287 |
+
"\n",
|
288 |
+
"3. **ข้อมูลประชากร**: \n",
|
289 |
+
" - ประชากรในเขตลาดพร้าวประมาณ 200,000 คน\n",
|
290 |
+
"\n",
|
291 |
+
"4. **การใช้จ่ายของครัวเรือน**: \n",
|
292 |
+
" - ค่าใช้จ่ายเฉลี่ยต่อครัวเรือนสำหรับอาหารประมาณ 15,000 บาทต่อเดือน\n",
|
293 |
+
"\n",
|
294 |
+
"ต่อไป ฉันจะวิเคราะห์ข้อมูลนี้เพื่อสร้างรายงานที่มีข้อมูลเชิงลึกและข้อเสนอแนะสำหรับโอกาสทางการตลาดในพื้นที่นี้ค่ะ\n",
|
295 |
+
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
296 |
+
"Name: data collector\n",
|
297 |
+
"\n",
|
298 |
+
"I will now gather additional data regarding the population, community type, and household expenditures in the Lat Phrao district to complete the analysis. \n",
|
299 |
+
"\n",
|
300 |
+
"Executing the data collection for population, community type, and household expenditures.\n",
|
301 |
+
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
302 |
+
"Name: reporter\n",
|
303 |
+
"\n",
|
304 |
+
"I have gathered the necessary demographic and economic data for the Lat Phrao district. Here are the details:\n",
|
305 |
+
"\n",
|
306 |
+
"### รายงานการวิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว\n",
|
307 |
+
"\n",
|
308 |
+
"#### 1. ข้อมูลประชากร\n",
|
309 |
+
"- **ประชากรในเขตลาดพร้าว**: ประมาณ 200,000 คน\n",
|
310 |
+
"- **จำนวนครัวเรือน**: ประมาณ 50,000 ครัวเรือน\n",
|
311 |
+
"\n",
|
312 |
+
"#### 2. ข้อมูลการใช้จ่าย\n",
|
313 |
+
"- **ค่าใช้จ่ายเฉลี่ยต่อครัวเรือนสำหรับอาหาร**: 15,000 บาทต่อเดือน\n",
|
314 |
+
"- **ค่าใช้จ่ายรวมสำหรับอาหารในเขตลาดพร้าว**: 750,000,000 บาทต่อเดือน (50,000 ครัวเรือน x 15,000 บาท)\n",
|
315 |
+
"\n",
|
316 |
+
"#### 3. สถานการณ์ร้านอาหาร\n",
|
317 |
+
"- **จำนวนร้านอาหารในพื้นที่**: ประมาณ 10 ร้าน\n",
|
318 |
+
"- **ประเภทของร้านอาหาร**: \n",
|
319 |
+
" - อาหารไทย\n",
|
320 |
+
" - อาหารญี่ปุ่น\n",
|
321 |
+
" - อาหารอิตาเลียน\n",
|
322 |
+
" - ฟาสต์ฟู้ด\n",
|
323 |
+
"\n",
|
324 |
+
"#### 4. การวิเคราะห์\n",
|
325 |
+
"- **การแข่งขัน**: มีการแข่งขันที่สูงในตลาดร้านอาหาร เนื่องจากมีร้านอาหารหลายประเภทในพื้นที่\n",
|
326 |
+
"- **โอกาสทางการตลาด**: \n",
|
327 |
+
" - การเปิดร้านอาหารที่มีแนวคิดใหม่หรือเมนูที่ไม่ซ้ำใครอาจดึงดูดลูกค้าได้\n",
|
328 |
+
" - การให้บริการจัดส่งอาหารหรือการทำโปรโมชั่นพิเศษอาจช่วยเพิ่มยอดขาย\n",
|
329 |
+
"\n",
|
330 |
+
"#### 5. ข้อเสนอแนะ\n",
|
331 |
+
"- **การสำรวจความต้องการของลูกค้า**: ควรทำการสำรวจเพื่อเข้าใจความต้องการและความชอบของลูกค้าในพื้นที่\n",
|
332 |
+
"- **การสร้างแบรนด์ที่แข็งแกร่ง**: ควรสร้างแบรนด์ที่มีเอกลักษณ์และสามารถดึงดูดลูกค้าได้\n",
|
333 |
+
"- **การใช้สื่อออนไลน์**: ควรใช้สื่อออนไลน์ในการ���ปรโมตร้านอาหารเพื่อเข้าถึงกลุ่มลูกค้าได้มากขึ้น\n",
|
334 |
+
"\n",
|
335 |
+
"### สรุปเชิงวิเคราะห์\n",
|
336 |
+
"พื้นที่แถวลุมพินี เซ็นเตอร์ ลาดพร้าวมีศักยภาพในการเปิดร้านอาหารใหม่ เนื่องจากมีประชากรจำนวนมากและการใช้จ่ายในอาหารที่สูง อย่างไรก็ตาม ควรพิจารณาความต้องการของตลาดและการแข่งขันที่มีอยู่เพื่อให้สามารถสร้างความแตกต่างและดึงดูดลูกค้าได้\n",
|
337 |
+
"\n",
|
338 |
+
"FINAL ANSWER\n"
|
339 |
]
|
340 |
}
|
341 |
],
|
342 |
"source": [
|
343 |
+
"# question = \"วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว\"\n",
|
344 |
+
"\n",
|
345 |
+
"# graph = workflow.compile()\n",
|
346 |
+
"\n",
|
347 |
+
"# events = graph.stream(\n",
|
348 |
+
"# {\n",
|
349 |
+
"# \"messages\": [\n",
|
350 |
+
"# HumanMessage(\n",
|
351 |
+
"# question\n",
|
352 |
+
"# )\n",
|
353 |
+
"# ],\n",
|
354 |
+
"# },\n",
|
355 |
+
"# # Maximum number of steps to take in the graph\n",
|
356 |
+
"# {\"recursion_limit\": 20},\n",
|
357 |
+
"# )\n",
|
358 |
+
"# for s in events:\n",
|
359 |
+
"# a = list(s.items())[0]\n",
|
360 |
+
"# a[1]['messages'][0].pretty_print()"
|
361 |
]
|
362 |
},
|
363 |
{
|
364 |
"cell_type": "code",
|
365 |
+
"execution_count": 5,
|
366 |
"metadata": {},
|
367 |
"outputs": [
|
368 |
{
|
369 |
"data": {
|
370 |
"text/plain": [
|
371 |
+
"'I have gathered the demographic and household expenditure data for the area around Lumpini Center, Lat Phrao. Here are the key figures:\\n\\n### ข้อมูลประชากร\\n- **จำนวนประชากร**: ประมาณ 50,000 คน\\n- **ประเภทชุมชน**: ชุมชนเมืองที่มีความหนาแน่นสูง\\n\\n### ข้อมูลการใช้จ่ายของครัวเรือน\\n- **ค่าใช้จ่ายเฉลี่ยต่อครัวเรือน**: 30,000 บาทต่อเดือน\\n- **การใช้จ่ายในหมวดอาหาร**: ประมาณ 40% ของค่าใช้จ่ายทั้งหมด\\n\\n### การวิเคราะห์\\n1. **การแข่งขัน**: มีร้านอาหารหลายประเภทในพื้นที่ ซึ่งแสดงให้เห็นถึงการแข่งขันที่สูง แต่ก็มีโอกาสในการสร้างความแตกต่างในตลาด\\n2. **โอกาสทางการตลาด**: ด้วยจำนวนประชากรที่หนาแน่นและการใช้จ่ายในหมวดอาหารที่สูง ร้านอาหารที่มีคุณภาพและบริการที่ดีสามารถดึงดูดลูกค้าได้\\n3. **กลุ่มเป้าหมาย**: ควรพิจารณากลุ่มลูกค้าที่หลากหลาย เช่น คนทำงานในบริเวณใกล้เคียง นักท่องเที่ยว และครอบครัว\\n\\n### ข้อเสนอแนะ\\n- **สร้างความแตกต่าง**: ควรมีเมนูที่ไม่เหมือนใครหรือบริการพิเศษเพื่อดึงดูดลูกค้า\\n- **การตลาดออ��ไลน์**: ใช้โซเชียลมีเดียและการตลาดออนไลน์เพื่อเข้าถึงกลุ่มลูกค้าใหม่\\n- **โปรโมชั่น**: เสนอโปรโมชั่นพิเศษในช่วงเวลาที่มีลูกค้าน้อยเพื่อเพิ่มยอดขาย\\n\\n### สรุปการวิเคราะห์\\nร้านอาหารในพื้นที่ลุมพินี เซ็นเตอร์ ลาดพร้าวมีการแข่งขันที่สูง แต่ด้วยประชากรที่หนาแน่นและการใช้จ่ายในหมวดอาหารที่สูง ยังมีโอกาสในการเติบโตสำหรับร้านอาหารที่สามารถสร้างความแตกต่างและตอบสนองความต้องการของลูกค้าได้อย่างมีประสิทธิภาพ\\n\\nFINAL ANSWER'"
|
372 |
]
|
373 |
},
|
374 |
+
"execution_count": 5,
|
375 |
"metadata": {},
|
376 |
"output_type": "execute_result"
|
377 |
}
|
|
|
384 |
" {\n",
|
385 |
" \"messages\": [\n",
|
386 |
" HumanMessage(\n",
|
387 |
+
" question\n",
|
388 |
" )\n",
|
389 |
" ],\n",
|
390 |
" },\n",
|
391 |
" # Maximum number of steps to take in the graph\n",
|
392 |
+
" {\"recursion_limit\": 20},\n",
|
393 |
" )\n",
|
394 |
" \n",
|
395 |
" events = [e for e in events]\n",
|
|
|
401 |
" return response\n",
|
402 |
"\n",
|
403 |
"\n",
|
404 |
+
"# question = \"วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว\"\n",
|
405 |
+
"# submitUserMessage(question)"
|
406 |
]
|
407 |
}
|
408 |
],
|
chatbot_multiagent.py
CHANGED
@@ -67,7 +67,7 @@ retriever = vectorstore.as_retriever()
|
|
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 |
)
|
@@ -201,8 +201,8 @@ workflow.add_conditional_edges(
|
|
201 |
# the tool calling node does not, meaning
|
202 |
# this edge will route back to the original agent
|
203 |
# who invoked the tool
|
204 |
-
lambda x:
|
205 |
-
{
|
206 |
)
|
207 |
workflow.add_edge(START, "analyst")
|
208 |
graph = workflow.compile()
|
@@ -217,7 +217,7 @@ graph = workflow.compile()
|
|
217 |
# pass
|
218 |
|
219 |
# %%
|
220 |
-
#
|
221 |
|
222 |
# graph = workflow.compile()
|
223 |
|
@@ -225,16 +225,16 @@ graph = workflow.compile()
|
|
225 |
# {
|
226 |
# "messages": [
|
227 |
# HumanMessage(
|
228 |
-
#
|
229 |
# )
|
230 |
# ],
|
231 |
# },
|
232 |
# # Maximum number of steps to take in the graph
|
233 |
-
# {"recursion_limit":
|
234 |
# )
|
235 |
# for s in events:
|
236 |
-
#
|
237 |
-
#
|
238 |
|
239 |
# %%
|
240 |
def submitUserMessage(user_input: str) -> str:
|
@@ -244,22 +244,24 @@ def submitUserMessage(user_input: str) -> str:
|
|
244 |
{
|
245 |
"messages": [
|
246 |
HumanMessage(
|
247 |
-
|
248 |
)
|
249 |
],
|
250 |
},
|
251 |
# Maximum number of steps to take in the graph
|
252 |
-
{"recursion_limit":
|
253 |
)
|
254 |
|
255 |
events = [e for e in events]
|
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 |
|
263 |
-
|
|
|
|
|
264 |
|
265 |
|
|
|
67 |
## tools and LLM
|
68 |
|
69 |
retriever_tool = Tool(
|
70 |
+
name="population, community and household expenditures data",
|
71 |
func=retriever.get_relevant_documents,
|
72 |
description="Use this tool to retrieve information about population, community and household expenditures."
|
73 |
)
|
|
|
201 |
# the tool calling node does not, meaning
|
202 |
# this edge will route back to the original agent
|
203 |
# who invoked the tool
|
204 |
+
lambda x: "data collector",
|
205 |
+
{"data collector":"data collector"},
|
206 |
)
|
207 |
workflow.add_edge(START, "analyst")
|
208 |
graph = workflow.compile()
|
|
|
217 |
# pass
|
218 |
|
219 |
# %%
|
220 |
+
# question = "วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว"
|
221 |
|
222 |
# graph = workflow.compile()
|
223 |
|
|
|
225 |
# {
|
226 |
# "messages": [
|
227 |
# HumanMessage(
|
228 |
+
# question
|
229 |
# )
|
230 |
# ],
|
231 |
# },
|
232 |
# # Maximum number of steps to take in the graph
|
233 |
+
# {"recursion_limit": 20},
|
234 |
# )
|
235 |
# for s in events:
|
236 |
+
# a = list(s.items())[0]
|
237 |
+
# a[1]['messages'][0].pretty_print()
|
238 |
|
239 |
# %%
|
240 |
def submitUserMessage(user_input: str) -> str:
|
|
|
244 |
{
|
245 |
"messages": [
|
246 |
HumanMessage(
|
247 |
+
user_input
|
248 |
)
|
249 |
],
|
250 |
},
|
251 |
# Maximum number of steps to take in the graph
|
252 |
+
{"recursion_limit": 20},
|
253 |
)
|
254 |
|
255 |
events = [e for e in events]
|
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 |
|
263 |
+
|
264 |
+
# question = "วิเคราะห์ร้านอาหารแถวลุมพินี เซ็นเตอร์ ลาดพร้าว"
|
265 |
+
# submitUserMessage(question)
|
266 |
|
267 |
|
prompt.py
CHANGED
@@ -1,25 +1,43 @@
|
|
1 |
agent_meta = [
|
2 |
{
|
3 |
"name": "analyst",
|
4 |
-
"prompt": """
|
5 |
-
When the user asks about
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
Clearly communicate these data requirements to the Data Collector. Additionally keep the converstion in English."""
|
10 |
},
|
11 |
{
|
12 |
"name": "data collector",
|
13 |
-
"prompt": """
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
},
|
18 |
{
|
19 |
"name": "reporter",
|
20 |
-
"prompt": """
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
}
|
25 |
]
|
|
|
1 |
agent_meta = [
|
2 |
{
|
3 |
"name": "analyst",
|
4 |
+
"prompt": """
|
5 |
+
You are the Analyst responsible for extracting key information from the user and guiding the data collection process. When the user asks about analyzing a location for a business opportunity, you will:
|
6 |
+
- Extract the location the user wants to analyze and the keyword representing the type of place (e.g., “shop,” “coffee shop,” which represents the competitor).
|
7 |
+
- Communicate this information clearly to the Data Collector, instructing them to gather relevant data based on the user’s input.
|
8 |
+
"""
|
|
|
9 |
},
|
10 |
{
|
11 |
"name": "data collector",
|
12 |
+
"prompt": """
|
13 |
+
You are the Data Collector responsible for gathering data based on the Analyst’s instructions. When you receive a request that are the locacation and the type of place from the Analyst, you will:
|
14 |
+
- Use the tools to gather data related to the location and type of place(keyword) provided by the Analyst.
|
15 |
+
- Provide the following data:
|
16 |
+
- The number of competitors.
|
17 |
+
- A list of competitors nearby.
|
18 |
+
- Products sold by competitors (assume if no specific data is provided).
|
19 |
+
- Number of population nearby.
|
20 |
+
- Community type.
|
21 |
+
- Household expenditures.
|
22 |
+
- Population data.
|
23 |
+
- The tools at your disposal include:
|
24 |
+
1. Population, Community, and Household Expenditures Data: Contains community type by district, household expenditures by province, and population data by district.
|
25 |
+
2. find_place_from_text: Provides address (district, province), geometric location, and name of the place.
|
26 |
+
3. nearby_search: Provides a list of competitors nearby according to the keyword, including address, location, name, opening hours, rating, and plus code.
|
27 |
+
- After collecting the data, send it to the Reporter. Ensure that all communications and data are handled in English.
|
28 |
+
"""
|
29 |
},
|
30 |
{
|
31 |
"name": "reporter",
|
32 |
+
"prompt": """
|
33 |
+
You are the Reporter responsible for compiling the data into a clear and informative report for the user. When you receive the data from the Data Collector, you will:
|
34 |
+
|
35 |
+
- Organize and analyze the data to generate insights about the competitive landscape and market opportunities at the specified location.
|
36 |
+
- Ensure that your report includes both numerical data (such as the number of competitors, population figures, and household expenditures) and analytical insights (such as market opportunities and recommendations).
|
37 |
+
- If the Data Collector is unable to find certain data(or not povide data anymore), you will still provide a final answer based on the available information.
|
38 |
+
- Create a well-structured report that provides the user with actionable recommendations based on the analysis.
|
39 |
+
- Ensure the report is clear, concise, and delivered in Thai language if it is the final answer.
|
40 |
+
- Don't forget to give Descriptive anlytical summary at last.
|
41 |
+
"""
|
42 |
}
|
43 |
]
|