⚠️ 지원 중단 안내: Rockset 통합 비활성화됨
2024년 6월부로 Rockset은 OpenAI에 인수되었으며 공개 서비스를 종료했습니다. Rockset은 세계적 수준의 인덱싱 및 검색 기능으로 알려진 실시간 분석 데이터베이스였습니다. 현재 핵심 팀과 기술은 OpenAI의 인프라에 통합되어 향후 AI 제품을 지원하고 있습니다. 이 LangChain 통합은 더 이상 작동하지 않으며 아카이브 목적으로만 보존됩니다.
Rockset은 운영 부담 없이 대규모 반구조화 데이터에 대한 쿼리를 가능하게 하는 실시간 분석 데이터베이스입니다. Rockset을 사용하면 수집된 데이터를 1초 이내에 쿼리할 수 있으며, 해당 데이터에 대한 분석 쿼리는 일반적으로 밀리초 단위로 실행됩니다. Rockset은 컴퓨팅에 최적화되어 있어 100TB 미만 범위(또는 롤업을 사용하면 100TB 이상)의 높은 동시성 애플리케이션을 제공하는 데 적합합니다.
이 노트북은 langchain에서 Rockset을 document loader로 사용하는 방법을 보여줍니다. 시작하려면 Rockset 계정과 사용 가능한 API key가 있는지 확인하세요.

환경 설정

  1. Rockset console로 이동하여 API key를 받으세요. API reference에서 API region을 확인하세요. 이 노트북에서는 Oregon(us-west-2)에서 Rockset을 사용한다고 가정합니다.
  2. 환경 변수 ROCKSET_API_KEY를 설정하세요.
  3. langchain이 Rockset 데이터베이스와 상호작용하는 데 사용할 Rockset python client를 설치하세요.
pip install -qU  rockset

Document 로드하기

LangChain과 Rockset 통합을 사용하면 SQL 쿼리로 Rockset collection에서 document를 로드할 수 있습니다. 이를 위해서는 RocksetLoader 객체를 생성해야 합니다. 다음은 RocksetLoader를 초기화하는 예제 코드입니다.
from langchain_community.document_loaders import RocksetLoader
from rockset import Regions, RocksetClient, models

loader = RocksetLoader(
    RocksetClient(Regions.usw2a1, "<api key>"),
    models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 3"),  # SQL query
    ["text"],  # content columns
    metadata_keys=["id", "date"],  # metadata columns
)
여기서 다음 쿼리가 실행되는 것을 볼 수 있습니다:
SELECT * FROM langchain_demo LIMIT 3
collection의 text 컬럼은 page content로 사용되고, 레코드의 iddate 컬럼은 metadata로 사용됩니다 (metadata_keys에 아무것도 전달하지 않으면 전체 Rockset document가 metadata로 사용됩니다). 쿼리를 실행하고 결과 Document들에 대한 iterator에 접근하려면 다음을 실행하세요:
loader.lazy_load()
쿼리를 실행하고 모든 결과 Document들에 한 번에 접근하려면 다음을 실행하세요:
loader.load()
다음은 loader.load()의 예제 응답입니다:
[
    Document(
        page_content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas a libero porta, dictum ipsum eget, hendrerit neque. Morbi blandit, ex ut suscipit viverra, enim velit tincidunt tellus, a tempor velit nunc et ex. Proin hendrerit odio nec convallis lobortis. Aenean in purus dolor. Vestibulum orci orci, laoreet eget magna in, commodo euismod justo.",
        metadata={"id": 83209, "date": "2022-11-13T18:26:45.000000Z"}
    ),
    Document(
        page_content="Integer at finibus odio. Nam sit amet enim cursus lacus gravida feugiat vestibulum sed libero. Aenean eleifend est quis elementum tincidunt. Curabitur sit amet ornare erat. Nulla id dolor ut magna volutpat sodales fringilla vel ipsum. Donec ultricies, lacus sed fermentum dignissim, lorem elit aliquam ligula, sed suscipit sapien purus nec ligula.",
        metadata={"id": 89313, "date": "2022-11-13T18:28:53.000000Z"}
    ),
    Document(
        page_content="Morbi tortor enim, commodo id efficitur vitae, fringilla nec mi. Nullam molestie faucibus aliquet. Praesent a est facilisis, condimentum justo sit amet, viverra erat. Fusce volutpat nisi vel purus blandit, et facilisis felis accumsan. Phasellus luctus ligula ultrices tellus tempor hendrerit. Donec at ultricies leo.",
        metadata={"id": 87732, "date": "2022-11-13T18:49:04.000000Z"}
    )
]

여러 컬럼을 content로 사용하기

여러 컬럼을 content로 사용하도록 선택할 수 있습니다:
from langchain_community.document_loaders import RocksetLoader
from rockset import Regions, RocksetClient, models

loader = RocksetLoader(
    RocksetClient(Regions.usw2a1, "<api key>"),
    models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
    ["sentence1", "sentence2"],  # TWO content columns
)
“sentence1” 필드가 "This is the first sentence."이고 “sentence2” 필드가 "This is the second sentence."라고 가정하면, 결과 Documentpage_content는 다음과 같습니다:
This is the first sentence.
This is the second sentence.
RocksetLoader 생성자에서 content_columns_joiner 인자를 설정하여 content 컬럼을 결합하는 자체 함수를 정의할 수 있습니다. content_columns_joiner는 (컬럼 이름, 컬럼 값)의 튜플 리스트를 나타내는 List[Tuple[str, Any]]]를 인자로 받는 메서드입니다. 기본적으로 이것은 각 컬럼 값을 새 줄로 결합하는 메서드입니다. 예를 들어, sentence1과 sentence2를 새 줄 대신 공백으로 결합하려면 다음과 같이 content_columns_joiner를 설정할 수 있습니다:
RocksetLoader(
    RocksetClient(Regions.usw2a1, "<api key>"),
    models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
    ["sentence1", "sentence2"],
    content_columns_joiner=lambda docs: " ".join(
        [doc[1] for doc in docs]
    ),  # join with space instead of /n
)
결과 Documentpage_content는 다음과 같습니다:
This is the first sentence. This is the second sentence.
종종 page_content에 컬럼 이름을 포함하고 싶을 때가 있습니다. 다음과 같이 할 수 있습니다:
RocksetLoader(
    RocksetClient(Regions.usw2a1, "<api key>"),
    models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
    ["sentence1", "sentence2"],
    content_columns_joiner=lambda docs: "\n".join(
        [f"{doc[0]}: {doc[1]}" for doc in docs]
    ),
)
이렇게 하면 다음과 같은 page_content가 생성됩니다:
sentence1: This is the first sentence.
sentence2: This is the second sentence.

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I