1. AI Agent 是什么

在本教程的范围内,AI Agent 是以大模型为决策组件、能调用工具并利用执行反馈推进任务的程序。

例如,用户要求“保存一条学习笔记,再读出来确认”。模型理解意图并选择动作;程序实际写入文件、读取文件;模型根据读回的结果再回答。这里真正带来可靠性的,是工具执行结果,而不是模型的一句“已完成”。

方式 谁决定步骤 适用场景
普通模型问答 通常一次生成答案 解释、改写、总结
固定脚本或工作流 开发者预先规定分支 输入稳定、规则明确、可重复
AI Agent 模型在程序许可范围内结合上下文与反馈选下一步 路径不固定,需要理解与工具选择

这是工程上的连续谱,不是严格分类。固定工作流可以包含模型节点,Agent 也可以嵌在确定的业务流程中。若步骤清楚且不会变化,脚本通常更便宜、更稳定;只有理解与判断构成瓶颈时,才值得让模型参与决策。

2. 最小闭环:目标、状态、动作与反馈

最小 Agent 可写成:LLM + Context / State + Tools + Loop。

组成 职责 一个最小实现中的形式
模型 理解请求,生成回答或工具调用 支持 tool calling 的模型 API
上下文与状态 记录目标、此前对话和工具结果 内存中的 history 消息列表
工具 执行真实动作 时间、计算、保存笔记、读取笔记
循环 请求模型、分发工具、写回结果、决定停止 run_turn() 一类函数

目标、工具权限、预算和停止条件贯穿这四部分。提示词可以说明规则,但不能替代程序层的权限校验。

模型输出最终文字只是本轮循环的停止信号,不自动等于业务目标完成。是否成功应由文件内容、计算结果或其他独立证据确认。

Tool Calling 到底发生了什么

开发者提供工具名、用途和参数结构。模型选择工具后返回结构化数据:

{
  "id": "call_1",
  "type": "function",
  "function": {
    "name": "save_note",
    "arguments": "{\"title\":\"学习计划\",\"content\":\"明天研究 Agent Loop\"}"
  }
}

arguments 本身是 JSON 字符串,需要程序解析。执行器随后检查:工具是否已注册、字段是否完整、类型是否正确、访问范围是否允许。检查通过才会调用 Python 函数。工具结果以 role: tool 与对应的 tool_call_id 回传给模型,让它决定下一步。

工具说明不等于工具实现;模型说完成,也不等于工具真的成功。

State 不是“模型学会了”

多轮能力来自每次重新发送消息历史,并没有训练模型或修改权重。对话历史在内存中,程序退出或 /clear 后会清空;笔记文件可以持久存在,却要经由读取工具才会重新进入模型上下文。长期记忆则还需要持久化、检索、选择与更新机制。

历史越长,请求数据与成本通常越多。长期运行时再设计摘要、裁剪和检索,通常比一开始加入向量数据库更合理。

3. 架构:本地执行,远程推理

本地执行、远程推理架构
本地执行、远程推理架构。点击图片查看原尺寸。下载可编辑源图

程序、文件和工具在本地环境运行;模型推理在远程服务完成。因此,工具参数、读出的笔记和工具返回数据可能会发送给配置的模型服务。这种架构便于使用云端模型,但应按数据敏感性设计工具权限与内容范围。

保存再读取的时序

保存与读取工具时序
保存与读取工具时序。点击图片查看原尺寸。下载可编辑源图

这是示意路径,不承诺每次调用的顺序或次数完全相同。模型可能在一个响应中请求多个工具;最小实现可按返回顺序串行执行,以便容易观察和排错。

4. 为什么先手写循环

框架能减少工具定义、类型校验和运行协调的重复代码,但也会把关键过程封装起来。对于有基础 Python 的学习者,先手写一个最小循环能看清消息、工具分发和反馈如何接上;理解后再依据复杂度选择框架。

方案 好处 代价
使用 Agent 框架 少写协议、校验和协调代码 初学时关键过程隐藏在抽象后
手写最小循环 清楚看到消息和工具的来回 要处理协议、异常与预算

框架不是模型,也不提供模型服务凭据。它解决的是工程组织问题,不能替代对闭环的理解。

5. 从零开发:七个步骤

1. 定义可验收的小目标

先写出“成功是什么”:查询真实时间、正确计算表达式、创建笔记并读回原文。避免从“做一个全能助手”开始。

2. 核实模型接入

确认模型 ID、Base URL、认证方式及工具调用支持;再确认凭据来自哪个产品。相同品牌的订阅凭据和开放平台凭据不一定可以互换。

3. 先实现普通 Python 工具

每个工具脱离模型也能运行,且有清晰输入、输出和错误反馈。保存工具要决定是否允许覆盖;读取工具应限制访问范围和大小。

4. 提供工具定义,并在本地校验

JSON Schema 告诉模型如何调用,但不能替代本地校验。只从固定函数映射表分发,绝不执行模型任意指定的代码。

5. 写 Agent Loop

下面是教学伪代码,需要补齐模型适配、工具实现和异常校验后才能运行。

history.append({"role": "user", "content": user_input})

for step in range(max_requests):
    message = model.complete(history)
    history.append(message)

    calls = message.get("tool_calls") or []
    if not calls:
        return message.get("content")

    for call in calls:
        result = execute_tool(call, functions)
        history.append({
            "role": "tool",
            "tool_call_id": call["id"],
            "content": json.dumps(result, ensure_ascii=False),
        })

raise AgentError("达到本轮请求上限")

关键顺序是:先保存模型提出的工具请求消息,再保存与之关联的工具结果,随后带着更新后的历史继续请求。

6. 设置异常与停止行为

处理网络失败、参数错误、未知工具、文件不存在、输出截断和预算耗尽。工具错误作为结构化结果回传;网络错误应明确终止本轮。已经产生的写入操作不会因模型随后失败而自动撤销。

7. 分层验证

验证层 核对内容
工具层 运算正确、文件读写正确、非法路径和参数被拒绝
协议层 工具请求与结果 ID 匹配,完整消息回传,多轮历史有效
循环层 能继续调用,也能在上限处停止
真实模型层 模型确实调用工具,结果可由磁盘或数据独立确认

模拟测试验证程序行为;真实 API 测试验证当前账户、模型和程序在当时能配合工作。两者不能互相替代。

6. 工具设计:能力与边界一起交付

一个最小学习型 Agent 可有四个工具:

工具 实际行为与边界
get_current_time 查询执行环境的当前日期、时间和时区
calculate 解析数学 AST,不使用任意 eval;限制长度、节点数、指数和数值范围
save_note 在允许的笔记目录创建文件;默认不覆盖;正文有大小上限
read_note 按标题读回笔记;限制路径、符号链接与文件大小

单轮请求上限和一次响应中的工具调用数量要分别限制。应用层校验能显著减少误操作,但不等于操作系统级沙箱;涉及高风险系统时仍需要最小权限、隔离环境和审计。

7. 模型配置:以 2026-09-14 实测为准

以下是作者在 2026-09-14 的一次接入核对,作为学习示例,并非对所有会员、所有账户或未来政策的承诺。使用前应以官方文档和账户页面为准。

项目 Kimi Code 订阅接入 Kimi 开放平台
Base URL https://api.kimi.com/coding/v1 https://api.moonshot.cn/v1
K3 模型 ID k3 kimi-k3
凭据来源 Kimi Code 控制台 开放平台控制台
额度体系 订阅权益 按量计费余额

示例配置中不要保存或提交真实 Key:

LLM_API_KEY=仅在本地安全保存
LLM_BASE_URL=https://api.kimi.com/coding/v1
LLM_MODEL=k3
LLM_TIMEOUT_SECONDS=120
AGENT_MAX_REQUESTS=8

本次示例以较低推理强度和 8192 最大完成 token 运行。模型能力、端点、会员权益与参数会变化;生产集成应按开放平台规则、成本与稳定性单独评估。

8. 一次真实演示的证据

下列输入可以逐步观察闭环:

现在几点?
计算 10+8
保存一条标题为“学习计划”的笔记,内容是“明天研究 Agent Loop”
读取“学习计划”
/clear
quit
终端中的工具调用示例
终端中的工具调用示例。点击图片查看原尺寸。

作者在 2026-09-14 的实测中,离线测试通过;真实模型完成了查询时间、计算、保存笔记、读取笔记及后续回忆的闭环。截图中的计算 10+8 得到 18。

演示结果说明的是当时的单次环境与账户能够完成闭环,不代表所有账户都可使用相同配置,也不替代上线前的权限、成本与失败恢复测试。

9. 可复用的方法论

先证明闭环,再增加能力

每个工具都应回答:接受什么输入、允许做什么、如何证明成功、失败怎么处理、能否回滚。先完成一个端到端小任务,再扩展工具与框架。

模型处理不确定性,程序守住确定规则

目标理解与动作选择可交给模型;权限、路径范围、参数类型、请求上限与结果记录由程序执行。不要依赖模型“应该会听话”来保证可靠性。

用执行证据衡量完成

保存文件要检查内容;修改代码要运行适当验证;调用业务接口要检查实际状态。流畅的回答只说明模型生成了文字,不能证明外部动作完成。

自动化以收益为前提

重复出现的工作可先评估自动化,但只有收益明确、输入稳定、风险可控且可回滚时才落地。固定规则优先脚本;确实需要判断与工具选择时再引入 Agent。

10. 学习检查清单

不看框架文档,尝试用自己的话回答:模型返回了什么?谁执行工具?结果如何回到模型?循环何时停止?如果能按伪代码解释完整,就掌握了最小 Agent 的核心。

下一步可以依次练习:为工具增加 JSON Schema 校验;把工具结果写成结构化日志;为单轮请求设置预算;为失败动作补上可回滚设计;最后再考虑摘要、检索和持久化记忆。

来源与延伸阅读

本文整理自 2026-09-14 的实践记录,网站整理于 2026-10-04。模型配置保留当时的实测背景;接入前请核对文中官方文档和账户权限。