AI Agentè½å°å®è·µï¼ä¼ä¸çº§æºè½å®¢æç³»ç»æ¶ææºè½å®¢ææ¯ä¼ä¸AIè½å°ææççåºæ¯ä¹ä¸ãç¶èï¼ä»Demoå°ç产ç¯å¢ï¼ä¸é´æ¨ªäºçå¤è½®å¯¹è¯ç®¡çãç¥è¯åºå¨ææ´æ°ãå·¥åç³»ç»å¯¹æ¥ãå¼å¸¸çæ§ä¸äººå·¥åéç诸å¤å·¥ç¨ææãæ¬æå°ä»æ¶æè®¾è®¡è§è§åºåï¼ç»å宿´ä»£ç 示ä¾ï¼æè§£ä¸ä¸ªä¼ä¸çº§æºè½å®¢æç³»ç»çæ ¸å¿ç»ä»¶ä¸å®ç°ç»èãä¸ãç³»ç»æ¶ææ»è§ä¼ä¸çº§æºè½å®¢æç³»ç»éç¨å屿¶æè®¾è®¡ï¼æ ¸å¿ç»ä»¶å æ¬ï¼âââââââââââââââââââââââââââââââââââââââââââââââ â ç¨æ·äº¤äºå±ï¼å¤æ¸ éæ¥å ¥ï¼ â â Webè天çªå£ â 微信å°ç¨åº â éé â ä¼ä¸å¾®ä¿¡ â âââââââââââââââââââ¬ââââââââââââââââââââââââââââ â âââââââââââââââââââ¼ââââââââââââââââââââââââââââ â 对è¯ç®¡çå±ï¼Session管çï¼ â â æå¾è¯å« â å¤è½®å¯¹è¯ç¶ææº â ä¸ä¸æè®°å¿ â âââââââââââââââââââ¬ââââââââââââââââââââââââââââ â âââââââââââââââââââ¼ââââââââââââââââââââââââââââ â æºè½æ¨çå±ï¼AI Agentæ ¸å¿ï¼ â â LLMç¼æ â RAGæ£ç´¢ â å·¥å ·è°ç¨ â ç»æçæ â âââââââââââââââââââ¬ââââââââââââââââââââââââââââ â âââââââââââââââââââ¼ââââââââââââââââââââââââââââ â æ°æ®æå¡å±ï¼ç¥è¯å¼æï¼ â â åéæ°æ®åº â ä¸å¡API â å·¥åç³»ç» â ç¨æ·ç»å â âââââââââââââââââââââââââââââââââââââââââââââââè¿ç§å屿¶æçä¼å¿å¨äºåå±èè´£æ¸ æ°ãå¯ç¬ç«æ©å±ï¼åæ¶éè¿æ ååçæ¥å£å¥çº¦å®ç°å±é´è§£è¦ãäºãå¤è½®å¯¹è¯ç®¡çï¼ç¶ææºä¸ä¸ä¸æè®°å¿å¤è½®å¯¹è¯æ¯æºè½å®¢æåºå«äºç®åé®çç³»ç»çæ ¸å¿ç¹å¾ãç¨æ·å¯è½å夿¥è¡¨è¾¾éæ±ï¼ä¾å¦ï¼ç¨æ·ï¼ææ³æ¥è®¢å â ç³»ç»ï¼è¯·æä¾è®¢åå· â ç¨æ·ï¼ORD20241201 â ç³»ç»ï¼è®¢åå·²åè´§ï¼é¢è®¡æå¤©éè¾¾2.1 对è¯ç¶æè®¾è®¡from enum import Enum, auto from dataclasses import dataclass, field from typing import List, Dict, Optional from datetime import datetime import json class DialogState(Enum): IDLE auto() # 空é²çå¾ COLLECTING auto() # ä¿¡æ¯æ¶éä¸ CONFIRMING auto() # 确认æå¾ EXECUTING auto() # æ§è¡æä½ HANDOFF auto() # 转人工 CLOSED auto() # ä¼è¯ç»æ class IntentType(Enum): ORDER_QUERY order_query REFUND refund PRODUCT_CONSULT product_consult TECH_SUPPORT tech_support UNKNOWN unknown dataclass class Slot: å¯¹è¯æ§½ä½ï¼ç¨äºæ¶éå¤è½®å¯¹è¯ä¸çå ³é®ä¿¡æ¯ name: str description: str required: bool True value: Optional[str] None filled: bool False dataclass class Session: ä¼è¯ä¸ä¸æï¼ç»´æ¤å次对è¯ç宿´ç¶æ session_id: str user_id: str state: DialogState DialogState.IDLE intent: IntentType IntentType.UNKNOWN slots: Dict[str, Slot] field(default_factorydict) history: List[Dict] field(default_factorylist) created_at: datetime field(default_factorydatetime.now) last_active: datetime field(default_factorydatetime.now) def add_message(self, role: str, content: str): self.history.append({ role: role, content: content, timestamp: datetime.now().isoformat() }) self.last_active datetime.now() def is_expired(self, timeout_minutes: int 30) - bool: elapsed (datetime.now() - self.last_active).total_seconds() / 60