前一段时间面试的时候被问得最多的一个问题就是怎么去规范aicoding过程中的代码。之前我的想法很简单,设置一个rules,写一个.md文档,然后交付的时候通过diff来review。很显然,这些方法没有让面试官满意,这几天看到了OpenAI发的一个关于Harness Engineering 的一篇文档我想应该可以去规范Ai代码。

 

这篇文章里面的内容个人理解应该是更多的倾向于落地型的Agent实际项目,但是不妨碍平时的个人项目可以借鉴一下

 

1、Constraint Harness(约束层)

这里可以简单的理解为System prompt / .cursorrules / CLAUDE.md 里定义代码风格、禁止用的 pattern,也就是.md文档。尽可能详细的写出规定,以及所期望的风格,如果在团队工作中还会有团队制定好的使用规范,这个使用规范也属于约束层的部分。但是如果只写文档是不够的,文章中提到了“仅靠文档本身,是没法保持完全由智能体生成的代码库的连贯性的。”,ai不会像人一样去理解框架,更多的是进行查找。

 

2、Validation Harness(验证层)

∙    Linter / formatter(ESLint, Prettier)作为硬门槛

 ∙    Type checker(TypeScript strict mode)

∙    Pre-commit hooks 自动拦截不合规代码

这里一个例子:

eslintrc.json:

{
  "rules": {
    "@typescript-eslint/no-explicit-any": "error",  // 禁止用 any
    "no-var": "error"  // 禁止用 var
  }
}

意思是:告诉 ESLint 这两条是硬规定,违反了就报错。

package.json :

"lint-staged": {
  "*.tsx": ["eslint --fix", "tsc --noEmit"]
}

意思是:每次你 git commit 的时候,自动对所有 .tsx 文件跑 ESLint 检查和 TypeScript 类型检查,不通过就不让你提交。

 

3、Test Harness(测试层)

让 AI 生成代码的同时必须附带测试,这个在写prompt 的时候可以带上一句。

 

4、CI Harness

yaml

# .github/workflows/ci.yml
- name: Lint
  run: npm run lint

- name: Type Check  
  run: tsc --noEmit

- name: Test
  run: npm test -- --coverage --passWithNoTests

 

最后,根据文章中提到的,对于ai的约束尽量少采用微观管理,即告诉ai我只要结果,过程怎样你随便,可以更有效的进行检测;对项目进行分层,以便ai更好地理解;其实还可以用一个模型写代码,用另一个模型去进行检测,这也是一种方法

 

 

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐