File size: 3,912 Bytes
f53fbd9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
:setvar DemoDatabase "CustomerAIDemo"
:setvar EmbeddingModelName "LocalEmbeddingModel"

USE [$(DemoDatabase)];
GO

PRINT 'A1. Latest customer feedback rows';
SELECT TOP (10)
    FeedbackId,
    Product,
    CustomerSegment,
    RiskLevel,
    FeedbackText,
    CreatedAt
FROM dbo.CustomerFeedback
ORDER BY CreatedAt DESC;
GO

PRINT 'A2. Legacy keyword search: this misses "ghi no", "so du giam", "tien bi giu"';
SELECT TOP (10)
    FeedbackId,
    Product,
    RiskLevel,
    FeedbackText
FROM dbo.CustomerFeedback
WHERE FeedbackText LIKE N'%trừ tiền%'
   OR FeedbackText LIKE N'%hoàn tiền%'
   OR FeedbackText LIKE N'%giao dịch lỗi%'
ORDER BY CreatedAt DESC;
GO

PRINT 'B. Semantic search: same intent, different wording';
DECLARE @query VECTOR(1024) =
    AI_GENERATE_EMBEDDINGS(
        N'app báo giao dịch thất bại nhưng tài khoản vẫn bị trừ tiền'
        USE MODEL $(EmbeddingModelName)
    );

SELECT TOP (10) WITH APPROXIMATE
    f.FeedbackId,
    f.Product,
    f.CustomerSegment,
    f.RiskLevel,
    f.FeedbackText,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.CustomerFeedback AS f,
        COLUMN = Embedding,
        SIMILAR_TO = @query,
        METRIC = 'cosine'
     ) AS r
ORDER BY r.distance;
GO

PRINT 'C. Semantic search plus business filters: VIP + High/Critical + last 7 days';
DECLARE @query VECTOR(1024) =
    AI_GENERATE_EMBEDDINGS(
        N'khách hàng VIP gặp lỗi thanh toán nghiêm trọng'
        USE MODEL $(EmbeddingModelName)
    );

SELECT TOP (20) WITH APPROXIMATE
    f.FeedbackId,
    f.Product,
    f.CustomerSegment,
    f.RiskLevel,
    f.Channel,
    f.CreatedAt,
    f.FeedbackText,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.CustomerFeedback AS f,
        COLUMN = Embedding,
        SIMILAR_TO = @query,
        METRIC = 'cosine'
     ) AS r
WHERE f.CustomerSegment = N'VIP'
  AND f.RiskLevel IN (N'High', N'Critical')
  AND f.CreatedAt >= DATEADD(DAY, -7, SYSUTCDATETIME())
ORDER BY r.distance;
GO

PRINT 'D. From one serious case, find similar cases';
DECLARE @caseId INT =
(
    SELECT TOP (1) FeedbackId
    FROM dbo.CustomerFeedback
    WHERE SourceIssueGroup = N'Failed transaction but debited'
      AND RiskLevel = N'Critical'
      AND Embedding IS NOT NULL
    ORDER BY FeedbackId
);

DECLARE @caseVector VECTOR(1024);

SELECT @caseVector = Embedding
FROM dbo.CustomerFeedback
WHERE FeedbackId = @caseId;

SELECT
    @caseId AS seed_feedback_id,
    FeedbackText AS seed_feedback_text
FROM dbo.CustomerFeedback
WHERE FeedbackId = @caseId;

SELECT TOP (25) WITH APPROXIMATE
    f.FeedbackId,
    f.Product,
    f.CustomerSegment,
    f.RiskLevel,
    f.CreatedAt,
    f.FeedbackText,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.CustomerFeedback AS f,
        COLUMN = Embedding,
        SIMILAR_TO = @caseVector,
        METRIC = 'cosine'
     ) AS r
WHERE f.FeedbackId <> @caseId
ORDER BY r.distance;
GO

PRINT 'E. Risk triage summary from top semantic hits';
DECLARE @query VECTOR(1024) =
    AI_GENERATE_EMBEDDINGS(
        N'giao dịch thanh toán bị lỗi nhưng tiền của khách hàng bị giữ hoặc bị ghi nợ'
        USE MODEL $(EmbeddingModelName)
    );

SELECT
    Product,
    RiskLevel,
    COUNT(*) AS hit_count,
    MIN(distance) AS closest_distance,
    AVG(distance) AS avg_distance
FROM
(
    SELECT TOP (100) WITH APPROXIMATE
        f.FeedbackId,
        f.Product,
        f.RiskLevel,
        r.distance
    FROM VECTOR_SEARCH(
            TABLE = dbo.CustomerFeedback AS f,
            COLUMN = Embedding,
            SIMILAR_TO = @query,
            METRIC = 'cosine'
         ) AS r
    ORDER BY r.distance
) AS hits
GROUP BY Product, RiskLevel
ORDER BY closest_distance;
GO

PRINT 'F. Security check: embedding model registered inside SQL Server';
SELECT
    name,
    location,
    api_format,
    model_type,
    model
FROM sys.external_models;
GO