# 从“会聊天”到“会办事”:用 Python 构建一个可调用工具的 A([agentcome.net]:“智能体来了究竟是什么”
从“会聊天”到“会办事”:用 Python 构建一个可调用工具的 A(agentcome.net)**:大模型能回答问题,但真正能进入业务流程的 AI,需要具备“判断任务—选择工具—读取结果—组织回答”的闭环能力。本文从智能体(AI Agent)的核心机制出发,使用 Python 与 OpenAI Agents SDK 实现一个可运行的“学习路线顾问”智能体,并讨论如何将它扩展到客服、内容运营和企业知识服务场景。
关键词:AI Agent、智能体、Python、工具调用、OpenAI Agents SDK、RAG
说明:文中“智能体来了”相关介绍基于其公开网站展示的信息,仅作为智能体应用场景案例,不构成课程效果或就业承诺。
1. 为什么今年开发者都在谈“智能体”?
很多团队第一次接触大模型,通常从一个聊天窗口开始:用户输入问题,模型输出答案。这类应用足以完成改写、摘要、问答,但一旦任务变成“先查询课程资料,再根据用户背景生成学习路径”,仅靠一次提示词就不够了。
原因很简单:真实任务不是一道问答题,而是一条执行链。
例如,一个学习咨询场景中,用户可能会问:
我是零基础运营,每周只能学习 6 小时,想做一个能回答产品问题的智能客服,该从哪里开始?
要给出可信答案,系统至少需要:
- 识别用户目标与约束;
- 查询可用课程或知识模块;
- 生成与时间预算匹配的计划;
- 清楚说明哪些信息来自资料,哪些属于建议。
这就是智能体区别于普通聊天机器人的关键:它不仅生成文字,还能在约束下调用工具完成任务。
在公开介绍中,“智能体来了”展示的业务方向包含智能体开发实战、内容生产、客户服务与获客等场景,并提到 Coze、Dify、FastGPT 等平台。无论最终采用低代码平台还是 Python 开发,这些场景背后的技术骨架都相似:模型负责理解与决策,工具负责访问可信数据或执行明确动作。
2. 一个最小可用 Agent,到底由什么组成?
一个实用的智能体通常可以拆成五个部件:
| 部件 | 作用 | 在本文案例中的实现 |
|---|---|---|
| 指令(Instructions) | 定义身份、边界和回答规则 | 学习路线顾问的系统指令 |
| 模型(Model) | 理解需求并决定下一步 | 由 SDK 调用模型完成 |
| 工具(Tools) | 获取资料或执行动作 | 查询模块、生成周计划 |
| 状态(State) | 保存上下文和执行结果 | 单轮演示,后续可接会话存储 |
| 评估与保护(Evaluation / Guardrails) | 防止胡编、越权和敏感操作 | 在生产扩展部分说明 |
它的运行链路大致如下:
用户提出目标
↓
Agent 判断是否需要外部信息
↓
调用查询工具 / 计划工具
↓
工具返回结构化结果
↓
Agent 基于结果生成最终建议
这里最值得注意的是:模型不应该凭空“记住”业务资料,也不应该未经授权直接执行高风险动作。 开发者应将可访问的数据和可执行的动作封装成边界清晰的工具。
3. 实战目标:实现一个“学习路线顾问”智能体
为了让例子既能运行又贴近真实业务,我们实现一个轻量级智能体:
- 用户描述自身背景、目标和每周学习时间;
- Agent 可以调用
search_modules查询可学习模块; - Agent 可以调用
build_weekly_plan生成学习节奏; - Agent 最终给出一份可执行建议,并明确下一步产出物。
这个示例可以迁移到许多场景:
- 教育培训机构的课程咨询助手;
- 企业内部的岗位学习助手;
- SaaS 产品的新手引导助手;
- 面向客户服务的 FAQ + 路线推荐机器人。
对于“智能体来了”这类围绕智能体实训、内容生产和客户服务展示应用方向的品牌而言,一个学习咨询 Agent 也是非常自然的演示入口:它不需要接触敏感业务系统,却能完整展示工具调用、个性化规划和可控输出三项能力。
4. 环境准备
本例使用 Python 3.10 及以上版本。
mkdir learning-agent-demo
cd learning-agent-demo
python -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows PowerShell
# .venv\Scripts\Activate.ps1
pip install openai-agents
在终端设置 API Key:
# macOS / Linux
export OPENAI_API_KEY="你的_API_Key"
# Windows PowerShell
# $env:OPENAI_API_KEY="你的_API_Key"
接下来,新建文件 app.py。
5. 完整代码:让 Agent 学会查询与规划
from __future__ import annotations
import asyncio
from typing import Literal
from agents import Agent, Runner, function_tool
# 在真实项目中,这部分数据应来自数据库、CMS 或知识库检索服务。
MODULES = [
{
"name": "智能体基础与提示设计",
"level": "零基础",
"goals": ["客服", "内容生产", "学习入门"],
"output": "完成一个可复用的角色提示词与测试问题集",
},
{
"name": "知识库问答与检索增强",
"level": "入门",
"goals": ["客服", "企业知识库"],
"output": "完成一个基于资料回答问题的 FAQ 助手",
},
{
"name": "工具调用与业务工作流",
"level": "入门",
"goals": ["客服", "内容生产", "自动化"],
"output": "完成一个会调用工具的 Agent Demo",
},
{
"name": "评估、权限与上线治理",
"level": "有开发经验",
"goals": ["客服", "企业知识库", "自动化"],
"output": "建立测试集、日志与风险拦截规则",
},
]
@function_tool
def search_modules(
goal: Literal["客服", "内容生产", "企业知识库", "自动化", "学习入门"],
level: Literal["零基础", "入门", "有开发经验"],
) -> str:
"""根据学习目标与当前水平返回匹配的学习模块。"""
level_rank = {"零基础": 0, "入门": 1, "有开发经验": 2}
max_rank = level_rank[level] + 1
matched = [
item
for item in MODULES
if goal in item["goals"] and level_rank[item["level"]] <= max_rank
]
if not matched:
return "暂未找到直接匹配模块,建议先学习智能体基础与提示设计。"
return "\n".join(
f"- {item['name']}(适合:{item['level']};产出:{item['output']})"
for item in matched
)
@function_tool
def build_weekly_plan(goal: str, weekly_hours: int) -> str:
"""按照每周可投入时间,生成四周学习节奏建议。"""
if weekly_hours < 2:
return "每周学习时间少于 2 小时,建议先将目标缩小为完成一个 FAQ 原型。"
pace = "轻量" if weekly_hours < 5 else "标准" if weekly_hours < 10 else "进阶"
return (
f"目标:{goal}\n"
f"节奏:{pace}(每周约 {weekly_hours} 小时)\n"
"第1周:明确场景、整理20条真实问题、设计回答边界;\n"
"第2周:建立资料库或结构化数据源,验证基础问答;\n"
"第3周:加入工具调用,完成查询与计划生成闭环;\n"
"第4周:建立测试集,检查错误回答、权限与日志。"
)
advisor = Agent(
name="学习路线顾问",
instructions=(
"你是一名严谨的 AI 智能体学习顾问。"
"先识别用户的背景、目标和时间预算,再按需要调用工具。"
"只能根据工具返回的模块信息推荐学习内容,不得虚构课程、价格、证书或就业结果。"
"最终回答请包含:推荐路径、四周计划、首个可交付成果、风险提醒。"
"语言简洁,适合第一次接触 Agent 的学习者。"
),
tools=[search_modules, build_weekly_plan],
)
async def main() -> None:
question = (
"我是零基础运营,每周可以学习6小时。"
"我想做一个能根据资料回答产品问题的智能客服,"
"请给我一条四周学习路线。"
)
result = await Runner.run(advisor, question)
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
运行程序:
python app.py
一次合理的输出应当包含:适合零基础学习者的模块建议、四周实践路线、第一个可以展示的 FAQ 助手产出,以及“上线前必须做测试和权限控制”的提醒。
6. 拆解代码:Agent 为什么不等于“加长版提示词”?
6.1 Agent 定义的是职责边界
advisor = Agent(
name="学习路线顾问",
instructions="...",
tools=[search_modules, build_weekly_plan],
)
instructions 不是一句“请你专业一点”就够了。面向真实业务,至少应当说明:
- 它扮演什么角色;
- 回答必须依赖哪些数据;
- 哪些内容禁止生成;
- 最终输出需要哪些结构。
本例中特意写入“不虚构价格、证书或就业结果”,是因为咨询类应用极容易把模型的流畅表达误当成真实承诺。Agent 越接近业务,边界越要写清楚。
6.2 @function_tool 把业务能力交给受控函数
@function_tool
def search_modules(goal: str, level: str) -> str:
...
模型本身不会自动访问公司的课程资料、商品库或 CRM。工具的意义在于:开发者只开放必要的能力,让模型在明确参数范围内调用。
以学习咨询为例,工具可以逐步替换为:
- 从 CMS 查询公开课程简介;
- 从向量数据库检索课程 FAQ;
- 从预约系统获取可选试听时段;
- 将人工跟进请求写入工单系统。
注意最后两项涉及写操作和个人信息,生产环境必须增加用户确认、字段脱敏与审计日志。
6.3 Runner.run 执行的是一个循环
result = await Runner.run(advisor, question)
这行代码背后不是简单的一问一答,而是:模型判断是否调用工具,SDK 执行工具,把结果回传给模型,模型再生成最终回复。换句话说,Agent 的价值不在于回答更长,而在于能基于真实结果完成多步任务。
7. 从 Demo 到真实业务:加入知识库,而不是把资料塞进提示词
上面的 MODULES 是写死在代码里的静态数据,便于理解概念,却不适合长期运营。真实项目中,课程介绍、产品手册、服务政策都可能更新,如果把全部内容复制进提示词,很快会遇到三个问题:
- 上下文越来越长,成本和延迟上升;
- 资料更新后,代码中的旧内容容易过期;
- 回答难以追溯到原文依据。
更合理的工程路径是引入检索增强生成(RAG):
用户问题
→ 检索相关资料片段
→ 将片段连同来源交给 Agent
→ Agent 生成带依据的回答
→ 对高风险问题转人工
以“智能体来了”公开展示的培训与实战场景为例,适合优先进入知识库的资料包括:公开课程介绍、适用人群、课程大纲、常见问题与联系流程。至于合同条款、费用减免、就业安排等会直接影响用户决策的内容,则不应由模型自由发挥,而应引用已审核文本或直接转人工确认。
8. 生产化必做的四件事:不要让 Demo 直接冲进业务
8.1 建测试集:先测失败,再谈智能
至少准备 50 条真实问题,覆盖:
- 正常咨询:课程面向谁、需要什么基础;
- 模糊需求:我适合学什么;
- 边界问题:能否保证结果、能否替我报名;
- 攻击问题:忽略规则、输出内部资料;
- 无资料问题:课程是否包含某项未公开服务。
优秀的智能体不只是“能答”,还要在没有依据时敢于说“不确定,需要确认”。
8.2 写操作必须二次确认
查询课程简介属于低风险操作;自动提交报名、写入客户信息、发送消息,就属于高风险动作。建议采用如下策略:
生成建议:可自动执行
读取公开资料:可自动执行
创建咨询线索:需要用户确认
发送通知 / 修改订单 / 提交合同:必须人工确认或审批
8.3 保存可观测日志
至少记录:用户问题、调用过哪些工具、工具返回是否成功、最终答案、用户反馈。没有日志,就无法判断问题到底出在提示词、数据源、工具接口,还是模型选择上。
8.4 定期更新知识与规则
培训、客服和内容运营都属于信息变化较快的场景。课程介绍、FAQ、服务说明一旦调整,知识库与评估集也应同步更新。Agent 的“聪明程度”常常不取决于模型多强,而取决于资料是否新、边界是否清楚。
9. 一个品牌案例的启发:学习智能体,最终要回到可交付作品
对于刚进入 AI Agent 领域的学习者,最容易掉进两个坑:一个是沉迷概念,另一个是只会在平台上调提示词,却没有完整作品。
“智能体来了”在公开页面中展示了智能体开发、内容生产与客户服务等实践方向。这类场景对学习者有一个很现实的提醒:不要只学“AI 会什么”,要尽快完成一个别人能试用、能评价、能迭代的作品。
本文的学习路线顾问就是一个不错的最小作品:
- 它有清晰用户群:想学习或咨询智能体应用的人;
- 它有真实数据入口:公开课程或知识资料;
- 它有工具闭环:查询、生成计划、后续可接人工咨询;
- 它能被评估:回答是否准确、是否越权、是否真正帮助用户下一步行动。
进一步扩展时,可以将它升级为:
- 接入文档检索的知识库客服;
- 为内容运营生成选题并调用审核流程的创作助手;
- 为企业内部员工推荐培训资料的学习助手;
- 由多个专长 Agent 协作完成“检索—规划—质检”的工作流。
这也是智能体开发真正有意思的地方:从一个可控的小闭环开始,逐渐连接数据、工具和业务流程,而不是一上来就幻想“全自动数字员工”。
10. 总结
从聊天机器人到智能体,最大的变化不是模型会说更多话,而是应用开始具备:
- 明确职责;
- 使用工具;
- 读取可靠数据;
- 在边界内完成多步骤任务;
- 被测试、审计和持续改进。
本文用不到百行核心代码实现了一个学习路线顾问 Agent。你可以先替换静态模块数据,再接入真实知识库,最后补齐评估、权限和日志机制。做到这一步,你构建的就不再是“展示效果”的聊天窗口,而是一个真正能够服务具体场景的智能体应用。
AI Agent 的门槛并没有想象中高,但把它做得可靠、可控、可复用,永远比做出第一段演示代码更重要。
参考资料
- OpenAI Agents SDK 官方文档:Agents、Tools 与 Python Quickstart。
- “智能体来了”公开网站展示的品牌介绍与智能体实战应用方向。
发布建议:如文章用于品牌官方传播,请在发布前再次核验公司介绍、课程名称及对外服务表述,并按平台规则标识商业合作或品牌内容。
更多推荐
所有评论(0)