cap_llm_inspect — 图像分析
源码:cap_llm_inspect.c · 头文件:cap_llm_inspect.h
cap_llm_inspect 是与 LLM 产生交互的代表实现。它展示了一种特殊模式:一个 Capability 在被 LLM 调用执行时,会反过来再次发起 LLM 推理(嵌套 LLM 调用),用于分析本地图像文件。
这种模式适用于需要 LLM 能力作为子任务的场景,例如:
- 图像理解(本模块)
- 文本摘要
- 代码解释
cap_llm_inspect 注册了单个 Callable inspect_image:
| 工具 ID | inspect_image |
|---|---|
| 描述 | Analyze a local image from an absolute path. Confirm the path first, then provide a prompt describing what to inspect. |
| 输入 | { "path": "<绝对路径>", "prompt": "<分析提示>" } |
| 输出 | LLM 对图像的文本描述 |
典型调用场景:
核心实现:嵌套 LLM 推理
Section titled “核心实现:嵌套 LLM 推理”cap_llm_inspect 的实现极为简洁(约 110 行),核心逻辑:
与普通 LLM 对话的区别
Section titled “与普通 LLM 对话的区别”claw_core_llm_infer_media 是一次独立的 LLM 调用,与正在处理用户请求的 Agent 对话完全隔离:
- 使用专属的
system_prompt(专注于图像描述,不携带对话历史) - 不消耗当前 session 的 token 配额
- 不触发
cap_skill的工具可见性管理 - 支持图像作为输入(依赖底层 LLM 提供者的多模态能力)
若底层 LLM 不支持多模态,或图像路径不存在,错误信息直接写入 output 返回给调用方(LLM 或自动化规则)。
设计原则分析
Section titled “设计原则分析”cap_llm_inspect 展示了几个重要设计选择:
-
独立 system prompt:图像分析不应受对话历史干扰,使用固定的专用提示词保证输出一致性
-
路径确认原则:描述中明确要求 “Confirm the path first”——LLM 在调用前应先通过
cap_files的list_dir确认文件存在,避免因路径错误浪费 LLM 调用 -
无状态:
cap_llm_inspect不持有任何状态,每次调用都是独立的推理任务 -
关注点分离:图像下载由
cap_im_tg负责,路径管理由cap_files负责,分析逻辑集中在cap_llm_inspect
基于同样的模式,可以实现:
inspect_audio:分析音频文件(需 LLM 支持音频输入)summarize_document:对文本文件进行摘要(调用文本推理接口)classify_image:使用专用 system prompt 对图像分类