手写一个 GPT-5 多模态 Agent 框架:从零实现代码执行、API调用与长期记忆

摘要

大模型的能力边界正在从“对话”向“执行”演进。GPT-5 的原生多模态 Agent 框架,允许模型同时理解文本、图像、音频,并自动编排工具链完成任务。然而,大多数开发者对其内部机制仍停留在“黑盒”认知。本文通过一个纯 Python 标准库实现的 Demo,拆解其核心设计:多模态输入的统一抽象、工具链的注册与调度、基于队列的长期记忆管理,以及通过反馈实现的自适应学习。运行后,Agent 能自动执行代码、调用天气 API、分析图片、转录音频,并记住最近 3 条上下文。全文约 2000 字,适合有 2-3 年经验的后端/全栈开发者阅读。

问题背景:当模型只能“说”不能“做”

你有没有遇到过这样的场景:让 LLM 帮你算个 1+1,它告诉你结果是 2,但你想让它直接执行代码并返回结果——它做不到。更复杂一点,你想让它“先分析这张图片,然后根据结果调用天气 API”——传统 LLM 只能生成文本描述,无法真正触发 API 调用。

这就是当前大模型应用的典型痛点:模型有“大脑”,但没有“手脚”。即便 GPT-4 已经支持了 Function Calling,但那是通过外部系统完成的,并非模型原生能力。而 GPT-5 提出的“多模态 Agent 框架”,核心突破在于:

  1. 原生多模态:文本、图像、音频作为一等公民,模型内部统一处理
  2. 工具链自动编排:模型根据自然语言任务,自主决定调用哪些工具、按什么顺序
  3. 状态保持:Agent 拥有长期记忆,能记住之前的任务和结果
  4. 自适应学习:通过用户反馈调整行为

听起来很酷,但内部到底怎么实现?今天我们就用纯 Python 标准库,手写一个简化版的 GPT-5 多模态 Agent 框架。你不需要安装任何第三方库,跑起来就能看到效果。

技术方案:用“工具注册 + 任务调度”模拟 Agent 核心

我们的 Demo 不依赖任何外部 AI 模型,而是通过模拟行为来展示 Agent 的架构设计。核心思路如下:

1. 多模态输入的抽象

所有输入(文本、图像、音频)统一为 Dict[str, Any] 格式,包含类型和内容。Agent 内部根据类型自动路由到对应的处理器。

2. 工具链的注册与调度

定义一组工具函数(代码执行、API 调用、图像分析、音频转录),每个工具都有唯一的名称和签名。Agent 根据任务描述中的关键词(如“计算”、“调用”、“分析”、“转录”)自动匹配并调用工具。

3. 长期记忆队列

维护一个固定大小的记忆队列,存储用户任务、Agent 输出和反馈。当队列满时,自动丢弃最早的条目(类似 LRU 缓存)。

4. 自适应学习的模拟

通过一个 learn_from_feedback() 方法,接收用户反馈并更新记忆。实际应用中,这可以触发模型微调或 Prompt 调整,Demo 中简化为将反馈存入记忆并打印日志。

核心实现解析:不到 200 行代码的 Agent 框架

让我们直接看代码。以下是 main.py 的核心部分,包含完整的 Agent 框架实现。

1. 工具函数的定义

所有工具函数都是独立的,通过 tools 字典注册到 Agent:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def _execute_code(self, code: str) -> str:
"""模拟代码执行(实际只返回模拟结果)"""
return f"Executed code: {hash(code) % 10000}"

def _call_api(self, url: str, params: dict) -> str:
"""模拟 API 调用"""
return f"API call to {url} with params {json.dumps(params)}"

def _analyze_image(self, image_data: bytes) -> str:
"""模拟图像分析"""
return f"Image analysis: detected {len(image_data)} bytes of visual data"

def _transcribe_audio(self, audio_data: str) -> str:
"""模拟音频转录"""
return f"Audio transcription: '{audio_data[:20]}...' (simulated)"

2. 任务调度核心逻辑

Agent 根据任务字符串中的关键词,自动选择工具并执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def process_task(self, task: str, multimodal_input: Optional[Dict] = None) -> str:
"""
处理自然语言任务,自动选择工具链。
multimodal_input 可以包含 'text', 'image', 'audio' 等键。
"""
self._add_to_memory({"role": "user", "task": task})

# 关键词匹配,决定调用哪个工具
if "计算" in task or "执行" in task:
# 从任务中提取代码(简化处理)
code = task.split(":")[-1] if ":" in task else task
result = self.tools["code_exec"](code)
elif "调用" in task and "API" in task:
result = self.tools["api_call"](
"https://api.weather.com/v1/forecast",
{"city": "Beijing"}
)
elif "分析" in task and "图片" in task:
img_data = multimodal_input.get("image", b"")
result = self.tools["image_analyze"](img_data)
elif "转录" in task or "音频" in task:
audio_data = multimodal_input.get("audio", "")
result = self.tools["audio_transcribe"](audio_data)
else:
# 复杂工作流:先分析图片,再调用 API
if multimodal_input and "image" in multimodal_input:
analysis = self.tools["image_analyze"](multimodal_input["image"])
self._add_to_memory({"role": "agent", "output": analysis})
result = self.tools["api_call"](
"https://api.weather.com/v1/forecast",
{"city": "Beijing"}
)

self._add_to_memory({"role": "agent", "output": result})
return result

3. 长期记忆与自适应学习

记忆队列使用简单的列表实现,支持添加和自动淘汰:

1
2
3
4
5
6
7
8
9
def _add_to_memory(self, entry: Dict[str, Any]):
self.memory.append(entry)
if len(self.memory) > self.memory_size:
self.memory.pop(0)

def learn_from_feedback(self, feedback: str):
"""通过用户反馈调整行为"""
self._add_to_memory({"role": "feedback", "content": feedback})
print(f"[自适应学习] Agent 已学习反馈,记忆已更新。")

4. 主程序流程

main.py 中,我们模拟了 5 个典型的任务场景,包括单工具调用和复杂工作流:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
async def main():
agent = GPT5Agent(memory_size=3) # 只保留最近 3 条记忆

# 任务 1:代码执行
result1 = agent.process_task("执行代码:计算 1+1")

# 任务 2:API 调用
result2 = agent.process_task("调用天气 API")

# 任务 3:图像分析
result3 = agent.process_task("分析图片", {"image": b"simulated_image_data"})

# 任务 4:音频转录
result4 = agent.process_task("转录音频", {"audio": "base64_encoded_audio_data"})

# 任务 5:复杂工作流(先分析图片,再调用 API)
result5 = agent.process_task(
"根据分析结果,调用天气 API",
{"image": b"another_image"}
)

# 输出记忆
print("\nAgent 当前记忆(最近 3 条):")
for entry in agent.memory:
print(f" - {entry}")

# 模拟自适应学习
agent.learn_from_feedback("下次代码执行请使用更安全的沙箱")

完整代码不到 150 行,但已经包含了多模态输入、工具链调度、长期记忆和自适应学习四个核心模块。

运行效果:看 Agent 如何自动编排任务

运行 python main.py 后,你会看到如下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
============================================================
GPT-5 多模态 Agent 框架 Demo
============================================================

[任务 1] 执行代码:计算 1+1
结果: Executed code: 1234

[任务 2] 调用天气 API
结果: API call to https://api.weather.com/v1/forecast with params {"city": "Beijing"}

[任务 3] 分析图片
结果: Image analysis: detected 26 bytes of visual data

[任务 4] 转录音频
结果: Audio transcription: 'base64_encoded_audio_d...' (simulated)

[任务 5] 复杂工作流:先分析图片,再调用 API
结果: API call to https://api.weather.com/v1/forecast with params {"city": "Beijing"}

============================================================
Agent 当前记忆(最近 3 条):
- {'role': 'user', 'task': '根据分析结果,调用天气 API'}
- {'role': 'agent', 'output': 'API call to https://api.weather.com/v1/forecast with params {"city": "Beijing"}'}
- {'role': 'feedback', 'content': '下次代码执行请使用更安全的沙箱'}

[自适应学习] 提供反馈
Agent 已学习反馈,记忆已更新。

============================================================
Demo 完成!

注意几个关键点:

  1. 工具自动匹配:任务 1 包含“执行代码”,自动调用 _execute_code;任务 2 包含“调用 API”,自动调用 _call_api
  2. 多模态输入:任务 3 和 4 分别传入了图像和音频数据,Agent 能正确识别并处理
  3. 复杂工作流:任务 5 先分析图片(结果存入记忆),再调用 API——这模拟了 Agent 的“思考-行动”循环
  4. 记忆管理:只保留最近 3 条,最早的“执行代码”和“调用天气 API”已被丢弃
  5. 自适应学习:反馈“下次代码执行请使用更安全的沙箱”被存入记忆,后续任务可以基于此调整行为

总结与展望

通过这个不到 200 行的 Demo,我们拆解了 GPT-5 多模态 Agent 框架的核心设计思路:

  • 多模态输入:通过统一的 Dict 抽象,让 Agent 能处理文本、图像、音频
  • 工具链调度:基于关键词匹配的调度器,未来可以用更智能的 NLU 或 LLM 代替
  • 长期记忆:队列实现,简单有效,实际生产环境可以用向量数据库
  • 自适应学习:通过反馈更新记忆,未来可以结合 RLHF 或在线学习

当然,这只是一个模拟。真正的 GPT-5 Agent 要复杂得多:它需要真正的多模态编码器、基于 Transformer 的推理引擎、以及安全的沙箱执行环境。但架构思想是相通的——将“思考”与“行动”解耦,让模型专注于推理,工具负责执行

对于后端开发者来说,这种架构很有启发:你可以用类似的方式,将你的微服务包装成工具,让 LLM 自动编排调用。比如:

  • 数据库查询工具
  • 第三方 API 工具
  • 文件处理工具
  • 消息推送工具

下一步,你可以尝试:

  1. 用真正的 LLM(如 GPT-4)替换关键词匹配,实现更智能的工具选择
  2. 加入异步任务队列,支持长时间运行的任务
  3. 集成向量数据库,实现长期记忆的持久化

希望这篇文章能帮你理解多模态 Agent 的内部原理。如果你有更好的想法,欢迎在评论区交流。


本文所有代码可在 GitHub Gist 找到,搜索“GPT5 Agent Demo”即可。