# 723. SGMP QA Vector Retrieval ## Goal Store curated question, answer SQL, answer text, and their combined retrieval document in `SGMP_POC`. Retrieve the top-K closest examples for a new question and pass the returned context to the Text2SQL prompt in a later application integration. ## Security boundary - IAM identity: `sgmp-qa-vector-api` - IAM group: `sgmp-vector-embed-group` - IAM policy: only `use generative-ai-text-embedding in tenancy` - Database credential: `SGMP_POC_QA_VECTOR_CRED`, created from that dedicated API signing key only. It does not reuse `SGMP_POC_OCI_DEFAULT_CRED`. - Network: HTTPS only to OCI GenAI Chicago EmbedText endpoint on port 443. The `SGMP_POC` ACE is provisioned once by an ADB `ADMIN` connection because an application schema cannot administer network ACLs. - The private key is read from `VECTOR_OCI_API_KEY_FILE`; it is never committed, displayed, or persisted outside the encrypted database credential. ## Embedding contract - Model: `cohere.embed-v4.0` - Dimension: `1536` FLOAT32 - The current ADB `DBMS_VECTOR` OCI adapter does not forward Cohere Embed 4's `input_type` field; both paths therefore use the provider's compatible default request shape. The model and 1536-dimension vector contract remain fixed. Once the adapter exposes Embed 4 `input_type`, switch stored examples to `search_document` and incoming questions to `search_query`. - `p_top_k` default: `3` (accepted range `1..20`) Oracle recommends distinct document/query input types for Cohere Embed 4 RAG flows and its default output size is 1536. See [Cohere Embed 4](https://docs.oracle.com/en-us/iaas/Content/generative-ai/cohere-embed-4.htm). ## Database API ```sql -- Stores question + answer SQL + optional answer and returns EXAMPLE_ID. SELECT sg_qa_vector_store(:question, :answer_sql, :answer_text) FROM dual; -- Returns EXAMPLE_ID, QUESTION, ANSWER_SQL, ANSWER_TEXT, MODEL and distance. DECLARE results SYS_REFCURSOR; BEGIN results := sg_qa_vector_search(:question); -- default top 3 END; / -- Ready-to-insert textual context for a prompt. SELECT sg_qa_vector_context(:question, 3) FROM dual; ``` ## Apply ```bash export SGMP_POC_DB_PASSWORD='...' export SGMP_POC_WALLET_DIR='/path/to/Wallet_SGMPAIPOC' export VECTOR_OCI_USER_OCID='...' export VECTOR_OCI_TENANCY_OCID='...' export VECTOR_OCI_COMPARTMENT_OCID='...' export VECTOR_OCI_API_KEY_FILE='/secure/path/sgmp_qa_vector_api_key.pem' export VECTOR_OCI_API_KEY_FINGERPRINT='...' ./scripts/setup-sgmp-qa-vector.sh ``` For the initial small QA corpus, exact cosine search is deliberate: it makes results immediately verifiable. Add a vector index only after the corpus size and recall/latency target are measured.