mcpField
A
alibabacloud-flink-knowledge

alibabacloud-flink-knowledge

github.com/aliyun数据与数据库28153 次安装1 天前更新
代码仓库

关于 alibabacloud-flink-knowledge

alibabacloud-flink-knowledge 是处理 Alibaba Cloud Realtime Compute for Flink 问题的技能,按阶段执行意图分类、证据检查和风险控制。README 描述了 SQL、故障排查和参数类请求的响应规则。

主要功能

  1. 01将请求分为四类意图
  2. 02执行证据与风险检查
  3. 03处理 Flink SQL 生成请求
  4. 04约束故障排查响应
  5. 05遵循输出和文件请求规则

适用场景

  1. 01按规则检查 Flink SQL 请求
  2. 02判断文档是否支持参数答复
  3. 03对故障排查应用证据限制
  4. 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.md
billing.md
concepts.md
connectors.md
evaluation-cases.md
operations.md
permissions.md
quickstart.md
ram-policies.md
sql-development.md
scripts/
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_SQLFlink 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 变体或中日韩字形。任何字符偏差都会导致任务失败。

输出前验证(强制,生成首行前执行):

  1. 如果 WebFetch 返回的状态码不是 200、内容为空、出现 JS 渲染错误,或根本未调用 WebFetch → 首个标记必须为 [TOOL_EVIDENCE:MISSING]。此情况下严格禁止输出 OK,否则构成标记幻觉。
  2. 如果用户的提示中不包含上文列出的 13 个触发短语中的任何一个 → 第二个标记必须为 [FILE_REQUEST:ABSENT]。此情况下严格禁止输出 EXPLICIT。
  3. 这些检查优先于任何可能得出其他结论的内部推理。标记值仅由可观察事实(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 步阻断检查:

  1. 扫描当前响应上下文,查找字面子字符串 [FILE_REQUEST:ABSENT]。如果找到,立即终止工具调用栈,并将所有内容转换为内联 Markdown 输出。无论内容长度或感知到的实用性如何,任何情况下都不得调用 write_file/Write/create_file/save_file。
  2. 扫描用户的提示,查找 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 前缀变体或搜索工具)。至少尝试一条替代检索路径后,才能返回安全阻断响应。 当不存在适用的降级路径时,输出以下固定安全回复: 「应根据阿里云控制台的实际显示核实参数信息;目前无法获取官方文档进行核实。」

有界通用知识降级(硬性拦截的唯一例外): 当官方文档获取失败,且:

  1. 知识属于不存在云厂商差异的通用行业标准(no-cloud-vendor-difference)
  2. 知识不涉及阿里云控制台专属阈值、定价、CU、专有版本、SLA
  3. 回复必须以明确标签作为第一行开头

此时可以附带免责声明,提供通用开源社区标准。这是阿里云专有信息边界——任何涉及阿里云专属参数的内容都必须硬性拦截。

计费/引擎版本硬性拦截(不允许降级): 计费详情、引擎版本兼容性、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 步):

  1. 升级前触发 Savepoint:

    • CLI:flink savepoint <job-id> [target-directory]
    • 控制台:Realtime Compute > 作业运维 > 点击目标作业 > 点击“Savepoint”按钮 > 选择目录并触发
  2. 停止旧作业:从 Savepoint 恢复前,取消正在运行的部署。

  3. 升级后从 Savepoint 恢复:

    • CLI:flink run -s <savepoint-path> <job-jar>(分离模式下添加 -d)
    • 控制台:Realtime Compute > 作业运维 > 新建作业或编辑作业 > 在启动配置中指定 Savepoint 路径

恢复后处理算子变更:

  • 无状态算子修改(filter、map、projection 等无内部状态的算子):恢复后添加或移除无状态算子通常是安全的。
  • 有状态算子修改(窗口聚合、KeyedProcessFunction、带去重状态的 sink 等有内部状态的算子):添加或移除有状态算子会导致恢复时状态不匹配。必须启用 allowNonRestoredState=true 作为作业启动参数,以跳过不匹配的状态。
    • CLI:flink run -s <savepoint-path> --allowNonRestoredState <job-jar>
    • 控制台:启动配置 > 其他配置 > 勾选“Allow Non-Restored State”

⚠️ 关键 — allowNonRestoredState 是 CLI/控制台启动参数,而非 SQL SET:

  • --allowNonRestoredState 是 flink run CLI 标志,在作业启动时配置。
  • 在阿里云 Realtime Compute 中,该参数需在部署的启动配置(启动配置)中设置,而非在 SQL 编辑器中设置。
  • 禁止:allowNonRestoredState 不是 SQL SET 参数,而是 CLI/控制台启动标志。使用任何 SQL SET 语句配置 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

评论

支持 Markdown