共计 2784 个字符,预计需要花费 7 分钟才能阅读完成。
概念解析:AI Agent 的三大核心能力
AI Agent 与传统程序最大的区别在于其具备感知 - 决策 - 执行的闭环能力。让我们用一个外卖点餐的场景来理解:

-
感知能力 :Agent 能理解用户说 ” 我想吃附近评分高的川菜 ”,这涉及自然语言处理(NLP) 技术。传统程序只能处理结构化输入如勾选菜品类型。
-
决策能力:Agent 会先查询地理位置,再筛选 4.5 分以上的川菜馆,最后考虑配送时间。传统程序是按固定流程执行 if-else 判断。
-
执行能力:Agent 可以自动调用地图 API 查位置、爬取点评数据,甚至帮你完成下单支付。传统程序通常只能在封闭系统内操作。
技术选型:框架对比
目前主流的两个开发框架各有特点:
- LangChain:适合 Python 技术栈
- 优势:生态丰富,有大量现成工具链(text splitters, vector DB 等)
-
劣势:异步支持较弱
-
Semantic Kernel:适合 C#/Java 技术栈
- 优势:微软系产品集成好
- 劣势:社区资源较少
新手建议:从 LangChain 开始,因为:
1. Python 学习曲线平缓
2. 遇到问题容易找到解决方案
3. 调试工具更完善
实战案例:天气查询 Agent
1. 环境准备
先安装必要依赖:
pip install openai langchain requests
2. 处理自然语言输入
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0 # 降低随机性
)
def parse_intent(user_query: str) -> dict:
prompt = f"""将用户问题解析为 JSON 格式:\n"""
response = llm.predict(prompt + user_query)
return eval(response) # 实际项目应该用 json.loads
3. 工具调用设计
创建天气查询工具:
import requests
from typing import Optional
WEATHER_API_KEY = "your_key" # 实际项目用环境变量
def get_weather(city: str, date: Optional[str] = None) -> dict:
url = f"https://api.weatherapi.com/v1/forecast.json?key={WEATHER_API_KEY}&q={city}&days=1"
try:
resp = requests.get(url, timeout=5)
resp.raise_for_status()
return {
"city": city,
"temp_c": resp.json()["current"]["temp_c"],
"condition": resp.json()["current"]["condition"]["text"]
}
except Exception as e:
return {"error": str(e)}
4. 对话状态管理
使用简单的上下文对象:
class DialogState:
def __init__(self):
self.history = []
self.current_goal = None
def update(self, user_input: str, agent_response: str):
self.history.append({
"user": user_input,
"agent": agent_response
})
# 控制上下文长度
if len(self.history) > 5:
self.history = self.history[-5:]
完整代码示例
# weather_agent.py
import os
from typing import Dict, Any
class WeatherAgent:
def __init__(self):
self.llm = ChatOpenAI(model="gpt-3.5-turbo")
self.dialog = DialogState()
def run_query(self, user_input: str) -> Dict[str, Any]:
# 第一步:意图识别
intent = self._parse_intent(user_input)
# 第二步:参数验证
if not self._validate_intent(intent):
return {"error": "请提供有效的城市名称"}
# 第三步:调用工具
weather_data = get_weather(intent["city"])
# 第四步:生成回复
response = self._format_response(weather_data)
# 更新对话状态
self.dialog.update(user_input, response)
return {"response": response}
def _parse_intent(self, text: str) -> Dict[str, str]:
prompt = """ 从文本提取城市名称,输出 JSON 格式:示例输入:"上海明天天气怎样?"
示例输出:{"city": "上海"}
实际输入:{input}
"""
return self.llm.predict(prompt.format(input=text))
def _validate_intent(self, intent: Dict) -> bool:
return "city" in intent and len(intent["city"]) > 0
def _format_response(self, data: Dict) -> str:
if "error" in data:
return f"查询失败:{data['error']}"
return (f"{data['city']}当前气温{data['temp_c']}℃,"
f"天气状况:{data['condition']}"
)
生产环境考量
- 内存优化:
- 使用 LRU 缓存对话历史
-
对长对话进行摘要压缩
-
API 限流:
- 实现令牌桶算法
-
设置失败重试机制
-
敏感信息过滤:
- 在输入输出层添加正则过滤
- 对 API 返回做脱敏处理
新手常见错误
- 未处理工具调用失败
- 症状:API 出错导致 Agent 崩溃
-
解决:添加 try-catch 和默认返回值
-
缺少输入验证
- 症状:用户输入 ” 查北京天气 ” 和 ” 查 Weather in Beijing” 解析结果不一致
-
解决:标准化输入处理流程
-
过度依赖大模型
- 症状:所有逻辑都用 LLM 导致成本过高
- 解决:能用规则处理的尽量不用模型
扩展思考
当你想设计多 Agent 协作系统时,可以考虑:
1. 如何设计 Agent 之间的通信协议?
2. 怎样处理可能出现的循环依赖?
3. 如何评估整个系统的稳定性?
建议从一个简单的客服转接场景开始实践,比如当旅行 Agent 遇到酒店预订问题时,自动转接给酒店专项 Agent 处理。
正文完
