{"componentChunkName":"component---src-templates-blog-post-js","path":"/ai/LangChain을-활용한-LLM-애플리케이션-개발/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"803c272e-6760-5fae-b605-2741b287a7e3","excerpt":"LangChain을 활용한 LLM 애플리케이션 개발 LLM을 활용한 애플리케이션을 만들 때는 프롬프트 관리, 메모리 처리, 외부 도구 연결 등 복잡한 작업이 필요하다. LangChain은 이런 작업을 쉽게 만들어주는 프레임워크다. 이 글은 LangChain…","html":"<p><img src=\"/assets/ai.png\" alt=\"LangChain을 활용한 LLM 애플리케이션 개발\" title=\"LangChain을 활용한 LLM 애플리케이션 개발\"></p>\n<p>LLM을 활용한 애플리케이션을 만들 때는 프롬프트 관리, 메모리 처리, 외부 도구 연결 등 복잡한 작업이 필요하다. LangChain은 이런 작업을 쉽게 만들어주는 프레임워크다. 이 글은 LangChain의 핵심 개념과 실무 활용 방법을 설명한다.</p>\n<h2 id=\"langchain이란-무엇인가\" style=\"position:relative;\"><a href=\"#langchain%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\" aria-label=\"langchain이란 무엇인가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LangChain이란 무엇인가?</h2>\n<p>LangChain은 LLM을 활용한 애플리케이션을 쉽게 개발할 수 있게 해주는 오픈소스 프레임워크다. 프롬프트 체이닝, 메모리 관리, 외부 도구 연결, RAG 구현 등을 간단하게 처리할 수 있다.</p>\n<h3 id=\"langchain의-필요성\" style=\"position:relative;\"><a href=\"#langchain%EC%9D%98-%ED%95%84%EC%9A%94%EC%84%B1\" aria-label=\"langchain의 필요성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LangChain의 필요성</h3>\n<p>단순히 LLM API를 호출하는 것만으로는 복잡한 애플리케이션을 만들기 어렵다.</p>\n<p><strong>문제점</strong></p>\n<ul>\n<li>프롬프트 관리가 복잡함</li>\n<li>대화 기록(컨텍스트) 유지 어려움</li>\n<li>외부 데이터 소스 연결 어려움</li>\n<li>여러 LLM 호출을 순차적으로 처리하기 복잡</li>\n</ul>\n<p><strong>LangChain의 해결책</strong></p>\n<ul>\n<li>체계적인 프롬프트 템플릿 관리</li>\n<li>자동 메모리 관리</li>\n<li>쉬운 외부 도구 통합</li>\n<li>Chain으로 복잡한 워크플로우 구성</li>\n</ul>\n<h3 id=\"langchain의-핵심-구성-요소\" style=\"position:relative;\"><a href=\"#langchain%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C\" aria-label=\"langchain의 핵심 구성 요소 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LangChain의 핵심 구성 요소</h3>\n<p>LangChain은 크게 6가지 모듈로 구성된다.</p>\n<ol>\n<li><strong>Models</strong>: LLM과 임베딩 모델 관리</li>\n<li><strong>Prompts</strong>: 프롬프트 템플릿과 관리</li>\n<li><strong>Chains</strong>: 여러 작업을 순차적으로 연결</li>\n<li><strong>Agents</strong>: 외부 도구를 사용하는 자율 에이전트</li>\n<li><strong>Memory</strong>: 대화 기록과 컨텍스트 관리</li>\n<li><strong>Indexes</strong>: RAG를 위한 벡터 스토어와 검색</li>\n</ol>\n<h2 id=\"핵심-개념\" style=\"position:relative;\"><a href=\"#%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90\" aria-label=\"핵심 개념 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핵심 개념</h2>\n<h3 id=\"1-chain-작업을-순차적으로-연결\" style=\"position:relative;\"><a href=\"#1-chain-%EC%9E%91%EC%97%85%EC%9D%84-%EC%88%9C%EC%B0%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B2%B0\" aria-label=\"1 chain 작업을 순차적으로 연결 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Chain: 작업을 순차적으로 연결</h3>\n<p>Chain은 여러 LLM 호출이나 작업을 순차적으로 연결하는 구조다.</p>\n<p><strong>간단한 Chain 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>llms <span class=\"token keyword\">import</span> OpenAI\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>prompts <span class=\"token keyword\">import</span> PromptTemplate\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> LLMChain\n\n<span class=\"token comment\"># LLM 초기화</span>\nllm <span class=\"token operator\">=</span> OpenAI<span class=\"token punctuation\">(</span>temperature<span class=\"token operator\">=</span><span class=\"token number\">0.7</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 프롬프트 템플릿</span>\nprompt <span class=\"token operator\">=</span> PromptTemplate<span class=\"token punctuation\">(</span>\n    input_variables<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"product\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    template<span class=\"token operator\">=</span><span class=\"token string\">\"다음 제품에 대한 마케팅 문구를 작성해줘: {product}\"</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Chain 생성</span>\nchain <span class=\"token operator\">=</span> LLMChain<span class=\"token punctuation\">(</span>llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span> prompt<span class=\"token operator\">=</span>prompt<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 실행</span>\nresult <span class=\"token operator\">=</span> chain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"스마트워치\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>Sequential Chain: 여러 Chain 연결</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> SimpleSequentialChain\n\n<span class=\"token comment\"># 첫 번째 Chain: 제품 분석</span>\nanalysis_chain <span class=\"token operator\">=</span> LLMChain<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    prompt<span class=\"token operator\">=</span>PromptTemplate<span class=\"token punctuation\">(</span>\n        input_variables<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"product\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        template<span class=\"token operator\">=</span><span class=\"token string\">\"제품 {product}의 특징을 분석해줘\"</span>\n    <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 두 번째 Chain: 마케팅 문구 생성</span>\nmarketing_chain <span class=\"token operator\">=</span> LLMChain<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    prompt<span class=\"token operator\">=</span>PromptTemplate<span class=\"token punctuation\">(</span>\n        input_variables<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"analysis\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        template<span class=\"token operator\">=</span><span class=\"token string\">\"다음 분석을 바탕으로 마케팅 문구를 작성해줘:\\n{analysis}\"</span>\n    <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Chain 연결</span>\nfull_chain <span class=\"token operator\">=</span> SimpleSequentialChain<span class=\"token punctuation\">(</span>\n    chains<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span>analysis_chain<span class=\"token punctuation\">,</span> marketing_chain<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    verbose<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\nresult <span class=\"token operator\">=</span> full_chain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"스마트워치\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"2-agent-외부-도구를-사용하는-자율-에이전트\" style=\"position:relative;\"><a href=\"#2-agent-%EC%99%B8%EB%B6%80-%EB%8F%84%EA%B5%AC%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9E%90%EC%9C%A8-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8\" aria-label=\"2 agent 외부 도구를 사용하는 자율 에이전트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Agent: 외부 도구를 사용하는 자율 에이전트</h3>\n<p>Agent는 외부 도구(검색, 계산기, API 등)를 사용해 목표를 달성하는 자율적인 시스템이다.</p>\n<p><strong>ReAct Agent 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>agents <span class=\"token keyword\">import</span> initialize_agent<span class=\"token punctuation\">,</span> Tool\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>utilities <span class=\"token keyword\">import</span> WikipediaAPIWrapper<span class=\"token punctuation\">,</span> PythonREPL\n\n<span class=\"token comment\"># 도구 정의</span>\nwikipedia <span class=\"token operator\">=</span> WikipediaAPIWrapper<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\npython_repl <span class=\"token operator\">=</span> PythonREPL<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\ntools <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    Tool<span class=\"token punctuation\">(</span>\n        name<span class=\"token operator\">=</span><span class=\"token string\">\"Wikipedia\"</span><span class=\"token punctuation\">,</span>\n        func<span class=\"token operator\">=</span>wikipedia<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">,</span>\n        description<span class=\"token operator\">=</span><span class=\"token string\">\"최신 정보 검색에 사용\"</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Tool<span class=\"token punctuation\">(</span>\n        name<span class=\"token operator\">=</span><span class=\"token string\">\"Python\"</span><span class=\"token punctuation\">,</span>\n        func<span class=\"token operator\">=</span>python_repl<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">,</span>\n        description<span class=\"token operator\">=</span><span class=\"token string\">\"수학 계산이나 코드 실행에 사용\"</span>\n    <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">]</span>\n\n<span class=\"token comment\"># Agent 초기화</span>\nagent <span class=\"token operator\">=</span> initialize_agent<span class=\"token punctuation\">(</span>\n    tools<span class=\"token punctuation\">,</span>\n    llm<span class=\"token punctuation\">,</span>\n    agent<span class=\"token operator\">=</span><span class=\"token string\">\"react-docstore\"</span><span class=\"token punctuation\">,</span>\n    verbose<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 실행</span>\nresult <span class=\"token operator\">=</span> agent<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"2024년 노벨 물리학상 수상자의 나이를 계산해줘\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Agent는 다음과 같이 작동한다:</p>\n<ol>\n<li>질문을 분석해 필요한 도구 결정</li>\n<li>도구를 사용해 정보 수집</li>\n<li>수집한 정보를 종합해 답변 생성</li>\n</ol>\n<h3 id=\"3-memory-대화-기록-관리\" style=\"position:relative;\"><a href=\"#3-memory-%EB%8C%80%ED%99%94-%EA%B8%B0%EB%A1%9D-%EA%B4%80%EB%A6%AC\" aria-label=\"3 memory 대화 기록 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Memory: 대화 기록 관리</h3>\n<p>Memory는 대화 기록을 저장하고 관리해 맥락을 유지한다.</p>\n<p><strong>ConversationBufferMemory</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>memory <span class=\"token keyword\">import</span> ConversationBufferMemory\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> ConversationChain\n\n<span class=\"token comment\"># Memory 생성</span>\nmemory <span class=\"token operator\">=</span> ConversationBufferMemory<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Chain에 Memory 추가</span>\nchain <span class=\"token operator\">=</span> ConversationChain<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    memory<span class=\"token operator\">=</span>memory<span class=\"token punctuation\">,</span>\n    verbose<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 대화</span>\nchain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"내 이름은 홍길동이야\"</span><span class=\"token punctuation\">)</span>\nchain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"내 이름이 뭐야?\"</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># \"홍길동\"을 기억함</span></code></pre></div>\n<p><strong>ConversationBufferWindowMemory: 최근 N개만 기억</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>memory <span class=\"token keyword\">import</span> ConversationBufferWindowMemory\n\n<span class=\"token comment\"># 최근 3개 대화만 기억</span>\nmemory <span class=\"token operator\">=</span> ConversationBufferWindowMemory<span class=\"token punctuation\">(</span>k<span class=\"token operator\">=</span><span class=\"token number\">3</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>ConversationSummaryMemory: 요약하여 기억</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>memory <span class=\"token keyword\">import</span> ConversationSummaryMemory\n\n<span class=\"token comment\"># 대화를 요약해 저장 (메모리 효율적)</span>\nmemory <span class=\"token operator\">=</span> ConversationSummaryMemory<span class=\"token punctuation\">(</span>llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"4-rag-구현-외부-데이터와-연결\" style=\"position:relative;\"><a href=\"#4-rag-%EA%B5%AC%ED%98%84-%EC%99%B8%EB%B6%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%EC%97%B0%EA%B2%B0\" aria-label=\"4 rag 구현 외부 데이터와 연결 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. RAG 구현: 외부 데이터와 연결</h3>\n<p>LangChain은 RAG(Retrieval-Augmented Generation) 구현을 쉽게 만들어준다.</p>\n<p><strong>간단한 RAG 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>document_loaders <span class=\"token keyword\">import</span> TextLoader\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>text_splitter <span class=\"token keyword\">import</span> CharacterTextSplitter\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>embeddings <span class=\"token keyword\">import</span> OpenAIEmbeddings\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>vectorstores <span class=\"token keyword\">import</span> Chroma\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> RetrievalQA\n\n<span class=\"token comment\"># 문서 로드</span>\nloader <span class=\"token operator\">=</span> TextLoader<span class=\"token punctuation\">(</span><span class=\"token string\">\"document.txt\"</span><span class=\"token punctuation\">)</span>\ndocuments <span class=\"token operator\">=</span> loader<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 문서 분할</span>\ntext_splitter <span class=\"token operator\">=</span> CharacterTextSplitter<span class=\"token punctuation\">(</span>chunk_size<span class=\"token operator\">=</span><span class=\"token number\">1000</span><span class=\"token punctuation\">,</span> chunk_overlap<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\ntexts <span class=\"token operator\">=</span> text_splitter<span class=\"token punctuation\">.</span>split_documents<span class=\"token punctuation\">(</span>documents<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 임베딩 및 벡터 스토어 생성</span>\nembeddings <span class=\"token operator\">=</span> OpenAIEmbeddings<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nvectorstore <span class=\"token operator\">=</span> Chroma<span class=\"token punctuation\">.</span>from_documents<span class=\"token punctuation\">(</span>texts<span class=\"token punctuation\">,</span> embeddings<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># RAG Chain 생성</span>\nqa_chain <span class=\"token operator\">=</span> RetrievalQA<span class=\"token punctuation\">.</span>from_chain_type<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    chain_type<span class=\"token operator\">=</span><span class=\"token string\">\"stuff\"</span><span class=\"token punctuation\">,</span>\n    retriever<span class=\"token operator\">=</span>vectorstore<span class=\"token punctuation\">.</span>as_retriever<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 질문</span>\nresult <span class=\"token operator\">=</span> qa_chain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"문서에서 주요 내용을 요약해줘\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2 id=\"실무-활용-사례\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80\" aria-label=\"실무 활용 사례 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>실무 활용 사례</h2>\n<h3 id=\"1-고객-상담-챗봇\" style=\"position:relative;\"><a href=\"#1-%EA%B3%A0%EA%B0%9D-%EC%83%81%EB%8B%B4-%EC%B1%97%EB%B4%87\" aria-label=\"1 고객 상담 챗봇 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 고객 상담 챗봇</h3>\n<p><strong>요구사항</strong></p>\n<ul>\n<li>회사 정책 문서 기반 답변</li>\n<li>대화 기록 유지</li>\n<li>필요시 외부 API 호출</li>\n</ul>\n<p><strong>구현</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> ConversationalRetrievalChain\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>memory <span class=\"token keyword\">import</span> ConversationBufferMemory\n\n<span class=\"token comment\"># 문서 로드 및 벡터화</span>\nloader <span class=\"token operator\">=</span> DirectoryLoader<span class=\"token punctuation\">(</span><span class=\"token string\">\"./company_policies/\"</span><span class=\"token punctuation\">,</span> glob<span class=\"token operator\">=</span><span class=\"token string\">\"*.pdf\"</span><span class=\"token punctuation\">)</span>\ndocuments <span class=\"token operator\">=</span> loader<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ntexts <span class=\"token operator\">=</span> text_splitter<span class=\"token punctuation\">.</span>split_documents<span class=\"token punctuation\">(</span>documents<span class=\"token punctuation\">)</span>\nvectorstore <span class=\"token operator\">=</span> Chroma<span class=\"token punctuation\">.</span>from_documents<span class=\"token punctuation\">(</span>texts<span class=\"token punctuation\">,</span> embeddings<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Memory 생성</span>\nmemory <span class=\"token operator\">=</span> ConversationBufferMemory<span class=\"token punctuation\">(</span>\n    memory_key<span class=\"token operator\">=</span><span class=\"token string\">\"chat_history\"</span><span class=\"token punctuation\">,</span>\n    return_messages<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># RAG Chain 생성</span>\nqa_chain <span class=\"token operator\">=</span> ConversationalRetrievalChain<span class=\"token punctuation\">.</span>from_llm<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    retriever<span class=\"token operator\">=</span>vectorstore<span class=\"token punctuation\">.</span>as_retriever<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    memory<span class=\"token operator\">=</span>memory\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 대화</span>\nresult <span class=\"token operator\">=</span> qa_chain<span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token string\">\"question\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"연차 신청 방법이 뭐야?\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"2-코드-리뷰-자동화\" style=\"position:relative;\"><a href=\"#2-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%9E%90%EB%8F%99%ED%99%94\" aria-label=\"2 코드 리뷰 자동화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 코드 리뷰 자동화</h3>\n<p><strong>요구사항</strong></p>\n<ul>\n<li>코드를 분석해 리뷰 생성</li>\n<li>여러 파일을 동시에 처리</li>\n</ul>\n<p><strong>구현</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains <span class=\"token keyword\">import</span> LLMChain\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>prompts <span class=\"token keyword\">import</span> PromptTemplate\n\n<span class=\"token comment\"># 코드 리뷰 프롬프트</span>\nreview_prompt <span class=\"token operator\">=</span> PromptTemplate<span class=\"token punctuation\">(</span>\n    input_variables<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"code\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"language\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    template<span class=\"token operator\">=</span><span class=\"token triple-quoted-string string\">\"\"\"\n    다음 {language} 코드를 리뷰해줘:\n    \n    {code}\n    \n    다음 항목을 포함해줘:\n    1. 잠재적 버그\n    2. 성능 개선 사항\n    3. 코드 스타일 제안\n    \"\"\"</span>\n<span class=\"token punctuation\">)</span>\n\nreview_chain <span class=\"token operator\">=</span> LLMChain<span class=\"token punctuation\">(</span>llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span> prompt<span class=\"token operator\">=</span>review_prompt<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 코드 리뷰</span>\nresult <span class=\"token operator\">=</span> review_chain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>\n    code<span class=\"token operator\">=</span><span class=\"token triple-quoted-string string\">\"\"\"\n    function getUser(id) {\n        return users.find(u => u.id === id);\n    }\n    \"\"\"</span><span class=\"token punctuation\">,</span>\n    language<span class=\"token operator\">=</span><span class=\"token string\">\"JavaScript\"</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"3-문서-분석-및-요약\" style=\"position:relative;\"><a href=\"#3-%EB%AC%B8%EC%84%9C-%EB%B6%84%EC%84%9D-%EB%B0%8F-%EC%9A%94%EC%95%BD\" aria-label=\"3 문서 분석 및 요약 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 문서 분석 및 요약</h3>\n<p><strong>요구사항</strong></p>\n<ul>\n<li>긴 문서를 요약</li>\n<li>핵심 정보 추출</li>\n</ul>\n<p><strong>구현</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>chains<span class=\"token punctuation\">.</span>summarize <span class=\"token keyword\">import</span> load_summarize_chain\n<span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>document_loaders <span class=\"token keyword\">import</span> PyPDFLoader\n\n<span class=\"token comment\"># PDF 로드</span>\nloader <span class=\"token operator\">=</span> PyPDFLoader<span class=\"token punctuation\">(</span><span class=\"token string\">\"report.pdf\"</span><span class=\"token punctuation\">)</span>\ndocuments <span class=\"token operator\">=</span> loader<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 문서 분할</span>\ntexts <span class=\"token operator\">=</span> text_splitter<span class=\"token punctuation\">.</span>split_documents<span class=\"token punctuation\">(</span>documents<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 요약 Chain</span>\nsummary_chain <span class=\"token operator\">=</span> load_summarize_chain<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    chain_type<span class=\"token operator\">=</span><span class=\"token string\">\"map_reduce\"</span><span class=\"token punctuation\">,</span>\n    verbose<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 요약 실행</span>\nsummary <span class=\"token operator\">=</span> summary_chain<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>texts<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"4-데이터-분석-agent\" style=\"position:relative;\"><a href=\"#4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-agent\" aria-label=\"4 데이터 분석 agent permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 데이터 분석 Agent</h3>\n<p><strong>요구사항</strong></p>\n<ul>\n<li>자연어로 데이터 분석 요청</li>\n<li>Python 코드 자동 생성 및 실행</li>\n</ul>\n<p><strong>구현</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>agents <span class=\"token keyword\">import</span> create_pandas_dataframe_agent\n<span class=\"token keyword\">import</span> pandas <span class=\"token keyword\">as</span> pd\n\n<span class=\"token comment\"># 데이터 로드</span>\ndf <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>read_csv<span class=\"token punctuation\">(</span><span class=\"token string\">\"sales.csv\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Agent 생성</span>\nagent <span class=\"token operator\">=</span> create_pandas_dataframe_agent<span class=\"token punctuation\">(</span>\n    llm<span class=\"token operator\">=</span>llm<span class=\"token punctuation\">,</span>\n    df<span class=\"token operator\">=</span>df<span class=\"token punctuation\">,</span>\n    verbose<span class=\"token operator\">=</span><span class=\"token boolean\">True</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># 자연어 질문</span>\nresult <span class=\"token operator\">=</span> agent<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token string\">\"2024년 매출이 가장 높은 월은?\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2 id=\"langchain-vs-직접-구현\" style=\"position:relative;\"><a href=\"#langchain-vs-%EC%A7%81%EC%A0%91-%EA%B5%AC%ED%98%84\" aria-label=\"langchain vs 직접 구현 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LangChain vs 직접 구현</h2>\n<table>\n<thead>\n<tr>\n<th>구분</th>\n<th>LangChain 사용</th>\n<th>직접 구현</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>개발 속도</strong></td>\n<td>빠름</td>\n<td>느림</td>\n</tr>\n<tr>\n<td><strong>유지보수</strong></td>\n<td>쉬움</td>\n<td>어려움</td>\n</tr>\n<tr>\n<td><strong>확장성</strong></td>\n<td>높음</td>\n<td>낮음</td>\n</tr>\n<tr>\n<td><strong>커스터마이징</strong></td>\n<td>제한적</td>\n<td>자유로움</td>\n</tr>\n<tr>\n<td><strong>학습 곡선</strong></td>\n<td>중간</td>\n<td>낮음</td>\n</tr>\n<tr>\n<td><strong>의존성</strong></td>\n<td>많음</td>\n<td>적음</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"언제-langchain을-사용할까\" style=\"position:relative;\"><a href=\"#%EC%96%B8%EC%A0%9C-langchain%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C\" aria-label=\"언제 langchain을 사용할까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>언제 LangChain을 사용할까?</h3>\n<p><strong>LangChain 사용 권장</strong></p>\n<ul>\n<li>빠른 프로토타이핑 필요</li>\n<li>RAG, Agent 같은 복잡한 기능 필요</li>\n<li>여러 LLM을 교체하며 테스트 필요</li>\n<li>표준화된 구조가 필요한 경우</li>\n</ul>\n<p><strong>직접 구현 권장</strong></p>\n<ul>\n<li>매우 단순한 LLM 호출만 필요</li>\n<li>특수한 요구사항이 많은 경우</li>\n<li>의존성을 최소화하고 싶은 경우</li>\n</ul>\n<h2 id=\"활용-가이드\" style=\"position:relative;\"><a href=\"#%ED%99%9C%EC%9A%A9-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"활용 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>활용 가이드</h2>\n<h3 id=\"langchain-설치-및-설정\" style=\"position:relative;\"><a href=\"#langchain-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95\" aria-label=\"langchain 설치 및 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LangChain 설치 및 설정</h3>\n<p><strong>설치</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">pip <span class=\"token function\">install</span> langchain openai</code></pre></div>\n<p><strong>환경 변수 설정</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">OPENAI_API_KEY</span><span class=\"token operator\">=</span><span class=\"token string\">\"your-api-key\"</span></code></pre></div>\n<p><strong>Python 코드에서 설정</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> os\nos<span class=\"token punctuation\">.</span>environ<span class=\"token punctuation\">[</span><span class=\"token string\">\"OPENAI_API_KEY\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">\"your-api-key\"</span></code></pre></div>\n<h3 id=\"모델-선택\" style=\"position:relative;\"><a href=\"#%EB%AA%A8%EB%8D%B8-%EC%84%A0%ED%83%9D\" aria-label=\"모델 선택 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>모델 선택</h3>\n<p>LangChain은 다양한 LLM을 지원한다.</p>\n<p><strong>OpenAI</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>llms <span class=\"token keyword\">import</span> OpenAI\nllm <span class=\"token operator\">=</span> OpenAI<span class=\"token punctuation\">(</span>temperature<span class=\"token operator\">=</span><span class=\"token number\">0.7</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>Anthropic (Claude)</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>llms <span class=\"token keyword\">import</span> Anthropic\nllm <span class=\"token operator\">=</span> Anthropic<span class=\"token punctuation\">(</span>temperature<span class=\"token operator\">=</span><span class=\"token number\">0.7</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>로컬 모델 (Llama)</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> langchain<span class=\"token punctuation\">.</span>llms <span class=\"token keyword\">import</span> LlamaCpp\nllm <span class=\"token operator\">=</span> LlamaCpp<span class=\"token punctuation\">(</span>model_path<span class=\"token operator\">=</span><span class=\"token string\">\"./llama-model.bin\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"모범-사례\" style=\"position:relative;\"><a href=\"#%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\" aria-label=\"모범 사례 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>모범 사례</h3>\n<ol>\n<li>\n<p><strong>프롬프트 템플릿 활용</strong></p>\n<ul>\n<li>하드코딩된 프롬프트 대신 템플릿 사용</li>\n<li>변수 관리 용이</li>\n</ul>\n</li>\n<li>\n<p><strong>적절한 Memory 선택</strong></p>\n<ul>\n<li>짧은 대화: ConversationBufferMemory</li>\n<li>긴 대화: ConversationSummaryMemory</li>\n<li>최근만 중요: ConversationBufferWindowMemory</li>\n</ul>\n</li>\n<li>\n<p><strong>에러 처리</strong></p>\n<ul>\n<li>LLM 호출 실패 대비</li>\n<li>타임아웃 설정</li>\n<li>재시도 로직 추가</li>\n</ul>\n</li>\n<li>\n<p><strong>비용 관리</strong></p>\n<ul>\n<li>토큰 사용량 모니터링</li>\n<li>캐싱 활용</li>\n<li>적절한 모델 선택</li>\n</ul>\n</li>\n</ol>\n<h2 id=\"주의사항과-한계\" style=\"position:relative;\"><a href=\"#%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD%EA%B3%BC-%ED%95%9C%EA%B3%84\" aria-label=\"주의사항과 한계 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>주의사항과 한계</h2>\n<h3 id=\"1-의존성-관리\" style=\"position:relative;\"><a href=\"#1-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\" aria-label=\"1 의존성 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 의존성 관리</h3>\n<p>LangChain은 많은 의존성을 가지고 있어 충돌 문제가 발생할 수 있다.</p>\n<p><strong>해결</strong></p>\n<ul>\n<li>가상 환경 사용</li>\n<li>requirements.txt로 버전 고정</li>\n<li>정기적 업데이트 확인</li>\n</ul>\n<h3 id=\"2-성능-오버헤드\" style=\"position:relative;\"><a href=\"#2-%EC%84%B1%EB%8A%A5-%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9C\" aria-label=\"2 성능 오버헤드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 성능 오버헤드</h3>\n<p>LangChain은 추가 레이어로 인해 약간의 성능 오버헤드가 있다.</p>\n<p><strong>해결</strong></p>\n<ul>\n<li>단순한 경우 직접 구현 고려</li>\n<li>비동기 처리 활용</li>\n<li>배치 처리 활용</li>\n</ul>\n<h3 id=\"3-학습-곡선\" style=\"position:relative;\"><a href=\"#3-%ED%95%99%EC%8A%B5-%EA%B3%A1%EC%84%A0\" aria-label=\"3 학습 곡선 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 학습 곡선</h3>\n<p>LangChain의 개념을 이해하는 데 시간이 필요하다.</p>\n<p><strong>해결</strong></p>\n<ul>\n<li>공식 문서 읽기</li>\n<li>간단한 예제부터 시작</li>\n<li>점진적으로 복잡한 기능 학습</li>\n</ul>\n<h3 id=\"4-버전-호환성\" style=\"position:relative;\"><a href=\"#4-%EB%B2%84%EC%A0%84-%ED%98%B8%ED%99%98%EC%84%B1\" aria-label=\"4 버전 호환성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 버전 호환성</h3>\n<p>LangChain은 빠르게 발전해 버전 간 호환성 문제가 발생할 수 있다.</p>\n<p><strong>해결</strong></p>\n<ul>\n<li>안정 버전 사용</li>\n<li>변경 로그 확인</li>\n<li>마이그레이션 가이드 참고</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: LangChain은 왜 필요한가요?</strong><br>\nA: LangChain은 복잡한 LLM 애플리케이션 개발을 쉽게 만들어줍니다. 프롬프트 관리, 메모리 처리, 외부 도구 연결, RAG 구현 등을 간단한 API로 처리할 수 있어 개발 속도가 크게 향상됩니다.</p>\n<p><strong>Q: LangChain 없이도 LLM 애플리케이션을 만들 수 있나요?</strong><br>\nA: 네, 가능합니다. 하지만 RAG, Agent, 복잡한 Chain 같은 기능을 직접 구현하려면 많은 시간과 노력이 필요합니다. LangChain은 이런 기능을 즉시 사용할 수 있게 해줍니다.</p>\n<p><strong>Q: LangChain은 어떤 LLM을 지원하나요?</strong><br>\nA: OpenAI, Anthropic, Google, Cohere 등 주요 LLM 제공업체의 모델을 지원합니다. 또한 Llama 같은 오픈소스 모델도 지원합니다. LLM을 교체해도 코드 변경이 최소화됩니다.</p>\n<p><strong>Q: LangChain의 Memory는 어떻게 작동하나요?</strong><br>\nA: Memory는 대화 기록을 저장하고 관리합니다. ConversationBufferMemory는 모든 대화를 저장하고, ConversationSummaryMemory는 요약해서 저장합니다. 이를 통해 LLM이 이전 대화를 기억하고 맥락을 유지할 수 있습니다.</p>\n<p><strong>Q: LangChain으로 RAG를 구현하려면 어떻게 하나요?</strong><br>\nA: 문서를 로드하고 분할한 후, 임베딩으로 변환해 벡터 스토어에 저장합니다. RetrievalQA Chain을 사용하면 자동으로 관련 문서를 검색하고 LLM에 전달해 답변을 생성합니다.</p>\n<p><strong>Q: LangChain의 비용은 어떻게 되나요?</strong><br>\nA: LangChain 자체는 무료 오픈소스입니다. 비용은 사용하는 LLM API 비용만 발생합니다. LangChain은 오버헤드가 적어 직접 구현과 비슷한 비용이 듭니다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#langchain%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\">LangChain이란 무엇인가?</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#langchain%EC%9D%98-%ED%95%84%EC%9A%94%EC%84%B1\">LangChain의 필요성</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#langchain%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C\">LangChain의 핵심 구성 요소</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90\">핵심 개념</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#1-chain-%EC%9E%91%EC%97%85%EC%9D%84-%EC%88%9C%EC%B0%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B2%B0\">1. Chain: 작업을 순차적으로 연결</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#2-agent-%EC%99%B8%EB%B6%80-%EB%8F%84%EA%B5%AC%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9E%90%EC%9C%A8-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8\">2. Agent: 외부 도구를 사용하는 자율 에이전트</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#3-memory-%EB%8C%80%ED%99%94-%EA%B8%B0%EB%A1%9D-%EA%B4%80%EB%A6%AC\">3. Memory: 대화 기록 관리</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#4-rag-%EA%B5%AC%ED%98%84-%EC%99%B8%EB%B6%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%EC%97%B0%EA%B2%B0\">4. RAG 구현: 외부 데이터와 연결</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80\">실무 활용 사례</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#1-%EA%B3%A0%EA%B0%9D-%EC%83%81%EB%8B%B4-%EC%B1%97%EB%B4%87\">1. 고객 상담 챗봇</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#2-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%9E%90%EB%8F%99%ED%99%94\">2. 코드 리뷰 자동화</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#3-%EB%AC%B8%EC%84%9C-%EB%B6%84%EC%84%9D-%EB%B0%8F-%EC%9A%94%EC%95%BD\">3. 문서 분석 및 요약</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-agent\">4. 데이터 분석 Agent</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#langchain-vs-%EC%A7%81%EC%A0%91-%EA%B5%AC%ED%98%84\">LangChain vs 직접 구현</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%EC%96%B8%EC%A0%9C-langchain%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C\">언제 LangChain을 사용할까?</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%ED%99%9C%EC%9A%A9-%EA%B0%80%EC%9D%B4%EB%93%9C\">활용 가이드</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#langchain-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95\">LangChain 설치 및 설정</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%EB%AA%A8%EB%8D%B8-%EC%84%A0%ED%83%9D\">모델 선택</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\">모범 사례</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD%EA%B3%BC-%ED%95%9C%EA%B3%84\">주의사항과 한계</a></p>\n<ul>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#1-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\">1. 의존성 관리</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#2-%EC%84%B1%EB%8A%A5-%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9C\">2. 성능 오버헤드</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#3-%ED%95%99%EC%8A%B5-%EA%B3%A1%EC%84%A0\">3. 학습 곡선</a></li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#4-%EB%B2%84%EC%A0%84-%ED%98%B8%ED%99%98%EC%84%B1\">4. 버전 호환성</a></li>\n</ul>\n</li>\n<li><a href=\"/ai/LangChain%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-LLM-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C/#faq\">FAQ</a></li>\n</ul>","wordCount":{"words":694},"fields":{"slug":"/ai/LangChain을-활용한-LLM-애플리케이션-개발/","image":"/assets/ai.png","faq":[{"question":"LangChain은 왜 필요한가요?","answer":"LangChain은 복잡한 LLM 애플리케이션 개발을 쉽게 만들어줍니다. 프롬프트 관리, 메모리 처리, 외부 도구 연결, RAG 구현 등을 간단한 API로 처리할 수 있어 개발 속도가 크게 향상됩니다."},{"question":"LangChain 없이도 LLM 애플리케이션을 만들 수 있나요?","answer":"네, 가능합니다. 하지만 RAG, Agent, 복잡한 Chain 같은 기능을 직접 구현하려면 많은 시간과 노력이 필요합니다. LangChain은 이런 기능을 즉시 사용할 수 있게 해줍니다."},{"question":"LangChain은 어떤 LLM을 지원하나요?","answer":"OpenAI, Anthropic, Google, Cohere 등 주요 LLM 제공업체의 모델을 지원합니다. 또한 Llama 같은 오픈소스 모델도 지원합니다. LLM을 교체해도 코드 변경이 최소화됩니다."},{"question":"LangChain의 Memory는 어떻게 작동하나요?","answer":"Memory는 대화 기록을 저장하고 관리합니다. ConversationBufferMemory는 모든 대화를 저장하고, ConversationSummaryMemory는 요약해서 저장합니다. 이를 통해 LLM이 이전 대화를 기억하고 맥락을 유지할 수 있습니다."},{"question":"LangChain으로 RAG를 구현하려면 어떻게 하나요?","answer":"문서를 로드하고 분할한 후, 임베딩으로 변환해 벡터 스토어에 저장합니다. RetrievalQA Chain을 사용하면 자동으로 관련 문서를 검색하고 LLM에 전달해 답변을 생성합니다."},{"question":"LangChain의 비용은 어떻게 되나요?","answer":"LangChain 자체는 무료 오픈소스입니다. 비용은 사용하는 LLM API 비용만 발생합니다. LangChain은 오버헤드가 적어 직접 구현과 비슷한 비용이 듭니다."}]},"frontmatter":{"title":"LangChain을 활용한 LLM 애플리케이션 개발","date":"2025년 11월 6일","dateISO":"2025-11-06T02:15:00.000Z","updatedISO":null,"category":"ai","description":"LangChain 프레임워크의 개념과 활용 방법을 설명합니다. Chain, Agent, Memory의 개념과 실무 예시까지 알아봅니다.","tags":["LangChain","LLM","AI 애플리케이션","Chain","Agent","Memory","AI"]}}},"pageContext":{"slug":"/ai/LangChain을-활용한-LLM-애플리케이션-개발/","previous":{"fields":{"slug":"/blockchain/가상화폐/"},"frontmatter":{"title":"가상화폐란? 암호화폐와의 차이와 실무 활용","tags":["블록체인","가상화폐","암호화폐","비트코인","이더리움","디지털자산"]}},"next":{"fields":{"slug":"/algorithm/퀵-정렬-quick-sort/"},"frontmatter":{"title":"퀵 정렬 (Quick Sort)","tags":["퀵 정렬","Quick Sort","정렬","알고리즘","Algorithm","JavaScript"]}}}},"staticQueryHashes":["213619243","3262363727"]}