AI Agent 编程思维:像资深开发那样避免写重复代码

AI Agent 编程思维:像资深开发那样避免写重复代码
在构建 AI Agent 时,我发现最显著的技术债往往不是运行时的 bug,而是被 AI 生成的冗余逻辑和重复代码。我逐渐意识到,要让 Agent 表现得像个“懒惰”的资深开发,核心在于在生成代码前建立“抽象优先”的思维路径,并强制其通过调用现有抽象而非自行拼凑来实现目标。这比单纯优化任务准确率更能从根本上提升 Agent 的输出质量与可维护性。
识别并消除“生成式冗余”
我观察到一个现象:当为 Agent 编写处理复杂业务逻辑的工具函数时,如果任务描述过于宽泛,模型往往会生成看似能工作但包含大量重复代码的长函数。例如,在处理数据验证和转换时,我之前的版本里每次都要重复编写校验逻辑,这违背了“最懒的资深开发”原则——因为代码越多,维护成本就越高。

要解决这个问题,我在提示词中加入了明确的约束,要求模型在使用现有抽象前先进行审查。通过定义清晰的最小重构步骤,我确保了团队内部的代码标准能被 Agent 正确理解:
- 识别重复模式:首先让模型分析是否存在多次出现的相似逻辑块。
- 提取公共抽象:将重复逻辑封装为独立的工具函数或类方法。
- 替换并验证:用新抽象替换原有重复代码,并确保测试用例通过。
这不仅减少了代码量,还降低了出错概率,让逻辑更加集中和清晰。
利用现有抽象层,而非凭空创造
“最好的代码是你从未写过的代码。”这句话在 AI 编程中体现得淋漓尽致。当设计 Agent 的工具(Tools)或函数库时,我倾向于设计高内聚、低耦合的基础单元。例如,如果已经有一个处理用户输入标准化的工具,我就强制要求 Agent 在此基础之上构建,而不是让它在每次对话中重新编写一套标准化的逻辑。
通过定义清晰的“基础操作库”,Agent 会自然地倾向于组合这些工具,而不是从零开始生成重复的逻辑。以下是一个简单的 Python 代码示例,展示了如何为 Agent 定义一个基础的验证工具层:
# 基础验证工具层
import re
class ValidationTool:
def __init__(self):
self.patterns = {
'email': re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'),
'phone': re.compile(r'^\+?[1-9]\d{1,14}$')
}
def validate_email(self, email: str) -> bool:
return bool(self.patterns['email'].match(email))
def validate_phone(self, phone: str) -> bool:
return bool(self.patterns['phone'].match(phone))
# Agent 应调用此工具,而非每次生成新逻辑
validator = ValidationTool()
将 DRY 原则融入提示词工程
在实际操作中,我调整了提示词模板,加入了一个关键指令:在生成任何代码之前,先评估是否有现成的函数或工具可以实现相同的功能。如果存在,必须调用它们;只有当确实没有现成方案时,才允许新建代码,并需说明原因。
这种“先问现有,再求新增”的思维模式,极大地减少了 Agent 输出中的重复代码。具体来说,我在系统提示中加入了以下约束列表:
- 优先复用:任何功能需求,第一步必须是查询现有工具库。
- 禁止重复:不得生成与现有工具功能重复的新函数。
- 注明差异:若必须新建代码,需在注释中明确说明与现有工具的差异点及必要性。
通过上述实践,我发现 AI Agent 不仅能生成更优质的代码,还能在长期维护中显著降低复杂度,真正成为我们团队中那位“最懒惰”却最高效的资深开发伙伴。这种工程化思维不仅适用于 Python,同样适用于其他主流编程语言,是提升 AI 辅助开发效率的关键所在。
本文首发于 AI Agent 编程思维:像资深开发那样避免写重复代码 — https://lyxq.com.cn/zh/blog/ai-agent-dry-principles
转载或引用请注明出处,商业使用请联系作者获得授权。