75 lines
2.9 KiB
Markdown
75 lines
2.9 KiB
Markdown
# 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;
|
|
```
|
|
|
|
`SG_QA_VECTOR_STORE`는 SQL `SELECT` 표현식으로 호출되는 저장 함수이므로,
|
|
함수 내부의 INSERT는 자율 트랜잭션으로 수행하고 성공 시 commit, 실패 시 rollback
|
|
한다. 이 처리가 없으면 Oracle은 `ORA-14551`로 DML을 거절한다.
|
|
|
|
## 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.
|