refs #739: preserve Smilegate changes before repository layout migration
This commit is contained in:
82
database/adb/118_sgmp_qa_vector_quality_threshold.sql
Normal file
82
database/adb/118_sgmp_qa_vector_quality_threshold.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- Customer-managed quality floor for runtime Few-shot retrieval.
|
||||
-- Lower cosine distance is more similar. The value is data, not application code.
|
||||
MERGE INTO sg_game_scope_policy t
|
||||
USING (
|
||||
SELECT 'QA_VECTOR_MAX_COSINE_DISTANCE' AS policy_key,
|
||||
0.650000 AS number_value,
|
||||
'Maximum cosine distance accepted for a runtime approved Few-shot example.' AS description
|
||||
FROM dual
|
||||
) s
|
||||
ON (t.policy_key = s.policy_key)
|
||||
WHEN MATCHED THEN UPDATE SET
|
||||
t.number_value = s.number_value,
|
||||
t.description = s.description,
|
||||
t.active_yn = 'Y',
|
||||
t.updated_at = SYSTIMESTAMP
|
||||
WHEN NOT MATCHED THEN INSERT (
|
||||
policy_key, number_value, text_value, description, active_yn
|
||||
) VALUES (
|
||||
s.policy_key, s.number_value, NULL, s.description, 'Y'
|
||||
);
|
||||
/
|
||||
|
||||
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'
|
||||
-- A generated structural pattern is review material, not a runtime
|
||||
-- Few-shot. Runtime examples must have human verification and an
|
||||
-- executable SQL body rather than unresolved logical placeholders.
|
||||
AND inspection_status = 'VERIFIED'
|
||||
AND answer_sql IS NOT NULL
|
||||
AND 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;
|
||||
/
|
||||
|
||||
COMMENT ON TABLE sg_game_scope_policy IS
|
||||
'Customer-managed game scope and runtime retrieval policy values; changing a value requires no application deployment.';
|
||||
/
|
||||
Reference in New Issue
Block a user