내일배움캠프 TIL - 🚀 LangChain과 LangChain.dart 완전 정복: Dart에서 LLM을 활용한 RAG 파이프라인 구현하기

Jaden Lee·2025년 5월 1일
0

내일배움캠프

목록 보기
14/15

🚀 LangChain과 LangChain.dart 완전 정복: Dart에서 LLM을 활용한 RAG 파이프라인 구현하기

최근 ChatGPT를 비롯한 대형 언어 모델(LLM)이 주목받으면서, 이를 쉽게 다루기 위한 LangChain이라는 프레임워크가 각광받고 있습니다. 이 글에서는 LangChain이란 무엇인지, Dart에서는 어떻게 사용할 수 있는지, 그리고 LangChain.dart로 RAG 파이프라인을 구성하는 방법까지 소개합니다.


🧠 LangChain이란?

LangChain은 LLM(Large Language Model)을 기반으로 한 애플리케이션을 쉽게 개발할 수 있도록 도와주는 오픈소스 프레임워크입니다. 예를 들어 아래와 같은 기능들을 제공합니다:

  • 프롬프트 템플릿 구성
  • 체인 구성 (예: 입력 → 변환 → 출력)
  • 문서 검색 기반 응답 (RAG: Retrieval-Augmented Generation)
  • 외부 툴과 연동 (예: 벡터DB, 파일시스템, API 등)

즉, LLM을 기반으로 한 실용적인 서비스(챗봇, 검색 시스템 등)를 개발할 때 필수적인 도구들을 추상화하여 제공합니다.


💡 LangChain.dart란?

LangChain.dart는 LangChain의 Dart 포팅 버전입니다. Dart 개발자도 LLM 기반 애플리케이션을 손쉽게 만들 수 있도록 다양한 기능을 제공합니다. 특히 Flutter와의 통합 가능성이 매우 높아, 모바일/웹/데스크탑에서도 LLM을 이용한 스마트 앱을 만들 수 있는 기반이 됩니다.

LangChain.dart는 Harrison Chase에 의해 개발된 라이브러리로 Github링크를 남겨놓았습니다.

제가 만든 LangChain.dart 번역본도 있으니 찾아보시면 됩니다 :)

LangChain.dart는 다음 기능을 제공합니다:

  • OpenAI, Google PaLM 등의 모델 연결
  • 벡터 저장소 관리
  • 체인 조합과 파이프라인 구성
  • 템플릿 기반 프롬프트 작성

🔧 LangChain.dart 설치 및 설정

1. 패키지 설치

dart pub add langchain
dart pub add langchain_openai
dart pub add langchain_google
dart pub add dotenv

2. .env 파일 생성

루트 디렉토리에 .env 파일을 만들어 API 키를 저장합니다:

OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key
.gitignore에 .env 추가하는 것도 잊지 마세요!

💬 LangChain.dart 코드 예제 (RAG)

// bin/main.dart
import 'package:langchain/langchain.dart';
import 'package:langchain_openai/langchain_openai.dart';
import 'package:langchain_google/langchain_google.dart';
import 'package:dotenv/dotenv.dart' as dotenv;

Future<void> main() async {
  dotenv.load();

  await _callLLM();
  await _rag();
}

Future<void> _callLLM() async {
  final googleApiKey = dotenv.env['GOOGLE_API_KEY'];
  final model = ChatGoogleGenerativeAI(apiKey: googleApiKey);
  final prompt = PromptValue.string('Hello world!');
  final result = await model.invoke(prompt);
  print('✅ Google 응답: $result');
}

Future<void> _rag() async {
  final openaiApiKey = dotenv.env['OPENAI_API_KEY'];

  final vectorStore = MemoryVectorStore(
    embeddings: OpenAIEmbeddings(apiKey: openaiApiKey),
  );

  await vectorStore.addDocuments(documents: const [
    Document(pageContent: 'LangChain was created by Harrison'),
    Document(pageContent: 'David ported LangChain to Dart in LangChain.dart'),
  ]);

  final retriever = vectorStore.asRetriever();

  final setupAndRetrieval = Runnable.fromMap<String>({
    'context': retriever.pipe(
      Runnable.mapInput((docs) => docs.map((d) => d.pageContent).join('\n')),
    ),
    'question': Runnable.passthrough(),
  });

  final promptTemplate = ChatPromptTemplate.fromMessages([
    ChatMessage.system(
        'Answer the question based only on the following context:\n{context}'),
    ChatMessage.human('{question}'),
  ]);

  final model = ChatOpenAI(apiKey: openaiApiKey);
  final outputParser = StringOutputParser();
  final chain =
      setupAndRetrieval.pipe(promptTemplate).pipe(model).pipe(outputParser);

  final result = await chain.invoke('Who created LangChain.dart?');
  print('🧠 답변: $result');
}

✅ 실행

dart run

📌 요약

항목설명
LangChainLLM 응용 개발 프레임워크 (Python 기반)
LangChain.dartDart로 포팅된 LangChain 구현체
주요 기능프롬프트 템플릿, 체인 구성, RAG 등
사용 이유Dart/Flutter 생태계에서 LLM 통합 가능

✨ 마무리

LangChain.dart는 아직 초기 단계이지만, Dart에서도 강력한 LLM 기반 앱을 구축할 수 있는 가능성을 제시합니다. 특히, Flutter와 함께 사용하면 모바일, 웹, 데스크탑 앱에서 RAG 기반 AI 기능을 손쉽게 도입할 수 있습니다.

0개의 댓글