안녕하세요. 이번에는 LangChain, Ollama, LangGraph를 사용하여 간단한 AI 답변 생성 시스템을 구축하는 방법을 소개하겠습니다.
사용된 기술 및 라이브러리
- LangChain: AI 모델과의 상호작용을 쉽게 구성할 수 있는 프레임워크입니다. 다양한 모델과 연결하여 일련의 작업을 처리하는 데 유용합니다.
- Ollama: 다양한 언어 모델을 제공하는 플랫폼으로, 여기서는 gemma2.gguf 모델(SionicAI)을 사용해 AI 응답을 생성합니다.
- LangGraph: 상태 기반의 워크플로우를 구성할 수 있는 툴입니다. 이를 통해 복잡한 프로세스를 손쉽게 관리할 수 있습니다.
코드 설명
이제 코드를 단계별로 살펴보겠습니다.
0. 필요한 모듈 임포트
from typing import TypedDict
from langchain_community.llms.ollama import Ollama
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langgraph.graph import StateGraph, END
1. 상태 스키마 정의
# 상태 스키마 정의
class State(TypedDict):
question: str # 사용자의 질문
answer: str # 답변
2. Ollama 모델 초기화
다음으로, Ollama 플랫폼에서 gemma2 모델을 초기화합니다.
이 모델은 사용자가 제공한 질문에 대한 답변을 생성할 것입니다.
gemma_model = Ollama(model="gemma2")
3. 프롬프트 템플릿 정의
LangChain의 PromptTemplate을 사용하여 AI 모델에 전달할 프롬프트를 정의합니다.
이 프롬프트는 사용자로부터 받은 질문을 템플릿에 삽입하여 모델이 처리할 수 있도록 합니다.
prompt = PromptTemplate.from_template("다음 질문에 대답해주세요: {question}")
4. LangChain 체인 생성
여기서는 LangChain을 사용하여 모델에 질문을 전달하고, 그 결과를 파싱하여 최종적으로 답변을 반환하는 체인을 생성합니다.
chain = prompt | gemma_model | StrOutputParser() | (lambda x: {"answer": x})
# 'lambda'를 사용하지 않을경우, 체인에서 반환되는 값이 dict 형식이 아니면 오류가 발생할 수 있습니다.
5. LangGraph 상태 그래프 생성 및 설정
LangGraph를 사용하여 상태 기반의 워크플로우를 설정합니다.
먼저 StateGraph를 생성하고, 필요한 노드와 엣지를 추가합니다.
workflow = StateGraph(State)
# 노드 추가
workflow.add_node("답변_생성", chain)
# 시작 노드 설정
workflow.set_entry_point("답변_생성")
# 종료 조건 설정
workflow.add_edge("답변_생성", END)
6. 그래프 컴파일 및 실행
마지막으로, 그래프를 컴파일하고 실행합니다.
아래의 예시에서는 "인공지능이란 무엇인가요?"라는 질문에 대한 답변을 생성합니다.
# 그래프 컴파일
app = workflow.compile()
# 사용 예시
result = app.invoke({"question": "인공지능이란 무엇인가요?"})
print(result['answer'])
실행결과
마무리
이 포스팅에서는 LangChain, Ollama, LangGraph를 사용하여 간단한 AI 답변 생성 시스템을 구축하는 방법을 살펴보았습니다. 이 예제를 통해 복잡한 AI 시스템을 더 쉽게 구성할 수 있는 방법을 이해하셨기를 바랍니다. 추가적으로 더 깊이 있는 작업을 원한다면, 각 라이브러리의 문서를 참고하여 다양한 기능을 활용해보세요!
해당 코드는 간단하게 작성을 하였으며.
라이센스는 MIT 라이센스에 적용됨을 알립니다.
'AI+RAG' 카테고리의 다른 글
로컬 Ollama를 vscode에서 추론을 해보자! (0) | 2024.08.17 |
---|---|
Gemma2 GGUF를 로컬Ollama에 등록해보자! (0) | 2024.08.16 |