1. 项目概述:智能体开发入门指南
在AI技术快速发展的今天,智能体(Agent)已成为最受关注的技术方向之一。不同于传统的聊天机器人,智能体具备自主思考、决策和执行的能力,能够完成更复杂的任务。本教程将带你从零开始构建一个具备基础功能的智能体,通过Python实现"感知-思考-行动"的完整循环。
这个项目特别适合:
- 刚接触AI开发的初学者
- 想了解智能体基础原理的开发者
- 需要快速实现简单对话系统的程序员
我们将使用不到100行代码,构建一个能理解用户意图、做出响应并记住对话历史的简易智能体。虽然功能简单,但包含了智能体最核心的三个要素:思考(Think)、行动(Act)和记忆(Memory)。
2. 开发环境准备
2.1 基础环境配置
在开始编码前,请确保你的开发环境满足以下要求:
硬件要求:
- 任何现代计算机(无需GPU)
- 稳定的网络连接(用于安装依赖包)
软件要求:
- Python 3.10或更高版本
- pip包管理工具
- 推荐使用conda管理Python环境(可选)
验证Python版本:
bash复制python --version
2.2 安装必要依赖
我们需要两个额外的Python包来增强控制台输出效果:
bash复制pip install colorama pyfiglet
- colorama:用于在控制台输出彩色文字
- pyfiglet:生成艺术字体的标题
验证安装:
bash复制pip list | grep -E "colorama|pyfiglet"
3. 智能体核心架构实现
3.1 基础框架搭建
首先创建项目目录和主文件:
bash复制mkdir my_first_agent && cd my_first_agent
touch simple_agent.py
以下是智能体的基础框架代码:
python复制import time
from typing import List, Dict
from colorama import Fore, Style, init
from pyfiglet import Figlet
# 初始化控制台美化工具
init()
class SimpleAgent:
def __init__(self, name):
self.name = name
self.memory = [] # 对话记忆存储
# 显示欢迎信息
f = Figlet(font='slant')
print(Fore.CYAN + f.renderText(self.name) + Style.RESET_ALL)
print(f"我是 {Fore.GREEN}{self.name}{Style.RESET_ALL},一个简单的AI助手!")
if __name__ == "__main__":
agent = SimpleAgent("SimpleBot")
这段代码创建了一个最基本的智能体类,初始化时会显示艺术字体的名称和欢迎信息。self.memory列表将用于存储对话历史。
3.2 实现思考能力
智能体的核心是能够理解用户输入。我们添加think方法来实现意图识别:
python复制def think(self, user_input: str) -> str:
"""分析用户输入,识别意图"""
user_input = user_input.lower() # 统一转为小写
if "你好" in user_input or "hello" in user_input:
return "greeting" # 问候意图
elif "天气" in user_input or "weather" in user_input:
return "weather" # 天气查询意图
else:
return "default" # 默认意图
这个方法通过关键词匹配来识别用户意图,返回对应的意图标签而非具体回复,实现了思考与行动的分离。
3.3 实现行动能力
根据思考结果,我们需要让智能体做出相应行动。添加act方法:
python复制def act(self, plan: str) -> str:
"""根据意图生成响应"""
response_map = {
"greeting": f"你好!我是{Fore.YELLOW}{self.name}{Style.RESET_ALL},很高兴为你服务!",
"weather": "抱歉,我暂时还不具备查询天气的能力 😔",
"default": "对不起,这个问题我还在学习中~可以换个话题吗?"
}
return response_map.get(plan, "发生未知错误,请重新输入")
这里使用字典将意图映射到具体回复,便于维护和扩展。注意我们仍然使用colorama来美化输出。
3.4 实现记忆功能
为了让对话更有连续性,我们需要记录对话历史。修改run方法:
python复制def run(self):
"""智能体主循环:感知→思考→行动→记忆"""
while True:
user_input = input(f"\n{Fore.BLUE}[{self.name}] 请输入你的问题(输入'exit'退出):{Style.RESET_ALL}")
if user_input.lower() == "exit":
print(Fore.RED + "再见!期待下次相遇~" + Style.RESET_ALL)
break
# 核心处理流程
plan = self.think(user_input)
response = self.act(plan)
print(f"\n{Fore.GREEN}[{self.name}回复]{Style.RESET_ALL} {response}")
# 存储对话到记忆
self.memory.append({
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"user_input": user_input,
"response": response
})
现在每次对话都会记录时间戳、用户输入和智能体回复,为后续的多轮对话支持打下基础。
4. 完整代码与测试
4.1 完整代码清单
python复制import time
from typing import List, Dict
from colorama import Fore, Style, init
from pyfiglet import Figlet
# 初始化控制台美化工具
init()
class SimpleAgent:
def __init__(self, name):
self.name = name
self.memory = []
# 显示欢迎信息
f = Figlet(font='slant')
print(Fore.CYAN + f.renderText(self.name) + Style.RESET_ALL)
print(f"我是 {Fore.GREEN}{self.name}{Style.RESET_ALL},一个简单的AI助手!")
def think(self, user_input: str) -> str:
"""分析用户输入,识别意图"""
user_input = user_input.lower()
if "你好" in user_input or "hello" in user_input:
return "greeting"
elif "天气" in user_input or "weather" in user_input:
return "weather"
else:
return "default"
def act(self, plan: str) -> str:
"""根据意图生成响应"""
response_map = {
"greeting": f"你好!我是{Fore.YELLOW}{self.name}{Style.RESET_ALL},很高兴为你服务!",
"weather": "抱歉,我暂时还不具备查询天气的能力 😔",
"default": "对不起,这个问题我还在学习中~可以换个话题吗?"
}
return response_map.get(plan, "发生未知错误,请重新输入")
def run(self):
"""智能体主循环"""
while True:
user_input = input(f"\n{Fore.BLUE}[{self.name}] 请输入你的问题(输入'exit'退出):{Style.RESET_ALL}")
if user_input.lower() == "exit":
print(Fore.RED + "再见!期待下次相遇~" + Style.RESET_ALL)
break
plan = self.think(user_input)
response = self.act(plan)
print(f"\n{Fore.GREEN}[{self.name}回复]{Style.RESET_ALL} {response}")
self.memory.append({
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"user_input": user_input,
"response": response
})
if __name__ == "__main__":
agent = SimpleAgent("SimpleBot")
agent.run()
4.2 测试智能体
运行程序:
bash复制python simple_agent.py
测试用例:
- 输入"你好" → 应返回问候语
- 输入"今天天气如何" → 应返回天气功能提示
- 输入其他任意内容 → 应返回默认回复
- 输入"exit" → 应正常退出程序
5. 功能扩展与优化建议
5.1 扩展意图识别
当前的关键词匹配方式较为简单,可以考虑以下改进:
- 使用正则表达式提高匹配灵活性
python复制import re
def think(self, user_input: str) -> str:
user_input = user_input.lower()
if re.search(r'你好|hello|hi', user_input):
return "greeting"
elif re.search(r'天气|weather|下雨|晴天', user_input):
return "weather"
# 更多意图...
- 添加更多实用意图
python复制elif "时间" in user_input or "time" in user_input:
return "time"
elif "计算" in user_input or "calculate" in user_input:
return "calculation"
5.2 增强记忆功能
当前的记忆只是简单存储,可以改进为:
- 实现上下文关联
python复制def think(self, user_input: str) -> str:
# 检查是否在讨论之前的话题
if "刚才" in user_input or "之前" in user_input:
if len(self.memory) > 0:
last_topic = self.memory[-1].get("response", "")
# 基于上下文进行回复
return "context_followup"
- 添加记忆持久化
python复制import json
def save_memory(self, filename="memory.json"):
with open(filename, 'w', encoding='utf-8') as f:
json.dump(self.memory, f, ensure_ascii=False, indent=2)
def load_memory(self, filename="memory.json"):
try:
with open(filename, 'r', encoding='utf-8') as f:
self.memory = json.load(f)
except FileNotFoundError:
self.memory = []
5.3 集成外部工具
让智能体能够调用外部API实现更复杂功能:
python复制def act(self, plan: str) -> str:
if plan == "weather":
# 调用天气API
weather_data = self.get_weather_api()
return f"今天天气:{weather_data}"
# 其他意图处理...
def get_weather_api(self):
# 实际调用天气API的代码
return "晴,25℃"
6. 常见问题与解决方案
6.1 编码问题
问题:控制台显示乱码
解决:
- 确保文件开头有编码声明:
python复制# -*- coding: utf-8 -*-
- 检查终端是否支持UTF-8编码
6.2 依赖安装问题
问题:ModuleNotFoundError: No module named 'colorama'
解决:
bash复制pip install colorama pyfiglet --user
6.3 艺术字体不显示
问题:pyfiglet字体显示异常
解决:尝试更换字体
python复制f = Figlet(font='standard') # 或'small'等其他字体
7. 进一步学习路径
完成这个基础智能体后,你可以:
-
学习更强大的智能体框架:
- LangChain:https://python.langchain.com/
- AutoGPT:https://github.com/Significant-Gravitas/Auto-GPT
-
扩展智能体能力:
- 集成知识库
- 添加多模态支持(图像、语音)
- 实现任务自动化
-
部署智能体到实际应用:
- 开发微信/QQ机器人
- 创建客服助手
- 构建个人效率工具
