上一期讲了代码重构,这一期讲另一个开发者日常痛点:Bug 修复。
Bug 修复是 Grok Build 最实用的场景之一——你不需要花半小时读错误日志,只需要把日志扔给 Agent,让它帮你定位问题。
修 Bug 有两个最难的部分:
Grok Build 的优势在于:它可以同时读取多个文件,理解完整的调用链,然后告诉你问题的根源在哪里。
假设你有一个 Flask API,运行时出现 500 错误,日志如下:
ERROR in app.py:34
Traceback (most recent call last):
File "app.py", line 34, in get_user
return jsonify(user_service.get_user_by_id(user_id))
File "/app/services/user_service.py", line 28, in get_user_by_id
return db.query(User).filter_by(id=user_id).first()
AttributeError: 'NoneType' object has no attribute 'query'
修复这个 500 错误:
错误日志:
ERROR in app.py:34
Traceback (most recent call last):
File "app.py", line 34, in get_user
return jsonify(user_service.get_user_by_id(user_id))
File "/app/services/user_service.py", line 28, in get_user_by_id
return db.query(User).filter_by(id=user_id).first()
AttributeError: 'NoneType' object has no attribute 'query'
相关文件:
- app.py
- app/services/user_service.py
- app/models/user.py
Agent 识别出这是一个 AttributeError——db 变量是 None。
Agent 读取 user_service.py,找到 db 的初始化代码:
from app import db
class UserService:
def get_user_by_id(self, user_id):
return db.query(User).filter_by(id=user_id).first()
问题可能是:db 在 import 时还没有初始化(Flask 应用上下文问题)。
Agent 识别出两个可能的根因:
db 对象在 app/__init__.py 中没有正确绑定Agent 会修改 user_service.py,使用 Flask 的 current_app 来获取 db:
from flask import current_app
class UserService:
def get_user_by_id(self, user_id):
db = current_app.extensions['sqlalchemy'].db
return db.session.query(User).filter_by(id=user_id).first()
或者更简洁的方式:
from app import db
class UserService:
def get_user_by_id(self, user_id):
with db.session.begin():
return db.session.query(User).filter_by(id=user_id).first()
Agent 会运行测试或实际请求来验证修复是否成功。
有时候一个 Bug 的根源不在报错的地方,而在别处。比如:
ERROR: TypeError: unsupported operand type(s) for +: 'int' and 'str'
File "calculate.py", line 45, in total_price
return sum(items) # 看起来没问题
问题可能不在 calculate.py,而在上游:某个地方把数字转成了字符串。
让 Grok Build 追踪:
追踪 TypeError 的根源:
错误:TypeError: unsupported operand type(s) for +: 'int' and 'str'
位置:calculate.py:45 in total_price
请分析整个数据流,找到把数字变成字符串的地方。
Agent 会向上追溯调用链,找到具体是哪个函数在哪个位置把类型弄混了。
下一期讲 Grok Build 的团队协作场景:如何用 Grok Build 做 Code Review,以及如何在团队中推广 AI 编程工具。
Grok Build 实战指南系列 ④ 待续,共七期。
评论区