大数跨境

我手搓了一个代码智能体,七百行,不装Node.js

我手搓了一个代码智能体,七百行,不装Node.js AI驱动数字化转型
2026-07-31
3
导读:当所有人都在追逐更庞大的Agent框架时,我选了一条相反的路。我是团队技术牵头人,手底下有个小型算法团队...
         
当所有人都在追逐更庞大的Agent框架时,我选了一条相反的路。
我是团队技术牵头人,手底下有个小型算法团队。每天的工作夹杂着几件事:看团队交上来的代码、测试各种开源工具的效果、写方案配代码片段、偶尔自己动手修bug。
这个位置有点尴尬。
全职程序员觉得你"不写代码",纯管理者觉得你"还在管技术"。但事实是:我需要处理大量代码相关的工作,但方式和程序员完全不同。
程序员每天产出几千行代码,做大规模重构,管CI/CD流水线。我每天看代码比写代码多,测试的工具比开发的模块多,出的方案比提交的commit多。
市面上所有代码智能体,OpenAI Codex、Claude Code、OpenCode,都是为第一种人设计的。它们假设你坐在一个项目里,有完整的git历史,要改一个几万行的代码库。安装它们就需要Node.js、npm、OAuth认证、git仓库。在国内网络环境下,光是走通安装流程就够喝一壶。
我不是它们的用户,我需要的是另外一种东西。
01
六千星的开源启发

几个月前,我在GitHub上翻到一个项目叫Atomic Agents,比利时的软件工程师Kenny Vaneetvelde做的,六千多颗星,MIT许可。它的核心理念很简单:用搭乐高的方式构建AI应用,每个组件只做一件事,做精,然后自由组合。
这个思路打动了我。不是因为它多先进,而是因为它承认一个事实:大多数人的AI需求不是造一个万能Agent,而是把AI能力精确地嵌入到自己的工作流里。
Atomic Agents的每个组件都是单一职责的。一个Agent负责生成,一个Tool负责搜索,一个Context Provider负责提供背景。你像搭乐高一样把它们拼起来。它基于Instructor和Pydantic构建,输入输出都有明确的Schema定义,行为可预测。
我需要的不是一个全能的编码Agent,而是一个能理解我的工作方式、能融入我现有工具链的代码助手。安装不能有摩擦,不是npm install,是import就能用。网络不能挑,国内能跑,翻不翻墙都行。它得知道我的历史,不是每次冷启动。出了问题我能追,不是模型说好就好、说不好就不好。
于是,在前几天我的原笔记本SSD出问题,软件体系性坍塌后,我决定基于Atomic Agents"单一职责、可组合、可预测"的思路,手搓一个轻量级版本,我称它为codeAgent。单文件,七百多行,零外部依赖。它不打算替代Codex,而是服务那些跟我一样不是全职程序员但需要处理代码的人。

02
工具箱里的一把扳手

CodeAgent不是一个独立的Agent。它是我现有的AI操作系统里的一个模块。
这个架构有很多人问过:为什么不让它独立运行?答案很简单,因为代码工作从来不是孤立的。我收到一段代码,可能要先查一下知识库里有没有类似的项目经验,然后生成测试跑一遍,最后把结果写入工作日志。如果CodeAgent是个独立的黑盒,这些上下文就全断了。
所以CodeAgent的定位是:执行引擎的代码辅助模块。它不是主角,它是工具箱里的一把扳手。
两行import,没有安装过程,没有环境配置,这就是我想要的摩擦系数。
03
五个方法

CodeAgent的能力分布在五个方法里,每个方法对应一个代码工作环节。
think,先想清楚再动手
接受一个自然语言需求,输出结构化的方案设计。这个方法的灵感来自Andrej Karpathy提出的原则:Think Before Coding。后来Forrest Chang等人把这个原则做成了CLAUDE.md配置,在GitHub上获得了超过19万颗星。
design = agent.think("实现一个从PDF提取表格的函数")返回:`{"plan": "...", "assumptions": [...], "filesneeded": [...], "simplestapproach": "..."}`
它调用智谱的GLM模型,国内API直连,不需要代理。temperature设0.2,确保输出是可预测的JSON。如果调用失败,它返回一个合理默认值而不是抛异常,这在自动化流程里很重要。GLM-5.2是当前最新版本,支持1M无损上下文。
implement,生成代码但不盲目迭代
这是核心方法。它做三件事:先检索知识库获取相关上下文,再调模型生成代码,然后自动审查打分。
result = agent.implement("解析nginx日志的函数", loop=True)返回完整代码加审查评分加迭代版本历史
loop参数控制是否启用迭代优化。每次迭代生成代码后自动审查,如果连续两轮评分没有提升就提前终止,返回最高分版本。每一轮的快照都保留在versions数组里,你可以回溯。
背后的system prompt嵌入了Ponytail阶梯,这是我从DietrichGebert的Ponytail项目里学到的一套反过度工程原则。Ponytail上线不到两个月就获得了超过9万颗星,是今年增长最快的开发者工具之一。写代码前爬这个阶梯:
  1. 第一级:这个功能真的需要存在吗?
  2. 第二级:代码库里是不是已经有了?
  3. 第三级:标准库能搞定吗?
  4. 第四级:平台原生功能覆盖了吗?
  5. 第五级:已经装好的依赖能用吗?
  6. 第六级:一行能搞定吗?
  7. 第七级:不行才写最少代码。
Ponytail的核心哲学是"最懒但能工作的方案就是最好的方案"。它要求你在理解问题之后爬这个阶梯,停在第一个能撑住的梯级。实测这套规则能减少大约一半的冗余代码。
review,双层审查
我说过,我需要的是能追查的审查,不是模型拍脑袋的感觉。所以review分两层。
第一层是静态分析,用Python的ast模块做硬检查:语法是否正确、import有没有用到、圈复杂度有没有超标、命名是否符合规范。这些检查零模型调用,结果百分之百可复现。
第二层才是模型审查,检查过度工程和逻辑问题。
两层结果合并,评分公式是四成静态加六成模型。静态分低意味着代码有硬伤,模型说好也没用。
test,不是空壳的测试生成
市面上很多代码Agent的测试生成是走过场的,生成一个assert result is not None就算完事。CodeAgent的测试生成做了两件事:
基础测试保证覆盖率:每个函数至少有一个正向调用。边界值测试才是关键:如果参数标注了int或float类型,自动生成0值测试和负数测试。如果标注了str类型,自动生成空串测试。
全部通过AST规则生成,不调模型,零耗时。
load_project,你的项目我看看
这是从Atomic Agents的模块化思路里受到启发最多的一个方法。
proj = agent.load_project("E:/some_repo")print(proj["file_count"]) # 文件数print(proj["imports"]) # 依赖关系图print(proj["funcs"]) # 函数清单
它遍历项目目录,用AST解析每个Python文件,提取import关系、函数签名和类定义。结果是一个结构化快照,不写磁盘,不产生副作用。
基于它我额外做了两个方法:
  • analyze_project()把快照转成人可读的报告,适合刚接手一个项目时快速摸底。
  • scan_issues()对所有代码文件执行静态分析,返回问题清单,按严重程度排序。

04
知道它能做什么,也要知道它不能做什么

诚实面对工具的边界,比给它加功能更重要。
CodeAgent能做的事
  • 生成几十到几百行的代码片段,遵循你的风格偏好。
  • 审查代码,给出有硬证据支撑的意见。
  • 生成包含边界值的测试。
  • 加载项目结构,让你在几分钟内了解一个陌生代码库。
  • 批量审查多个文件,产生汇总报告。
CodeAgent不能做的事
  • 跨文件大规模重构,它没有足够的上下文窗口理解整个项目的依赖网络。
  • 自动执行有副作用的操作,没有沙箱,生成代码不会自动运行。
  • 对接GitHub PR流水线,它不是CI工具。
  • 处理非Python语言的高级场景。
这个阈值划分很重要。很多人失败是因为让工具做它不擅长的事,然后怪工具不行。

05
血缘与取舍

回到Atomic Agents。它的核心理念,单一职责、可组合、可预测,直接影响了CodeAgent的设计。
CodeAgent走了更极致的路线:不做框架,只做单文件模块。它不定义Agent该是什么样,它只定义"代码处理"这一件事该怎么做好。你需要理解的API只有五个方法,不需要学习一套框架哲学。
这种选择有代价。单文件架构的天花板很明显,功能越多越难维护。但它换来了原子级的可理解性。你可以在十分钟内读完它全部七百行代码,理解每一个判断分支。
如果你需要更完整的框架,直接看Atomic Agents。它已经发布到v2.9.1,有60个版本迭代,支持OpenAI、Anthropic、Groq、Ollama等多种模型提供商。
06
一个典型的工作日

早上,团队在群里丢了一个开源项目的链接,问能不能用。我下载项目,跑`analyzeproject看看它什么结构,scanissues`扫一遍有没有明显的问题。十分钟后我在群里说:结构还行,但有三个模块依赖了已经deprecated的库。
上午,一个同事提交了一段编码实现。我不想在自己环境里跑,让CodeAgent review了一下。静态分析发现一个import没用到,圈复杂度12偏高,我把意见贴到PR下面。
下午写方案,需要一段示例代码演示API调用流程。implement两轮迭代出了第一版,我看着改了几个参数名,丢进方案里。
下班前,我把今天测试的三个开源项目的分析报告发到团队知识库。
这些工作如果用Codex,每一步都要启动一个完整的Agent会话,都要消耗API额度,都要等模型加载。用CodeAgent,每步在十几秒内完成,零网络开销、零API消耗。
如果你是技术负责人、技术观察者,或者像我一样每天都在测试各种工具的人,你不需要另一个庞大的Agent框架。你需要的是能精确嵌入你工作流的轻量工具。
原子智能体的思路是对的。把能力拆到足够小,小到你能理解它的每一行代码,小到你能在十分钟内改它的逻辑,小到它不值得作为一个独立服务部署。
我没有发明任何新东西,我只是把别人搭乐高的思路,用在了自己的一亩三分地上。

07
附录:快速开始

安装:pip install requests(唯一外部依赖)
import syssys.path.insert(0"E:/code_agent")from code_agent import CodeAgent
agent = CodeAgent()
agent.analyze_project("E:/target_project"# 项目摸底agent.review({"new_module.py": code}) # 代码审查agent.test({"utils.py": code}) # 生成测试agent.batch_review({ # 批量审查"app.py": code,"utils.py": code,})

08
参考资料

  • Atomic Agents:github.com/Eigenwise/atomic-agents(MIT协议,6.1k Star)
  • Ponytail:github.com/DietrichGebert/ponytail(MIT协议,91k Star,减少约54%冗余代码)
  • Karpathy Coding Principles:github.com/multica-ai/andrej-karpathy-skills(19.2万 Star)

【声明】内容源于网络
0
0
AI驱动数字化转型
专注AI,促进智造行业数据衍生,服务智能制造企业的数字化、智能化,聚焦大模型私域部署、大模型微调、数据清洗、AI模型训练、私域知识库及agent技术延展等。行业智能,落地为先。
内容 1081
粉丝 1
AI驱动数字化转型 专注AI,促进智造行业数据衍生,服务智能制造企业的数字化、智能化,聚焦大模型私域部署、大模型微调、数据清洗、AI模型训练、私域知识库及agent技术延展等。行业智能,落地为先。
总阅读10.4k
粉丝1
内容1.1k