주:

LangChain, OCI Data Science Notebook, OCI와 OpenSearch, OCI Generative AI를 통합하여 RAG 및 대화형 검색을 위한 LLM 개발 가속화

소개

이 사용지침서에서는 LangChain, Oracle Cloud Infrastructure(OCI) Data Science Notebook, OCI with OpenSearch, OCI Data Science AI Quick Actions(AI Quick Actions) 및 OCI Generative AI 서비스가 원활하게 통합되어 대규모 언어 모델(LLM) 애플리케이션 개발을 간소화하는 방법에 대해 알아봅니다. 이러한 도구는 워크플로우를 가속화하고 생산성을 향상시키며 특정 비즈니스 요구에 맞는 최첨단 AI 솔루션을 더 빠르게 배포할 수 있도록 합니다.

첫 번째 자습서인 자습서 1: OCI Data Science Notebook 내에서 OCI Search를 OpenSearch 및 LangChain와 통합하기에서 LangChain, OCI를 OpenSearch 및 Hugging Face와 통합하여 이러한 기술이 OCI Data Science Notebook과 함께 작동하여 엔터프라이즈 비즈니스를 위한 의미 검색 솔루션의 개발 및 생산을 간소화하는 방법을 시연하는 혁신적 영향에 대해 논의했습니다. OpenSearch를 사용하여 OCI를 설정하고, OCI Data Science Notebook을 설정하고, 노트북 세션으로 LangChain를 구성하고, 의미 검색에 대한 완전한 사용 사례를 배포하기 위한 엔드투엔드 구성 단계를 자세히 설명했습니다.

이 자습서에서는 LangChain, OCI와 OpenSearch, AI Quick Actions, OCI Generative AI의 원활한 통합이 커스텀 비즈니스 사용 사례를 위한 LLM 애플리케이션 개발 속도를 높이는 방법에 대해 중점적으로 다룹니다. 특히 대화형 검색, 검색 증강 생성(RAG) 및 질문 응답 챗봇과 관련된 솔루션을 살펴보고 이러한 도구를 통해 개발자가 문제를 극복하고 최소한의 코딩으로 혁신적이고 확장 가능한 애플리케이션을 제공하는 방법을 소개합니다.

참고: 이 자습서의 전체 코드 샘플은 OCI OpenSearch 서비스 코드 샘플의 공개 샘플 저장소에서 확인할 수 있습니다.

통합 접근 방식의 이점

LLM을 사용하여 응용 프로그램 구축에는 여러 단계가 포함됩니다.

각 단계에는 특수 도구, 복잡한 파이프라인 및 상당한 개발 노력이 필요할 수 있습니다. LangChain를 OCI 서비스와 통합함으로써 개발자는 이러한 문제를 전체적으로 해결하여 복잡성을 줄이고 생산성을 향상시킬 수 있습니다.

목표

필요 조건

작업 1: OCI Data Science 프로젝트 생성 및 노트북 구성

OCI Data Science Notebook은 AI 애플리케이션을 개발, 테스트, 배포할 수 있는 유연한 대화형 플랫폼을 제공합니다. 노트북을 OCI 서비스와 통합하면 원활한 개발 경험이 제공되므로 외부 도구의 필요성이 줄어듭니다. 노트북을 사용하여 다음을 수행할 수 있습니다.

OCI Data Science 프로젝트를 생성하고 노트북을 구성하려면 작업 2: OCI Data Science에서 Jupyter Notebook 실행을 참조하십시오.

작업 2: LangChain 설치

LangChain는 LLM 기반 애플리케이션 개발을 위한 가장 다양한 프레임워크 중 하나입니다. 모듈식 설계 및 확장형 라이브러리는 다음을 위한 강력한 추상화 기능을 제공합니다.

LangChain은 OCI Generative AI, OCI with OpenSearch 및 OCI Data Science와 같은 클라우드 서비스와 원활하게 상호 작용할 수 있는 기능을 통해 엔터프라이즈급 애플리케이션 구축을 위한 유틸리티를 강화합니다. LangChain의 유연성을 통해 개발자는 신속하게 애플리케이션을 프로토타입화하고 반복하여 RAG 및 대화형 검색 솔루션에 이상적입니다. OCI 서비스와의 통합은 개발 프로세스를 더욱 간소화하여 개발자가 가치 제공에 집중할 수 있도록 합니다. 첫 번째 자습서에서는 노트북 환경으로 LangChain를 구성하는 방법에 대해 설명했으며 LangChain를 사용하여 구조화되지 않은 데이터를 처리하고 OpenSearch를 사용하여 OCI로 입수하고 의미 검색을 수행하는 방법에 대한 엔드 투 엔드 예를 살펴보았습니다.

노트북에서 다음 명령을 실행하여 LangChain 및 기타 키 라이브러리를 구성합니다.

!pip install -U oci oracle_ads langchain langchain-community  langchain-huggingface  opensearch-py pypdf

작업 3: LangChain를 사용하여 데이터를 선행 처리 및 조각화

다음 Python 코드를 사용합니다.

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)

작업 4: OCI Generative AI Cohere로 임베딩 모델 구성

OCI Generative AI 서비스는 Cohere 및 Meta의 LLaMA-3과 같은 최첨단 LLM에 액세스할 수 있는 완전 관리형 플랫폼을 제공합니다. 다음 모델을 지원합니다.

AI Quick Actions와 OCI Generative AI의 주요 차이점은 AI Quick Actions는 보다 광범위한 모델 카탈로그를 보유하고 있으며 모델 교육, 평가, 미세 조정 및 수명 주기 관리를 통해 훨씬 더 많은 유연성을 제공한다는 것입니다. OCI Generative AI의 주요 이점은 모델을 호스팅하는 인프라를 소유할 필요가 없다는 것입니다. 사용 가능한 모든 모델에 일반 끝점을 사용할 수 있으며 요청 수 및 토큰 수에 따라 요금만 부과됩니다. 반면, AI Quick Actions는 LLM 또는 모든 AI/ML 워크플로 통합관리 및 수명 주기에 대한 자율성을 확보할 수 있는 반면, 인프라 비용에 대해서만 비용을 지불하고 요청 횟수를 제한할 수 있습니다.

또한 OCI Generative AI 서비스는 기업 데이터를 위해 구축되었으며, 특히 커스텀 데이터에서 사전 학습된 다른 문장 변환기 모델보다 더 나은 성능을 제공하는 Cohere Embed V3 모델과 같은 엔터프라이즈 임베딩 모델을 사용할 준비가 되었습니다. 데이터에 대한 포함을 생성하려면 이 모델만 호출하면 됩니다. 따라서 OCI Generative AI와 AI Quick Actions를 결합하면 비즈니스 애플리케이션에 최고의 가치를 제공할 수 있다고 생각합니다. 이미 배포된 OCI Generative AI Cohere 임베딩 모델 엔드포인트를 호출하여 데이터를 포함하고, AI Quick Actions를 사용하여 모델을 미세 조정, 테스트, 평가 및 배포할 수 있습니다.

LangChain OCI Generative AI 및 AI Quick Action과 원활하게 통합되어 개발자가 OCI 환경에서 직접 모델을 호출할 수 있습니다. 최소한의 구성으로 개발자는 사전 학습 또는 미세 조정된 모델을 사용할 수 있습니다.

다음은 LangChain 통합을 사용하여 Cohere 포함 V3 모델을 호출하고 이를 사용하여 데이터 수집 중 문서를 포함하는 방법에 대한 예입니다.

from langchain_community.embeddings import OCIGenAIEmbeddings

oci_cohere_embedding_model = OCIGenAIEmbeddings(
    model_id="cohere.embed-english-v3.0",
    service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
    compartment_id="<>YOUR-COMPARTMENT-OCID",
    auth_type="RESOURCE_PRINCIPAL",
    model_kwargs={"input_type": "SEARCH_DOCUMENT"}
)

작업 5: RAG 워크플로우를 사용으로 설정하기 위해 LangChain를 사용하여 OpenSearch로 OCI 구성

RAG는 빠르고 정확한 검색 시스템을 사용합니다. OCI와 OpenSearch 서비스는 다음을 위한 인프라를 제공합니다.

LangChain의 벡터 스토어 기능은 OCI와 OpenSearch의 통합으로 RAG 워크플로를 지원합니다. 개발자는 OCI Generative AI의 임베딩을 사용하여 OpenSearch를 통해 OCI에서 효율적으로 데이터를 인덱스화하고 검색할 수 있습니다.

다음 Python 코드를 사용합니다.

from langchain.vectorstores import OpenSearchVectorSearch
import oci
 
# setup 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=oci_cohere_embedding_model,
                            signer=auth_provider,
                            auth_type="RESOURCE_PRINCIPAL",
                            http_auth=auth)

작업 6: 데이터 수집

다음 Python 코드를 사용하여 데이터를 수집합니다.

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)

작업 7: LangChain를 사용하여 RAG에 대한 LLM 구성

OCI Data Science의 AI Quick Actions은 LLM 배포 및 관리의 복잡성을 해소합니다. 다음을 위한 노코드 인터페이스를 제공합니다.

AI Quick Actions는 OCI Data Science Notebook 환경을 통해 사용이 쉽고 액세스 가능합니다. 매우 많은 유연성을 제공합니다. 예를 들어 OCI Object Storage 또는 로컬 노트북에 저장된 데이터세트를 사용하여 모델을 학습, 미세 조정 또는 평가할 수 있습니다. 또한 기본 컴퓨팅 및 스토리지 비용 외에 추가 비용이 발생하지 않으므로 매우 비용 효율적인 솔루션입니다. 가장 중요한 것은 몇 번의 클릭만으로 배포할 수 있는 AI 빠른 작업에서 사용 가능한 검증된 모델 카탈로그에 접근할 수 있다는 것입니다. 또한 코드를 작성하지 않고도 사용자정의 데이터세트에서 해당 모델을 미세 조정하고 평가할 수 있는 유연성을 확보할 수 있습니다. 인프라 복잡성에 대해 걱정할 필요 없이 자체 모델 아티팩트를 가져오고 AI Quick Actions로 간단히 배포하는 옵션을 언급할 필요가 없습니다. 마지막으로 내장 프롬프트 인터페이스를 사용하여 배치된 모델의 성능을 테스트하고 평가할 수 있습니다.

AI 빠른 작업은 OCI Data Science 노트북 세션에서 제공됩니다. AI 빠른 작업을 사용하려면 테넌시에서 필요한 정책을 설정해야 합니다. 자세한 내용은 AI 빠른 작업 정책을 참조하십시오.

  1. AI 빠른 작업을 눌러 노트북 세션에서 AI 빠른 작업을 실행합니다.

    이미지

  2. LLM 모델 카탈로그에 접근합니다.

    이미지

  3. 배포배포 생성을 누릅니다.

    이미지

  4. 모델 배포 페이지에서 모델 배포를 생성하는 데 필요한 세부정보를 입력합니다.

    이미지

  5. 모델이 생성되면 배포된 모델을 보고 테스트할 수 있습니다.

    이미지

  6. 배치된 모델에 대한 평가를 생성합니다.

    이미지

LangChain 통합을 사용하여 질문 답변에 대해 배포된 LLM 모델을 호출하려면 다음 코드를 실행합니다. 이 경우 다음과 같이 예측 엔드포인트를 호출하여 AI 빠른 작업과 함께 배포된 LLM 모델을 사용합니다.

import ads
from langchain_community.llms import OCIModelDeploymentLLM

ads.set_auth("resource_principal")
endpoint = "https://modeldeployment.us-ashburn-1.oci.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.iad.am....................../predict"

oads_llm = OCIModelDeploymentLLM(
    endpoint=endpoint,
    model="odsc-llm",
    model_kwargs={"temperature": 0, "max_tokens": 500, 'top_p': 1.0, 'top_k': 1}
)

#test the invoke method to make sure model is deployed and active
oads_llm.invoke("who was the first president of the united states?")

작업 8: 대화 검색 및 RAG 수행

다음 Python 코드를 사용하여 대화 검색 및 RAG를 수행합니다.

# Create a retriever from the OpenSearch vector database
retriever = vector_db.as_retriever()

# Load a QA chain that combines the documents and generates an answer
combine_documents_chain = load_qa_chain(oads_llm, chain_type="stuff")

# Create the RetrievalQA chain
qa_chain = RetrievalQA(combine_documents_chain=combine_documents_chain, retriever=retriever)

# Example query
query="What was Notre Dame's first college? be explicit"
response = qa_chain.run(query)
print("Answer:", response)

이 RAG 애플리케이션의 전체 엔드투엔드 코드는 OCI OpenSearch 서비스 샘플 노트북에서 확인할 수 있습니다. 이 자습서에 대한 전체 GitHub 저장소는 opensearch-integration-with-langchain에서 찾을 수 있습니다.

다음 단계

LangChain, OCI와 OpenSearch, AI Quick Actions, OCI Generative AI, 노트북의 통합은 LLM 애플리케이션 구축을 위한 포괄적인 솔루션을 제공합니다. RAG 시스템을 개발하든 대화형 검색 툴을 개발하든 이러한 기술은 함께 작동하여 강력하고 확장 가능하며 효율적인 솔루션을 제공합니다.

이 통합 접근 방식을 채택함으로써 개발자는 생성형 AI의 잠재력을 최대한 발휘하고 비즈니스 성공을 이끄는 혁신적인 애플리케이션을 제공할 수 있습니다. 지금 바로 이러한 툴을 살펴보고 AI 기반 애플리케이션의 미래를 구축하기 위한 첫 발걸음을 내딛으십시오.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.