70 lines
2.7 KiB
MySQL
70 lines
2.7 KiB
MySQL
-- Runtime Few-shots remain semantic vector retrieval. Customer examples are
|
|
-- governed by their DB approval state, not restricted to exact text matches.
|
|
|
|
UPDATE sg_qa_vector_example
|
|
SET reference_status = 'APPROVED',
|
|
reference_kind = 'SQL_TEMPLATE',
|
|
target_type = 'SINGLE',
|
|
object_role = 'GAME_GOODS_HOLDINGS',
|
|
inspection_status = 'VERIFIED',
|
|
inspection_note = 'Verified CZN-07 semantic Few-shot. Use goods holdings, crystal dimension, RU_FLAG=1, excluded-user filter, nonzero holdings, and daily grouping.',
|
|
verified_at = SYSTIMESTAMP,
|
|
verified_by = 'SGMP_POC_METADATA_REVIEW'
|
|
WHERE source_type = 'CUSTOMER_QA_BENCHMARK'
|
|
AND source_case_id = 'CZN-07'
|
|
/
|
|
|
|
CREATE OR REPLACE FUNCTION sg_qa_vector_search(
|
|
p_question IN CLOB,
|
|
p_top_k IN PLS_INTEGER DEFAULT 3,
|
|
p_target_type IN VARCHAR2 DEFAULT 'ANY'
|
|
) RETURN SYS_REFCURSOR AUTHID DEFINER
|
|
IS
|
|
v_query_vector VECTOR;
|
|
v_results SYS_REFCURSOR;
|
|
v_target_type VARCHAR2(16) := UPPER(TRIM(NVL(p_target_type, 'ANY')));
|
|
v_max_cosine_distance NUMBER;
|
|
BEGIN
|
|
IF p_question IS NULL THEN RAISE_APPLICATION_ERROR(-20003, 'question is required.'); END IF;
|
|
IF p_top_k IS NULL OR p_top_k < 1 OR p_top_k > 20 THEN
|
|
RAISE_APPLICATION_ERROR(-20004, 'top_k must be between 1 and 20.');
|
|
END IF;
|
|
IF v_target_type NOT IN ('NONE', 'SINGLE', 'MULTI', 'ALL', 'ANY') THEN
|
|
RAISE_APPLICATION_ERROR(-20005, 'invalid target type.');
|
|
END IF;
|
|
|
|
SELECT number_value INTO v_max_cosine_distance
|
|
FROM sg_game_scope_policy
|
|
WHERE policy_key = 'QA_VECTOR_MAX_COSINE_DISTANCE'
|
|
AND active_yn = 'Y'
|
|
AND number_value IS NOT NULL;
|
|
|
|
v_query_vector := DBMS_VECTOR.UTL_TO_EMBEDDING(
|
|
p_question, JSON(sg_qa_vector_params('search_query'))
|
|
);
|
|
|
|
OPEN v_results FOR
|
|
SELECT example_id, question, answer_sql, answer_text, embedding_model,
|
|
reference_kind, target_type, object_role, source_case_id, source_type,
|
|
cosine_distance
|
|
FROM (
|
|
SELECT example_id, question, answer_sql, answer_text, embedding_model,
|
|
reference_kind, target_type, object_role, source_case_id, source_type,
|
|
VECTOR_DISTANCE(embedding, v_query_vector, COSINE) AS cosine_distance
|
|
FROM sg_qa_vector_example
|
|
WHERE reference_status = 'APPROVED'
|
|
AND inspection_status = 'VERIFIED'
|
|
AND answer_sql IS NOT NULL
|
|
AND (source_type = 'POLICY_TEMPLATE'
|
|
OR NOT REGEXP_LIKE(answer_sql, '<[A-Z][A-Z0-9_]*>', 'i'))
|
|
AND (target_type = 'ANY' OR v_target_type = 'ANY' OR target_type = v_target_type)
|
|
)
|
|
WHERE cosine_distance <= v_max_cosine_distance
|
|
ORDER BY cosine_distance, example_id
|
|
FETCH FIRST p_top_k ROWS ONLY;
|
|
RETURN v_results;
|
|
END;
|
|
/
|
|
|
|
COMMIT
|