共计 2379 个字符,预计需要花费 6 分钟才能阅读完成。
初识智能体
智能体(Agent)与传统程序最大的区别在于其主动性和交互性。传统程序被动执行预设指令,而智能体能理解自然语言、维护对话上下文,并自主调用工具完成任务。比如天气查询助手,不仅能回答 ” 今天天气如何 ”,还能跟进追问 ” 那明天呢 ” 并保持地点上下文。

典型应用场景包括:
- 智能客服(7*24 小时自动应答)
- 个人效率助手(会议安排、邮件处理)
- 游戏 NPC 角色(动态剧情响应)
环境准备
- 安装 Python 3.8+(推荐使用 Anaconda 管理环境)
- 创建项目目录并安装核心依赖:
mkdir my_first_agent && cd my_first_agent
pip install cherry-studio-sdk requests python-dotenv
- 申请 API 密钥:在 Cherry Studio 控制台创建项目,获取
CHERRY_API_KEY
项目初始化
- 创建基础文件结构:
my_first_agent/
├── .env # 存放敏感配置
├── agent.py # 主逻辑文件
└── requirements.txt
- 在
.env中添加:
CHERRY_API_KEY=your_api_key_here
WEATHER_API_KEY=your_weather_api_key # 示例用天气 API
开发核心模块
基础对话框架
# agent.py
from cherry_studio import AgentCore
from dotenv import load_dotenv
import os
load_dotenv()
class MyFirstAgent(AgentCore):
def __init__(self):
super().__init__(api_key=os.getenv('CHERRY_API_KEY'))
def handle_message(self, user_input, context):
"""处理用户输入的入口方法"""
# 示例:简单回声测试
if "你好" in user_input:
return "你好呀!我是你的第一个智能体助手", context
return "我还在学习中,暂时不明白你的意思", context
if __name__ == "__main__":
agent = MyFirstAgent()
agent.run() # 启动交互式对话
集成外部 API(天气查询示例)
import requests
class MyFirstAgent(AgentCore):
# ... 其他代码保持不变 ...
def get_weather(self, location):
"""调用天气 API 的示例方法"""
url = f"https://api.weatherapi.com/v1/current.json?key={os.getenv('WEATHER_API_KEY')}&q={location}"
try:
response = requests.get(url).json()
return f"{location}当前天气:{response['current']['condition']['text']},温度{response['current']['temp_c']}℃"
except Exception as e:
return f"获取天气失败:{str(e)}"
def handle_message(self, user_input, context):
# 新增天气查询意图识别
if "天气" in user_input:
location = context.get("location", "北京") # 默认地点
if "在哪" in user_input: # 处理地点追问
return "请告诉我你想查询哪个城市的天气?", context
return self.get_weather(location), {"last_intent": "weather", "location": location}
# ... 其他处理逻辑 ...
上下文管理增强版
def handle_message(self, user_input, context):
last_intent = context.get("last_intent")
# 处理上下文延续(如连续问不同地点的天气)if last_intent == "weather" and "上海" in user_input:
return self.get_weather("上海"), {**context, "location": "上海"}
# 处理否定回答(用户不想继续)if "不用了" in user_input or "结束" in user_input:
return "好的,随时可以再问我哦", {}
避坑指南
- 环境变量泄露问题
- 错误做法:将 API 密钥直接写在代码中提交到 GitHub
-
正确方案:使用
.env文件 +.gitignore,永远添加.env到忽略列表 -
对话死循环
- 现象:智能体不断重复询问相同问题
-
解决:确保每次对话都更新 context,设置最大重试次数
-
API 调用超时阻塞
- 现象:天气查询卡住整个对话
-
优化:添加超时参数
requests.get(url, timeout=3),使用异步处理 -
意图识别过于简单
- 反例:仅用
if "天气" in input判断 -
改进:结合正则表达式或 NLU 工具,处理 ” 今天会下雨吗 ” 等变体
-
忽视异常处理
- 教训:用户输入
查询天气 上海 #&导致 API 报错 - 防御:添加输入清洗
location = re.sub(r'[^\w\s]', '', location)
下一步挑战
尝试为你的智能体增加这些能力:
- 记忆功能:让助手记住用户说过喜欢咖啡,下次自动推荐咖啡馆
- 多轮订餐:处理 ” 订披萨 ”->” 什么口味 ”->” 送达时间 ” 的连贯对话
- 自动工具调用:根据 ” 帮我查资料并写总结 ”,自动调用搜索 API+ 文本摘要
当你完成第一个智能体时,不妨思考:如何让助手在回答时带有个性化语气?这将是塑造独特用户体验的关键。
正文完
发表至: 未分类
近两天内
