Knowledge

Session: 2026-05-15 10:51:34 GMT+8

_raw/openclaw/p1-memory-2026-05-25/memory/2026-05-15-1051.md

Session: 2026-05-15 10:51:34 GMT+8

  • Session Key: agent:main:dingtalk-connector:direct:17600802669338842
  • Session ID: dba9c4b6-a460-4db4-b71d-8431b46d06ad
  • Source: dingtalk-connector

Conversation Summary

user: 这是openclaw官方网站对LLM-TASK的介绍:https://docs.openclaw.ai/tools/llm-task 帮我阅读并解释LLM-TASK是干什么的,怎么用 assistant: 我看完了。简单说:

LLM-TASK 是一个“只做结构化 JSON 输出”的 LLM 工具插件。 它的作用不是像普通聊天助手那样自由回答,而是把一次 LLM 调用变成一个可控、可校验、可嵌入工作流的步骤。(docs.openclaw.ai)

它是干什么的

最适合这类场景:

  • 从一段文本里提取结构化信息
  • 做分类、打标签、归纳
  • 生成固定格式结果
  • 在工作流里加一个“AI 判断步骤”
  • 给 Lobster 这类 workflow engine 提供一个单独的 LLM 节点,而不用为每个流程单独写 OpenClaw 代码。(docs.openclaw.ai)

你可以把它理解成:

“把大模型包装成一个只返回 JSON 的函数调用器”

而且还能配合 JSON Schema 做校验,保证输出格式符合要求。(docs.openclaw.ai)


它和普通对话模型有什么区别

普通聊天:

  • 输出可能是自然语言
  • 格式不稳定
  • 适合交流

LLM-TASK:

  • 强制只输出 JSON
  • 不暴露 tools 给模型
  • 更适合程序、自动化、工作流消费
  • 输出可以按 schema 验证。(docs.openclaw.ai)

所以它更像“工作流零件”,不是“聊天界面”。


怎么启用

文档里说它是可选插件,要先启用插件,再允许这个工具。(docs.openclaw.ai)

1)启用插件

json
{
  "plugins": {
    "entries": {
      "llm-task": { "enabled": true }
    }
  }
}

2)允许工具

json
{
  "tools": {
    "alsoAllow": ["llm-task"]
  }
}

文档特别提到: 如果你是严格 allowlist 模式,才用 tools.allow。一般可以用 alsoAllow。(docs.openclaw.ai)


可选配置

可以给它设置默认 provider、model、token 上限、超时等。比如:(docs.openclaw.ai)

json
{
  "plugins": {
    "entries": {
      "llm-task": {
        "enabled": true,
        "config": {
          "defaultProvider": "openai-codex",
          "defaultModel": "gpt-5.5",
          "defaultAuthProfileId": "main",
          "allowedModels": ["openai/gpt-5.4"],
          "maxTokens": 800,
          "timeoutMs": 30000
        }
      }
    }
  }
}

几个关键点:

  • defaultProvider:默认模型提供商
  • defaultModel:默认模型
  • defaultAuthProfileId:默认认证配置
  • allowedModels:允许调用的模型白名单;设置后,不在名单里的模型会被拒绝
  • maxTokens:最大输出 token
  • timeoutMs:超时毫秒数。(docs.openclaw.ai)

调用时能传什么参数

官方文档列了这些参数:(docs.openclaw.ai)

  • prompt:必填,任务说明
  • input:可选,任务输入数据
  • schema:可选,JSON Schema
  • provider:可选
  • model:可选
  • thinking:可选,例如 low / medium
  • authProfileId:可选
  • temperature:可选
  • maxTokens:可选
  • timeoutMs:可选

返回什么

它会返回解析后的 JSON,文档里写的是放在 `details.json`。 如果你提供了 schema,还会按 schema 验证。(docs.openclaw.ai)


官方示例怎么理解

官方给了一个典型调用:

bash
openclaw.invoke --tool llm-task --action json --args-json '{
  "prompt": "Given the input email, return intent and draft.",
  "thinking": "low",
  "input": {
    "subject": "Hello",
    "body": "Can you help?"
  },
  "schema": {
    "type": "object",
    "properties": {
      "intent": { "type": "string" },
      "draft": { "type": "string" }
    },
    "required": ["intent", "draft"],
    "additionalProperties": false
  }
}'

这段的意思是:

  • 让模型读取一封邮件
  • 输出两个字段:
  • intent:邮件意图
  • draft:建议回复草稿
  • 并且只允许输出这两个字段,不能多。(docs.openclaw.ai)

一个更接地气的理解

比如你要做“客服消息分流”:

输入:

json
{
  "text": "我想退款,订单昨天到的但是坏了"
}

你给 LLM-TASK 的 prompt 可以写成:

  • 判断用户意图
  • 提取情绪
  • 判断是否需要人工介入
  • 按固定 JSON 输出

schema 限制成:

json
{
  "type": "object",
  "properties": {
    "intent": { "type": "string" },
    "sentiment": { "type": "string" },
    "need_human": { "type": "boolean" }
  },
  "required": ["intent", "sentiment", "need_human"],
  "additionalProperties": false
}

这样工作流后面就能直接消费这个结果,而不是去解析一段自然语言。


使用时要注意的点

文档里提了几个很重要的限制和安全点:(docs.openclaw.ai)

  1. 它是 JSON-only
  • 模型被要求只输出 JSON
  • 不要期待它返回解释性自然语言
  1. 不给模型开放 tools
  • 这次运行里模型不能自己再调工具
  1. 输出默认视为不可信
  • 最好用 schema 校验
  • 尤其是要接后续自动动作时
  1. 有副作用步骤前要加审批
  • 比如 send、post、exec 之前先审核
  • 不要让结构化输出直接无审查触发危险动作

和 Lobster 的关系

文档说它很适合 Lobster 这类工作流引擎。 但官方也特别提醒:

  • 独立运行的 Lobster CLI 下,这种 openclaw.invoke --tool llm-task ... 模式可以用
  • OpenClaw 内嵌的 embedded Lobster runner 里,嵌套调用 openclaw.invoke 目前不太可靠。(docs.openclaw.ai)

所以当前更推荐两种方式:

  • 直接在 Lobster 之外调用 llm-task
  • 或者 Lobster 里避免依赖这种嵌套 openclaw.invoke。(docs.openclaw.ai)

一句话总结

LLM-TASK = 把大模型当成一个“结构化 JSON 处理器”来用。 适合抽取、分类、归纳、工作流节点,不适合自由聊天。 它最大的价值是:输出稳定、易校验、容易接自动化流程。 (docs.openclaw.ai)

如果你愿意,我下一步可以直接帮你做两件事里的一个:

  1. 给你写一个最小可用的 LLM-TASK 配置示例
  2. 按你的业务场景,写一个具体 prompt + schema 示例(比如邮件分类、采购单识别、日报摘要、工单分流)

user: 1 assistant: 那我直接给你一个最小可用的 LLM-TASK 配置示例

1)最小启用配置

把下面这段加到 OpenClaw 配置里即可:

json
{
  "plugins": {
    "entries": {
      "llm-task": {
        "enabled": true
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "main",
        "tools": {
          "allow": ["llm-task"]
        }
      }
    ]
  }
}

官方文档说明,llm-task 是一个可选插件工具,要先启用插件,再在 agent 的工具白名单里允许它。(docs.openclaw.ai)


2)带默认模型的常用配置

如果你希望它默认走固定模型,可以这样配:

json
{
  "plugins": {
    "entries": {
      "llm-task": {
        "enabled": true,
        "config": {
          "defaultProvider": "openai-codex",
          "defaultModel": "gpt-5.4",
          "defaultAuthProfileId": "main",
          "allowedModels": ["openai-codex/gpt-5.4"],
          "maxTokens": 800,
          "timeoutMs": 30000
        }
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "main",
        "tools": {
          "allow": ["llm-task"]
        }
      }
    ]
  }
}

这里几个字段的意思是:

  • defaultProvider:默认 provider
  • defaultModel:默认模型
  • defaultAuthProfileId:默认认证配置
  • allowedModels:模型白名单;如果设置了,只允许这些 provider/model 组合
  • maxTokens:最大输出 token
  • timeoutMs:超时时间(毫秒)。(docs.openclaw.ai)

3)最简单的调用示例

官方示例是这样的:

bash
openclaw.invoke --tool llm-task --action json --args-json '{
  "prompt": "Given the input email, return intent and draft.",
  "thinking": "low",
  "input": {
    "subject": "Hello",
    "body": "Can you help?"
  },
  "schema": {
    "type": "object",
    "properties": {
      "intent": { "type": "string" },
      "draft": { "type": "string" }
    },
    "required": ["intent", "draft"],
    "additionalProperties": false
  }
}'

这个调用会让模型读取一封邮件,并返回严格的 JSON,字段只有 intentdraft。返回结果在 details.json 里,且如果提供了 schema,会按 schema 做校验。(docs.openclaw.ai)


4)我建议你的使用姿势

我比较推荐你按这个原则来用:

适合

  • 邮件/消息分类
  • 工单意图识别
  • 文本抽取成结构化字段
  • 工作流里的 AI 判断节点

不适合

  • 自由聊天
  • 复杂多轮推理代理
  • 需要调用其他工具的任务

因为官方明确说了: 它是 JSON-only,并且不给模型暴露 tools;输出如果没做 schema 校验,应当视为不可信输入。另外,任何有副作用的后续动作(send / post / exec)前都应加审批。(docs.openclaw.ai)


5)如果你现在就想落地

我可以下一步直接帮你二选一:

  1. 按你当前 OpenClaw 配置结构,帮你生成一份可直接粘贴的配置片段
  2. 给你写一个贴近你业务的 LLM-TASK 示例

比如:

  • 钉钉消息分类
  • 采购单/需求单信息抽取
  • 日报摘要转结构化 JSON
  • 客诉工单分流

如果你愿意,我建议下一步我直接给你写一个“钉钉消息分类”的 LLM-TASK 实战例子,最容易看懂。 user: 可以 assistant: 那我直接给你一个“钉钉消息分类”的 LLM-TASK 实战例子,你一看就明白了。

例子目标

假设你想把钉钉收到的消息先交给 LLM-TASK 判断,输出这几个字段:

  • intent:消息意图
  • priority:优先级
  • need_reply:是否需要回复
  • summary:一句话摘要

这样后面就能:

  • 自动分流
  • 自动建待办
  • 自动标红紧急消息
  • 自动决定要不要提醒你

一、调用示例

bash
openclaw.invoke --tool llm-task --action json --args-json '{
  "prompt": "You are a message triage assistant. Read the DingTalk message and return a strict JSON object. Classify the user intent, assign a priority, decide whether a reply is needed, and write a short summary in Chinese.",
  "thinking": "low",
  "input": {
    "channel": "dingtalk",
    "sender": "黄伟斌",
    "message": "今天下班前把采购进度表发我,我明早开会要用。"
  },
  "schema": {
    "type": "object",
    "properties": {
      "intent": {
        "type": "string",
        "enum": ["task_request", "question", "status_update", "meeting", "approval", "other"]
      },
      "priority": {
        "type": "string",
        "enum": ["low", "medium", "high", "urgent"]
      },
      "need_reply": {
        "type": "boolean"
      },
      "summary": {
        "type": "string"
      }
    },
    "required": ["intent", "priority", "need_reply", "summary"],
    "additionalProperties": false
  }
}'

二、它可能返回什么

比如这条消息:

今天下班前把采购进度表发我,我明早开会要用。

LLM-TASK 很可能返回:

json
{
  "intent": "task_request",
  "priority": "high",
  "need_reply": true,
  "summary": "对方要求今天下班前提供采购进度表,因明早会议使用,优先级高。"
}

这个结果就很适合拿去做后续自动化。


三、每个字段是干嘛的

prompt

告诉模型它要做什么。 这里我让它做 4 件事:

  • 判断意图
  • 判断优先级
  • 判断是否需要回复
  • 生成中文摘要

input

放原始消息内容。 你可以塞更多上下文,比如:

json
{
  "channel": "dingtalk",
  "sender": "黄伟斌",
  "department": "采购部",
  "message": "今天下班前把采购进度表发我,我明早开会要用。",
  "timestamp": "2026-05-14 15:49:00"
}

schema

这是重点。 它用来强约束输出格式,保证下游流程能稳定处理。

比如:

  • intent 只能是固定几种
  • priority 只能是 low/medium/high/urgent
  • need_reply 必须是布尔值
  • 不允许多余字段

这就是 LLM-TASK 最有价值的地方:输出可控


四、这个例子能接什么自动化

你可以很容易接成下面这种逻辑:

规则 1:高优先级就提醒

如果:

json
"priority": "high" 或 "urgent"

就发提醒 / 建待办。

规则 2:需要回复就生成草稿

如果:

json
"need_reply": true

再进入第二个 LLM-TASK,专门生成回复草稿。

规则 3:按意图分流

如果:

json
"intent": "approval"

走审批流。

如果:

json
"intent": "meeting"

走日程/会议流。

如果:

json
"intent": "task_request"

走任务分派或待办流。


五、再给你一个升级版 schema

如果你想更实用一点,我建议改成这个:

json
{
  "type": "object",
  "properties": {
    "intent": {
      "type": "string",
      "enum": ["task_request", "question", "status_update", "meeting", "approval", "complaint", "other"]
    },
    "priority": {
      "type": "string",
      "enum": ["low", "medium", "high", "urgent"]
    },
    "need_reply": {
      "type": "boolean"
    },
    "deadline_hint": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    }
  },
  "required": ["intent", "priority", "need_reply", "summary"],
  "additionalProperties": false
}

这样模型还能顺便提取一句时间线索,比如:

json
{
  "intent": "task_request",
  "priority": "high",
  "need_reply": true,
  "deadline_hint": "今天下班前",
  "summary": "对方要求今天下班前提供采购进度表,用于明早会议。"
}

这个对待办系统特别有用。


六、我对 prompt 的建议

别把 prompt 写得太空。 我更建议写成这种更明确的版本:

text
You are a DingTalk message triage assistant.
Read the message and return only one JSON object.
Classify the message intent, assign priority, decide whether a reply is needed, and generate a short Chinese summary.
Use conservative judgment. If the message contains explicit urgency such as “马上”, “尽快”, “今天下班前”, or impacts a meeting, increase priority.
Do not output any text outside JSON.

这样模型会稳很多。


七、实际落地时的建议

我建议你把它拆成两步,而不是一步做完所有事:

方案 A:一步完成

一个 LLM-TASK 直接输出分类结果。 优点:简单。 缺点:职责有点多。

方案 B:两步完成(我更推荐)

第一步:分类

  • intent
  • priority
  • need_reply
  • deadline_hint
  • summary

第二步:如果 need_reply = true,再生成回复草稿

  • draft_reply
  • tone
  • missing_info

这样更稳,也更容易维护。


八、你现在可以直接拿去改的版本

如果你想立刻试,我建议用这个:

bash
openclaw.invoke --tool llm-task --action json --args-json '{
  "prompt": "You are a DingTalk message triage assistant. Read the message and return only one JSON object. Classify the message intent, assign priority, decide whether a reply is needed, extract any deadline hint, and generate a short Chinese summary.",
  "thinking": "low",
  "input": {
    "channel": "dingtalk",
    "sender": "黄伟斌",
    "message": "今天下班前把采购进度表发我,我明早开会要用。"
  },
  "schema": {
    "type": "object",
    "properties": {
      "intent": {
        "type": "string",
        "enum": ["task_request", "question", "status_update", "meeting", "approval", "complaint", "other"]
      },
      "priority": {
        "type": "string",
        "enum": ["low", "medium", "high", "urgent"]
      },
      "need_reply": {
        "type": "boolean"
      },
      "deadline_hint": {
        "type": "string"
      },
      "summary": {
        "type": "string"
      }
    },
    "required": ["intent", "priority", "need_reply", "summary"],
    "additionalProperties": false
  }
}'

如果你愿意,我下一步可以继续直接帮你补这两个中的一个:

  1. 再写一个“回复草稿生成”的 LLM-TASK 示例
  2. 把“分类 + 回复草稿”串成一个完整工作流示例

我建议选 2,这样你就能直接看到 LLM-TASK 在自动化里怎么串起来。