ML_DL/MUJAKJUNG (무작정 시리즈)

[LangChain] 챗봇 구성하기

swwho 2025. 4. 3. 00:18
728x90
반응형

 

 

[LangChain] 시작하기

LangChain 이란?LLM을 활용한 어플리케이션 개발을 위한 오픈소스 프레임워크DB, File System 지원LangChain 설치가상환경 설정conda create -n langchain python=3.11langchain 설치pip install -U langchainopenai 설치pip install

swwho.tistory.com

 

프로젝트 파일 구조

chatbot_project/
├── .env                    # 환경변수 저장
├── main.py                 # 챗봇 실행 스크립트
├── chatbot/
│   ├── config.py           # 환경변수 로드 및 설정
│   ├── llm_chain.py        # Langchain LLM 설정 및 체인 정의
│   └── prompt.py           # 프롬프트 템플릿 정의

 


llm_chain.py

  • langchain_openai를 통해 OpenAI 모델 활용
  • | 파이프를 통해 chain 생성
  • chain을 custom하기 위해 Runnable 객체 사용
from langchain_openai import OpenAI
from langchain_core.runnables import Runnable
from chatbot.prompt import prompt
from chatbot.config import OPENAI_API_KEY

def create_chatbot_chain():
    llm = OpenAI(model="gpt-3.5-turbo-instruct", openai_api_key=OPENAI_API_KEY, streaming=True)
    chain: Runnable = prompt | llm
    return chain

 


config.py

  • OpenAI API KEY 등 환경변수나 설정등을 담은 파일
import os
from dotenv import load_dotenv

load_dotenv()
OPENAI_API_KEY = os.getenv("OPEN_API_KEY")

 


prompt.py

  • prompt를 관리하는 파일
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template(
    "당신은 친절한 한국의 AI 비서입니다. 다음 질문에 정확하고 친절하게 답변합니다. 질문: \n{input}"
)

main.py

  • input을 prompt와 담아 모델에 요청하고, 그 응답을 스트리밍 방식으로 처리
  • print의 flush=True를 통해 buffer를 바로바로 출력하도록 처리
  • exit이 입력되면 채팅 종료
from chatbot.llm_chain import create_chatbot_chain

def main():
    chain = create_chatbot_chain()
    print("무엇이든 물어보세요! ('exit'으로 종료)")

    while True:
        user_input = input("질문: ")
        if user_input.lower() == "exit":
            break

        print("답변:", end="", flush=True)
        for chunk in chain.stream({"input": user_input}):
            print(chunk, end="", flush=True)
        print()
    return

if __name__ == "__main__":
    main()