从零搭建智能体:用DeepSeek构建AI智能体Agent实战

该文章已生成可运行项目,

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文件夹中的文件内容,并重命名

  1. 用户输入问题
    在这里插入图片描述
  2. 模型调用工具
    在这里插入图片描述
  3. 工具处理
    在这里插入图片描述

想实现其他功能可以自行实现tools,利用ai来进行调用

五、总结:Agent 如何重塑 AI 应用开发

通过 DeepSeek API 与pydantic-ai库,我们用不足 200 行代码实现了一个具备自主决策能力的 AI Agent。其核心价值在于:

  • 解放生产力:将重复的工具调用流程自动化,聚焦高价值任务
  • 降低开发门槛:无需自建大模型,通过 API 快速集成智能能力
  • 拓展应用边界:从简单问答升级为复杂任务执行,适用于办公自动化、运维管理等场景

随着大模型工具调用能力的不断进化,未来的 AI Agent 将能无缝衔接数据库、API 接口、硬件设备等各类资源,成为连接数字世界与物理世界的智能中枢。开发者只需专注于业务逻辑与工具创新,即可构建出超越传统软件边界的智能应用。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值