최근 ChatGPT를 비롯한 대형 언어 모델(LLM)이 주목받으면서, 이를 쉽게 다루기 위한 LangChain이라는 프레임워크가 각광받고 있습니다. 이 글에서는 LangChain이란 무엇인지, Dart에서는 어떻게 사용할 수 있는지, 그리고 LangChain.dart로 RAG 파이프라인을 구성하는 방법까지 소개합니다.
LangChain은 LLM(Large Language Model)을 기반으로 한 애플리케이션을 쉽게 개발할 수 있도록 도와주는 오픈소스 프레임워크입니다. 예를 들어 아래와 같은 기능들을 제공합니다:
즉, LLM을 기반으로 한 실용적인 서비스(챗봇, 검색 시스템 등)를 개발할 때 필수적인 도구들을 추상화하여 제공합니다.
LangChain.dart는 LangChain의 Dart 포팅 버전입니다. Dart 개발자도 LLM 기반 애플리케이션을 손쉽게 만들 수 있도록 다양한 기능을 제공합니다. 특히 Flutter와의 통합 가능성이 매우 높아, 모바일/웹/데스크탑에서도 LLM을 이용한 스마트 앱을 만들 수 있는 기반이 됩니다.
LangChain.dart는 Harrison Chase에 의해 개발된 라이브러리로 Github링크를 남겨놓았습니다.
제가 만든 LangChain.dart 번역본도 있으니 찾아보시면 됩니다 :)
LangChain.dart는 다음 기능을 제공합니다:
dart pub add langchain
dart pub add langchain_openai
dart pub add langchain_google
dart pub add dotenv
루트 디렉토리에 .env 파일을 만들어 API 키를 저장합니다:
OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key
.gitignore에 .env 추가하는 것도 잊지 마세요!
// 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
항목 | 설명 |
---|---|
LangChain | LLM 응용 개발 프레임워크 (Python 기반) |
LangChain.dart | Dart로 포팅된 LangChain 구현체 |
주요 기능 | 프롬프트 템플릿, 체인 구성, RAG 등 |
사용 이유 | Dart/Flutter 생태계에서 LLM 통합 가능 |
LangChain.dart는 아직 초기 단계이지만, Dart에서도 강력한 LLM 기반 앱을 구축할 수 있는 가능성을 제시합니다. 특히, Flutter와 함께 사용하면 모바일, 웹, 데스크탑 앱에서 RAG 기반 AI 기능을 손쉽게 도입할 수 있습니다.