This is an automated email from the ASF dual-hosted git repository.

RaigorJiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new c9b29c87417 Add LLM usability scenario for natural encrypt rule 
workflow (#38987)
c9b29c87417 is described below

commit c9b29c87417b4a3761682bb12836dc11de23b3c9
Author: zhaojinchao <[email protected]>
AuthorDate: Fri Jul 3 12:43:07 2026 +0800

    Add LLM usability scenario for natural encrypt rule workflow (#38987)
    
    * Add LLM usability scenario for natural encrypt rule workflow
    
    * Fix ci
    
    * Fix ci
---
 .../usability/scenario/LLMUsabilityScenarioCatalog.java      | 12 ++++++++++++
 .../usability/scenario/LLMUsabilityScenarioCatalogTest.java  | 11 ++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git 
a/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalog.java
 
b/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalog.java
index d0dafb5adbb..5efc912680b 100644
--- 
a/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalog.java
+++ 
b/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalog.java
@@ -102,6 +102,18 @@ public final class LLMUsabilityScenarioCatalog {
                                 "database_gateway_execute_query"),
                         List.of("database_gateway_plan_mask_rule", 
"database_gateway_apply_workflow", "database_gateway_validate_workflow", 
"database_gateway_execute_query")),
                 List.of(MCPInteractionActionNames.READ_RESOURCE, 
"database_gateway_plan_mask_rule"), List.of(), false, false));
+        result.add(createScenario("natural-encrypt-rule-md5-" + runtimeKind, 
LLMUsabilityDimension.TOOL, runtimeKind,
+                List.of(LLMUsabilityScenario.NATURAL_TASK_TAG, "natural", 
"workflow", "encrypt"),
+                new LLME2EScenario("natural-encrypt-rule-md5-" + runtimeKind, 
SYSTEM_PROMPT,
+                        "A user asks you to identify and create an encrypt 
rule now for logical database `" + databaseName + "`, schema `" + schemaName + 
"`, table `" + tableName
+                                + "`, and column `status` using the MD5 
encrypt algorithm with cipher column `status_cipher`. The user wants 
irreversible hashing, no equality, and no like. "
+                                + "Use the planning response plan_id for 
follow-up workflow calls, keep execution manual-only, validate the workflow 
with the returned plan_id, "
+                                + "and finish by verifying `" + query + "`.",
+                        createAnswer(databaseName, schemaName, tableName, 
query, totalOrders),
+                        List.of(MCPInteractionActionNames.READ_RESOURCE, 
"database_gateway_plan_encrypt_rule", "database_gateway_apply_workflow", 
"database_gateway_validate_workflow",
+                                "database_gateway_execute_query"),
+                        List.of("database_gateway_plan_encrypt_rule", 
"database_gateway_apply_workflow", "database_gateway_validate_workflow", 
"database_gateway_execute_query")),
+                List.of(MCPInteractionActionNames.READ_RESOURCE, 
"database_gateway_plan_encrypt_rule"), List.of(), false, false));
         result.add(createScenario("natural-table-resource-" + runtimeKind, 
LLMUsabilityDimension.RESOURCE, runtimeKind,
                 List.of(LLMUsabilityScenario.NATURAL_TASK_TAG, "natural", 
"resource"),
                 new LLME2EScenario("natural-table-resource-" + runtimeKind, 
SYSTEM_PROMPT,
diff --git 
a/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalogTest.java
 
b/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalogTest.java
index 59a4b288401..2826c596c56 100644
--- 
a/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalogTest.java
+++ 
b/test/e2e/mcp/src/test/java/org/apache/shardingsphere/test/e2e/mcp/llm/suite/usability/scenario/LLMUsabilityScenarioCatalogTest.java
@@ -38,7 +38,7 @@ class LLMUsabilityScenarioCatalogTest {
                 "SELECT COUNT(*) AS total_orders FROM orders", 2);
         Map<String, LLMUsabilityScenario> actualScenarios = 
actual.stream().collect(Collectors.toMap(LLMUsabilityScenario::getScenarioId, 
each -> each));
         assertThat(actualScenarios.keySet(), 
hasItems("natural-metadata-lookup-mysql", "natural-read-only-sql-mysql", 
"natural-side-effect-preview-mysql",
-                "natural-workflow-manual-export-mysql", 
"natural-mask-rule-md5-mysql", "natural-table-resource-mysql"));
+                "natural-workflow-manual-export-mysql", 
"natural-mask-rule-md5-mysql", "natural-encrypt-rule-md5-mysql", 
"natural-table-resource-mysql"));
         
assertThat(actualScenarios.get("natural-side-effect-preview-mysql").getLlmScenario().getRequiredToolNames(),
 is(List.of("database_gateway_execute_update", 
"database_gateway_execute_query")));
         
assertThat(actualScenarios.get("natural-table-resource-mysql").getExpectedResourceUris(),
                 
is(List.of("shardingsphere://databases/logic_db/schemas/logic_db/tables/orders")));
@@ -54,6 +54,15 @@ class LLMUsabilityScenarioCatalogTest {
         
assertThat(actualScenarios.get("natural-mask-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("MD5 mask algorithm"));
         
assertThat(actualScenarios.get("natural-mask-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("manual-only"));
         
assertThat(actualScenarios.get("natural-mask-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("validate the workflow"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getRequiredToolNames(),
+                is(List.of("database_gateway_plan_encrypt_rule", 
"database_gateway_apply_workflow", "database_gateway_validate_workflow", 
"database_gateway_execute_query")));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("identify and create an encrypt rule now"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("table `orders`"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("MD5 encrypt algorithm"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("cipher column `status_cipher`"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("irreversible hashing, no equality, and no like"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("manual-only"));
+        
assertThat(actualScenarios.get("natural-encrypt-rule-md5-mysql").getLlmScenario().getUserPrompt(),
 containsString("validate the workflow"));
         assertTrue(actual.stream().allMatch(each -> 
each.getTags().contains("natural")));
         
assertTrue(actual.stream().allMatch(LLMUsabilityScenario::isNaturalTask));
         
assertTrue(actual.stream().noneMatch(LLMUsabilityScenario::isProtocolContract));

Reply via email to