
如果说大模型是那颗聪明但“四肢不勤”的大脑,那么AI Agent(智能体)就是给它装上了手脚和工具——让AI不仅能“想”,更能“做”。
传统大模型只能被动回答你提出的问题,而Agent可以主动思考:“为了实现用户的目标,我需要调用什么工具?” 它能够搜索实时天气、查询数据库、发送邮件,甚至编写并运行代码来解决问题。
这篇文章,我将带你拆解Agent的核心运行机制,并用不到15行核心代码,从零手写一个能调用工具的简易Agent。
一个标准的Agent必须包含三个组件:
当前最主流的Agent工作范式叫 ReAct(Reason + Act) ,即推理与行动交替进行。它不是一个死板的流程,而是一个循环:
思考(Thought) → 行动(Action) → 观察(Observation) → 思考(Thought) → 行动(Action) → ... → 完成(Final Answer)
下面的代码使用OpenAI API(兼容DeepSeek/通义千问)和内置的函数调用(Function Calling)能力。这是业界最稳定、最标准的Agent实现方式,无需引入繁杂的三方框架。
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}")运行逻辑拆解:
tool_calls参数。当你开始编写更复杂的Agent时,以下问题几乎必然遇到:
try-except捕捉JSON解析异常,并给模型返回“参数格式错误,请重新输出有效的JSON”。如果你不想依赖云端API,完全可以在本地运行开源Agent。下面的代码使用ollama库和纯文本解析(因为本地模型不一定支持Function Calling)。
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开发就是要让AI“行万里路”。
未来的软件形态,将是数以万计的Agent协作——一个负责写代码、一个负责测试、一个负责部署,它们通过标准协议(如MCP)互相通信。你现在所写的这十几行Agent循环代码,其实就是未来“数字员工”的操作系统内核。
💡 开发者建议:不要迷信复杂的Agent框架(如AutoGen或LangGraph),新手入门请先用原生API手写ReAct循环。只有当你能精准控制每一次“思考-行动”的流转,你才真正掌握了Agent开发的灵魂。
现在,复制上面那段十几行的代码,换个真实的API密钥(或换成本地Ollama),试着自己命令AI去查询明天的天气、计算房贷月供,或者搜索最新的科技资讯吧。你会发现,AI的世界大门,正在从“聊天室”通往“现实世界”。🌍
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。