🌟 开启代理之旅:一个智能助手的诞生故事
想象一下,你是一位探险家,手持一张古老的地图,踏入一个名为Kimi CLI的数字丛林。这里,每一个“代理”(Agent)都像是一位经验丰富的向导,指引你穿越代码的迷雾、工具的河流和任务的山峰。Kimi CLI,这个强大的命令行界面工具,不是简单的执行器,而是构建了一个生态系统,让AI代理们像一支探险队一样协作。默认的代理就像你的老朋友,随时准备出发,而自定义代理则像是你亲手雕琢的专属装备,能根据你的需求变形。让我们从基础开始,逐步揭开这个系统的面纱,就像剥开一层层洋葱,每一层都带来惊喜和启发。
在Kimi CLI的世界里,代理定义了AI的行为方式,包括系统提示词、可用工具和子代理。这就好比给一个机器人植入灵魂:提示词是它的个性,工具是它的手臂,子代理是它的分身。内置代理有两种:默认的“default”和实验性的“okabe”。通过命令行参数--agent选择它们,比如kimi --agent okabe,就如同召唤一位特定的向导加入你的冒险。默认代理启用了诸多工具,如Task、SetTodoList、Shell等,这些工具让它能处理从任务调度到文件操作的一切琐事。而okabe在默认基础上额外启用SendDMail,适合那些喜欢实验新提示词和工具的勇敢探险家。
对于初次接触的读者,Kimi CLI是一个基于Moonshot AI的命令行工具,它让AI能像人类一样处理本地任务。想想它如同一座桥梁,连接了你的电脑文件和云端智能,避免了单纯聊天机器人的局限性。基于此,我们进一步探索内置代理的细节,就像跟随一条小径深入森林。
🛠️ 内置代理的工具箱:从默认到实验的装备升级
默认代理“default”就像一个可靠的背包,里面塞满了必需品。它启用的工具包括Task、SetTodoList、Shell、ReadFile、ReadMediaFile、Glob、Grep、WriteFile、StrReplaceFile、SearchWeb和FetchURL。这些工具覆盖了从任务管理到文件操作、网络搜索的方方面面。举个例子,Task工具允许调度子代理执行特定任务,就好像你对一位队友说:“嘿,去那边探路,我在这里守着营地。”SetTodoList则像一个智能记事本,帮助跟踪任务进度,标记pending、inprogress或done状态,确保你的探险计划井井有条。
而okabe代理,则是default的升级版,额外启用了SendDMail工具。这项工具用于发送延迟消息(D-Mail),在检查点回滚场景中特别有用。想象你正在一个时间旅行的游戏中,SendDMail就像一个时空胶囊,能将消息发送回过去的检查点ID,帮助纠正错误路径。为什么okabe是实验性的?因为它鼓励用户测试新提示词和工具组合,就像科学家在实验室里调配新配方,偶尔会爆发出意外的火花。
这些内置代理的魅力在于它们的即插即用性。你不需要从零构建,就能启动一个功能齐全的AI助手。但如果你想更个性化呢?那就进入自定义代理的领域,就像从现成帐篷升级到自建城堡。
过渡到自定义部分,我们可以看到Kimi CLI如何赋予用户神一般的创造力。
📄 自定义代理的蓝图:YAML格式下的魔法建筑
自定义代理使用YAML格式定义,通过--agent-file参数加载,比如kimi --agent-file /path/to/my-agent.yaml。这就好比你绘制了一张建筑蓝图,指定了代理的名称、系统提示词路径和工具列表。基本结构包括version:1,然后是agent块,里面有name、systempromptpath和tools。tools的格式是“模块:类名”,如“kimicli.tools.shell:Shell”,这让代理能调用特定的功能。
更酷的是继承与覆盖机制,使用extend字段继承其他代理,只修改需要部分。例如,extend: default,然后覆盖systempromptpath或excludetools。这就像遗传学:子代理继承父母的基因,但可以变异出新特征。你可以排除某些工具,比如SearchWeb和FetchURL,如果你的探险不需要网络探索。extend还能指定相对路径继承其他自定义代理文件,确保模块化设计。
配置字段详尽而灵活:extend可选,name在继承时可省略,systempromptpath指向Markdown模板文件,systempromptargs传递自定义参数,tools和excludetools管理工具集,subagents定义子代理。想象你是一个建筑师,这些字段是你的砖块和水泥,构建出一个专属的AI堡垒。
YAML是一种人类可读的数据序列化格式,常用于配置文件。它的缩进式结构像一棵树,每一级代表一个分支,避免了JSON的括号混乱。如果你不熟悉,想想它如诗一般的代码,优雅而简洁。现在,让我们深入系统提示词的部分,它是代理的“心灵之窗”。
🧠 系统提示词的秘密花园:模板变量与自定义注入
系统提示词文件是一个Markdown模板,使用${VAR}语法引用变量。这就像在信纸上留出空白,等待填充具体内容。内置变量包括${KIMINOW}(当前时间ISO格式)、${KIMI_WORK_DIR}(工作目录路径)、${KIMIWORKDIRLS}(目录文件列表)、${KIMI_AGENTS_MD}(AGENTS.md内容,如果存在)和${KIMISKILLS}(加载的Skills列表)。这些变量让提示词动态适应环境,比如“Current time: ${KIMINOW}”,确保代理总是“活在当下”。
通过systempromptargs,你可以定义自定义参数,如MYVAR: "自定义值",然后在提示词中用${MY_VAR}。示例提示词像一篇简短的宣言:“You are a helpful assistant. Current time: ${KIMINOW}. Working directory: ${KIMI_WORK_DIR} ${MYVAR}”。这注入了个性和上下文,让代理更像一个有故事的角色,而不是冷冰冰的机器。
这种设计的好处在于灵活性:继承时,systempromptargs会合并,确保子代理能继承并扩展主代理的智慧。就像家族传承,每一代都添加自己的印记。
顺着这条思路,我们来看子代理如何在文件中定义,扩展代理的协作能力。
🤝 子代理的家族树:在文件中孕育的分身术
在代理文件中,你可以定义subagents块,每个子代理有path(相对路径)和description。例如,coder子代理处理编码任务,reviewer做代码审查。子代理文件本身也是YAML,通常extend主代理文件,并调整systempromptargs添加角色描述,如“你现在作为子代理运行...”,并excludetools如Task,以避免嵌套循环。
这就像建立一个家族:主代理是家长,子代理是孩子,每个孩子有专长。主代理通过Task工具启动它们,提供description、subagentname和prompt。子代理在独立上下文中运行,完成后返回结果。这种隔离像防火墙,防止上下文污染;并行处理多个任务,如同时派出一队侦察兵;针对性提示词让每个子代理专注其职。
子代理的独立上下文意味着它有自己的对话历史,不干扰主代理。这类似于多线程编程,每个线程处理一个子任务,避免了单线程的瓶颈和混乱。除了静态定义,还有动态创建的方式,进一步提升了系统的魔力。
⚡ 动态子代理的诞生:运行时创造新生命
CreateSubagent工具允许AI在运行时动态定义新子代理类型,默认未启用,需要手动添加至tools列表。参数包括name(唯一名称)和systemprompt(定义角色、能力和边界)。这就像科幻小说中的克隆技术:代理能根据需要即时“生出”新代理,用于Task工具引用。
这种动态性让系统更适应复杂场景,比如临时需要一个专攻数据分析的子代理。想象在探险中,你突然发现一个未知洞穴,就能现场制造一个洞穴专家分身。
现在,我们转向工具列表,这是代理力量的源泉。
🔧 内置工具的武器库:从任务调度到文件操作的全面武装
Kimi CLI内置工具丰富多样,每个都有路径、描述和参数。Task工具调度子代理,参数如description(3-5词简述)、subagentname和prompt(详细描述)。它确保子代理无法访问主上下文,必须在prompt中提供所有信息,就像写一封密封信件。
SetTodoList管理待办列表,todos数组包含title和status,帮助跟踪进度,如标记一个任务从pending到done。
Shell执行命令,需要用户审批,参数command和timeout(默认60秒,最大300)。根据OS使用bash/zsh或PowerShell,就像调用一个外部佣兵,但需主人许可。
ReadFile读取文本文件,限1000行/2000字符,参数path、lineoffset和nlines。工作目录外用绝对路径。
ReadMediaFile读取图片/视频,限100MB,仅模型支持时可用。
Glob匹配文件/目录,参数pattern(如*.py)、directory、includedirs。限1000项,不允许开头。
Grep搜索内容,正则pattern、path、glob、type、outputmode(如fileswithmatches)、上下文行参数(如-B、-A、-C)、-n显示行号、-i忽略大小写、multiline和headlimit。
WriteFile写入文件,需要审批,参数path(绝对)、content、mode(overwrite或append)。
StrReplaceFile字符串替换编辑,需要审批,参数path、edit(old、new、replaceall)。
SearchWeb搜索网页,需要配置,参数query、limit(默认5,最大20)、includecontent。
FetchURL抓取URL,返回主要文本。
Think记录思考,参数thought,用于复杂推理。
SendDMail发送延迟消息,参数message和checkpoint_id(>=0)。
CreateSubagent如上所述。
这些工具像一个超级英雄的装备包,每件都有特定用途,通过审批机制确保安全。
审批机制是系统的安全阀门,防止AI越界。比如Shell命令每次执行都需要用户确认,就像银行转账前的二次验证,保护你的数字财产。最后,我们讨论工具的安全边界。
🛡️ 安全边界的守护墙:工作目录与审批的铁律
工具操作受工作目录限制:读写通常在内,外部需绝对路径。写入/编辑/Shell/MCP调用每次需用户审批,确保不发生意外“入侵”。这就像城堡的护城河和守卫,保护你的文件系统免受意外损害。
Glob不允许 开头,防止过度搜索;文件大小和行数限制避免资源滥用。
通过这些边界,Kimi CLI平衡了强大与安全,让你的AI探险既刺激又可靠。
在结尾,我们回顾这个系统的本质:一个从默认到自定义、从静态到动态的进化故事。就像自然界的生态系统,每一个代理和工具都相互依存,共同构建一个智能的世界。想象你正站在数字森林的边缘,手持Kimi CLI,准备开启属于你的冒险——那里,每一行代码都是一次对话,每一个任务都是一场胜利。
还没有人回复