python版本:python 3.10
使用的包:pydantic_ai
模型:deepseek-chat
一、为什么需要 AI Agent?从被动响应到主动决策的进化
传统的 AI 模型(如 ChatGPT)只能被动地根据用户指令生成回答,无法自主完成需要多步工具调用的复杂任务。而AI Agent(智能体)通过整合大模型的逻辑推理能力与自定义工具的执行能力,能够主动拆解任务、调用工具,并将结果整合成自然语言响应。
例如:
- 传统 AI:用户问 “重命名文件”,只能返回操作说明
- AI Agent:用户问 “重命名文件 report.txt 为 final_report.txt”,能直接调用文件系统工具完成操作
二、AI Agent 核心执行流程:四步实现智能闭环
关键步骤解析:
意图解析:Agent 通过大模型理解用户问题中的关键任务(如 “重命名文件”“读取内容”),并判断是否需要调用工具。
说白了就是再加一层,没有什么是加一层解决不了的
示例:用户提问 “请读取 config.txt 的前 5 行”,解析出 “读取文件” 任务,触发工具调用流程。
模型生成工具指令:Agent 将用户问题转换为大模型可理解的格式,请求生成工具调用的参数。
技术细节:遵循 OpenAI Function Calling 协议,生成 JSON 格式的工具调用指令:
{
"name": "read_file",
"parameters": {
"file_path": "config.txt",
"max_lines": 5
}
}
工具执行:Agent 根据模型返回的指令,调用预先注册的工具函数(如文件操作、API 请求等)。
结果整合与响应:工具执行结果(如文件内容、操作状态)返回后,Agent 将其整理为自然语言回答,或触发新一轮工具调用(如需多步处理)。
三、实战开发:用 DeepSeek API 搭建文件管理 Agent
1. 环境准备
安装依赖库
pip install pydantic-ai
2. 初始化 Agent 与 DeepSeek 模型连接
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
import os
deepseek兼容了openai的api格式
配置DeepSeek API(兼容OpenAI协议)
model = OpenAIModel(
model_name="deepseek-chat", # 使用DeepSeek对话模型
provider=OpenAIProvider(
api_key=os.getenv("DEEPSEEK_API_KEY"), # 从环境变量获取API密钥
base_url="https://api.deepseek.com" # DeepSeek服务地址
)
)
获取密钥的方式可改为自己的
创建Agent并注册工具
agent = Agent(
model,
system_prompt='你是一个资源的程序员,需要对我的问题仔细思考之后进行解决',
tools=[
tools.rename_file,
tools.read_file,
tools.list_files
]
)
3. 定义自定义工具函数(tools.py)
这里采用test文件夹作为基础文件夹,可以自定义
import os
from pathlib import Path
base_dir = Path(__file__).parent / "test"
print(f"base_dir: {base_dir}")
def read_file(name: str) -> str:
print(f"reading file: {name}")
try:
with open(base_dir / name, "r") as f:
content = f.read()
return content
except Exception as e:
return f"error reading file: {e}"
def list_files() -> list[str]:
print("listing files")
file_list = []
try:
if not base_dir.exists():
return ["目录不存在"]
for item in base_dir.iterdir():
if item.is_file():
file_list.append(item.name)
return file_list
except Exception as e:
return [f"列出文件时出错: {str(e)}"]
def rename_file(old_name: str, new_name: str) -> str:
print(f"renaming file: {old_name} to {new_name}")
try:
new_path = base_dir / new_name
if not str(new_path).startswith(str(base_dir)):
return f"error renaming file: {new_name} is not in the base directory"
os.makedirs(new_path.parent, exist_ok=True)
os.rename(base_dir / old_name, new_path)
return f"renamed file: {old_name} to {new_name}"
except Exception as e:
return f"error renaming file: {e}"
4. 对话交互逻辑实现
def main():
# 交互式问答
history = []
print("开始对话,输入 'quit' 或 'exit' 结束对话")
while True:
question = input("\n请输入你的问题:")
# 检查是否要退出
if question.lower() in ['quit', 'exit']:
print("对话已结束,感谢使用!")
break
response = agent.run_sync(question, message_history=history)
# 更新历史记录,调用 all_messages 方法
history.extend(response.all_messages())
# 如果历史记录超过限制,只保留最近的对话
if len(history) > MAX_HISTORY * 2: # 乘以2是因为每轮对话包含问题和回答两条消息
history = history[-MAX_HISTORY * 2:]
print(response.output)
if __name__ == "__main__":
main()
5.完整代码
main.py
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
import tools
import os
# 设置最大历史记录条数
MAX_HISTORY = 10 # 只保留最近10轮对话
model = OpenAIModel(
"deepseek-chat",
provider=OpenAIProvider(
api_key=os.getenv('DEEPSEEK_API_KEY'), # 从环境变量加载API密钥
base_url="https://api.deepseek.com"
)
)
agent = Agent(
model,
system_prompt='你是一个资源的程序员,需要对我的问题仔细思考之后进行解决',
tools=[
tools.rename_file,
tools.read_file,
tools.list_files
]
)
def main():
# 交互式问答
history = []
print("开始对话,输入 'quit' 或 'exit' 结束对话")
while True:
question = input("\n请输入你的问题:")
# 检查是否要退出
if question.lower() in ['quit', 'exit']:
print("对话已结束,感谢使用!")
break
response = agent.run_sync(question, message_history=history)
# 更新历史记录,调用 all_messages 方法
history.extend(response.all_messages())
# 如果历史记录超过限制,只保留最近的对话
if len(history) > MAX_HISTORY * 2: # 乘以2是因为每轮对话包含问题和回答两条消息
history = history[-MAX_HISTORY * 2:]
print(response.output)
if __name__ == "__main__":
main()
四、执行流程实战演示:多步工具调用案例
场景:获取test文件夹中的文件内容,并重命名
- 用户输入问题
- 模型调用工具
- 工具处理
想实现其他功能可以自行实现tools,利用ai来进行调用
五、总结:Agent 如何重塑 AI 应用开发
通过 DeepSeek API 与pydantic-ai库,我们用不足 200 行代码实现了一个具备自主决策能力的 AI Agent。其核心价值在于:
- 解放生产力:将重复的工具调用流程自动化,聚焦高价值任务
- 降低开发门槛:无需自建大模型,通过 API 快速集成智能能力
- 拓展应用边界:从简单问答升级为复杂任务执行,适用于办公自动化、运维管理等场景
随着大模型工具调用能力的不断进化,未来的 AI Agent 将能无缝衔接数据库、API 接口、硬件设备等各类资源,成为连接数字世界与物理世界的智能中枢。开发者只需专注于业务逻辑与工具创新,即可构建出超越传统软件边界的智能应用。