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)启用插件
{
"plugins": {
"entries": {
"llm-task": { "enabled": true }
}
}
}2)允许工具
{
"tools": {
"alsoAllow": ["llm-task"]
}
}文档特别提到: 如果你是严格 allowlist 模式,才用 tools.allow。一般可以用 alsoAllow。(docs.openclaw.ai)
可选配置
可以给它设置默认 provider、model、token 上限、超时等。比如:(docs.openclaw.ai)
{
"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:最大输出 tokentimeoutMs:超时毫秒数。(docs.openclaw.ai)
调用时能传什么参数
官方文档列了这些参数:(docs.openclaw.ai)
prompt:必填,任务说明input:可选,任务输入数据schema:可选,JSON Schemaprovider:可选model:可选thinking:可选,例如low/mediumauthProfileId:可选temperature:可选maxTokens:可选timeoutMs:可选
返回什么
它会返回解析后的 JSON,文档里写的是放在 `details.json`。 如果你提供了 schema,还会按 schema 验证。(docs.openclaw.ai)
官方示例怎么理解
官方给了一个典型调用:
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)
一个更接地气的理解
比如你要做“客服消息分流”:
输入:
{
"text": "我想退款,订单昨天到的但是坏了"
}你给 LLM-TASK 的 prompt 可以写成:
- 判断用户意图
- 提取情绪
- 判断是否需要人工介入
- 按固定 JSON 输出
schema 限制成:
{
"type": "object",
"properties": {
"intent": { "type": "string" },
"sentiment": { "type": "string" },
"need_human": { "type": "boolean" }
},
"required": ["intent", "sentiment", "need_human"],
"additionalProperties": false
}这样工作流后面就能直接消费这个结果,而不是去解析一段自然语言。
使用时要注意的点
文档里提了几个很重要的限制和安全点:(docs.openclaw.ai)
- 它是 JSON-only
- 模型被要求只输出 JSON
- 不要期待它返回解释性自然语言
- 不给模型开放 tools
- 这次运行里模型不能自己再调工具
- 输出默认视为不可信
- 最好用
schema校验 - 尤其是要接后续自动动作时
- 有副作用步骤前要加审批
- 比如 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)
如果你愿意,我下一步可以直接帮你做两件事里的一个:
- 给你写一个最小可用的 LLM-TASK 配置示例
- 按你的业务场景,写一个具体 prompt + schema 示例(比如邮件分类、采购单识别、日报摘要、工单分流)
user: 1 assistant: 那我直接给你一个最小可用的 LLM-TASK 配置示例。
1)最小启用配置
把下面这段加到 OpenClaw 配置里即可:
{
"plugins": {
"entries": {
"llm-task": {
"enabled": true
}
}
},
"agents": {
"list": [
{
"id": "main",
"tools": {
"allow": ["llm-task"]
}
}
]
}
}官方文档说明,llm-task 是一个可选插件工具,要先启用插件,再在 agent 的工具白名单里允许它。(docs.openclaw.ai)
2)带默认模型的常用配置
如果你希望它默认走固定模型,可以这样配:
{
"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:默认 providerdefaultModel:默认模型defaultAuthProfileId:默认认证配置allowedModels:模型白名单;如果设置了,只允许这些provider/model组合maxTokens:最大输出 tokentimeoutMs:超时时间(毫秒)。(docs.openclaw.ai)
3)最简单的调用示例
官方示例是这样的:
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,字段只有 intent 和 draft。返回结果在 details.json 里,且如果提供了 schema,会按 schema 做校验。(docs.openclaw.ai)
4)我建议你的使用姿势
我比较推荐你按这个原则来用:
适合
- 邮件/消息分类
- 工单意图识别
- 文本抽取成结构化字段
- 工作流里的 AI 判断节点
不适合
- 自由聊天
- 复杂多轮推理代理
- 需要调用其他工具的任务
因为官方明确说了: 它是 JSON-only,并且不给模型暴露 tools;输出如果没做 schema 校验,应当视为不可信输入。另外,任何有副作用的后续动作(send / post / exec)前都应加审批。(docs.openclaw.ai)
5)如果你现在就想落地
我可以下一步直接帮你二选一:
- 按你当前 OpenClaw 配置结构,帮你生成一份可直接粘贴的配置片段
- 给你写一个贴近你业务的 LLM-TASK 示例
比如:
- 钉钉消息分类
- 采购单/需求单信息抽取
- 日报摘要转结构化 JSON
- 客诉工单分流
如果你愿意,我建议下一步我直接给你写一个“钉钉消息分类”的 LLM-TASK 实战例子,最容易看懂。 user: 可以 assistant: 那我直接给你一个“钉钉消息分类”的 LLM-TASK 实战例子,你一看就明白了。
例子目标
假设你想把钉钉收到的消息先交给 LLM-TASK 判断,输出这几个字段:
intent:消息意图priority:优先级need_reply:是否需要回复summary:一句话摘要
这样后面就能:
- 自动分流
- 自动建待办
- 自动标红紧急消息
- 自动决定要不要提醒你
一、调用示例
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 很可能返回:
{
"intent": "task_request",
"priority": "high",
"need_reply": true,
"summary": "对方要求今天下班前提供采购进度表,因明早会议使用,优先级高。"
}这个结果就很适合拿去做后续自动化。
三、每个字段是干嘛的
prompt
告诉模型它要做什么。 这里我让它做 4 件事:
- 判断意图
- 判断优先级
- 判断是否需要回复
- 生成中文摘要
input
放原始消息内容。 你可以塞更多上下文,比如:
{
"channel": "dingtalk",
"sender": "黄伟斌",
"department": "采购部",
"message": "今天下班前把采购进度表发我,我明早开会要用。",
"timestamp": "2026-05-14 15:49:00"
}schema
这是重点。 它用来强约束输出格式,保证下游流程能稳定处理。
比如:
intent只能是固定几种priority只能是low/medium/high/urgentneed_reply必须是布尔值- 不允许多余字段
这就是 LLM-TASK 最有价值的地方:输出可控。
四、这个例子能接什么自动化
你可以很容易接成下面这种逻辑:
规则 1:高优先级就提醒
如果:
"priority": "high" 或 "urgent"就发提醒 / 建待办。
规则 2:需要回复就生成草稿
如果:
"need_reply": true再进入第二个 LLM-TASK,专门生成回复草稿。
规则 3:按意图分流
如果:
"intent": "approval"走审批流。
如果:
"intent": "meeting"走日程/会议流。
如果:
"intent": "task_request"走任务分派或待办流。
五、再给你一个升级版 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
}这样模型还能顺便提取一句时间线索,比如:
{
"intent": "task_request",
"priority": "high",
"need_reply": true,
"deadline_hint": "今天下班前",
"summary": "对方要求今天下班前提供采购进度表,用于明早会议。"
}这个对待办系统特别有用。
六、我对 prompt 的建议
别把 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, 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
这样更稳,也更容易维护。
八、你现在可以直接拿去改的版本
如果你想立刻试,我建议用这个:
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
}
}'如果你愿意,我下一步可以继续直接帮你补这两个中的一个:
- 再写一个“回复草稿生成”的 LLM-TASK 示例
- 把“分类 + 回复草稿”串成一个完整工作流示例
我建议选 2,这样你就能直接看到 LLM-TASK 在自动化里怎么串起来。