OracleEmbeddings 통합
OracleEmbeddings 통합
LangChain JavaScript로 OracleEmbeddings 임베딩 모델과 통합하는 방법을 안내할게요.
출처: 문서
본문
Oracle AI Database는 키워드가 아닌 의미(시맨틱)로 데이터를 조회하는 AI 워크로드를 지원해요. 단일 시스템에서 비정형 콘텐츠에 대한 의미 검색과 비즈니스 데이터에 대한 관계형 필터링을 결합하므로, 별도의 벡터 데이터베이스를 도입하고 여러 플랫폼에 데이터를 분산하지 않고도 검색 워크로드(RAG 등)를 구축할 수 있어요.
이 가이드는 OracleEmbeddings로 콘텐츠에 대한 임베딩을 생성하는 방법을 보여줘요.
왜 Oracle에서(또는 Oracle을 통해) 임베딩을 생성하나요? 데이터 거버넌스와 운영 보장(보안, 트랜잭션, 가용성)을 AI 워크플로에 가까이 유지하면서, 환경에 맞는 임베딩 제공자 모델을 선택할 수 있어요.
개요
통합 세부 정보
| 클래스 | 패키지 | Local | PY 지원 |
|---|---|---|---|
OracleEmbeddings |
@oracle/langchain-oracledb |
✅ | ✅ |
설정
OracleEmbeddings를 사용하려면 @oracle/langchain-oracledb 헬퍼(그리고 @langchain/core)를 설치하고 시스템에 맞는 Oracle Database 드라이버 사전 요구사항을 충족했는지 확인하세요.
자격 증명
벡터 테이블과 ONNX 모델을 소유한 Oracle 사용자에 대한 자격 증명을 내보내세요(또는 시크릿 매니저에서 로드하세요).
export ORACLE_USER=testuser
export ORACLE_PASSWORD=testuser
export ORACLE_DSN="localhost:1521/free"
제3자 제공자(예: OCI Generative AI 또는 Hugging Face)를 호출할 계획이라면 먼저 Oracle Database 내부에 자격 증명을 만들어야 해요. PL/SQL 헬퍼 프로시저는 Oracle AI Vector Search 가이드를 참고하세요.
설치
yarn add @oracle/langchain-oracledb @langchain/core
pnpm add @oracle/langchain-oracledb @langchain/core
임베딩 인스턴스화
import oracledb from "oracledb";
import { OracleEmbeddings } from "@oracle/langchain-oracledb";
const connection = await oracledb.getConnection({
user: process.env.ORACLE_USER,
password: process.env.ORACLE_PASSWORD,
connectionString: process.env.ORACLE_DSN,
});
const embeddings = new OracleEmbeddings(connection, {
provider: "database",
model: "DEMO_MODEL",
});
// Close the connection (or pool) when you are done to avoid leaking resources.
// await connection.close();
생성자의 세 번째 인자는 선택적 proxy 문자열이에요. 아웃바운드 요청이 HTTP 프록시를 통해 이동해야 할 때(예: 사설 네트워크에서 Hugging Face 호출 시) 사용하세요.
Oracle Database 내부에서 ONNX 모델 실행
Oracle Database는 다양한 임베딩 제공자를 수용하여, 사용자가 독점 데이터베이스 솔루션과 OCIGENAI, HuggingFace 같은 제3자 서비스 중에서 선택할 수 있게 해줘요. 이 선택은 임베딩 생성·관리 방식을 결정해요.
중요: 데이터베이스 옵션을 선택한다면 ONNX 모델을 Oracle Database에 업로드해야 해요. 반대로 임베딩 생성에 제3자 제공자를 선택하면 Oracle Database에 ONNX 모델을 업로드할 필요가 없어요.
Oracle 내부에서 ONNX 모델을 직접 사용하는 큰 장점은 데이터를 외부 당사자에게 전송할 필요가 없어 보안과 성능이 향상된다는 점이에요. 또한 이 방법은 네트워크 또는 REST API 호출과 관련된 지연 시간을 피해요.
아래는 Oracle Database에 ONNX 모델을 업로드하는 예제 코드예요:
import { OracleEmbeddings } from "@oracle/langchain-oracledb";
await OracleEmbeddings.loadOnnxModel(
connection,
"/path/to/model",
"all-minilm-l12-v2.onnx",
"DEMO_MODEL",
);
const dbEmbeddings = new OracleEmbeddings(connection, {
provider: "database",
model: "DEMO_MODEL",
});
const singleVector = await dbEmbeddings.embedQuery(
"Summarize hybrid search patterns in Oracle Database.",
);
console.log(singleVector.length);
관리형 임베딩 제공자 호출
provider를 전환해 OCI Generative AI 또는 Hugging Face로 임베딩 요청을 라우팅하세요. Oracle의 DBMS_VECTOR_CHAIN 헬퍼로 만든 자격 증명 이름과 필요한 경우 프록시를 제공하세요.
const ociEmbeddings = new OracleEmbeddings(connection, {
provider: "ocigenai",
credential_name: "OCI_CRED",
url: "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
model: "cohere.embed-english-light-v3.0",
}, process.env.HTTP_PROXY);
const hfEmbeddings = new OracleEmbeddings(connection, {
provider: "huggingface",
credential_name: "HF_CRED",
url: "https://api-inference.huggingface.co/pipeline/feature-extraction/",
model: "sentence-transformers/all-MiniLM-L6-v2",
});
// Clean up when finished:
// await connection.close();
검색을 위한 문서 임베딩
동일한 임베딩 인스턴스를 사용해 Oracle Database의 벡터 저장소 또는 하이브리드 검색을 위한 콘텐츠를 준비하세요.
import { OracleDocLoader, OracleTextSplitter } from "@oracle/langchain-oracledb";
const loader = new OracleDocLoader(connection, {
owner: "TESTUSER",
tablename: "DEMO_TAB",
colname: "DATA",
});
const docs = await loader.load();
const splitter = new OracleTextSplitter(connection, {
split: "chars",
max: 500,
normalize: "all",
});
const chunks = await splitter.splitText(docs[0].pageContent);
const vectors = await embeddings.embedDocuments(chunks);
console.log(`Generated ${vectors.length} vectors`);
다음 단계
- 하이브리드 검색을 위해
OracleVS로 임베딩 저장 OracleSummary로 문서 요약
API 레퍼런스
모든 OracleEmbeddings 옵션에 대한 자세한 문서는 Oracle LangChain Oracle DB 저장소를 참고하세요.
더 알아보기
- 이 문서를 MCP로 연결하면 Claude, VSCode 등에서 실시간 답변을 받을 수 있어요.
- GitHub에서 이 페이지 편집하기 또는 이슈 제출하기.