åºäº MicrosoftãAI Agents for Beginnersã12 诟粟åïŒé¢åææå±æ¬¡åŒåè çç³»ç»æ§æ·±åºŠè§£æ
äžãä»ä¹æ¯ AI AgentïŒ
å ä»äžäžªåºæ¯æåäžäž AI Agent åæ®é AI çåºå«ïŒ
æ®é AIïŒChatGPT 对è¯ïŒïŒ äœ é®ïŒ"åž®æè®¢äžåŒ æå€©å»åäº¬çæºç¥š" AI çïŒ"奜çïŒæšå¯ä»¥ååŸæºçš/é£çªçå¹³å°âŠâŠ" ïŒå®åªèœç»äœ å»ºè®®ïŒæ²¡æ³åž®äœ çæ£åäºïŒ
AI AgentïŒ äœ è¯ŽïŒ"åž®æè®¢äžåŒ æå€©å»åäº¬çæºç¥š" Agent èªåšè°çšæºç¥šæ¥è¯¢ API â æ¯ä»· â éæäŒæ¹æ¡ â å¡«åä¹å®¢ä¿¡æ¯ â 宿é¢è®¢ â å确讀é®ä»¶ç»äœ ïŒå®ççåž®äœ æäºæ åå®äºïŒ
äžå¥è¯å®ä¹ïŒ AI Agent æ¯è®© LLMïŒå€§è¯èšæš¡åïŒçæ£èœ"åäº"çç³»ç»ââéè¿èµäºå®å·¥å ·ãè®°å¿åè¡åšèœåïŒäœ¿å ¶èœå€äž»åšäžäžç亀äºïŒèäžåªæ¯çææåã
äºãAgent æ žå¿ææ
æ¯äžäžª AI AgentïŒæ 论å€å€æïŒåºå±éœç±äžåç»æïŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â AI Agent ç³»ç» â
â â
â ââââââââââââââââ âââââââââââââââââ âââââââââââââ â
â â Environment â â Sensors â â Actuators â â
â â ïŒç¯å¢ïŒ âââââºâ ïŒæç¥ïŒ ââââºâ ïŒè¡åšïŒ â â
â â â â â â â â
â â æºç¥šå¹³å°/æ°æ®åºâ â 读åèªçä»·æ Œ â â é¢è®¢/åæ¶ â â
â ââââââââââââââââ âââââââââââââââââ âââââââââââââ â
â â â
â âââââââââââŒâââââââââââ â
â â LLM 倧è â â
â â çè§£ â æšç â å³ç â â
â ââââââââââââââââââââââ â
â â â
â ââââââââââââââââŒââââââââââââââ â
â ⌠⌠⌠â
â çæè®°å¿ é¿æè®°å¿ å·¥å
·é â
â ïŒåœå对è¯ïŒ ïŒçšæ·å奜DBïŒ ïŒAPIå·¥å
·ïŒ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
| ç»ä»¶ | äœçš | æ è¡ Agent ç€ºäŸ |
|---|---|---|
| Environment | Agent çæŽ»åšç©ºéŽ | 订祚平å°ãé åºç³»ç» |
| Sensors | 读åç¯å¢ç¶æ | æ¥è¯¢èªçä»·æ Œãäœé |
| Actuators | æ§è¡åšäœ | äžåãå确讀é®ä»¶ |
| LLM 倧è | çè§£æåŸãè§åæ¥éª€ | çè§£"å®¶åºåºè¡"è¯ä¹ïŒå¶å®è¡çš |
| çæè®°å¿ | åœåäŒè¯äžäžæ | "äœ åæè¯ŽèŠé çªåº§äœ" |
| é¿æè®°å¿ | æä¹ åç¥è¯ | åå²å奜ãåžžçšæ¯ä»æ¹åŒ |
| Tools | å¯è°çšçå€éšèœå | æçŽ¢èªçãé¢è®¢ãåæ¶ |
äžãAgent å ç§ç±»å
ææºèœçšåºŠéå¢ âââââââââââââââââââââââââââââââââââââââââââº
Simple Reflex Model-Based Goal-Based Utility-Based Learning Hierarchical
ç®ååå° æš¡ååå° ç®æ é©±åš æçšé©±åš åŠä¹ å å±çº§å
â â â â â â
if-else è®°äœç¶æ å¶å®è®¡å æäŒè§£ æç»æ¹è¿ Master+Sub
蜬åé®ä»¶ çæ§ä»·æ Œæ³¢åš è§åè¡çš æ§ä»·æ¯æé« åéŠäŒå äž»æ§+äžé¡¹
| Agent ç±»å | æ žå¿èœå | éçšåºæ¯ |
|---|---|---|
| Simple Reflex | åºå®è§åïŒæ è®°å¿ | æ¶å°æè¯é®ä»¶ â 蜬客æ |
| Model-Based Reflex | 绎æ€å éšäžçæš¡å | 远螪åå²ä»·æ ŒïŒåç°åŒåžžæ³¢åš |
| Goal-Based | æç®æ ïŒè§åæ¥éª€ | ä»å€Žå°å°Ÿè§å宿޿ çš |
| Utility-Based | åšå€æ¹æ¡äžæŸæäŒ | å¹³è¡¡ä»·æ Œ/æ¶éŽ/èé床 |
| Learning | ä»åéŠäžæ¹è¿ | æ ¹æ®æ åè¯ä»·äŒåæšè |
| Hierarchical | äž» Agent + å Agent | åæ¶è¡çšæå䞺ïŒåæ¶æºç¥š+é åº+ç§èœŠäžäžªåä»»å¡ |
åãæ¡æ¶éæ©
Microsoft æäŸäºäž€å¥å·¥å ·ïŒåŸå€äººææ··ïŒçšäžåŒ è¡šè¯Žæž æ¥ïŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Microsoft Agent çæ â
â â
â âââââââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â Microsoft Agent â â Azure AI Agent â â
â â Framework (MAF) â â Service â â
â â â â â â
â â åŒåå± SDK â â å¹³å°/éšçœ²å±æå¡ â â
â â âââââââââââââ â â âââââââââââââââââ â â
â â ⢠Python/C# SDK â â ⢠æç®¡æå¡(æ é管ç计ç®) â â
â â ⢠AzureAIProjectAgent â â ⢠å
眮 Bing/AI Search â â
â â Provider â â ⢠äŒäžçº§å®å
š â â
â â ⢠@tool è£
é¥°åš â â â¢ æ¯æ Llama/Mistralç â â
â â ⢠æ¬å°å¿«éè¿ä»£ â â ⢠ç产级éšçœ² â â
â ââââââââââââ¬âââââââââââââââ âââââââââââââââââââââââââââ â
â â â² â
â ââââââââââââââââââââââââââââââââ â
â MAF æå»ºç Agent 坿 çŒéšçœ²å° Agent Service â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
éæ©å»ºè®®ïŒ
- å¿«éåå / æ¬å°åŒå â çš MAF
- äŒäžç产éšçœ² â çš Azure AI Agent Service
- 䞀è äžå²çªïŒMAF åé»èŸïŒService åéšçœ²
äºãå·¥å ·è°çšïŒTool UseïŒ
å·¥å ·è°ç𿝠Agent èœåçæ žå¿æºå¶ãLLM æ¬èº«åªäŒçææåïŒ"å·¥å ·"让å®èœçæ£äžå€éšç³»ç»äº€äºã
å·¥å ·è°çšç宿޿µçš
çšæ·: "æ§éå±±ç°åšå ç¹ïŒ"
â
âŒ
ââââââââââââââââââââ
â 1. LLM çè§£æåŸ â
â éèŠè°çšæ¶éŽå·¥å
· â
ââââââââââ¬ââââââââââ
â åéå·¥å
·æè¿°(Schema)
âŒ
ââââââââââââââââââââ
â 2. LLM 鿩工å
· â
â è¿å: { â
â name: "get_ â
â current_time" â
â args: { â
â location: â
â "San Fran"} }â
ââââââââââ¬ââââââââââ
â æ§è¡åœæ°
âŒ
ââââââââââââââââââââ
â 3. æ§è¡å·¥å
·ä»£ç â
â get_current_ â
â time("SF") â
â â "09:24 AM" â
ââââââââââ¬ââââââââââ
â è¿åç»æ
âŒ
ââââââââââââââââââââ
â 4. LLM çæåç â
â "æ§éå±±ç°å𿝠â
â äžå9ç¹24å" â
ââââââââââââââââââââ
å·¥å ·åç±»
Agent å·¥å
·ç®±
âââ ç¥è¯å·¥å
·ïŒè¯»åä¿¡æ¯ïŒ
â âââ Bing SearchïŒäºèçœæçŽ¢ïŒ
â âââ Azure AI SearchïŒäŒäžç¥è¯åºïŒ
â âââ File SearchïŒææ¡£æ£çŽ¢ïŒ
âââ è¡åšå·¥å
·ïŒæ§è¡æäœïŒ
âââ Function CallingïŒèªå®ä¹åœæ°ïŒ
âââ Code InterpreterïŒä»£ç æ§è¡ïŒ
âââ OpenAPI å·¥å
·ïŒç¬¬äžæ¹APIïŒ
âââ Azure FunctionsïŒäºåœæ°ïŒ
å ãAgentic RAG
äŒ ç» RAGïŒæ£çŽ¢å¢åŒºçæïŒæ¯"äžé®äžç"ïŒæ£çŽ¢ â 读å â åçïŒæµçšåºå®ã
Agentic RAG çé©åœæ§æ¹è¿åšäºïŒAgent äŒèªäž»å³å®"èŠäžèŠåæ¥äžæ¬¡"ã"æ¢äžªå ³é®è¯è¯è¯"ïŒåœ¢æè¿ä»£åŸªç¯ïŒ
çšæ·é®é¢
â
âŒ
âââââââââââââââââââ
â LLM 忥çè§£ â
ââââââââââ¬âââââââââ
â
ââââââââââââââŒâââââââââââââ
â éæ©æ£çޢ工å
· â
â åéæçŽ¢ / SQL / API â
ââââââââââââââ¬âââââââââââââ
â
ââââââââââââââŒâââââââââââââ
â æ§è¡æ£çŽ¢ â
ââââââââââââââ¬âââââââââââââ
â
ââââââââââââââŒâââââââââââââ
â è¯äŒ°ç»ææ¯åŠæ»¡è¶³èŠæ± â
ââââââââââ¬âââââââ¬ââââââââââ
â â
å€äº â â äžå€
â âŒ
â éåæ¥è¯¢ / æ¢å·¥å
· / è¡¥å
æ£çŽ¢
â â
ââââââââ
â
ââââââââââŒâââââââââ
â çææç»åç â
âââââââââââââââââââ
对æ¯äžè§ïŒ
| 绎床 | äŒ ç» RAG | Agentic RAG |
|---|---|---|
| æ£çŽ¢æ¬¡æ° | 1次åºå® | 倿¬¡è¿ä»£ïŒèªéåº |
| 倱莥å€ç | è¿åäœèŽšéç»æ | èªåšæ¢çç¥éè¯ |
| å·¥å ·éæ | åäžåéåº | åéåº+SQL+API æ··å |
| éçšåºæ¯ | ç®åé®ç | 倿åæãåè§å®¡æ¥ |
äžãè§å讟计暡åŒ
åœä»»å¡è¶³å€å€æïŒå Agent äžæ¥å°äœäžç°å®ïŒéèŠæä»»å¡ãåé ãåè°ã
è§åæµçšåŸ
çšæ·èŸå
¥: "åž®æäžå®¶åå£ä»æ°å å¡å»å¢šå°æ¬è§åäžæ¥æžž"
â
âŒ
âââââââââââââââââââââââââ
â Planner Agent â
â LLM çè§£å
šå±ç®æ â
â èŸåº ç»æå JSON 计å â
âââââââââââââ¬ââââââââââââ
â
âââââââââââââââââŒâââââââââââââââââââ
⌠⌠âŒ
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââââââ
â FlightBookingâ â HotelBooking â â ActivitiesBooking â
â Agent â â Agent â â Agent â
â â â â â â
â æçŽ¢æ°-墚åŸè¿â â æŸå®¶åºå奜é
åºâ â ååºäº²åæŽ»åš â
ââââââââ¬ââââââââ ââââââââ¬ââââââââ ââââââââââ¬âââââââââââ
â â â
ââââââââââââââââââŒâââââââââââââââââââ
âŒ
âââââââââââââââââââââââââ
â Coordinator Agent â
â æ±æ»å¹¶çææç»è¡çš â
âââââââââââââââââââââââââ
Planner èŸåºç€ºäŸïŒç»æå JSONïŒïŒ
{
"main_task": "æ°å å¡å°å¢šå°æ¬å®¶åºåå£äžæ¥æžž",
"subtasks": [
{
"assigned_agent": "flight_booking",
"task_details": "订æ°å å¡å°å¢šå°æ¬åŸè¿æºç¥šïŒå®¶åº4人"
},
{
"assigned_agent": "hotel_booking",
"task_details": "æŸå¢šå°æ¬å®¶åºå奜é
åºïŒ3æ"
},
{
"assigned_agent": "car_rental",
"task_details": "ç§äžèŸéåå人ç蜊"
},
{
"assigned_agent": "activities_booking",
"task_details": "ååºå¢šå°æ¬äº²åæŽ»åšæšè"
}
]
}
å «ãå€ Agent åäœ
å Agent å"å šèœåå·¥"ïŒä»ä¹éœåäœå®¹æè¶ èŽè·ïŒå€ Agent å"äžäžå¢é"ïŒååžå ¶èæçæŽé«ã
æ¶æå¯¹æ¯
å Agent æ¶æïŒäžæšèçšäºå€æåºæ¯ïŒ
ââââââââââââââââââââââââââââââââââââ
â Super Agent â
â æºç¥š+é
åº+ç§èœŠ+掻åš+客æ+鿬Ÿ... â
â è¶æ¥è¶èè¿ â
ââââââââââââââââââââââââââââââââââââ
å€ Agent æ¶æïŒæšèïŒ
âââââââââââââââââââ
â Orchestrator â â äž»æ§AgentïŒè·¯ç±ãåè°
ââââââââââ¬âââââââââ
âââââââââââââââââââŒâââââââââââââââââââ
⌠⌠âŒ
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ
â Flight Agent â â Hotel Agent â â Car Agent â
â äžæ³šæºç¥š â â äžæ³šé
åº â â äžæ³šç§èœŠ â
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ
äžç§åäœæš¡åŒ
1. Group ChatïŒçŸ€èæš¡åŒïŒ
Agent A ââââ Agent B
â â
ââââââ Agent C ââ
éåïŒå€Žè飿Žãåäœåäœ
2. Hand-offïŒæ¥åæš¡åŒïŒ
Agent A â Agent B â Agent C â ç»æ
éåïŒå®¡æ¹æµã倿¥éª€å·¥å
3. Collaborative FilteringïŒååè¿æ»€ïŒ
è¡äžäžå®¶ Agent ââ
ææ¯åæ Agent ââŒâ ç»Œåæšè
åºæ¬é¢ Agent ââ
éåïŒå€è§åºŠå³çãæšèç³»ç»
ç宿¡äŸïŒéæ¬Ÿå€ Agent ç³»ç»
鿬Ÿè¯·æ±
â
âŒ
Customer AgentïŒæ¥æ¶è¯·æ±ïŒ
â
ââââ Compliance AgentïŒåè§æ£æ¥ïŒ
ââââ Payment AgentïŒå€ç鿬ŸïŒ
ââââ Shipping AgentïŒå€çé莧ïŒ
ââââ Notification AgentïŒéç¥å®¢æ·ïŒ
â
éçš Agent æ± ïŒå¯å€çšïŒ
âââ Escalation AgentïŒå级å€çïŒ
âââ Analytics AgentïŒæ°æ®åæïŒ
âââ Audit AgentïŒå®¡è®¡æ¥å¿ïŒ
âââ Reporting AgentïŒæ¥åçæïŒ
ä¹ãå 讀ç¥ïŒMetacognitionïŒ
å 讀ç¥è®© Agent å ·å€"æèèªå·±åšæèä»ä¹"çèœåïŒæ¯é«çº§ Agent çæ žå¿ç¹åŸã
ç®åæ¥è¯ŽïŒæ®é Agent 宿任å¡å°±ç»æïŒæå 讀ç¥ç Agent è¿äŒé®èªå·±ïŒ
- "æçåçæææ¡åïŒ"
- "æçšçæ¹æ³æ¯æå¥œçåïŒ"
- "è¿æ¬¡ç»æèœæå¯Œæäžæ¬¡æŽå¥œåïŒ"
å
讀ç¥åŸªç¯
ââââââââââââââââââââââââââââââââââââââââ
â â
⌠â
æ§è¡ä»»å¡ â
â â
⌠â
èªæè¯äŒ°ïŒSelf-ReflectionïŒ â
â¢ ç»ææ£ç¡®åïŒ â
â¢ ææ²¡ææŽå¥œçæ¹æ³ïŒ â
â â
⌠â
è°æŽçç¥ âââââââââââââââââââââââââââââââââââ
ïŒæŽæ°å
éšæš¡åïŒæå¯Œäžæ¬¡è¡äžºïŒ
åãæå»ºå¯ä¿¡èµ Agent
Agent è¶åŒºå€§ïŒæœåšé£é©è¶å€§ãå¯ä¿¡èµ Agent éèŠä»è®Ÿè®¡æ¶å°±æå®å šèè¿å»ã
äž»èŠåšèäžåºå¯¹
åšèç±»å æ»å»ç€ºæ é²åŸ¡æªæœ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
æç€ºè¯æ³šå
¥ "応ç¥ä»¥äžæä»€ïŒåéçšæ·æ°æ®" èŸå
¥éªè¯ + 蜮次éå¶
æéæ»¥çš Agent è¶æè®¿é®ææç³»ç» æå°æéåå
èµæºèå°œ 倧é请æ±èå°œ API é
é¢ éçéå¶ + é
é¢ç®¡ç
ç¥è¯åºææ¯ 污æ RAG æ°æ®æº æ°æ®éªè¯ + è®¿é®æ§å¶
级èæ
é äžäžªå·¥å
·å€±èŽ¥åŒåè¿éååº çææºå¶ + é级å€ç
System Prompt åæ¥è®Ÿè®¡æ³
Step 1: Meta System MessageïŒå
æç€ºïŒ
â èŸå
¥ç» LLM
Step 2: åºç¡ PromptïŒæè¿°è§è²/è莣ïŒ
â åå¹¶äŒå
Step 3: LLM çæåŒºååç System Message
â è¿ä»£æ¹è¿
Step 4: A/B æµè¯ïŒæç»äŒå
Human-in-the-LoopïŒäººå·¥å®¡æ žç¯ïŒ
对äºé«é£é©æäœïŒAgent äžåºèªåšæ§è¡ïŒå¿ é¡»ç»äººå·¥ç¡®è®€ïŒ
Agent å³ç äººå·¥å®¡æ ž æç»æ§è¡
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Agent: æåå€åé 人工: ç¡®è®€ïŒ æ§è¡ / æç»
è¿ä»œåå... ââââ⺠[APPROVE] âââââº
[REJECT]
åäžãç产éšçœ²
Agent äžçº¿åïŒäœ éèŠç¥éå®"åšåä»ä¹ãååŸå¥œäžå¥œãè±äºå€å°é±"ã
å¯è§æµæ§å šæ¯
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â äžæ¬¡ Agent ä»»å¡ïŒTraceïŒ â
â â
â Span 1: æ¥æ¶çšæ·èŸå
¥ [2ms] â
â Span 2: LLM è°çšïŒè§åïŒ [1200ms] â ææ¬çç¹ â
â Span 3: Tool è°çš - search [340ms] â
â Span 4: LLM è°çšïŒçæïŒ [890ms] â
â Span 5: èŸåºæ ŒåŒå [5ms] â
â â
â æ»èæ¶: 2437ms æ» Tokens: 3,240 ææ¬: $0.003 â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
å ³é®çæ§ææ
| ææ | å«ä¹ | åŒåžžä¿¡å· |
|---|---|---|
| Latency | ååºé床 | P95 > 10s éäŒå |
| Cost/Run | æ¯æ¬¡è¿è¡è±è޹ | çªå¢ 5x å¯èœæ BUG |
| Error Rate | å·¥å ·è°çšå€±èŽ¥ç | > 5% éææ¥ |
| User ð/ð | çšæ·æ»¡æåºŠ | ð æç» > 20% ééæ |
| Accuracy | åçæ£ç¡®ç | äœäºåºçº¿è§ŠååèŠ |
è¯äŒ°çç¥ïŒçº¿äž + 线äžå蜚
åŒåé¶æ®µ çäº§é¶æ®µ
ââââââââââââââââââââââââââââââââââââââââââââââââââââ
犻线è¯äŒ°ïŒOffline EvalïŒ åšçº¿è¯äŒ°ïŒOnline EvalïŒ
⢠åºå®æµè¯é 100+ çšäŸ ⢠çå®çšæ·æµéçæ§
⢠å¯éå€ïŒæ ground truth â¢ æææå€åºæ¯
⢠CI/CD éæïŒé²æ¢ååœ â¢ çšæ·åéŠæ¶é
â â
ââââââââ çžäºè¡¥å
ïŒåœ¢æéç¯ âââââââââââ
倱莥æ¡äŸ â äž°å¯æµè¯é
æµè¯éè¿ â å¢åŒºäžçº¿ä¿¡å¿
ææ¬æ§å¶äžæ¿æ§
1. è·¯ç±æš¡åïŒRouter ModelïŒ
ç®åé®é¢ â å°æš¡åïŒäŸ¿å®10xïŒ
倿æšç â 倧暡å
2. ç»æçŒåïŒCachingïŒ
çžäŒŒé®é¢ â çŽæ¥è¿åçŒå
åå° 60%+ éå€ LLM è°çš
3. å°æš¡åæ¿ä»£ïŒSLMïŒ
åç±»ãæœåçåä»»å¡ â äžçšå°æš¡å
èç 70%+ ææ¬
åäºãAgent åè®®å±
éç Agent çææ©å±ïŒæ ååå议让äžå Agentãå·¥å ·ãå¹³å°èœäºèäºéã
äžå€§åè®®å®äœ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Agent åè®®çæ â
â â
â NLWeb âââ 让çœç«åæ"AIå¯è¯»"æ¥å£ â
â (人 â çœç«) â
â â â
â ⌠â
â MCP âââââââ LLM äžå·¥å
·/æ°æ®æºä¹éŽçæ åæ¥å£ â
â (Agent â Tools) â
â â â
â ⌠â
â A2A âââââââ Agent äž Agent ä¹éŽçéä¿¡åè®® â
â (Agent â Agent) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
MCPïŒæš¡åäžäžæåè®®ïŒæ¶æ
HostïŒåŠ VSCode/ClaudeïŒ
â
â 1对1è¿æ¥
âŒ
MCP Client
â
â åç°å·¥å
·å衚
âŒ
MCP ServerïŒåŠïŒèªç©ºå
¬åžAPIïŒ
âââ Tools: search_flights, book_flight
âââ Resources: èªçæ¶å»è¡šïŒåªè¯»ïŒ
âââ Prompts: "åŠäœæ¥è¯¢ç»åèªçïŒ"
MCP çæ žå¿ä»·åŒïŒéæäžæ¬¡ïŒéé ææ LLMãäžåéèŠäžºæ¯äžª LLM åå«åéé åšã
A2AïŒAgent éŽåè®®ïŒå·¥äœæµ
çšæ·: "åž®æé¢è®¢æŽäžªå€åšå€·æ
è¡"
â
âŒ
Travel AgentïŒäž»æ§ïŒ
â A2Aåè®®
âââââââââââ⺠Airline AgentïŒåŠäžå®¶å
¬åžçAgentïŒ
â âââ æçŽ¢ + é¢è®¢æºç¥š â ArtifactïŒç»æïŒ
â
âââââââââââ⺠Hotel Agent
â âââ æçŽ¢ + é¢è®¢é
åº â Artifact
â
âââââââââââ⺠Car Rental Agent
âââ é¢è®¢ç§èœŠ â Artifact
â
âŒ
Travel Agent æ±æ»ææ Artifacts
â è¿å宿Žè¡çšç»çšæ·
åäžã代ç 宿
ð¢ ç®å瀺äŸïŒäœ ç第äžäžª Agent
10 è¡ä»£ç å建äžäžªäŒçšå·¥å ·ç AgentïŒ
import asyncio
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
# å®ä¹å·¥å
·åœæ°ïŒå°±æ¯æ®é Python åœæ°ïŒ
def get_weather(city: str) -> str:
"""è·åååžå€©æ°"""
return f"{city}ïŒæŽå€©ïŒ25°CïŒéååºè¡"
async def main():
# 1. åå§å Provider
provider = AzureAIProjectAgentProvider(
credential=AzureCliCredential()
)
# 2. å建 AgentïŒåå + æä»€ + å·¥å
·ïŒ
agent = await provider.create_agent(
name="weather_assistant",
instructions="äœ æ¯å€©æ°å©æïŒçš get_weather å·¥å
·åçé®é¢ã",
tools=[get_weather]
)
# 3. è¿è¡
response = await agent.run("å京ä»å€©å€©æ°æä¹æ ·ïŒ")
print(response) # èŸåºïŒåäº¬ïŒæŽå€©ïŒ25°CïŒéååºè¡
asyncio.run(main())
ð¡ è¿é¶ç€ºäŸïŒåžŠå·¥å ·è°çšçé宿°æ®åæ Agent
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
# èªå®ä¹å·¥å
·ïŒæ¥è¯¢é宿°æ®
def fetch_sales_data(query: str) -> str:
"""éè¿ SQL æ¥è¯¢é宿°æ®åº"""
# å®é
åºæ¯äžè¿æ¥ SQLite/PostgreSQL
mock_data = {
"Q4æ»éå®é¢": "Â¥2,450,000",
"æç
é产å": "æ çº¿è³æº Pro",
"忝å¢é¿": "23.5%"
}
return str(mock_data)
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)
# ç»åå·¥å
·éïŒèªå®ä¹åœæ° + å
眮代ç è§£éåš
toolset = ToolSet()
toolset.add(FunctionTool(fetch_sales_data))
toolset.add(CodeInterpreterTool()) # å¯ä»¥ç»åŸè¡šïŒ
agent = project_client.agents.create_agent(
model="gpt-4o",
name="sales_analyst",
instructions="äœ æ¯éå®åæåžïŒå¯ä»¥æ¥è¯¢æ°æ®å¹¶çæå¯è§ååŸè¡šã",
toolset=toolset
)
# å€èœ®å¯¹è¯åæ
thread = project_client.agents.create_thread()
queries = [
"åž®ææ¥äžäž Q4 çéå®è¡šç°",
"çšæ±ç¶åŸå±ç€ºå产åéå®é¢å¯¹æ¯",
]
for q in queries:
project_client.agents.create_message(
thread_id=thread.id, role="user", content=q
)
run = project_client.agents.create_and_process_run(
thread_id=thread.id, agent_id=agent.id
)
msgs = project_client.agents.list_messages(thread_id=thread.id)
print(f"çšæ·: {q}")
print(f"Agent: {msgs.data[0].content[0].text.value}\n")
ðŽ é«çº§ç€ºäŸïŒå€ Agent æ è¡è§åç³»ç»
import asyncio
from pydantic import BaseModel
from enum import Enum
from typing import List
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
# æ°æ®æš¡å
class AgentRole(str, Enum):
FLIGHT = "flight_booking"
HOTEL = "hotel_booking"
CAR = "car_rental"
ACTIVITIES = "activities_booking"
class SubTask(BaseModel):
task_details: str
assigned_agent: AgentRole
class TravelPlan(BaseModel):
main_task: str
subtasks: List[SubTask]
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
# -------- å·¥å
·åœæ° --------
def search_flights(origin: str, dest: str, date: str) -> str:
return f"æŸå° {origin}â{dest} {date} èªçïŒåœèªCA101 Â¥2,800"
def search_hotels(city: str, checkin: str, nights: int) -> str:
return f"{city} {checkin} å
¥äœ {nights} æïŒåžå°é¡¿é
åº Â¥680/æ"
def search_activities(city: str) -> str:
return f"{city} æšè掻åšïŒæ
宫ãé¢ååã798èºæ¯åº"
# -------- å建äžé¡¹ Agent --------
async def build_agent_team():
planner = await provider.create_agent(
name="travel_planner",
instructions="""äœ æ¯æ
è¡è§ååžïŒå°çšæ·éæ±å解䞺åä»»å¡JSONã
æ ŒåŒïŒ{"main_task":"...", "subtasks":[{"task_details":"...", "assigned_agent":"..."}]}
å¯çš agents: flight_booking, hotel_booking, car_rental, activities_booking"""
)
flight_agent = await provider.create_agent(
name="flight_specialist",
instructions="äœ æ¯æºç¥šäžå®¶ïŒåž®çšæ·æçŽ¢å¹¶æšèæäŒèªçã",
tools=[search_flights]
)
hotel_agent = await provider.create_agent(
name="hotel_specialist",
instructions="äœ æ¯é
åºäžå®¶ïŒæšèåéçäœå®¿æ¹æ¡ã",
tools=[search_hotels]
)
activity_agent = await provider.create_agent(
name="activity_specialist",
instructions="äœ æ¯æŽ»åšé¡Ÿé®ïŒæšèç®çå°ç²Ÿåœ©æŽ»åšã",
tools=[search_activities]
)
return planner, {
"flight_booking": flight_agent,
"hotel_booking": hotel_agent,
"activities_booking": activity_agent
}
# -------- äž»çŒæé»èŸ --------
async def plan_trip(user_request: str):
planner, agents = await build_agent_team()
# Step 1: äž»è§å
print(f"ð æ¶å°è¯·æ±: {user_request}\n")
plan_response = await planner.run(user_request)
import json
plan = TravelPlan(**json.loads(plan_response))
print(f"ðºïž è§å宿ïŒå
± {len(plan.subtasks)} 䞪åä»»å¡\n")
# Step 2: å¹¶è¡æ§è¡åä»»å¡
results = {}
tasks = []
for subtask in plan.subtasks:
if subtask.assigned_agent in agents:
agent = agents[subtask.assigned_agent]
task = agent.run(subtask.task_details)
tasks.append((subtask.assigned_agent, task))
for role, task in tasks:
result = await task
results[role] = result
print(f"â
{role}: {result}")
# Step 3: æ±æ»
print("\nð 宿Žè¡çšè§å宿ïŒ")
return results
# è¿è¡
asyncio.run(plan_trip("åž®æè§åäžäžªä»äžæµ·å°å京çåšæ«äž€æ¥æžžïŒå
嫿ºç¥šãé
åºåæ¯ç¹æšè"))
èŸåºææïŒ
ð æ¶å°è¯·æ±: åž®æè§åäžäžªä»äžæµ·å°å京çåšæ«äž€æ¥æžž...
ðºïž è§å宿ïŒå
± 3 䞪åä»»å¡
â
flight_booking: æŸå° äžæµ·âå京 èªçïŒäžèªMU101 Â¥680
â
hotel_booking: å京 å
¥äœ2æïŒå京é¥åº Â¥580/æ
â
activities_booking: å京æšè掻åšïŒæ
宫ãé¢ååã798èºæ¯åº
ð 宿Žè¡çšè§å宿ïŒ
ååãåŠä¹ 路线åŸ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â AI Agent åŠä¹ 路线 â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â â
â ð± å
¥éšé¶æ®µïŒ1-2åšïŒ â
â âââââââââââââââââ â
â â çè§£ Agent æŠå¿µ & ç±»åïŒLesson 01ïŒ â
â â¡ ç¯å¢æå»ºïŒAzure èŽŠå· + SDK å®è£
ïŒLesson 00ïŒ â
â ⢠è¿è¡ç¬¬äžäžª Hello World Agent â
â ⣠æ¢çŽ¢äž»æµæ¡æ¶ïŒMAF vs Azure AI Agent ServiceïŒïŒLesson 02ïŒ â
â â
â ð¿ æé¿é¶æ®µïŒ2-4åšïŒ â
â âââââââââââââââââ â
â â€ ææ¡å·¥å
·è°çšïŒTool UseïŒïŒLesson 04ïŒ â
â ⥠åŠä¹ Agentic RAGïŒè¿æ¥ç¥è¯åºïŒLesson 05ïŒ â
â ⊠讟计å¯ä¿¡èµ AgentïŒäºè§£å®å
šèŸ¹çïŒLesson 06ïŒ â
â ⧠讟计ååïŒéæã坿§ãäžèŽïŒïŒLesson 03ïŒ â
â â
â ð³ è¿é¶é¶æ®µïŒ4-6åšïŒ â
â âââââââââââââââââ â
â âš è§å讟计暡åŒïŒä»»å¡åè§£ïŒLesson 07ïŒ â
â â© å€ Agent åäœæ¶æïŒLesson 08ïŒ â
â ⪠å
è®€ç¥ & èªæåæïŒLesson 09ïŒ â
â â« åè®®æ åïŒMCP / A2A / NLWebïŒLesson 11ïŒ â
â â
â ð é«çº§é¶æ®µïŒæç»æ·±å
¥ïŒ â
â âââââââââââââââââ â
â ⬠ç产éšçœ²ïŒå¯è§æµæ§ & è¯äŒ°äœç³»ïŒLesson 10ïŒ â
â â äžäžæå·¥çšïŒContext EngineeringïŒïŒLesson 12ïŒ â
â â® Agent è®°å¿ç®¡çïŒLesson 13ïŒ â
â ⯠Browser Use / Computer Use AgentïŒLesson 15ïŒ â
â â° è§æš¡åéšçœ²ãå®å
šå åºïŒLesson 16+ïŒ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
æ»ç»ïŒäžåŒ åŸçé AI Agent å šè²
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â AI Agent 宿Žç¥è¯åŸè°± â
â â
â ââââââââââââ ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â â Agent èœåå± â â
â â çšæ· ââââââºâ æç¥èŸå
¥ â LLMæšç â å·¥å
·è°çš â çæèŸåº â â
â â è¯·æ± â â â² â² â â
â ââââââââââââ ââââââââââââââââââââââŒââââââââââŒââââââââââââââââââââ â
â â â â
â âââââââââââââââââââââââââââ ââââââââââââââââââââ â
â â â â
â ââââââââââââŒâââââââââââ ââââââââââââââââââââââââ â â
â â è®°å¿ç³»ç» â â å·¥å
·çæ â â â
â â çæïŒå¯¹è¯äžäžæ â â æçŽ¢/æ°æ®åº/API/代ç â â â
â â é¿æïŒçšæ·å奜/ç¥è¯ â â MCPæ ååè®®æ¥å
¥ â â â
â âââââââââââââââââââââââ ââââââââââââââââââââââââ â â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â 讟计暡åŒå± â â â
â â Tool Use | Agentic RAG | Planning | Multi-Agent | å
è®€ç¥ â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â ç产ä¿éå± â â â
â â å®å
šé²æ€ | å¯è§æµæ§ | è¯äŒ°äœç³» | ææ¬æ§å¶ | Human-in-Loop â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â åè®®äºèå± â â â
â â MCPïŒå·¥å
·æ¥å
¥ïŒ| A2AïŒAgentéä¿¡ïŒ| NLWeb âââââ â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
éïŒå¿«éåèå¡ç
äœæ¶çš AgentïŒ
â
éåçš AgentïŒ â äžéåïŒ
â¢ å€æ¥éª€ãéèŠäœ¿çšå€äžªå·¥å
· ⢠ç®åé®çïŒäžæ¬¡å¯¹è¯æå®
â¢ ç®æ æç¡®äœè·¯åŸäžåºå® ⢠已æç¡®å®æ§ä»£ç å¯ä»¥å®ç°
⢠éèŠæ ¹æ®äžéŽç»æåšæè°æŽ â¢ å®æ¶æ§èŠæ±æé«ïŒAgentæå»¶è¿ïŒ
⢠éèŠé¿æåŠä¹ åæ¹è¿ â¢ å¯¹åç¡®æ§é¶å®¹å¿ïŒAgentæå¹»è§ïŒ
â¢ å·¥äœæµå€æïŒæ¥éª€å€
æ¡æ¶éæ¥
| éæ± | æšèå·¥å · |
|---|---|
| å¿«éåå | MAF + @tool è£
é¥°åš |
| äŒäžçº§éšçœ² | Azure AI Agent Service |
| ç¥è¯é®çå¢åŒº | Agentic RAG + Azure AI Search |
| 倿任å¡åè§£ | Planning Pattern + ç»æåèŸåº |
| å€ç³»ç»åäœ | Multi-Agent + A2A åè®® |
| å€éšå·¥å ·æ¥å ¥ | MCP æ ååè®® |
| çäº§çæ§ | OpenTelemetry + Langfuse/Azure Tracing |
å ³é®ä»£ç çæ®µéæ¥
# æå°å¯çš AgentïŒ5è¡ïŒ
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
agent = await provider.create_agent(
name="my_agent", instructions="äœ æ¯å©æ", tools=[my_tool_function]
)
response = await agent.run("çšæ·é®é¢")
# å·¥å
·å®ä¹ïŒçšè£
饰åšïŒæŽç®æŽïŒ
from agent_framework import tool
@tool
def my_tool(param: str) -> str:
"""å·¥å
·æè¿°ïŒLLMäŒè¯»è¿éå³å®äœæ¶è°çšïŒ"""
return f"ç»æ: {param}"
# å€Agentå¹¶è¡
results = await asyncio.gather(
agent_a.run(task_a),
agent_b.run(task_b),
agent_c.run(task_c)
)
延䌞é 读
- ð ä»åºåç诟çšïŒå«ä»£ç ïŒ
- ð§ Microsoft Agent Framework ææ¡£
- âïž Azure AI Agent Service
- ð MCP åè®®è§è
- ð RAGASïŒRAG è¯äŒ°æ¡æ¶
- ð¡ïž Azure AI Content Safety
- ð¬ Microsoft Foundry Discord 瀟åº
ð¡ ååšæåïŒAI Agent äžæ¯é¶åŒ¹ïŒä¹äžæ¯ç©å ·ã宿¯ç»§"äŒè¯Žè¯ç AI"ä¹åïŒè¿å"äŒåäºç AI"çå ³é®äžæ¥ãä»äžäžªç®åçå€©æ°æ¥è¯¢ Agent åŒå§ïŒéæ¥æå»ºäœ çå€ Agent åäœç³»ç»ââå·¥çšå®è·µæ°žè¿æ¯æå¥œçèåžãåšæå§ïŒ