第1讲:Agent 到底是什么?和 Chatbot 有什么区别

很多人第一次接触 AI,是跟 ChatGPT 聊天。它能写诗、写代码、写周报,甚至能跟你辩论哲学。但你有没有发现一个现象:

它很聪明,但从不主动做事。

你问它"帮我查一下今天的天气",它会告诉你"我无法访问实时数据";你让它"帮我把这份 PDF 转成 Word",它会说"我无法直接操作文件"。

这不是它笨,而是它的设计目标就是对话 ,不是执行


什么是 Agent?

Agent(智能体)的核心定义是:

一个能感知环境、做出决策、调用工具、执行动作并达成目标的自主系统。

拆解一下:

  • 感知环境:接收输入(文字、图片、API 返回、传感器数据等)

  • 做出决策:根据目标判断下一步该做什么

  • 调用工具:不只是"说",而是"做"------查数据库、发邮件、调 API、写文件

  • 执行动作:真正改变外部世界(哪怕只是生成一个文件)

  • 达成目标:有明确的结果导向,比如"完成一份销售报告"、"订好明天上午的会议"

Chatbot 是"问答机器",Agent 是"任务执行者"。


Chatbot vs Agent:一张表看懂本质区别

维度 Chatbot Agent
核心能力 回答提问 执行任务
交互模式 一问一答 多轮规划 + 工具调用
是否改变外部世界 否(仅输出文本) 是(可写文件、调接口、发邮件)
是否有记忆 通常无或极短 有短期+长期记忆
是否有目标 有(比如"完成周报")
是否自主决策 否(被动响应) 是(主动规划步骤)

Agent 的最小骨架:用 50 行 Python 跑通你的第一个 Agent

我们不依赖任何框架,就用最原始的 Python + 大模型 API,写一个能"动手做事"的 Agent。

目标:

让 Agent 接收一个指令:"获取当前时间并告诉我",它能:

  1. 理解指令

  2. 决定调用哪个工具(get_current_time)

  3. 执行工具

  4. 返回结果


第一步:准备环境

你需要:

  • Python 3.10+

  • 一个 DeepSeek / 通义千问 / GLM 的 API Key(任选其一)

  • 安装 requests 库:pip install requests


第二步:写代码

复制代码
import requests
import json

# 配置你的 API Key 和基础 URL(这里以 DeepSeek 为例,其他平台类似)
API_KEY = "你的API_KEY"
BASE_URL = "https://api.deepseek.com/v1/chat/completions"

def get_current_time():
    """模拟一个工具:获取当前时间"""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def call_llm(messages):
    """调用大模型 API"""
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": "deepseek-chat",
        "messages": messages,
        "temperature": 0.0
    }
    response = requests.post(BASE_URL, headers=headers, json=payload)
    response.raise_for_status()
    return response.json()["choices"][0]["message"]["content"]

def agent_run(user_input):
    """Agent 主循环:接收输入 → 决策 → 执行 → 返回结果"""
    # 1. 初始化对话
    messages = [
        {"role": "system", "content": "你是一个能调用工具的智能体。你可以调用 get_current_time() 来获取当前时间。请用 JSON 格式返回你的决策:{\"action\": \"get_current_time\"} 或 {\"action\": \"none\"}"},
        {"role": "user", "content": user_input}
    ]

    # 2. 让模型做决策
    decision = call_llm(messages)
    print(f"[模型决策] {decision}")

    try:
        decision_json = json.loads(decision)
        action = decision_json.get("action")
    except:
        action = "none"

    # 3. 执行工具
    if action == "get_current_time":
        result = get_current_time()
        print(f"[执行结果] {result}")
        return f"当前时间是:{result}"
    else:
        return "抱歉,我没有理解你的指令,无法执行。"

# 测试
if __name__ == "__main__":
    user_input = "获取当前时间并告诉我"
    output = agent_run(user_input)
    print(f"[最终输出] {output}")

第三步:运行看看

当你运行这段代码,你会看到:

复制代码
[模型决策] {"action": "get_current_time"}
[执行结果] 2025-09-03 14:23:45
[最终输出] 当前时间是:2025-09-03 14:23:45

恭喜你!你已经写出了第一个能"动手做事"的 Agent。

它不是在跟你聊天,而是在执行一个任务------调用工具、获取结果、返回答案。


常见错误 & 排坑指南

  1. 模型返回的不是 JSON

    → 在 system prompt 里明确要求"必须用 JSON 格式返回",并设置 temperature=0.0 降低随机性。

  2. 工具函数没定义或报错

    → 先确保工具函数能独立运行,再集成进 Agent。

  3. **API 调用失败(401/429)**​

    → 检查 API Key 是否正确,是否超限,是否需要设置代理。

  4. 模型"瞎编"工具名

    → 在 system prompt 里明确列出可用工具,不要用模糊描述。


课后作业

  1. 修改代码,让 Agent 能调用两个工具:get_current_time()send_email(to, subject, body)(模拟发送邮件,打印即可)。

  2. 尝试让 Agent 理解更复杂的指令,比如:"帮我查下现在几点,然后发邮件告诉老板我迟到了"(提示:你需要拆成两步)。

  3. 思考:如果模型决策错误,你怎么加入"人工确认"机制?


总结

这一讲我们学会了:

  • Agent ≠ Chatbot,它是能"做事"的系统

  • 最小 Agent = 感知 → 决策 → 执行 → 反馈

  • 用 50 行 Python + API 就能跑通一个能调用工具的 Agent

  • 避坑关键:明确工具定义、控制输出格式、降低温度

下一讲,我们将深入 如何稳定调用大模型 API,包括流式输出、超时重试、token 统计、成本意识------这些都是生产级 Agent 的必备基本功。


🧰 开发之余,处理 Base64、JWT 解析、JSON 格式化、Crontab 计算、PDF 合并压缩这些碎片需求,我常用一个纯前端本地工具箱:zz365.top (子页 PDF 大师:PDF 大师 - zz365工具箱)。所有计算在浏览器完成,文件不上传服务器,关页即清。免费、无登录、无广告,适合开发者当常驻标签页。

相关推荐
花酒锄作田2 小时前
FastAPI 使用 session 认证
python·fastapi
lsswear2 小时前
Python 并发 线程
开发语言·python
Ivanqhz2 小时前
MLIR OpBuilder
开发语言·python·mlir
修电脑的猫3 小时前
在中国使用 Claude Code 解决 403 错误(VS CODE)
ai·sap
蚕豆糯米饭4 小时前
Github Copilot 研发效能提升实战指南
ai·github·copilot·ai编程
威联通安全存储4 小时前
TS-h2287XU-RP 在家电制造总装与质检数据场景的部署
python·制造
泡泡鱼(敲代码中)5 小时前
Python 字符串 str 完整学习笔记
python·学习
Token掘金室5 小时前
Aider配置自定义API教程
ai
troy1285 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
我不会起名字3225 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣