Spaces:
Sleeping
Sleeping
| from langgraph.prebuilt import create_react_agent | |
| from langchain_core.tools.retriever import create_retriever_tool | |
| from langchain_google_genai import ChatGoogleGenerativeAI | |
| from langgraph.checkpoint.memory import MemorySaver | |
| import os | |
| from rag_tool import create_rag_retriever | |
| from sql_tool import get_sql_toolkit | |
| # Khởi tạo bộ nhớ tạm trên RAM (Nếu lên production có thể dùng Postgres/Redis) | |
| memory = MemorySaver() | |
| def create_chatbot_agent(): | |
| """Khởi tạo Agentic Chatbot với các công cụ RAG và SQL.""" | |
| # Lấy API Key từ biến GEMINI_API_KEY | |
| api_key = os.getenv("GEMINI_API_KEY") | |
| if not api_key: | |
| raise ValueError("Thiếu GEMINI_API_KEY trong biến môi trường.") | |
| # 1. Khởi tạo LLM trung tâm (Bộ não của Agent) | |
| llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", temperature=0, google_api_key=api_key) | |
| tools = [] | |
| # 2. Khởi tạo RAG Tool (Cho tài liệu tĩnh) | |
| retriever = create_rag_retriever() | |
| rag_tool = create_retriever_tool( | |
| retriever, | |
| "restaurant_documents_search", | |
| "Sử dụng công cụ này khi người dùng hỏi về công thức nấu ăn, quy trình bếp, quy định nhà hàng, sổ tay nhân viên hoặc hướng dẫn sử dụng hệ thống. Bạn PHẢI tìm kiếm bằng tiếng Việt có dấu." | |
| ) | |
| tools.append(rag_tool) | |
| # 3. Khởi tạo SQL Tool (Cho dữ liệu live) | |
| sql_toolkit = get_sql_toolkit() | |
| if sql_toolkit: | |
| sql_tools = sql_toolkit.get_tools() | |
| tools.extend(sql_tools) | |
| # 4. Khởi tạo Agent | |
| system_message = """Bạn là trợ lý ảo thân thiện của nhà hàng, tên là FoodyBot. | |
| Bạn hỗ trợ nhân viên về công thức nấu ăn, quy trình bếp, và kiểm tra tình trạng kho hàng hiện tại. | |
| Hãy sử dụng đúng công cụ để trả lời: | |
| - Hỏi công thức/quy trình/lý thuyết -> Dùng `restaurant_documents_search` | |
| - Hỏi giá món, tồn kho, đơn hàng hiện tại -> Dùng các công cụ SQL để truy vấn database. | |
| Trả lời bằng tiếng Việt thân thiện, rõ ràng và ngắn gọn. | |
| Trả lời bằng Markdown thuần, không dùng HTML. | |
| Khi liệt kê danh sách, dùng dấu "-". | |
| Khi nhấn mạnh, dùng **chữ đậm**. | |
| """ | |
| # Sử dụng LangGraph cho chuẩn LangChain 0.3.x mới nhất | |
| agent_executor = create_react_agent(llm, tools=tools, prompt=system_message, checkpointer=memory) | |
| return agent_executor | |