주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI Data Science Notebook 내에서 OCI를 OpenSearch 및 LangChain과 통합
소개
OpenSearch 최근 몇 년 동안, 특히 기업들이 데이터 인사이트를 도출하고 맞춤형 비즈니스 사용 사례에 지능형 검색 기능을 활용하기 위해 대규모 언어 모델(LLM)을 도입하는 추세가 커지고 있습니다. OpenSearch는 최신 AI/ML 기능과 원활한 통합을 제공하겠다는 지속적인 노력을 통해 조직이 강력한 관찰 가능성, 검색 및 분석 엔진을 구축할 수 있게 되었으며, 이는 LLM 사용 증가에 따라 매우 중요합니다. OpenSearch(OCI with OpenSearch)가 포함된 Oracle Cloud Infrastructure Search에는 이미 생성형 AI(GenAI) 어시스턴트 및 학습-순위를 포함한 최신 AI/ML 기능을 활용하여 전략적 문제를 해결하는 데 있어 주목할 만한 열정이 있습니다.
OCI는 OpenSearch 2.11 릴리스를 통해 하이브리드 검색, 의미 검색, 검색 증강 생성(RAG)을 통한 대화형 검색을 수행하기 위한 콘솔 및 CLI(명령행 인터페이스) 기능을 제공했습니다. 그러나 대화형 검색 워크플로/RAG 파이프라인 구성을 중심으로 고객으로부터 수집한 몇 가지 중요한 문제점들이 해결되었지만, 더 중요한 것은 대규모의 비정형 또는 정형을 사전 처리하고 입수하기 위한 알고리즘의 복잡성입니다. 특히 PDF, CSV, EXCEL, WORD, DATA LAKES 등과 같은 다양한 형식의 데이터로 정보를 검색하는 데 속도와 정밀도가 모두 필요한 LLM 기반 응용 프로그램에서 데이터에 액세스할 수 있도록 합니다. 따라서 LangChain 및 OCI를 OpenSearch과 통합하는 것이 중요해졌습니다. 효율적인 쿼리 처리 및 검색 증강 생성(RAG)을 용이하게 함으로써 LLM이 보다 맥락적이고 정확한 응답을 제공할 수 있게 되었기 때문입니다.
LangChain는 개발자가 LLM과 OpenSearch 간의 통합을 간소화할 수 있도록 복잡한 LLM 워크플로를 생성하고 관리하는 데 사용하기 쉬운 프레임워크를 제공합니다. 이 조합은 언어 모델이 방대한 데이터 저장소에서 가장 관련성이 높은 정보를 검색할 수 있도록 하여 최종 사용자의 응답 품질을 개선함으로써 검색 관련성을 높입니다.
또한 OCI Data Science 및 OCI Generative AI와의 통합을 통해 최소한의 노력과 코드로 엔터프라이즈 AI 사용 사례의 개발 및 생산 배포 속도를 크게 높일 수 있습니다. OCI Data Science는 데이터 과학자가 최소한의 마찰로 모델을 구축, 교육 및 배포할 수 있는 포괄적인 도구 제품군을 제공하여 데이터 준비 및 모델 라이프사이클 관리와 관련된 많은 지루한 작업을 자동화합니다. OCI Data Science를 OCI와 OpenSearch, LangChain과 통합함으로써 AI를 효율적으로 운영하고, 더 적은 리소스로 고급 데이터 인사이트를 활용할 수 있게 되었습니다.
효율적인 가독성을 위해 이 첫 번째 자습서는 OpenSearch를 사용하여 OCI를 설정하고 OCI Data Science 서비스와의 통신을 구성하는 데 중점을 둡니다. LangChain를 구성하고 OCI와 OpenSearch의 통합을 활용하여 의미 검색을 수행합니다. 다음 튜토리얼에서는 LangChain, OCI와 OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions(AI Quick Actions) 및 OCI Generative AI 서비스 간의 원활한 통합을 활용하여 LLM 애플리케이션 개발 속도를 높이는 방법에 대해 중점적으로 다룹니다.
목표
- OCI Data Science Notebook 내에서 OCI를 OpenSearch 및 LangChain과 통합할 수 있습니다.
작업 1: OpenSearch 클러스터 생성 및 테넌시에 대한 OCI Data Science 노트북 설정
테넌시에 OCI Data Science 노트북을 설정하려면 몇 가지 단계가 필요합니다. 여기에는 인터넷 액세스로 VCN을 생성 및 구성하고, 그룹, 동적 그룹을 설정하고, OCI Data Science가 테넌시의 특정 리소스를 관리할 수 있도록 필요한 OCI Oracle Cloud Infrastructure Identity and Access Management(OCI IAM) 정책을 부여하는 단계가 포함됩니다. 간소화를 위해 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb의 모든 단계를 컴파일했습니다.
또한 OCI Data Science 팀은 이 서비스가 제공하는 모든 기능에 대한 자세한 설명서를 제공합니다. 자세한 내용은 데이터 과학 개요를 참조하십시오.
주: 이미 OpenSearch 클러스터가 있고 이미 테넌시에 대한 노트북을 구성한 경우 이 자습서의 LangChain 통합 부분으로 건너뛰고 의미 검색 사용 사례를 사용해 볼 수 있습니다.
새 OCI Data Science 프로젝트 자체를 생성해도 추가 컴퓨트 리소스가 생성되지 않으며, 데이터 사이언스 프로젝트하에서 생성하는 각 노트북 세션은 자체 컴퓨팅 리소스를 스핀합니다.
작업 1.1: VCN(가상 클라우드 네트워크) 구성
테넌시 내에 VCN을 생성하여 데이터 과학 작업에 대한 보안 통신을 허용하도록 적절한 서브넷 및 보안 목록이 설정되도록 합니다.
마법사를 사용하고 인터넷 접속으로 VCN 생성을 누르는 것이 좋습니다.
아니요: 매우 중요한 단계 중 하나는 VCN의 전용 서브넷에 적절한 수신 및 송신 규칙을 추가해야 하는 것입니다. 이러한 규칙이 없으면 노트북에 인터넷에 액세스할 수 없게 되므로 중요한 라이브러리 및 종속성을 설치할 수 없습니다. 기존 VCN이 이미 있는 경우 전용 서브넷의 보안 목록을 편집하여 다음 수신 규칙을 추가하기만 하면 됩니다.
작업 1.2: OpenSearch 클러스터 만들기
이미지가 2.11 이상인 OpenSearch 클러스터가 필요합니다.
기존 클러스터가 없는 경우 OpenSearch에서 Oracle Cloud Infrastructure Search를 사용하여 데이터 검색 및 시각화를 참조하십시오. 작업 1.1에서 생성한 것과 동일한 VCN을 사용하여 클러스터를 생성합니다.
또는
사용할 기존 클러스터가 이미 있는 경우 클러스터의 전용 서브넷으로 이동하여 보안 목록에 위의 송신 규칙을 추가하기만 하면 됩니다.
작업 1.3: 필수 그룹 및 동적 그룹 만들기
데이터 과학자에 대한 그룹과 OCI Data Science 리소스에 대한 동적 그룹을 정의합니다. 이를 통해 OCI 내에서 데이터 과학 활동을 수행하기 위한 적절한 권한을 얻을 수 있습니다. 필요한 그룹 및 동적 그룹을 수동으로 구성하는 방법에 대한 자세한 내용은 데이터 과학자 사용자 그룹 생성을 참조하십시오.
OCI Resource Manager 스택을 사용하여 이러한 리소스를 동적으로 생성하도록 선택할 수도 있습니다.
-
OCI 콘솔로 이동하여 개발자 서비스, 리소스 관리자로 이동하고 스택을 누릅니다.
-
스택 생성을 누르고 마법사에 따라 OCI Data Science 템플리트에서 스택을 생성합니다.
주: 템플리트 선택을 누르면 서비스 탭 아래에 데이터 과학 템플리트가 표시됩니다.
작업 1.4: 노트북에 대한 OCI IAM 정책 구성
그룹 및 동적 그룹에 권한을 부여하고 OCI Data Science 서비스가 테넌시의 특정 리소스를 관리하도록 허용하려면 일부 OCI IAM 정책을 구성해야 합니다. 정책이 네트워크 통신 및 데이터 액세스 권한을 포함하는지 확인합니다. 자세한 내용은 Model Deployment Policies을 참조하십시오.
-
모델 배치를 관리하는 정책입니다.
allow group <group-name> to manage data-science-models in compartment <compartment-name> allow group <group-name> to manage data-science-model-deployments in compartment <compartment-name> allow dynamic-group <dynamic-group-name> to manage data-science-model-deployments in compartment <compartment-name>
-
끝점 예측에 대한 액세스 권한을 부여하는 정책입니다.
-
conda 버킷 게시를 위한 모델 배치 액세스 정책입니다.
-
리소스 주체를 사용하여 사용자정의 컨테이너에 모델 배치 액세스 권한을 부여하는 정책입니다.
-
OCI Object Storage 버킷에 대한 모델 배치 정책입니다.
작업 1.5: AI 빠른 작업에 대한 OCI IAM 정책 구성
테넌시에서 AI Quick Actions의 기능을 활용하여 모델 교육, 평가, 배포를 자동화 및 가속화하려는 경우 OCI IAM 정책 및 동적 그룹 세트를 구성하여 테넌시의 적합한 리소스에 대한 액세스 권한을 부여해야 합니다. 이러한 필수 정책을 구성하지 않으면 노트북 세션에서 AI Quick Actions가 작동하지 않습니다. 자세한 내용은 AI 빠른 작업 정책을 참조하십시오.
Define tenancy datascience as ocid1.tenancy.oc1..aaaaaaaax5hdic7xxxxxxxxxxxxxxxxxnrncdzp3m75ubbvzqqzn3q
Endorse any-user to read data-science-models in tenancy datascience where ALL {target.compartment.name='service-managed-models'}
Endorse any-user to inspect data-science-models in tenancy datascience where ALL {target.compartment.name='service-managed-models'}
Endorse any-user to read object in tenancy datascience where ALL {target.compartment.name='service-managed-models', target.bucket.name='service-managed-models'}
루트 구획에 OCI IAM 정책 문서를 생성하는 것이 중요합니다. 모든 필수 규칙을 동일한 정책 문서에 추가할 수 있습니다. 이 자습서에 사용된 노트북과 AI Quick Actions에 대한 모든 OCI IAM 정책 세트를 간단히 확인할 수 있습니다. 자세한 내용은 data-science-iam-policies을 참조하십시오.
주: 컴파트먼트 이름과 그룹 및 동적 그룹 이름을 업데이트해야 합니다. 또한 설계에 따라 이러한 정책을 보다 제한적이거나 더 개방적으로 만들 수 있습니다.
작업 2: OCI Data Science에서 Jupyter Notebook 실행
노트북 세션을 시작하려면 데이터 과학 프로젝트를 생성해야 하며, 이 프로젝트에서 여러 노트북을 생성할 수 있습니다. 각 노트북에는 자체 VM(가상 머신)이 있으며 독립적으로 실행할 수 있습니다. 각 노트북 세션에서 여러 모델을 배포 및 관리하고, 기존 GitHub 또는 Bitbucket 저장소를 연결하거나, 새 모델을 생성 및 관리하고, 여러 Jupyter 노트북을 개발하고, 완전한 애플리케이션을 구축하거나, 전체 머신 러닝 워크플로우를 통합관리할 수 있습니다.
-
OCI 콘솔로 이동하여 Data Science, 프로젝트로 이동하고 프로젝트 생성을 누릅니다.
주: 단순성을 위해 동일한 컴파트먼트에 모든 리소스를 생성합니다. VCN 및 OpenSearch 클러스터를 생성한 것과 동일한 컴파트먼트를 선택해야 합니다.
-
새 노트북 세션을 만듭니다.
-
프로젝트 세부정보 페이지에서 노트북 세션 및 노트북 세션 생성을 누릅니다.
-
원하는 컴퓨트 구성을 선택하고 필요한 데이터 소스를 연결할 수 있습니다. 노트북 세션을 생성하는 동안 OpenSearch 클러스터에 사용한 것과 동일한 프라이빗 서브넷과 올바른 VCN을 선택해야 합니다.
-
-
Open을 눌러 노트북 세션을 실행합니다. 이제 pip를 사용하여 노트북 인터페이스에서 직접 LangChain 및 OpenSearch Python 클라이언트를 비롯한 필요한 라이브러리를 설치할 수 있습니다.
작업 3: Jupyter Notebook으로 LangChain 구성
Jupyter Notebook 환경 또는 스크립트의 다른 라이브러리와 함께 LangChain를 설치하고, OCI와의 원활한 통합 기능을 OpenSearch, HuggingFace, OCI Generative AI 서비스 등을 활용하여 의미 검색 또는 대화형 검색을 수행합니다.
Jupyter Notebook 상단에 다음 코드를 추가합니다.
!pip install -U langchain langchain-community opensearch-py pypdf sentence-transformers oci langchain-huggingface oracle_ads
노트북 세션 내에서 생성하는 각 Jupyter Notebook에 이러한 패키지를 매번 재설치할 필요가 없도록 하려면 여러 Jupyter 노트북에서 이 환경을 재사용할 수 있도록 conda 환경을 생성 및 활성화하고 모든 종속성을 설치하는 것이 좋습니다. Launcher 아래에 미리 구성된 여러 Conda 환경이 있습니다. 이러한 사전 구성된 환경을 터미널에 선택하고 설치한 다음 위에 추가 라이브러리를 설치하십시오. 설치가 완료되면 노트북의 커널을 이 활성 conda 환경으로 설정하면 됩니다.
-
새 터미널을 실행합니다. 파일, 새로 만들기로 이동하고 터미널을 누릅니다.
-
다음 명령을 실행하여 conda 환경을 만듭니다.
odsc conda install -s python_p310_any_x86_64_v1 conda activate <environment name>
-
다음 명령을 실행하여 터미널에서 pip를 사용하여 LangChain를 설치합니다.
pip install -U oracle_ads oci langchain langchain-community opensearch-py pypdf sentence-transformers oci langchain-huggingface oracle_ads
작업 4: LangChain를 사용하여 문서 처리
LangChain의 장점 중 하나는 대규모 문서를 효율적으로 처리하고 최소한의 코딩으로 구조적 또는 비구조적 데이터로 처리할 수 있는 기능을 제공한다는 것입니다. 사용하기에 가장 적합한 필요한 문서 처리 클래스를 임포트하고 문서를 처리하기 위한 로드 메소드를 호출하기만 하면 됩니다. 다음 명령을 실행합니다.
import os
from langchain.document_loaders import PyPDFLoader, CSVLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Step 1: Load PDF and CSV Documents
def load_documents():
# Load PDF Document
pdf_loader = PyPDFLoader("data/sample_document.pdf")
pdf_documents = pdf_loader.load()
# Load CSV Document
csv_loader = CSVLoader(file_path="data/sample_data.csv")
csv_documents = csv_loader.load()
# Combine both sets of documents
all_documents = pdf_documents + csv_documents
return all_documents
# Step 2: Split the documents into smaller chunks for better processing
def split_documents(documents):
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=100
)
split_docs = text_splitter.split_documents(documents)
return split_docs
# Load and process documents
documents = load_documents()
split_docs = split_documents(documents)
작업 5: OCI를 OpenSearch과 LangChain의 통합으로 활용하여 의미 검색 수행
noteBook 환경에 LangChain를 설치했으면 LangChain와 OpenSearch 통합을 통해 OCI를 활용하여 여러 API 호출을 통해 OpenSearch 단계별 긴 단계를 따르기 위해 처음부터 코드를 작성하는 것보다 의미 검색을 더 간단하게 수행할 수 있습니다.
-
작업 4에 표시된 대로 LangChain 문서 라이브러리를 사용하여 구조화되지 않은 데이터를 처리하고 조각화합니다.
-
수집 중 데이터에 대한 임베딩을 자동으로 생성하는 데 사용할 임베딩 모델을 정의합니다. 다시 한번 LangChain와 HuggingFace의 통합을 활용하면 사전 학습된 모든 HuggingFace 모델을 단일 코드 라인으로 배포할 수 있습니다. 사용할 포함 모델의 이름을 지정하기만 하면 됩니다. 이 용도로 사용자 정의 미세 조정 모델을 사용할 수도 있습니다. 다음 명령을 실행합니다.
from langchain.embeddings import HuggingFaceEmbeddings embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
-
LangChain를 사용하여 OpenSearch를 사용하여 OCI에 대한 접속을 생성하고, 사용할 인덱스 이름, 인증 방식 및 포함 모델을 지정합니다. 이 메소드를 사용하면 데이터 수집 중 지정된 인덱스 이름을 가진 인덱스가 생성되거나 인덱스가 존재할 경우 새 데이터로 갱신됩니다. 다음 명령을 실행합니다.
from langchain.vectorstores import OpenSearchVectorSearch import oci # set up your script to use Resource principal for authentication auth_provider = oci.auth.signers.get_resource_principals_signer() auth = ("username", "password") AUTH_TYPE="RESOURCE_PRINCIPAL" opensearch_url="https://amaaaaaallb3......................opensearch.us-ashburn-1.oci.oraclecloud.com:9200" // replace this whole value your opensearch url. Be sure sure to have the :9200 port in your url # Initialize OpenSearch as the vector database vector_db = OpenSearchVectorSearch(opensearch_url=opensearch_url, index_name="<YOUR-INDEX-NAME>", embedding_function=embedding_model, signer=auth_provider, auth_type="RESOURCE_PRINCIPAL", http_auth=auth)
-
LangChain를 사용하여 처리된 데이터 청크를 OpenSearch 클러스터로 직접 수집할 수도 있습니다. 다음 예에서는 처리된 문서 조각 목록에서 일괄 처리로 대량 수집을 수행하는 방법을 보여줍니다.
tqdm
라이브러리를 사용하여 데이터 수집의 진행률을 추적할 수 있습니다. 다음 명령을 실행합니다.from langchain.vectorstores import OpenSearchVectorSearch import oci from tqdm import tqdm batch_size=100 documents = load_documents() # function defined above feel free to or define a new one to process documents document_chunks = split_documents(documents) // function defined above feel free to edit index_name= <YOUR-INDEX-NAME> # Ingest documents in batches for i in tqdm(range(0, len(document_chunks), batch_size), desc="Ingesting batches"): batch = document_chunks[i:i + batch_size] vector_db.add_texts(texts=batch, bulk_size=batch_size, embedding=embedding_model, opensearch_url=opensearch_url, index_name= index_name, signer=auth_provider, auth_type=AUTH_TYPE, http_auth=("username", "password")) #refresh index vector_db.client.indices.refresh(index=index_name)
-
데이터가 수집되면 다음 명령을 실행하여 인덱스에 대한 의미 검색을 수행합니다.
# Generate topK documents with scores query = "what can you tell me about picasso?" search_results = vector_db.similarity_search_with_score_by_vector(embedding_model.embed_query(query), k=5) # Iterate over the search results and print the text along with the relevance scores for document, score in search_results: print(f"Score: {score}") print(f"Document: {document.page_content}\n")
다음 단계
OpenSearch와 LangChain의 통합을 지원하는 OCI 및 OCI Data Science는 업계 판도를 뒤바꾸며 의미 검색 및 LLM과 관련된 비즈니스 사용 사례의 엔터프라이즈 애플리케이션 개발 속도를 크게 높입니다. 이 사용지침서에서는 테넌시에서 OpenSearch 및 OCI Data Science로 OCI를 설정하고 LangChain을 활용하여 의미 검색을 수행하는 예제가 포함된 전체 가이드를 제공합니다.
다음 튜토리얼: 자습서 2: LangChain, OCI Data Science Notebook, OCI를 OpenSearch 및 OCI Generative AI와 통합하여 RAG 및 대화형 검색을 위한 LLM 개발 가속화에서 LangChain, OCI Data Science, AI Quick Action 및 OCI Generative AI 서비스 간의 원활한 통합을 활용하여 자체 커스터마이징 LLM 애플리케이션을 개발하는 방법에 대해 설명합니다. 엔터프라이즈 비즈니스 AI/ML 사용 사례를 위해 OpenSearch를 사용하여 OCI를 사용해 보시기 바랍니다.
관련 링크
코드는 다음 GitHub 저장소에서 찾을 수 있습니다.
확인
-
Authors - Landry Kezebou(Senior Machine Learning Engineer, OCI OpenSearch), Sreeni Simhadri(Senior Director of Software Development), Saiprasad Sethuram(Senior Manager Engineering)
-
제공자 - Julien Lehmann(Oracle Data Platform 제품 마케팅 관리자), Andy Hind(Senior Applications Architect)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Integrate OCI with OpenSearch and LangChain within OCI Data Science Notebook
G25104-01
January 2025