前言

最近 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)

  1. Observe 观察:读取本地代码文件,拿到原始代码(获取环境信息)
  2. Think 思考:把代码 + 指令发给大模型,让模型分析 Bug、构思修复方案
  3. 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 会自动:

  1. 读取 test_bug.py
  2. 识别除零异常 Bug,说明风险
  3. 输出增加异常捕获的修复代码,写入 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 执行,你可以自行扩展迭代循环,实现更强大的能力:

  1. 增加循环 Agent:修复代码后自动执行单元测试,如果报错,再次把报错信息喂给大模型,二次修复,形成多轮 Agent 闭环;
  2. 增加文件遍历:扫描整个项目目录下全部 py 文件批量审查;
  3. 工具调用:接入 subprocess 执行命令,让 Agent 可以运行pytest测试;
  4. 本地大模型替换:对接 Ollama,完全离线运行,不需要外网 API。

七、实战踩坑 ⚠️

  1. 提示词质量决定 Agent 上限,不要只简单写 “帮我改 bug”,需要明确输出格式;
  2. 大模型会幻觉:Agent 给出的修复代码必须人工复核,不能直接上线;
  3. 上下文限制:大模型有 token 上限,超大项目不能一次性全部喂入,需要做代码分片;
  4. 不要过度封装:面试优先讲清楚 Observe-Thinking-Act 的基础循环,而不是堆复杂框架。

八、总结

很多人误以为 Agent 必须是复杂多智能体项目。Agent 本质就是让 AI 具备感知外部信息 + 分步骤行动的能力。

这个极简开发 Agent,代码量小,原理清晰。你可以直接放到个人作品集,面试的时候,面试官问 Agent 项目,你就从 Observe-Think-Act 这个循环讲起,再讲扩展思路,非常加分。

如果你想继续深挖,下一步可以给 Agent 增加工具调用能力,让它自动执行 pytest 单元测试,实现多轮迭代修复。

💬互动提问

你尝试搭建 Agent 的时候,遇到最大的问题是模型幻觉,还是工具调用调试?评论区聊聊。

Logo

更多推荐