从零搭建极简开发 Agent:不用复杂框架,100 行 Python 代码自动查 Bug + 修复
前言
最近 AI Agent 话题持续火热,不少同学看了各种 Demo,觉得 Agent 高大上,但自己动手时就卡住: 要么框架太重,配置一堆依赖跑不起来; 要么只有演示效果,没法真正作用于本地代码文件; 写进简历又怕只是套壳调用大模型,面试一问原理就露馅。
其实开发类 Agent 核心逻辑就三件事:感知文件信息 → 调用大模型推理 → 执行输出结果。 不需要重型 Agent 框架,纯原生 Python 就能实现。本文我们手写一个极简代码修复 Agent,带你理解 Agent 最核心的循环思维。
本文项目定位:轻量 Demo,用来学习 Agent 的思考闭环,可扩展对接单元测试、多文件读取,适合作为面试 AI 项目。
一、这个 Agent 能做什么
✅ 读取本地.py源码文件 ✅ 自动识别代码中的逻辑 bug、异常、性能隐患 ✅ 输出问题说明 + 修复后的完整代码 ✅ 简单记忆上下文,一次反馈多个问题 ❌ 不做复杂多文件工程编排(我们简化,方便理解原理,后续可扩展)
项目信息表
表格
| 项目项 | 说明 |
|---|---|
| 项目名称 | 极简代码修复 Agent |
| 代码量 | ~100 行 |
| 依赖 | openai(可替换为通义千问 / 豆包 API) |
| 核心能力 | 代码读取 → Bug 分析 → 代码修复 |
| 适合场景 | 学习 Agent 循环、简历项目、批量简易代码审查 |
| 扩展方向 | 增加单元测试执行、多文件遍历、自动保存修复文件 |
二、Agent 核心原理(重点,面试必讲)
Agent 的经典循环:观察 (Observe) → 思考 (Think) → 行动 (Act)
- Observe 观察:读取本地代码文件,拿到原始代码(获取环境信息)
- Think 思考:把代码 + 指令发给大模型,让模型分析 Bug、构思修复方案
- Act 行动:拿到模型返回结果,解析修复代码,输出保存
复杂 Agent 会循环多次(Think→Act→Observe 反复迭代),我们 Demo 简化一轮,降低理解难度。
三、环境准备
安装依赖包
pip install openai
说明:你可以替换为国产大模型 SDK,逻辑完全不变。
四、完整源码(可直接复制运行)
# 极简代码修复Agent
import openai
# 配置API KEY和模型
openai.api_key = "你的API_KEY"
MODEL_NAME = "gpt-3.5-turbo"
class CodeFixAgent:
def __init__(self, file_path:str):
self.file_path = file_path
self.raw_code = ""
def observe(self):
# Observe:读取本地代码文件,获取环境信息
with open(self.file_path,"r",encoding="utf-8") as f:
self.raw_code = f.read()
print(f"✅ Agent观察完成,读取文件:{self.file_path}")
def think(self):
# Think:构造提示词,交给大模型分析bug并修复
prompt = f"""
你是代码审查Agent,请完成下面任务:
1. 找出下面Python代码里所有Bug、逻辑错误、边界问题;
2. 逐条说明问题原因;
3. 输出完整修复后的代码。
原始代码:
{self.raw_code}
"""
resp = openai.ChatCompletion.create(
model=MODEL_NAME,
messages=[{"role":"user","content":prompt}]
)
result = resp["choices"][0]["message"]["content"]
return result
def act(self, output_path="fixed_code.py"):
# Act:把思考结果输出保存文件
analysis_result = self.think()
with open(output_path,"w",encoding="utf-8") as f:
f.write(analysis_result)
print(f"✅ Agent执行完成,结果保存至 {output_path}")
return analysis_result
def run(self):
# Agent完整执行链路
self.observe()
return self.act()
if __name__ == "__main__":
# 使用示例:指定待检测代码文件
agent = CodeFixAgent(file_path="test_bug.py")
res = agent.run()
print("\n===== Agent输出结果 =====")
print(res)
测试用代码 test_bug.py(带 bug,用来测试 Agent)
# 有bug的测试代码
def calc_div(a,b):
return a / b
if __name__ == "__main__":
print(calc_div(10,0))
这个代码存在除零异常,Agent 运行后会识别并给出修复方案。
五、运行效果演示
执行脚本后,Agent 会自动:
- 读取 test_bug.py
- 识别除零异常 Bug,说明风险
- 输出增加异常捕获的修复代码,写入 fixed_code.py
示例模型返回结果:
【问题分析】
代码在b=0的时候会触发ZeroDivisionError除零异常,没有做参数校验。
【修复后代码】
def calc_div(a,b):
if b == 0:
raise ValueError("除数不能为0")
return a / b
if __name__ == "__main__":
try:
print(calc_div(10,0))
except Exception as e:
print(f"报错:{e}")
六、进阶扩展思路(写进简历加分项)
基础版只是单次 Agent 执行,你可以自行扩展迭代循环,实现更强大的能力:
- 增加循环 Agent:修复代码后自动执行单元测试,如果报错,再次把报错信息喂给大模型,二次修复,形成多轮 Agent 闭环;
- 增加文件遍历:扫描整个项目目录下全部 py 文件批量审查;
- 工具调用:接入 subprocess 执行命令,让 Agent 可以运行
pytest测试; - 本地大模型替换:对接 Ollama,完全离线运行,不需要外网 API。
七、实战踩坑 ⚠️
- 提示词质量决定 Agent 上限,不要只简单写 “帮我改 bug”,需要明确输出格式;
- 大模型会幻觉:Agent 给出的修复代码必须人工复核,不能直接上线;
- 上下文限制:大模型有 token 上限,超大项目不能一次性全部喂入,需要做代码分片;
- 不要过度封装:面试优先讲清楚 Observe-Thinking-Act 的基础循环,而不是堆复杂框架。
八、总结
很多人误以为 Agent 必须是复杂多智能体项目。Agent 本质就是让 AI 具备感知外部信息 + 分步骤行动的能力。
这个极简开发 Agent,代码量小,原理清晰。你可以直接放到个人作品集,面试的时候,面试官问 Agent 项目,你就从 Observe-Think-Act 这个循环讲起,再讲扩展思路,非常加分。
如果你想继续深挖,下一步可以给 Agent 增加工具调用能力,让它自动执行 pytest 单元测试,实现多轮迭代修复。
💬互动提问
你尝试搭建 Agent 的时候,遇到最大的问题是模型幻觉,还是工具调用调试?评论区聊聊。
更多推荐

所有评论(0)