




最少的代码量——不到 50 行就能跑起来 最直观的理解——你写的每一行代码都对应 Agent 的一个核心概念 最易于迭代——加一个工具就是加一个函数的事



接收用户指令 LLM 决定:直接回答,还是调用工具 如果要调用工具→执行工具→把结果送回给 LLM LLM 根据工具结果生成最终回复


import jsonfrom openai import OpenAIclient = OpenAI() #确保已设置OPENAI_API_KEY#第一步:定义工具(带结构化返回)def get_weather(city: str) -> dict:"""查天气(模拟)"""data = {"北京": "晴, 22度","上海": "多云, 25度","深圳": "阵雨, 28度","杭州": "阴, 23度"}if city in data:return {"status": "ok", "data": data[city]}return {"status": "error", "error_message": f"没有{city}的天气数据"}def set_reminder(time: str, thing: str) -> dict:"""设提醒"""if not time or not thing:return {"status": "error", "error_message": "时间和事项不能为空"}return {"status": "ok", "data": f"已设置提醒:{time}提醒你{thing}"}#工具声明(省略,同上版)tools = [{"type": "function","function": {"name": "get_weather","description": "查某个城市的天气","parameters": {"type": "object","properties": {"city": {"type": "string", "description": "城市名"}},"required": ["city"]}}},{"type": "function","function": {"name": "set_reminder","description": "设置提醒事项","parameters": {"type": "object","properties": {"time": {"type": "string"},"thing": {"type": "string"}},"required": ["time", "thing"]}}}]available_functions = {"get_weather": get_weather,"set_reminder": set_reminder,}#第二步:Agent运行循环messages = [{"role": "user","content": "北京明天天气怎么样?顺便帮我设个明天早上8点的闹钟提醒我带伞"}]try:response = client.chat.completions.create(model="gpt-4o",messages=messages,tools=tools)while response.choices[0].message.tool_calls:msg = response.choices[0].messagemessages.append(msg)for tc in msg.tool_calls:#参数校验:确认工具名是否在可用列表中if tc.function.name not in available_functions:continuefunc = available_functions[tc.function.name]try:args = json.loads(tc.function.arguments)result = func(**args)except json.JSONDecodeError:result = {"status": "error", "error_message": "参数解析失败"}messages.append({"role": "tool","tool_call_id": tc.id,"content": json.dumps(result, ensure_ascii=False)})response = client.chat.completions.create(model="gpt-4o",messages=messages,tools=tools)print(response.choices[0].message.content)except Exception as e:print(f"Agent运行出错: {e}")


name:工具名字,LLM 通过名字来调用
description:工具描述,LLM 根据这个判断什么时候该用这个工具
parameters:参数描述,告诉 LLM 调用时需要传什么参数
把消息发给 LLM 检查 LLM 是否想调用工具 如果是 → 执行工具 → 把结果放回消息列表 → 回到步骤 1 如果不是 → LLM 的回复就是最终答案


加更多工具搜索、文件读写、数据库查询、发送邮件——每加一个函数,Agent 就多一项能力。你的 Agent 的能力边界由你提供的工具决定。 加系统提示词在 messages 列表开头加一条 system message,设定 Agent 的角色和行为规范:`"你是一个个人助手。回答要简洁,不确定就问用户,不要编造数据。"` 加记忆持久化把 messa
错误处理真实环境中工具可能失败——网络超时、API 报错、参数非法。好的 Agent 会在工具失败时自动重试或向用户澄清。换个框架





第一篇:Agent 是什么——目标和工具的认知框架 第二篇:怎么让 Agent 干活——动手实操和指令公式 第三篇:哪些事不能交给 Agent——边界意识和安全策略 第四篇:怎么给 Agent 下指令——Prompt 工程的核心技术 第五篇:自己写一个 Agent——不到 50 行代码的完整实现
往期推荐
夜雨聆风