LangChain을 활용한 AI 애플리케이션 구축하기

LangChain은 언어 모델을 외부 시스템과 연결하여 더 강력한 AI 애플리케이션을 구축할 수 있게 해주는 프레임워크입니다.

이 글에서는 LangChain을 API, 데이터베이스, 파일 시스템과 통합하는 방법을 알아보겠습니다.

RESTful API 연동하기

LangChain은 외부 API와 쉽게 통합할 수 있도록 설계되었습니다.
이를 통해 언어 모델이 실시간 데이터를 가져오거나 외부 서비스와 상호작용할 수 있습니다.

커스텀 도구 만들기

from langchain.tools import tool
import requests

@tool
def get_weather(city: str) -> str:
    """도시의 현재 날씨를 가져옵니다."""
    url = f"https://api.weather.com/v1/{city}/conditions"
    response = requests.get(url)
    return response.json()["weather_description"]

APIChain 활용하기

LangChain의 'APIChain'을 사용하면 API 문서를 기반으로 자동으로 API 요청을 생성할 수 있습니다.

from langchain.chains import APIChain
from langchain.chains.api import open_meteo_docs
from langchain_openai import OpenAI

llm = OpenAI(temperature=0)
chain = APIChain.from_llm_and_api_docs(
    llm,
    open_meteo_docs.OPEN_METEO_DOCS,
    verbose=True,
    limit_to_domains=["https://api.open-meteo.com/"]
)

chain.run("오늘 런던의 현재 날씨는 화씨로 몇 도인가요?")

데이터베이스 연결하기

LangChain은 SQL 데이터베이스와의 통합을 지원하여 자연어로 데이터베이스를 쿼리할 수 있게 해줍니다.

SQL 데이터베이스 연결

from langchain_experimental.sql import SQLDatabaseChain
from langchain.llms import OpenAI
from langchain.sql_database import SQLDatabase

# 데이터베이스 연결
db = SQLDatabase.from_uri("postgresql://username:password@host:port/database")

# SQLDatabaseChain 생성
db_chain = SQLDatabaseChain.from_llm(OpenAI(), db)

# 자연어 쿼리 실행
response = db_chain.run("앱에 가입한 사용자는 몇 명인가요?")
print(response)

대규모 데이터베이스 처리

테이블이나 큰 양의 대규모 데이터베이스의 경우 'SQLDatabaseSequentialChain'을 사용하면 효율적으로 처리할 수 있습니다.

from langchain_experimental.sql import SQLDatabaseSequentialChain

# 대규모 데이터베이스를 위한 체인 생성
db_seq_chain = SQLDatabaseSequentialChain.from_llm(OpenAI(), db)

파일 시스템 통합하기

LangChain은 로컬 파일 시스템과 상호작용할 수 있는 다양한 도구를 제공합니다.

파일 관리 도구킷 사용하기

from tempfile import TemporaryDirectory
from langchain_community.agent_toolkits import FileManagementToolkit

# 임시 디렉토리 생성
working_directory = TemporaryDirectory()

# 파일 관리 도구킷 초기화
toolkit = FileManagementToolkit(
    root_dir=str(working_directory.name),
    selected_tools=["read_file", "write_file", "list_directory"]
)

tools = toolkit.get_tools()
read_tool, write_tool, list_tool = tools

# 파일 쓰기
write_tool.invoke({"file_path": "example.txt", "text": "안녕하세요!"})

# 디렉토리 내용 확인
list_tool.invoke({})

# 파일 읽기
read_tool.invoke({"file_path": "example.txt"})

파일 시스템 스토어 활용하기

Node.js 환경에서는 'LocalFileStore'를 사용하여 키-값 형태로 데이터를 저장할 수 있습니다.

import { LocalFileStore } from "@langchain/storage/file_system";
import { AIMessage, HumanMessage } from "@langchain/core/messages";

// 스토어 초기화
const store = await LocalFileStore.fromPath("./messages");

// 인코더/디코더 정의
const encoder = new TextEncoder();
const decoder = new TextDecoder();

// 메시지 저장
const messages = [new AIMessage("AI 메시지"), new HumanMessage("사용자 메시지")];
await store.mset(
  messages.map((message, index) => [
    `message:id:${index}`,
    encoder.encode(JSON.stringify(message)),
  ])
);

// 메시지 가져오기
const retrievedMessages = await store.mget(["message:id:0", "message:id:1"]);
console.log(retrievedMessages.map((v) => decoder.decode(v)));

클라우드 스토리지 서비스 연동하기

LangChain은 AWS S3, Azure Blob Storage, Google Cloud Storage 등 클라우드 스토리지 서비스와도 통합할 수 있습니다.

from langchain.document_loaders import S3DirectoryLoader

# S3에서 문서 로드
loader = S3DirectoryLoader("my-bucket", "my-prefix")
documents = loader.load()

마무리

LangChain의 다양한 통합 기능을 활용하면 언어 모델을 다양한 외부 데이터 소스와 연결하여 더 강력하고 실용적인 AI 애플리케이션을 구축할 수 있습니다.

각 통합 방식은 특정 사용 사례에 맞게 선택하여 활용할 수 있으며, LangChain의 통합 구조 덕분에 필요에 따라 커스터마이징도 가능합니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글