Commit 40c5eb03 authored by Vũ Hoàng Anh's avatar Vũ Hoàng Anh

Update prompt: Enhance [NEXT] strategy, improve writing style, refine [GOAL]...

Update prompt: Enhance [NEXT] strategy, improve writing style, refine [GOAL] handling, and inject insight into prompt
parent b0123e26
......@@ -149,7 +149,7 @@ async def chat_controller(
response_payload = {
"ai_response": ai_text_response,
"product_ids": final_product_ids,
# user_insight is NOT included here as requested
"user_insight": new_insight, # Return for dev/debug purposes
}
# ====================== SAVE TO CACHE ======================
......
......@@ -50,7 +50,7 @@ class CANIFAGraph:
self.prompt_template = ChatPromptTemplate.from_messages(
[
("system", self.system_prompt),
("system", "User Insight:\n{user_insight}"),
("system", "===== USER INSIGHT (TỪ TURN TRƯỚC) =====\n⚡ BẮT BUỘC: Đọc [NEXT] bên dưới và THỰC HIỆN chiến lược đã lên kế hoạch!\n\n{user_insight}\n====================================="),
("system", "Chat History:"),
MessagesPlaceholder(variable_name="history"),
("system", "Current Query:"),
......@@ -58,6 +58,7 @@ class CANIFAGraph:
MessagesPlaceholder(variable_name="messages"),
]
)
self.chain = self.prompt_template | self.llm_with_tools
self.cache = InMemoryCache()
......
"""
CiCi Fashion Consultant - System Prompt
Tư vấn thời trang CANIFA chuyên nghiệp
Version 3.0 - Dynamic from File
Version 3.4 - Simplified Summary History
Last updated: 2026-01-29 11:27
"""
import os
......
This diff is collapsed.
......@@ -69,6 +69,7 @@ async def fashion_qa_chat(request: Request, req: QueryRequest, background_tasks:
"status": "success",
"ai_response": result["ai_response"],
"product_ids": result.get("product_ids", []),
# "user_insight": result.get("user_insight"), # Hide in prod
"limit_info": {
"limit": usage_info["limit"],
"used": usage_info["used"],
......@@ -119,14 +120,8 @@ async def fashion_qa_chat_dev(request: Request, req: QueryRequest, background_ta
is_authenticated=is_authenticated,
)
user_insight = None
try:
client = redis_cache.get_client()
if client:
insight_key = f"identity_key_insight:{identity_id}"
user_insight = await client.get(insight_key)
except Exception as insight_error:
logger.error(f"Error fetching user_insight for dev endpoint: {insight_error}")
# user_insight đã được trả về từ controller
user_insight = result.get("user_insight")
return {
"status": "success",
......
......@@ -34,6 +34,7 @@ async def get_tool_prompt_content(filename: str, request: Request):
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/api/agent/tool-prompts/{filename}")
@rate_limit_service.limiter.limit("10/minute")
async def update_tool_prompt_content(filename: str, request: Request, body: ToolPromptUpdateRequest):
......
search
Cửa hàng
Tài khoản
Giỏ hàng
SẢN PHẨM MỚI
NỮ
NAM
BÉ GÁI
BÉ TRAI
CANIFA S
LICENSE
SCHOOL
ĐỒNG PHỤC
Trang chủ
Hệ thống cửa hàng
110
Hệ thống cửa hàng trên toàn quốc
Canifa hướng đến mục tiêu mang lại niềm vui mặc mới mỗi ngày cho hàng triệu người tiêu dùng Việt. Chúng tôi tin rằng người dân Việt Nam cũng đang hướng đến một cuộc sống năng động, tích cực hơn.
Tìm kiếm cửa hàng
Lựa chọn Tỉnh / Thành Phố
Hà Nội
Bắc Ninh
Hưng Yên
Hồ Chí Minh
Thái Bình
Nghệ An
Hải Phòng
Thanh Hoá
Quảng Ninh
Vĩnh Phúc
Hòa Bình
Sơn La
Quảng Bình
Phú Thọ
Đà Nẵng
Trà Vinh
Ninh Bình
Bình Phước
Bình Dương
Hải Dương
Hà Nam
Đồng Nai
Nam Định
Hà Tĩnh
Lâm Đồng
Lào Cai
Gia Lai
Cao Bằng
Tuyên Quang
Thái Nguyên
Bà Rịa – Vũng Tàu
Điện Biên
Bắc Giang
Yên Bái
Lạng Sơn
Đắk Lắk
Lựa chọn Quận / Huyện
Quận Ba Đình
Quận Cầu Giấy
Quận Long Biên
Quận Hai Bà Trưng
Huyện Thanh Trì
Quận Hà Đông
Quận Thanh Xuân
Huyện Thạch Thất
Huyện Đan Phượng
Huyện Thường Tín
Quận Nam Từ Liêm
Huyện Quốc Oai
Thị xã Sơn Tây
Quận Tây Hồ
Quận Hoàng Mai
Huyện Gia Lâm
Huyện Đông Anh
Huyện Hoài Đức
Huyện Chương Mỹ
Huyện Ứng Hòa
Quận Bắc Từ Liêm
Quận Đống Đa
CANIFA Lotte Liễu Giai
F3-A02 & F3-C06 tầng 3, Lotte Center Hanoi, 54 Đường Liễu Giai
09:30 - 22:00
Đang mở
ĐT: (+84) - 024 7300 0166
Chỉ đường
CANIFA - 335 Cầu Giấy
335 Cầu Giấy, P. Quan Hoa
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7301 5866
Chỉ đường
CANIFA Aeon mall Long Biên
T247, tầng 2 TTTM Aeon Mall Long Biên, P. Long Biên
10:00 - 22:00
Chưa mở cửa
ĐT: (+84) - 02473 053 866
Chỉ đường
CANIFA Times City
40-42 đường Tương Lai, tầng B1 TTTM Times city, 458 Minh Khai
09:30 - 22:00
Đang mở
ĐT: (+84) - 024 7305 2866
Chỉ đường
CANIFA - Thanh Trì (Đại lý)
Đường mới, xóm chùa, Ngũ Hiệp
09:00 - 22:00
Đang mở
ĐT: (+84) - 0898 543 536
Chỉ đường
CANIFA 171 Trần Phú
171 Đường Trần Phú
09:00 - 22:30
Đang mở
ĐT: (+84) - 0247 302 1866
Chỉ đường
CANIFA - TTTM Royal city
B2-R6-43-44 TTTM Royal city, 72 Nguyễn Trãi
10:00 - 22:00
Chưa mở cửa
ĐT: (+84) - 024 7307 4866
Chỉ đường
CANIFA - Bình Phú, Thạch Thất (Đại lý)
48 Thái Hòa - Bình Phú
09:00 - 22:00
Đang mở
ĐT: (+84) - 0989 758 822
Chỉ đường
CANIFA - 133 Tây Sơn, Đan Phượng (Đại lý)
133 Tây Sơn (cạnh Techcombank), Thị Trấn Phùng
09:00 - 22:00
Đang mở
ĐT: (+84) - 0392 661 983
Chỉ đường
CANIFA - 304 Phố Ga, Thường Tín (Đại lý)
304 Phố Ga - TT Thường Tín
09:00 - 22:00
Đang mở
ĐT: (+84) - 0932 378 856
Chỉ đường
CANIFA - 247 Hồ Tùng Mậu
247 Hồ Tùng Mậu, P. Cầu Diễn
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7306 4866
Chỉ đường
CANIFA - Quốc Oai (Đại lý)
56 Phố Đồng Hương - Thị Trấn Quốc Oai
09:00 - 22:00
Đang mở
ĐT: (+84) - 0969 547 895
Chỉ đường
CANIFA - 276 Chùa Thông
276 Chùa Thông
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7304 2688
Chỉ đường
CANIFA - Aeon mall Hà Đông
T211, Tầng 2 TTTM Aeon Mall Hà Đông, P.Dương Nội
10:00 - 22:00
Chưa mở cửa
ĐT: (+84) - 024 7303 2688
Chỉ đường
CANIFA - 447 Lạc Long Quân
447 Lạc Long Quân
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7307 1866
Chỉ đường
CANIFA - 24 Nguyễn Hữu Thọ
24 Nguyễn Hữu Thọ, Hoàng Liệt
09:00 - 22:30
Đang mở
ĐT: (+84) - 0247 3002 866
Chỉ đường
CANIFA - 38 Kim Đồng, Hà Nội
38 Kim Đồng
09:00 - 22:30
Đang mở
ĐT: (+84) - 0247 3005 866
Chỉ đường
Canifa 24 Nguyễn Cơ Thạch
24 Nguyễn Cơ Thạch
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7304 7866
Chỉ đường
CANIFA - Center Point – 27 Lê Văn Lương
Center Point – 27 Lê Văn Lương, P. Nhân Chính
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7304 5866
Chỉ đường
CANIFA - Bà Triệu, Hà Nội
69 - 73 Bà Triệu
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7305 1866
Chỉ đường
CANIFA - 164 Ngô Xuân Quảng, Hà Nội (Đại lý)
164 Ngô Xuân Quảng
09:00 - 22:30
Đang mở
ĐT: (+84) -
Chỉ đường
CANIFA - Đông Anh, Hà Nội
59 Cao Lỗ, Uy Nỗ
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7301 4866
Chỉ đường
CANIFA - Liên Quan,Thạch Thất (Đại lý)
Tổ dân phố khu Phố, thị trấn Liên Quan
08:00 - 22:00
Đang mở
ĐT: (+84) - 0979 014 638
Chỉ đường
CANIFA - Geleximco An Khánh
LK 14 - Lô 22, KĐT mới Gleximco A, An Khánh
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 73 060 866
Chỉ đường
CANIFA - Chúc Sơn (Đại lý)
86 Bắc Sơn, TT Chúc Sơn, Chương Mỹ, Hà Nội
09:00 - 22:00
Đang mở
ĐT: (+84) - 0934551005
Chỉ đường
CANIFA - Trạm Trôi, Hoài Đức, Hà Nội (Đại lý)
Khu 7, thị trấn Trạm Trôi
08:00 - 22:00
Đang mở
ĐT: (+84) - 0976 966 884
Chỉ đường
CANIFA - Vân Đình, Ứng Hoà, Hà Nội (Đại lý)
288 Lê Lợi, thị trấn Vân Đình
08:00 - 22:00
Đang mở
ĐT: (+84) - 0375131003
Chỉ đường
CANIFA - Bắc Từ Liêm (Đại lý)
32 phố Nhổn
08:00 - 22:00
Đang mở
ĐT: (+84) - 0948 279 266
Chỉ đường
Canifa - Yên Xá, Thanh Trì
Số 68 đường 70, Tân Triều
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 73 067 866
Chỉ đường
CANIFA - 168 Nguyễn Khánh Toàn
168 Nguyễn Khánh Toàn, p. Quan Hoa
09:00 - 22:00
Đang mở
ĐT: (+84) - 024 7304 0866
Chỉ đường
CANIFA - 139 Bạch Mai
139 Bạch Mai, P. Thanh Nhàn
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7306 1866
Chỉ đường
CANIFA - 152 Cao Lỗ
152 Cao Lỗ, Uy Nỗ
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7307 3866
Chỉ đường
CANIFA - Ba Đình
Số 6 Điện Biên Phủ, Ba Đình
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7303 3866
Chỉ đường
CANIFA - Tasco Mall Long Biên
7-9 Nguyễn Văn Linh, Gia Thụy
09:00 - 22:00
Đang mở
ĐT: (+84) - 024 7305 5688
Chỉ đường
CANIFA Lotte Liễu Giai T05
F5-B16-B17 tầng 05, Lotte Center Hanoi, 54 Đường Liễu Giai
09:30 - 22:00
Đang mở
ĐT: (+84) - 024 7300 0166
Chỉ đường
CANIFA KIDS - LITTLE SAM (Đại lý)
314 tầng 3 TTTM The Loop, 241 Xuân Thuỷ, phường Cầu Giấy
10:00 - 22:00
Chưa mở cửa
ĐT: (+84) - 0333 424 955
Chỉ đường
CANIFA - Xã Đàn, Hà Nội
65-67 Xã Đàn, Phường Kim Liên, Quận Đống Đa
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7305 5166
Chỉ đường
CANIFA - 440 Quang Trung Hà Đông
440 Quang Trung
09:00 - 22:30
Đang mở
ĐT: (+84) - 0247 307 5866
Chỉ đường
Canifa - Go! Thăng Long
1S22 TTTM Go! Thăng Long, số 222 đường Trần Duy Hưng, P. Yên Hòa
08:00 - 22:00
Đang mở
ĐT: (+84) - 024 7301 3566
Chỉ đường
CANIFA 181 Giảng Võ
181 Đường Giảng Võ
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7301 2866
Chỉ đường
CANIFA 121 - 123 Chùa Bộc
121 - 123 Đường Chùa Bộc
09:00 - 22:30
Đang mở
ĐT: (+84) - 024 7302 3688
Chỉ đường
CANIFA 554 Nguyễn Văn Cừ
554 Đường Nguyễn Văn Cừ
09:00 - 22:30
Đang mở
ĐT: (+84) - 0247 305 9866
Chỉ đường
Hệ thống cửa hàng
Hà Nội
Bắc Ninh
Hưng Yên
Hồ Chí Minh
Thái Bình
Nghệ An
Hải Phòng
Thanh Hoá
Quảng Ninh
Vĩnh Phúc
Hòa Bình
Sơn La
Quảng Bình
Phú Thọ
Đà Nẵng
Trà Vinh
Ninh Bình
Bình Phước
Bình Dương
Hải Dương
Hà Nam
Đồng Nai
Nam Định
Hà Tĩnh
Lâm Đồng
Lào Cai
Gia Lai
Cao Bằng
Tuyên Quang
Thái Nguyên
Bà Rịa – Vũng Tàu
Điện Biên
Bắc Giang
Yên Bái
Lạng Sơn
Đắk Lắk
CỬA HÀNG NỔI BẬT
CANIFA 554 Nguyễn Văn Cừ
554 Đường Nguyễn Văn Cừ
ĐT: 0247 305 9866
Giờ mở cửa: 09:00 - 22:30
CANIFA 121 - 123 Chùa Bộc
121 - 123 Đường Chùa Bộc
ĐT: 024 7302 3688
Giờ mở cửa: 09:00 - 22:30
CANIFA 181 Giảng Võ
181 Đường Giảng Võ
ĐT: 024 7301 2866
Giờ mở cửa: 09:00 - 22:30
TOP
\ No newline at end of file
import sys
import os
from playwright.sync_api import sync_playwright
def scrape_stores():
output_file = r"D:\cnf\chatbot_canifa\backend\datadb\cuahang.txt"
url = "https://canifa.com/cua-hang.html"
print(f"Starting scrape from {url}...")
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
try:
page.goto(url, timeout=60000)
print("Page loaded.")
# Wait for store list to be visible.
# Trying a generic wait first, or looking for specific text.
page.wait_for_load_state("networkidle")
# Attempt to extract data
# Based on typical store locator pages, we look for list items.
# If structure is unknown, we will grab the main container text.
# Evaluate script to get all text from the store list container if possible
# or just dump the whole body text if specific selectors aren't obvious.
# We'll try to find elements with class containing 'store' or 'address' or similar.
# Let's try to get all text content cleanly first.
content = page.evaluate("""() => {
// Return all text, or try to find specific store elements
// Canifa tends to use specific classes.
// Let's try to find the main container.
// Heuristic: look for element containing 'Hệ thống cửa hàng'
// and get its siblings or children.
const bodyText = document.body.innerText;
return bodyText;
}""")
with open(output_file, "w", encoding="utf-8") as f:
f.write(content)
print(f"Successfully saved data to {output_file}")
except Exception as e:
print(f"Error scraping: {e}")
# Save screenshot if failed?
# page.screenshot(path="screenshot.png")
finally:
browser.close()
if __name__ == "__main__":
scrape_stores()
This diff is collapsed.
This diff is collapsed.
......@@ -753,8 +753,7 @@
<div class="prompt-tabs">
<button class="prompt-tab-btn active" id="tab-system"
onclick="switchPromptTab('system')">System</button>
<button class="prompt-tab-btn" id="tab-tool"
onclick="switchPromptTab('tool')">Tool</button>
<button class="prompt-tab-btn" id="tab-tool" onclick="switchPromptTab('tool')">Tool</button>
</div>
<button class="btn-close-panel" onclick="togglePromptEditor()">×</button>
</div>
......@@ -775,15 +774,14 @@
<div class="prompt-section" id="toolPromptSection">
<div class="tool-prompt-toolbar">
<select id="toolPromptSelect" class="tool-prompt-select"
onchange="loadToolPromptFromSelect()">
<select id="toolPromptSelect" class="tool-prompt-select" onchange="loadToolPromptFromSelect()">
<option value="">Loading tools...</option>
</select>
<button class="action-btn btn-reload" onclick="refreshToolPromptList()">↻ Refresh</button>
</div>
<textarea id="toolPromptInput" class="prompt-textarea"
placeholder="Select a tool prompt to load..." spellcheck="false"></textarea>
<textarea id="toolPromptInput" class="prompt-textarea" placeholder="Select a tool prompt to load..."
spellcheck="false"></textarea>
<div class="panel-footer">
<span class="status-text" id="toolPromptStatus">Ready to edit</span>
......@@ -1440,7 +1438,19 @@
if (data.user_insight) {
const insightDiv = document.createElement('div');
insightDiv.className = 'user-insight';
if (typeof data.user_insight === 'object' && data.user_insight !== null) {
insightDiv.innerHTML = '<strong>🧠 Insight:</strong><br/>';
Object.entries(data.user_insight).forEach(([key, value]) => {
const line = document.createElement('div');
line.style.fontSize = '0.9em';
line.style.marginTop = '2px';
line.innerHTML = `<strong>${key}:</strong> ${value}`;
insightDiv.appendChild(line);
});
} else {
insightDiv.innerText = `🧠 Insight: ${data.user_insight}`;
}
filteredDiv.appendChild(insightDiv);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment