从CLI原理出发,如何做好AI Coding

简介: 本文探讨CLI类AI编程工具的产品美学与技术原理,分析其遵循Unix哲学的轻量、可组合、可集成特性,解析Single Agent架构与上下文工程的实践,并分享如何通过Prompt优化、任务拆解与团队对齐,高效利用CLI提升编码效率,展望AI时代人机协作的新范式。

本文整理自[AIGO小酒馆]分享内容

话题内容:

  • CLI的产品美学: 时代在倒退么?
  • CLI的技术原理:Single Agent vs Multi Agent
  • CLI的使用场景:如何用好CLI写代码?

话题背景:随着LLM的能力提升,从早些AI产品能快速帮助用户制作prototype,到现在当前市面上不断涌现出新的AI Coding工具,这些AI Coding背后的工具原理是什么?我们在选择这些AI Coding工具的时候,需要关注哪些信息,了解背后的原理,才能更好地使用这些工具。

Q:回想一下,你接触过哪些AI Coding工具?当前使用过程中有哪些问题?


时代在倒退么? CLI的产品美学

当我第一次接触到Claude code的时候,很惊讶发现他是一个命令行工具,他不是一个IDE,甚至都不是一个插件,当时在想,是时代在倒退么?为什么还会有AI产品是一个命令行工具,像是回到了linux时代。随着使用越来越深入,逐渐发现了他的魅力。


在人工智能编程工具的浪潮中,CLI工具的崛起并非偶然。它的成功不仅在于强大的代码生成能力,更深层次的原因在于其背后遵循了一套历久弥新的设计哲学——与经典的Unix哲学不谋而合。

一切皆文件

在Unix系统中,一切皆文件(Everything is a file) 是一种核心设计哲学,指的是系统中的所有资源,无论是设备、管道、目录、普通文件还是套接字等,都被统一视为文件。这种设计使得操作系统能够提供统一的接口来访问这些资源,极大地简化了编程和系统管理的工作。在Unix系统图形化界面出现之前,访问这些文件(资源)的唯一方式就是终端。


iFlow CLI也遵循这种设计美学。通过终端,iFlow CLI几乎可以像程序员一样访问用户电脑上的几乎所有资源。所有文件均可通过命令行触达,包括代码文件。iFlow CLI内置了丰富的工具,比如文件搜索、读写文件操作、运行脚本命令等。它就像一个熟悉命令行的资深开发者,通过在终端执行脚本命令,几乎可以完成所有终端操作,访问所有系统资源。


一切都奔着实用主义

可组合

Unix哲学的核心思想是创建小巧、专一、可组合的工具。这些原则在几十年前被提出,至今仍然是构建优雅、高效软件的黄金法则。


和Unix上的其他命令行工具一样,CLI非常小巧轻量,这也是其核心设计哲学。它不像web应用那样需要复杂的界面设计,无需考虑按钮位置和样式布局。对于命令行工具,唯一需要考虑的就是用户在输入框中输入的内容,然后静待AI完成输出。一切就是这么简单。


CLI的灵活之处还在于其可组合性,这也体现了Unix的组合型原则——程序应该能协同工作,一个程序的输出应成为另一个程序的输入。在终端命令行中,通过Linux的管道命令,可以很轻松地将一个命令的输出作为CLI的输入,然后让CLI接手处理后续任务。他也可以很方便被其他应用程序,以子进程的形式调用。

可集成

同时,CLI也提供了Agent SDK,可以被集成到业务系统中,让业务系统快速具备AI的能力。

灵活、轻量是CLI的特点,他是一个非常通用的Agent内核,它以极简的方式启动,却具备很高的上限

不止于代码

他不光只是用于代码编写,还可以用于其他AI作业。

CLI预制了一些通用能力,使其能够处理各种常见工作。比如todo-list功能,让CLI像人类一样,将要做的事情一条条写到便笺上,从而跟踪任务执行情况而不遗忘。同时,它也预留了丰富的扩展接口,允许技术人员根据真实环境进行扩展和自定义。因此,在CLI中,可以看到hooks、commands、sub agents、output styles等扩展功能。通过扩展这些智能体,可以让CLI做更多事情,远不止编程。

比如:

  • 用Claude code管理知识库
  • 用Claude Code管理自动化生活
  • Claude code 生活操作系统
  • 使用iFlow CLI当作桌面助理,整理文件等

更多案例:心流开放平台[1]

CLI的技术原理:Single Agent vs Multi Agent

下述以iflow cli为例,讲述iflow cli的技术原理

single agent架构

CLI为代表的Agent架构,是Anthropic的Building Effective Agents [2]& Building Multi-Agent Research System[3]的典型实践。

他是一个通用的agent系统,有一个Control Loop,一个Chat Messages,叠加Memory + Tools,通过不断调用外部工具的方式,形成loop。虽然在iflow cli、claude code中引入了sub agent,但严格意义上它不是一个Multi-Agent系统,SubAgent只是一种特殊的tool,无agent handoff,无agent通信机制。

极致的上下文工程

在这种single agent中,将能力提升到极致,上下文工程起到关键作用。

我在文章Context Engineering在Coding和DeepResearch上的方法和案例这篇文章中,有分享5种上下文工程的方法,在cli上均有体现,分别是:

1. 持久化记忆:如使用todo,将任务列表通过文件方式进行管理;

2. 隔离上下文:如使用sub agent,独立上下文窗口进行子任务的执行;

3. 召回上下文:如何高效地进行文档召回,agent search VS 向量召回 VS DeepWiki[4]

4. 压缩上下文:如对于记忆进行压缩,有损压缩 VS 可回溯压缩;

5. 加强上下文:如针对待完成任务进行强调,周围环境变化进行强调。

正是这种极致的上下文工程,使得single agent能保持简单灵活的同时,并保持高效。

那么为什么不做multi-agent?

构建Multi Agent系统的挑战在于:在subagents之间通讯是一件非常困难的事情。比如在Coding场景,用一个Sub agent写测试或者做其他不同的事情,你需要怎么精确跟sub agent解释所在的代码,以及将测试结果告知到main agent的上下文。

其次,multi-agent的pipeline,往往是比较固定,有具体的agent,有具体的流程,往往丧失了一定的灵活性

因此,采用single agent的内核,他更简单、灵活,这也是为什么他不止于coding这一个场景。事实也证实,像claude code这一类的cli工具,也逐渐从coding往其他领域延伸。


如何用好CLI写代码

有很多话题讨论,在AI越来越强的时代,未来AI会不会取代技术人员。在 生产环境中氛围编程,软件工程师的价值在哪里?有个观点,技术人员依然会有很多不可取代性,比如人性的责任感,人需要为生产环境负责。其次,在一些专业领域,人的创造性、架构设计经验,这些是AI取代不了的。AI会取代我们coding的工作,但是不会取代技术人员。

在美国一些创业公司,越来越多的技术人员走向前台,他们和客户打交道,理解用户需求,然后转化成产品,最后交给AI来实现。未来的生产关系会发生一定的变化,产品和技术的边界可能没有那么清晰,而工程和算法的边界也许也不会那么明显。谁懂用户,谁懂产品,才能有更好的发展。

组织能力才是AI公司真正的壁垒[5]这篇文章里面提了几个观点:

  • 搭配SOP,Claude Code可以提升很大的效率;
  • 人是AI的Context Provider;
  • AI Native的组织:每个人都是为最终结果负责的 Builder;

因此,当下,我们需要更快学会如何使用AI,“奴役”AI为我们coding。

如何开始vibe coding的建议

正确认识AI

将AI视为强大的工具,而非万能的同事。它擅长生成文本和代码,但缺乏真正的理解和判断力。因此很重要一点,请容忍他犯错,你需要去纠正他。

其次,在coding场景,选择一个好的指令遵循的模型很重要。需要看一些coding能力,一些排行榜会比较有用。比如,在iflow cli中,我们评测下来,glm4.6的评测分数相对比较高。另外,我们也发现海外coding工具,在国产模型下表现并不好。

学习有效的Prompt(或者Context) Engineering

与AI交流需要技巧。提供详细、清晰的任务描述,包括背景、目标、约束和示例。例如,不要简单地说"做一个电商APP",而应该说明具体的需求、场景、scope。

AI Coding相关经验分享这篇文章中,有谈到一些prompt技巧,我比较喜欢的是CO-STAR法则。 另外,文章中也分享了一些context engineering技巧,比如提供精确的信息、有效压缩、控制任务粒度、使用外部文件等。

车子开的好不好,车手很关键(先PUA自己 ^_^)

理解AI的局限性

AI助手生成的是模式,而非真正的理解。当任务超出其训练范围或需要深度领域知识时,合理划分AI任务边界非常重要,我们要判断什么时候进行干预,什么时候可以完全委托,什么时候需要半委托。

在尝试修改生产级别的代码时,我一般会根据任务复杂度和自身能力范围合理分配 AI 的工作,按照我自己的能力范围划分为3个类别:


1.能力范围内的任务:实现逻辑是清晰的,实现需要花很多时间让 AI 处理逻辑清晰但实现耗时的任务,可以显著提升效率。我把这类任务称为"搬砖提效",常见的如CRUD,稍微复杂一点的像需求文档是非常清晰的,技术设计完善,性能、稳定性等方案也已经完善,剩下就是coding实现。


2.略超出能力范围的任务:如果我通过调研、短期学习,就可以解决的,那我也会把这部分任务交给AI去解决。,比如我在一个项目环境里面需要调用阿里云 SDK ,他并没有提供javascript版本的签名,我需要详细文档阅读、参考python源码,改成js的版本。这种任务交给AI实现会非常方便,一方面他有能力去fetch官方的文档阅读,另外,对于一些流行的模型,比如Claude,他已经把主流的官方文档都已经训练过了,甚至不用阅读,就可以凭借内生的知识就可以帮我们补全。


3.远超能力范围的任务:对于自己完全不熟悉的技术领域,不建议完全依赖 AI,除非这个代码仅仅只是用于demo用途。有个翻车例子是,我对React Native了解甚少,有个非常紧急的项目,期望用Claude Code生成一个React Native项目。AI前期代码写的很快,基本上半天就有一个可以跑在手机上的demo出来了。但是到了项目后期,想要加更多效果,就显得非常困难了。代码量越来越多,冗余代码问题、设计问题都藏在底下不得而知,效率变低,成本变高。最后还是回到使用熟悉的语言。


探索多智能体协作

尝试让多个AI Agent协同工作,例如一个负责设计,一个负责实现,一个负责测试,可以产生更全面的结果。

可以使用git worktree同时运行多个cli实例处理不同任务。git worktree是多检出的轻量替代方案,允许将同一仓库的多个分支检出到不同目录,每个worktree有独立的工作目录和文件,但共享历史和reflog。比如一个负责前端,一个负责后端; 又或者,一个负责代码实现,一个负责测试。

另外,尝试使用Spec(在心流开放平台,我们称之为workflow),他是一种将经验沉淀成sop,通过command、sub agent等智能体扩展实现的一种方式。

AI-Dev-Task

我见过最简单的研发spec: AI-DEV-TASKS[6]

他将研发工作分解为3个步骤:

一、需求澄清


二、任务拆解


三、执行任务

每个任务人确认没问题后,再继续下一步。

R2C

将需求文档之间转成代码。

BMad Method

复杂的Spec:Bmad method[7],他的agile工作流定义了7种agent,分别是:产品经理、分析师、UI/UX专家、scrum master、开发、测试、架构师,然后通过文件按需加载的方式实现agent的人格、技能、知识库的切换(很好地诠释了出来混身份是自己给的)。通过严格执行agile软件研发流程,从而达到高质量代码生成的目的。

Github Spec Kit

为什么需要 Spec Kit?

如果你曾经历过以下情况,那么 Spec Kit 正是为你而生:

  • 需求变化无常:客户说要一个"简单的登录功能",结果做到一半发现需要支持第三方登录、忘记密码、双因子认证......
  • 代码越写越乱:开始时想法很清晰,写着写着就偏离了原始目标,最后自己都不知道在做什么;
  • 团队理解不一致:每个人对同一个需求的理解都不同,导致代码风格和实现方式千差万别;
  • AI 生成的代码不可控:让 AI 写代码很快,但经常生成的代码不符合预期,需要反复修改;

这些问题的根源在于一个核心问题:意图偏移。也就是说,从最初的想法到最终的代码之间,意图在传递过程中逐渐偏离了原始方向。

介绍文档[8]

更多Spec(workflow),可以在心流开放平台找到。


接受风格差异

AI生成的代码风格可能与你习惯的不同。这种差异不一定意味着好坏,而是提供了不同的视角。你需要更多关注在代码的质量上,包括架构是否一致、需求是否对齐、逻辑是否正确等。


持续实践

从简单任务开始,初次使用AI时,从简单、明确的任务开始,如编写单元测试、实现已定义好的接口等。然后频繁使用AI助手是提高协作效率的关键。


让AI参与的代码编写,可以包括BI分析(SQL编写)、Java模块(业务逻辑)、算法模块等。也可以让他操作一些excel、word文档,使用常用的python库进行一些ocr、数据处理、格式转化等。

随着时间推移,你将学会什么时候依赖AI,什么时候自己解决问题。


促进AI与团队对齐

通过提供代码风格指南、架构文档和团队约定,帮助AI生成更符合团队期望的代码。让AI生成文档,保持文档自动更新,在生成代码的时候能方便快捷检索到文档,这个非常重要。devin的deepwiki可以帮助做到这件事。iflow cli社区也有人贡献了deepwiki-rs,他可以自动分析代码,然后将代码逻辑生成AI友好的文档。后续AI生成新的代码,也可以自动更新文档。


其次,建立团队内部的AI使用指南,明确在哪些场景下使用AI,如何审查AI生成的代码等。AI生成的代码速度远高于人,对AI提交到git的代码质量门控显得尤为重要。我们需要重新重视单元测试、集成测试、code review等这些环节。可以借助github、aone的workflow建立一些自动化的流程,提升review 的效率。不过,人在这里还是非常重要,对于生产的代码,依然需要做到每一行都要review。


建立优化闭环

允许AI犯错误,记录AI表现良好和不佳的案例,在AI犯错误之后,我们可以更清楚了解AI能力的边界,通过不断改进你的提示和工作流程,建立良好的人机协作闭环,从而降低AI后续犯错误的概率,提升代码的质量,从而逐渐让人参与的部分变少,让agent帮你做反馈和改进,让AI自闭环。


使用Agent对抗机制,能显著提升代码质量。比如写完代码之后,加入测试流程(也可以是sub agent)。


结束语

最好的工具不是替代开发者,而是增强开发者的能力,成为他们思想的延伸。AI不会取代技术人员,而不会用AI的技术人员迟早会被取代。

参考链接:

[1]https://platform.iflow.cn/agents

[2]https://www.anthropic.com/research/building-effective-agents

[3]https://www.anthropic.com/engineering/built-multi-agent-research-system

[4]https://deepwiki.com/AsyncFuncAI/deepwiki-open

[5]https://www.xiaoyuzhoufm.com/episode/68ccfa75a56ca3e0c438706c

[6]https://vibex.iflow.cn/t/topic/270

[7]https://github.com/bmad-code-org/BMAD-METHOD

[8]https://vibex.iflow.cn/t/topic/287



来源  |  阿里云开发者公众号

作者  |  适融

相关文章
|
8天前
|
数据采集 人工智能 安全
|
17天前
|
云安全 监控 安全
|
3天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
289 164
|
2天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
298 155
|
4天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性
Bootstrap采样是一种通过有放回重抽样来评估模型性能的统计方法。它通过从原始数据集中随机抽取样本形成多个Bootstrap数据集,计算统计量(如均值、标准差)的分布,适用于小样本和非参数场景。该方法能估计标准误、构建置信区间,并量化模型不确定性,但对计算资源要求较高。Bootstrap特别适合评估大模型的泛化能力和稳定性,在集成学习、假设检验等领域也有广泛应用。与传统方法相比,Bootstrap不依赖分布假设,在非正态数据中表现更稳健。
231 113
|
10天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
788 6