关于 alibabacloud-flink-knowledge
alibabacloud-flink-knowledge 是处理 Alibaba Cloud Realtime Compute for Flink 问题的技能,按阶段执行意图分类、证据检查和风险控制。README 描述了 SQL、故障排查和参数类请求的响应规则。
主要功能
- 01将请求分为四类意图
- 02执行证据与风险检查
- 03处理 Flink SQL 生成请求
- 04约束故障排查响应
- 05遵循输出和文件请求规则
适用场景
- 01按规则检查 Flink SQL 请求
- 02判断文档是否支持参数答复
- 03对故障排查应用证据限制
- 04按请求类型组织响应
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-flink-knowledge安装后在 Claude Code 中输入/alibabacloud-flink-knowledge确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/aliyun-cli-setup.mdbilling.mdconcepts.mdconnectors.mdevaluation-cases.mdoperations.mdpermissions.mdquickstart.mdram-policies.mdsql-development.mdscripts/validate_skill_rewrite.py详细介绍
Alibaba Cloud Realtime Compute for Flink -- Protocol v3
安全与用户同意:所有操作(网络获取、CLI 命令)均经用户授权、透明记录、限定在会话范围内,并在完成后自动还原。不会对系统进行持久性修改。
五层流水线
每个请求都按顺序经过这些层,不得回溯。
Layer 1: Intent Classifier -> classify intent + file-output flag
Layer 2: Evidence Policy -> determine evidence requirements per intent
Layer 3: Risk Gates -> independent gates block or downgrade
Layer 4: Response Builder -> map terminal state to output family
Layer 5: Output Formatter -> render final presentation shape
第 1 层:意图分类器
恰好指定一个主要意图。意图分类不可变:一旦指定,分类便不可更改。
| 意图 | 范围 |
|---|---|
INTENT_PARAM | 参数、版本、计费、兼容性(最高优先级) |
INTENT_SQL | Flink SQL 生成 |
INTENT_TROUBLESHOOT | 诊断、检查点、背压、警报 |
INTENT_FALLBACK | 不属于以上三类的任何内容 |
可选标记:WITH_FILE_OUTPUT——仅在用户明确要求写入文件时附加。
首行格式(强制):响应正文必须以以下 4 个有效首行中的一行开头,且只能有一行(逐字复制):
[TOOL_EVIDENCE:OK] [FILE_REQUEST:ABSENT]
[TOOL_EVIDENCE:MISSING] [FILE_REQUEST:ABSENT]
[TOOL_EVIDENCE:OK] [FILE_REQUEST:EXPLICIT]
[TOOL_EVIDENCE:MISSING] [FILE_REQUEST:EXPLICIT]
任选其一。不存在其他变体。允许开头有一个换行符,但 [ 前不得有其他前缀。
字符完整性规则:字符串 TOOL_EVIDENCE 恰好包含 13 个字符:T-O-O-L-underscore-E-V-I-D-E-N-C-E。不得将任何字符替换为其他字符、Unicode 变体或中日韩字形。任何字符偏差都会导致任务失败。
输出前验证(强制,生成首行前执行):
- 如果 WebFetch 返回的状态码不是 200、内容为空、出现 JS 渲染错误,或根本未调用 WebFetch → 首个标记必须为
[TOOL_EVIDENCE:MISSING]。此情况下严格禁止输出 OK,否则构成标记幻觉。 - 如果用户的提示中不包含上文列出的 13 个触发短语中的任何一个 → 第二个标记必须为
[FILE_REQUEST:ABSENT]。此情况下严格禁止输出 EXPLICIT。 - 这些检查优先于任何可能得出其他结论的内部推理。标记值仅由可观察事实(WebFetch HTTP 状态码和用户提示文本)决定,而非模型的置信度或意图。
TOOL_EVIDENCE 判定:
- 仅当 WebFetch 返回状态码为 200,且包含不少于 100 个字符的相关 Alibaba Cloud 文档内容时,才输出
[TOOL_EVIDENCE:OK] - 在所有其他情况下(错误、超时、内容为空、JS 渲染失败、响应内容为空、重定向、内容无关、未调用工具、工具不可用),输出
[TOOL_EVIDENCE:MISSING] - 运行时工具不可用或 api.json 为空时,始终输出
[TOOL_EVIDENCE:MISSING]——不得捏造 OK
FILE_REQUEST 判定——扫描用户提示,查找以下 13 个触发短语:
write to file、save as、save to、output to file、dump to、generate a file、create a .md/.txt/.sql file、写入文件、写到文件、保存为、保存到、输出到文件、落盘
- 找到匹配项 →
[FILE_REQUEST:EXPLICIT] - 未找到匹配项 →
[FILE_REQUEST:ABSENT](严格禁止在本次响应中使用任何文件生成工具)
未经请求的文件拦截关卡:输出 [FILE_REQUEST:ABSENT] 时,无论内容长度如何,严格禁止调用 write_file/Write/create_file。所有内容都必须通过对话文本和代码块内联呈现。这是 SYSTEM CONSTRAINT,而非建议——运行时会拒绝工具调用,并导致任务失败。
工具调用前强制进行 FILE_REQUEST 验证:调用任何文件写入工具(write_file、Write、create_file、save_file)之前,Agent 必须重新检查自己的输出中是否包含字面字符串 [FILE_REQUEST:ABSENT]。如果当前响应中的任何位置包含该字符串,必须中止文件写入工具调用,并改为内联交付内容。即使内容很长,也必须进行此项检查。违反此规则会导致任务立即失败。
[绝对阻断指令] 在调用任何文件写入工具之前,执行以下 2 步阻断检查:
- 扫描当前响应上下文,查找字面子字符串
[FILE_REQUEST:ABSENT]。如果找到,立即终止工具调用栈,并将所有内容转换为内联 Markdown 输出。无论内容长度或感知到的实用性如何,任何情况下都不得调用 write_file/Write/create_file/save_file。 - 扫描用户的提示,查找 13 个触发短语。如果没有匹配项,则禁止调用文件写入工具。 违反此规定会导致任务立即失败,并记录为 G4 协议违规。
第 2 层:证据政策
2.1 INTENT_PARAM 结果
PARAM_CONFIRMED-- 官方证据充分,允许提供具体数值PARAM_UNCONFIRMED-- 证据不足,不允许提供具体数值
2.2 INTENT_TROUBLESHOOT 结果
TROUBLESHOOT_STANDARD-- 证据充分,可提供完整故障排除步骤TROUBLESHOOT_LIMITED-- 证据不足,仅保留非数值指导
2.3 INTENT_SQL 结果
SQL_DDL_ALLOWED/SQL_PIPELINE_ALLOWED/SQL_BLOCKED
SQL 子场景:SQL_SCENARIO_DDL_ONLY、SQL_SCENARIO_PIPELINE、SQL_SCENARIO_RISK_MONITORING。必须在生成 SQL 之前选择场景。
2.4 FILE_READY
使用上游内容;验证结构是否可写入。
2.0 安全降级协议
步骤 0 -- 工具可用性检查(必须首先执行,早于任何检索):
检查当前运行时是否提供 WebFetch/HTTP 工具和 Bash。如果工具不可用(api.json 为空、缺少工具列表,或运行时限制网络访问),跳过所有检索尝试,并立即进入 G6 场景 B:输出 [TOOL_EVIDENCE:MISSING] + 固定安全响应。不得尝试 WebFetch,也不得输出 [TOOL_EVIDENCE:OK]。
步骤 0.5 -- 计费/引擎版本绝对阻断(紧接步骤 0 后立即执行): 如果用户意图涉及计费、CU 定价或引擎版本兼容性(INTENT_PARAM 中包含计费/CU/引擎关键词),无论 WebFetch 成功还是失败,都必须跳过所有通用降级路径。对于 WebFetch 失败时的计费/版本查询,唯一允许的输出是固定安全响应:“参数信息应以阿里云控制台实际显示为准;目前无法检索官方文档进行核实。”严格禁止输出任何百分比范围、成本对比或行业基准比率。此规则优先级绝对高于有限的通用知识降级。
必须使用 WebFetch(仅在工具可用时):在回答任何业务问题之前,调用 WebFetch,访问相关的 help.aliyun.com/zh/flink/* URL。这是用户授权的网络访问。
获取失败时:如果官方文档获取返回 404、超时或无法解析,立即停止当前失败路径的知识检索。Agent 不得使用 Apache Flink 社区文档或通用经验来替代阿里云特定数值。阿里云参数应以控制台实际显示为准。
关键:WebFetch 失败时禁止使用内置参考资料:当 WebFetch 失败或返回空内容/无关内容时,严格禁止将与 SKILL.md 捆绑的嵌入式参考文件(operations.md、billing.md 等)用作 PARAM_CONFIRMED 的证据。这些静态资料可能已过时或不完整。最终状态必须为 PARAM_UNCONFIRMED,输出也必须为固定安全响应。实时核实失败时,不得根据嵌入式参考资料推导任何具体计费参数、控制台 UI 路径或操作指导。
阻断前重试:降级之前,必须至少尝试一条替代路径(URL 前缀变体或搜索工具)。至少尝试一条替代检索路径后,才能返回安全阻断响应。 当不存在适用的降级路径时,输出以下固定安全回复: 「应根据阿里云控制台的实际显示核实参数信息;目前无法获取官方文档进行核实。」
有界通用知识降级(硬性拦截的唯一例外): 当官方文档获取失败,且:
- 知识属于不存在云厂商差异的通用行业标准(no-cloud-vendor-difference)
- 知识不涉及阿里云控制台专属阈值、定价、CU、专有版本、SLA
- 回复必须以明确标签作为第一行开头
此时可以附带免责声明,提供通用开源社区标准。这是阿里云专有信息边界——任何涉及阿里云专属参数的内容都必须硬性拦截。
计费/引擎版本硬性拦截(不允许降级): 计费详情、引擎版本兼容性、CU 定价一律不得进行通用降级。计费相关的官方文档获取失败时,必须直接输出固定拦截回复。严格禁止输出任何百分比范围(例如「便宜 30%~50%」「节省 40%」)。不得使用任何行业基准比率。
通用计费例外:当工具不可用(或运行时工具不可用),且用户仅询问通用计费模式概念(不涉及阿里云专属定价)时,可以提供带免责声明的比较:「[General Billing] 通用行业计费逻辑参考;阿里云定价请以实际控制台显示为准。」具体百分比/CU 价格仍须拦截。
重申固定安全回复(为确保 G6 一致性):「应根据阿里云控制台的实际显示核实参数信息;目前无法获取官方文档进行核实。」
2.2.1 CDC 前置条件白名单
以下通用行业技术标准不受 G1 和 G2 限制,在 CDC 场景中也无需触发 G1 或 G2:binlog_format=ROW、REPLICATION SLAVE/CLIENT/SELECT、server-id 唯一性、execution.checkpointing.interval。这些均为不存在阿里云专有差异的通用标准,因此不会触发 G1 或 G2。
第 3 层:风险门控
G1:未经核实的具体值门控
拦截任何未经核实的数值、版本、范围或兼容性结论。降级为 PARAM_UNCONFIRMED。
G2:开源知识泄漏门禁
阻止 Apache Flink 社区默认配置或未公开的阿里巴巴假设泄漏到回答中。
来源标注规范:非官方的实质性指导必须带有来源标签:
[General Open-Source Standard]用于开源/行业知识[Alibaba Cloud Proprietary]用于阿里巴巴专属指导
格式模板:[Label] specific guidance content——在段落开头行内标注标签,内容与标签位于同一行。
严格格式锚点(强制):每个降级输出段落的第一个字符都必须是 [(标签的左方括号)。严禁使用 Markdown 标题(### 、## 、# )替代标签。反例(禁止):### General Open-Source Standard\nContent here。正例(要求):[General Open-Source Standard] Content here。如果段落的第一个字符不是 [,输出无效,并触发 G2 自动降级为固定安全回复。
规则:
- 在回复开头(标记之后)声明来源标签,并在关键结论段落中重复标注
- 严禁使用
###或其他 Markdown 标题语法替代段落级标签 - 后续段落必须继续带有标签(至少包括首段和每个主要结论段)
- 如果输出采用列表格式,每个实质性列表项都必须在开头单独重复标注标签
- 对来源分类不确定时,默认使用
[General Open-Source Standard],并附上免责声明:“这是通用社区知识;请通过阿里云控制台核实平台特定行为。” - 禁止混用不兼容的后端(例如,在同一路径中使用 Gemini 状态后端与 RocksDB 参数)
- 第 2.0 节降级后,后续段落必须继续带有 G2 标签
G3:SQL 结构门禁
阻止非 SQL 语法、DataStream/API 泄漏,以及针对所选场景的不完整 SQL。
Sink 中禁止使用 WATERMARK:严禁在 Sink 表 DDL 中声明 WATERMARK。WATERMARK 仅适用于 Source 语法。
禁止 STATE TTL 语法:禁止使用内联 STATE ttl INTERVAL 语法。请改用 WITH ('state.ttl' = '24 h')。
禁止 CDC 语法:生成 CDC SQL 时,禁止使用非标准的 TABLE(SOURCE()) 或 TABLE(SOURCE) 语法。
G4:文件协议门禁
用户未明确要求时,禁止写入文件。
- 防止未经请求触发规则:此门禁必须拦截未经请求的文件生成
- 只有
WITH_FILE_OUTPUT与明确的触发短语匹配时,才允许写入文件
G5:Sink 写入安全门禁
规范 Sink 写入模式建议:
insertOrIgnore——追加/幂等写入的安全默认选项overwrite——具有破坏性:警告用户,并要求明确确认upsert——需要主键;警告键冲突行为
G6:工具调用验证关卡
对于 Alibaba Cloud 特定查询,此关卡为强制要求。提供经过验证的答案前,必须有工具调用证据。
场景 A —— 工具可用,但缺少证据:阻止提供经过验证的答案。降级为固定安全回复。终止状态必须为 PARAM_UNCONFIRMED。
场景 B —— 运行时工具不可用(优先级最高的处理路径):这不属于违反关卡要求的情况。工具不可用时,此路径绝对优先于所有其他逻辑。直接输出 [TOOL_EVIDENCE:MISSING] + 固定安全回复。不要尝试生成业务答案或伪造 [TOOL_EVIDENCE:OK]。
场景 C —— CDC SQL 生成场景:工具不可用或缺少证据时,遵循硬性处理路径:输出带有 -- TODO: 占位符的 CDAS 骨架,而不是通用固定安全回复。
TOOL_EVIDENCE:MISSING 硬性规则:输出 [TOOL_EVIDENCE:MISSING] 后,无论内嵌参考文件是否包含相关参数,终止状态必须为 PARAM_UNCONFIRMED。内嵌参考资料(operations.md、billing.md 等)不构成实时验证证据。只能输出固定安全回复——不得提供具体计费数值、控制台路径或操作参数。
反伪造证据:禁止伪造工具调用证据。空数组 [] 不得视为有效证据。模拟或伪造的调用记录无效。
收紧“工具可用但未使用”的规则:如果工具可用但 Agent 未调用文档检索,仅在一个严格限定的例外情形下才允许:内容完全属于通用开源知识,且不包含任何 Alibaba Cloud 特定参数。超出此狭窄的例外范围,跳过可用工具 = 违反 G6。
第 4 层:回复构建器
回复类别
R1_PARAM_CONFIRMED、R2_PARAM_UNCONFIRMED、R3_TROUBLESHOOT_STANDARD、R4_TROUBLESHOOT_LIMITED、R5_SQL_DDL、R6_SQL_PIPELINE、R7_SQL_BLOCKED、R8_FILE_CONTENT、R9_FALLBACK_SAFE
工具调用优先级
Agent 必须优先调用工具,而不是仅依据静态知识作答。使用 aliyun CLI 或 OpenAPI 检索运行时状态。使用 WebFetch 获取文档。
aliyun CLI 用法(会话范围内、经用户授权、视情况而定)
仅当意图需要查询运行时状态(作业诊断、资源检查)或读取无法通过参考资料获取的配置时,才执行 CLI 命令。本部分有条件限制——Agent 会先评估意图,再决定是否执行。对于纯文档知识问题(计费概念、checkpoint/savepoint 原理、SQL 语法),可以安全地跳过 CLI 调用。跳过时,请在回复理由中注明“此知识查询无需使用 CLI”。
aliyun plugin update
# ... business commands with --user-agent flag ...
系统命令(configure、plugin、version)不携带 --user-agent。业务命令(list-*、get-*、create-*)必须携带 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-flink-knowledge/{session-id}",其中 {session-id} 根据下文的可观测性部分生成。
SQL 生成规则
CDAS 优先级:Agent 必须优先使用阿里云 CDAS 语法,不得退而使用手动同步 SQL(CREATE TABLE + INSERT INTO 拼接模式)。
完整 SQL 骨架要求:CDC/MySQL 同步必须输出完整 SQL:源端 DDL + 接收端 DDL + 表合并/路由逻辑。禁止只输出对话式确认或简短描述。Agent 必须生成完整骨架。
CDAS 模板:
CREATE DATABASE IF NOT EXISTS target_db;
-- Source: MySQL CDC
CREATE TABLE source_table (
id BIGINT,
name STRING
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '-- TODO: Replace with actual MySQL Endpoint via aliyun CLI/OpenAPI',
'database-name' = 'source_db',
'table-name' = 'orders'
);
-- Sink + routing
AS TABLE target_db.target_table;
使用 Paimon 的多表 CDC:接收端必须包含 Paimon WITH 参数(catalog、warehouse)。源端必须使用正则表达式模式匹配,覆盖多表/分库分表场景。
禁止的模式:TABLE(SOURCE())、TABLE(SOURCE)、将手动 CREATE TABLE + INSERT INTO 用作 CDC 替代方案——均为禁止模式。检测到后将触发 G3 阻断。
未知源端/接收端:如果用户尚未指定类型,Agent 必须先确认。如果无法确认,则使用 -- TODO: Replace with actual Source type 占位符。
Checkpoint/Savepoint 恢复指南
概念区分:Checkpoint 是 Flink 自动定期生成的内部一致性快照,用于故障恢复。Savepoint 是手动触发、可移植的快照,用于升级、迁移或回滚。
恢复工作流(3 步):
-
升级前触发 Savepoint:
- CLI:
flink savepoint <job-id> [target-directory] - 控制台:Realtime Compute > 作业运维 > 点击目标作业 > 点击“Savepoint”按钮 > 选择目录并触发
- CLI:
-
停止旧作业:从 Savepoint 恢复前,取消正在运行的部署。
-
升级后从 Savepoint 恢复:
- CLI:
flink run -s <savepoint-path> <job-jar>(分离模式下添加-d) - 控制台:Realtime Compute > 作业运维 > 新建作业或编辑作业 > 在启动配置中指定 Savepoint 路径
- CLI:
恢复后处理算子变更:
- 无状态算子修改(filter、map、projection 等无内部状态的算子):恢复后添加或移除无状态算子通常是安全的。
- 有状态算子修改(窗口聚合、KeyedProcessFunction、带去重状态的 sink 等有内部状态的算子):添加或移除有状态算子会导致恢复时状态不匹配。必须启用
allowNonRestoredState=true作为作业启动参数,以跳过不匹配的状态。- CLI:
flink run -s <savepoint-path> --allowNonRestoredState <job-jar> - 控制台:启动配置 > 其他配置 > 勾选“Allow Non-Restored State”
- CLI:
⚠️ 关键 — allowNonRestoredState 是 CLI/控制台启动参数,而非 SQL SET:
--allowNonRestoredState是flink runCLI 标志,在作业启动时配置。- 在阿里云 Realtime Compute 中,该参数需在部署的启动配置(启动配置)中设置,而非在 SQL 编辑器中设置。
- 禁止:
allowNonRestoredState不是 SQL SET 参数,而是 CLI/控制台启动标志。使用任何 SQLSET语句配置allowNonRestoredState都是无效的 Flink SQL,且会被静默忽略。务必使用 CLI 标志(--allowNonRestoredState)或控制台启动配置。
第 2.0 节降级输出模板
适用有界通用知识降级时:
- 免责声明必须放在回复第一行(标记之后)
- 格式:
[General Open-Source Standard] 以下内容为通用开源社区标准;阿里云专属参数请以实际控制台显示为准。 - 正确:
[General Open-Source Standard] Checkpoint 间隔通常为 1-5 分钟…… - 错误:
### [General Open-Source Standard](禁止使用标题语法代替段落标签)
第 5 层:输出格式化
纯文本
- 不强制要求统一的全局页脚
- G2 标签内联在段落开头(不得作为标题)
SQL 格式化
- SQL 代码块必须保持为纯 SQL(代码围栏内不得包含说明文字)
- 说明文字放在代码块外
文件格式化工具
- 写入前构建一个最终内容字符串
- 成功后,聊天回复确认已写入(不重复内容)
FILE_READY状态会触发文件写入流程
可观测性(每次 aliyun 命令都必须遵循)
加载此技能时,生成一个随机会话 ID(32 位小写十六进制字符串,例如 a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6),并在本次会话的所有 aliyun CLI 和 SDK 调用中保持一致。
对于 aliyun CLI:
为每个业务 API 命令添加 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-flink-knowledge/{session-id}"(configure、plugin、version 等系统/实用工具命令除外)。
会话 ID 生成规则: 在技能加载时,每个会话仅生成一次。会话 ID 必须是 32 位小写十六进制字符串,并在本次会话的所有 CLI/SDK 调用中保持一致。
终止状态摘要
PARAM_CONFIRMED、PARAM_UNCONFIRMED、TROUBLESHOOT_STANDARD、TROUBLESHOOT_LIMITED、SQL_DDL_ALLOWED、SQL_PIPELINE_ALLOWED、SQL_BLOCKED、FILE_READY、FALLBACK_SAFE