[!TIP] 目标:通过 CLI 传参实现多模态(视觉/文件)感知,并构建动态加载的插件式技能系统。
1. 让 CLI “看见”世界
多模态能力不一定非要复杂的 SDK。在 VISAGENT 中,我们利用 gemini CLI 对文件路径的天然支持(@path),在 RoleEngine 层实现了感知接入:
def _do_raw_invoke(self, message, files=None):
# 构造多模态后缀
mm_suffix = ""
if files:
mm_suffix = "\n" + "\n".join([f"@{f}" for f in files])
# 拼接到最终 Prompt
full_input = f"{message}{mm_suffix}"
# ... 执行 subprocess
实战经验:为了处理复杂的视觉任务,我们专门封装了 vision_expert 技能,通过 DEEP 模式引导 AI 进行 Chain-of-Thought 推演,从而实现对截图、UI 组件的精确识别。
2. 动态技能树:SkillHandler
手搓系统的灵活性在于 插件化。我们设计了 SkillHandler 模块,它能自动发现 skills/ 目录下的所有能力:
- 自动化发现:启动时扫描目录。
- Manifest 规范:每个技能自带
manifest.json,定义其功能描述与 权限主权 (Sovereignty)。 - Sovereignty-Aware:在 Prompt 注入时,系统会明确告知 AI 它被授权访问的 FS 路径和网络域,实现安全约束。
3. 灵活的 Hooks 机制
为了在 AI 调用前后插入逻辑,我们实现了一组 Python Hooks:
def trigger_hook(self, role_name, hook_name, *args):
module = self.skills_hooks.get(role_name)
if module and hasattr(module, hook_name):
return getattr(module, hook_name)(*args)
应用场景:
- Pre-invoke:在发送前根据图片内容动态调整系统 Prompt。
- Post-invoke:对返回的 JSON 进行格式强校验或敏感词脱敏。
4. 技能合成 (Skill Synthesis)
这是最硬核的部分:Agent 在执行过程中,如果发现某种模式可以复用,它会尝试自主“合成”一个新的 Skill JSON。这让 VISAGENT 不仅仅是一个执行器,更像是一个在泥地里不断进化的“数字工匠”。
总结
通过简单的 CLI 传参和动态目录扫描,我们构建了一个具备高度扩展性的感知与技能系统。不需要复杂的容器化插件,只需要几行 importlib 调用,Agent 就能获得无限可能。
下一篇:数字代谢 —— 零成本架构维护与 Agent 自愈闭环。