首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Agent开发:从“聊天”到“动手执行”的进化

Agent开发:从“聊天”到“动手执行”的进化

原创
作者头像
闪学it点com
发布于 2026-09-08 13:10:57
发布于 2026-09-08 13:10:57
5340
举报

如果说大模型是那颗聪明但“四肢不勤”的大脑,那么AI Agent(智能体)就是给它装上了手脚和工具——让AI不仅能“想”,更能“做”。

传统大模型只能被动回答你提出的问题,而Agent可以主动思考:“为了实现用户的目标,我需要调用什么工具?” 它能够搜索实时天气、查询数据库、发送邮件,甚至编写并运行代码来解决问题。

这篇文章,我将带你拆解Agent的核心运行机制,并用不到15行核心代码,从零手写一个能调用工具的简易Agent。


一、Agent的核心“三件套”与ReAct框架

一个标准的Agent必须包含三个组件:

  1. 规划(Planning):将复杂任务拆解成子目标(比如“预订餐厅”拆解为“搜索电话→拨号→确认时间”)。
  2. 工具(Tools):连接外部世界的“手脚”,如搜索引擎、计算器、API接口。
  3. 记忆(Memory):记录思考轨迹和工具返回的结果,以便进行下一步推理。

当前最主流的Agent工作范式叫 ReAct(Reason + Act) ,即推理与行动交替进行。它不是一个死板的流程,而是一个循环:

思考(Thought) → 行动(Action) → 观察(Observation) → 思考(Thought) → 行动(Action) → ... → 完成(Final Answer)


二、极简代码实战:15行实现一个“天气查询Agent”

下面的代码使用OpenAI API(兼容DeepSeek/通义千问)和内置的函数调用(Function Calling)能力。这是业界最稳定、最标准的Agent实现方式,无需引入繁杂的三方框架。

代码语言:javascript
复制
import openai, json

client = openai.OpenAI(api_key="你的密钥")

# 1. 定义一个工具(模拟查天气)
def query_weather(city: str) -> str:
    return f"🌡️ {city}当前晴转多云,气温24℃,湿度65%,空气质量良好。"

# 2. 准备Agent的大脑(LLM)和工具箱
tools = [{"type": "function", "function": {"name": "query_weather", "parameters": {"type": "object", "properties": {"city": {"type": "string"}}}}}]
messages = [{"role": "user", "content": "明天香港会下雨吗?我需要决定是否带伞。"}]

# 3. Agent自主循环(核心逻辑仅10行)
while True:
    resp = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools)
    msg = resp.choices[0].message
    messages.append(msg)  # 记下AI的思考

    if not msg.tool_calls:  # AI认为任务已完成,无需再调用工具
        print("🤖 最终回答:", msg.content)
        break

    # 执行AI指定的工具
    for tool_call in msg.tool_calls:
        args = json.loads(tool_call.function.arguments)
        result = query_weather(args["city"])  # 这里执行真实工具
        messages.append({"role": "tool", "tool_call_id": tool_call.id, "content": result})
        print(f"🔧 正在查询: {args['city']} -> {result}")

运行逻辑拆解:

  • 第1轮:Agent发现需要查天气,立即返回tool_calls参数。
  • 本地代码执行工具,拿回真实数据。
  • 第2轮:Agent拿到天气数据,发现“晴转多云”意味着明天下雨概率低,于是生成最终人性化回复给用户。

三、Agent开发中最棘手的三大“暗坑”

当你开始编写更复杂的Agent时,以下问题几乎必然遇到:

  1. 陷入死循环(Infinite Loop):Agent反复调用同一个工具,始终无法得出结论。对策:在系统提示词中加入“最多尝试3次,如果还无法解决请直接告诉用户无法完成”。
  2. 工具参数解析错误:大模型输出的JSON不符合格式,导致代码崩溃。对策:增加try-except捕捉JSON解析异常,并给模型返回“参数格式错误,请重新输出有效的JSON”。
  3. 上下文超长(Context Overflow):每次循环都要把历史记录全部塞给大模型,几轮对话后Token就爆了。对策:只保留最近的3轮“思考-行动”记录,旧记录做压缩摘要。

四、代码进阶:无需API密钥的本地Agent(Ollama版)

如果你不想依赖云端API,完全可以在本地运行开源Agent。下面的代码使用ollama库和纯文本解析(因为本地模型不一定支持Function Calling)。

代码语言:javascript
复制
import ollama, re

def search_web(query): return f"搜索结果显示:{query}的相关新闻暂无最新更新。"

prompt = """你是Agent,你拥有工具: search_web(query)。用户问: 今天有什么大新闻?
请严格按格式输出:
行动: search_web("科技新闻")
"""
response = ollama.chat(model='qwen2.5:7b', messages=[{"role": "user", "content": prompt}])
action_match = re.search(r'行动: (\w+)\((.*?)\)', response['message']['content'])
if action_match:
    tool_name, arg = action_match.groups()
    result = search_web(eval(arg))  # 安全起见,实际应用请用ast.literal_eval
    print(f"观察结果: {result}")

尽管这种基于正则解析的方式不如官方函数调用稳定,但它让你直观地理解了Agent最底层的“字符串反应堆”原理。


五、写在最后:Agent是通往通用人工智能(AGI)的关键阶梯

如果说预训练大模型是“读过万卷书”,那么Agent开发就是要让AI“行万里路”。

未来的软件形态,将是数以万计的Agent协作——一个负责写代码、一个负责测试、一个负责部署,它们通过标准协议(如MCP)互相通信。你现在所写的这十几行Agent循环代码,其实就是未来“数字员工”的操作系统内核。

💡 开发者建议:不要迷信复杂的Agent框架(如AutoGen或LangGraph),新手入门请先用原生API手写ReAct循环。只有当你能精准控制每一次“思考-行动”的流转,你才真正掌握了Agent开发的灵魂。

现在,复制上面那段十几行的代码,换个真实的API密钥(或换成本地Ollama),试着自己命令AI去查询明天的天气、计算房贷月供,或者搜索最新的科技资讯吧。你会发现,AI的世界大门,正在从“聊天室”通往“现实世界”。🌍

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、Agent的核心“三件套”与ReAct框架
  • 二、极简代码实战:15行实现一个“天气查询Agent”
  • 三、Agent开发中最棘手的三大“暗坑”
  • 四、代码进阶:无需API密钥的本地Agent(Ollama版)
  • 五、写在最后:Agent是通往通用人工智能(AGI)的关键阶梯
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档