LangChain은 언어 모델을 외부 시스템과 연결하여 더 강력한 AI 애플리케이션을 구축할 수 있게 해주는 프레임워크입니다.
이 글에서는 LangChain을 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"]
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 데이터베이스와의 통합을 지원하여 자연어로 데이터베이스를 쿼리할 수 있게 해줍니다.
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의 통합 구조 덕분에 필요에 따라 커스터마이징도 가능합니다.