랭체인 프로그래밍: 개념과 응용 – 003
랭체인을 사용해, 지시에 응답하는 기본 기능을 갖춘 LLM 기반 챗봇을 만들겠습니다.
챗봇은 사용자의 입력을 받아 프롬프트를 생성하고, 모델로부터 응답을 받아 반환합니다.
– 스트리밍 방식을 사용할 수 있습니다. 스트리밍 방식은 사용자와의 상호작용을 더욱 매끄럽고 자연스럽게 만들어 주며, 대화형 애플리케이션에서 유용합니다.
모델 공급사를 선택했다면, 다음은 모델과 연동해 모델을 사용하는 방법을 알아야 합니다. LLM 모델 공급사는 생성형 AI 애플리케이션 개발을 지원하기 위해, 모델 연동 서비스를 API로 제공합니다. 랭체인은 API 연동을 지원합니다.
LLM 기반 챗봇을 개발하려면 먼저 어떤 LLM을 사용할지 결정해야 합니다. 대부분의 LLM 제공업체는 여러 종류의 모델을 제공하므로, 모델 선택은 사실상 모델 공급사 선택하는 것입니다. 각 모델은 성능, 비용, 속도 등에서 차이가 있으므로 챗봇의 목적과 요구사항에 맞는 모델을 신중하게 선택해야 합니다.
모델 제공업체를 선택했다면, 다음 단계는 해당 모델과의 연동입니다. LLM 제공업체는 일반적으로 모델 사용을 위한 API를 제공합니다. 이 API를 통해 프롬프트를 전달하고, 모델의 응답을 받을 수 있습니다.
LangChain은 이러한 API 연동 과정을 간소화하고 추상화하는 데 도움을 줍니다. LangChain을 사용하면 다양한 LLM 제공업체의 API를 일관된 방식으로 사용할 수 있으므로, 개발 과정을 단축하고 다양한 LLM을 손쉽게 테스트하고 비교할 수 있습니다. 즉, LangChain은 LLM과의 연동을 위한 추상화 계층을 제공하여 개발자의 부담을 줄이고 개발 효율성을 높여줍니다.
모델 공급사 선택
OpenAI를 모델 공급사로 선택하겠습니다.
모델 공급사의 모델 연동 API를 사용하려면, 먼저 API를 사용 권한을 얻어야 합니다. API 사용 권한을 얻으로면, OpenAI 계정을 생성하고 API 키를 발급받아야 합니다.
- https://platform.openai.com/
- 회원 가입하고 로그인합니다.
- 좌측 상단 톱니바퀴(설정)를 클릭합니다. 설정화면의 왼쪽 메뉴에서 Your profile을 선택하고 그 화면에서 상단의 User API keys탭을 선택하고 탭 화면에서 + Create new secret key 버튼을 클릭합니다.
- API Key를 발급사용하려면 지급정보를 작성해야 합니다.
파이썬 환경 설정
-
- 파이썬 설치
- 파이썬 스크립트 작성 실행 – 구글 코랩 사용
- LangChain 라이브러리 설치: 필요한 LangChain 라이브러리들을 설치합니다. (
pip install langchain langchain_openai langchain_community langchain-text-splitters langchain-postgres
) - OpenAI API 키 설정: 환경 변수에 OpenAI API 키를 설정합니다. (
export OPENAI_API_KEY=your-key
) - 다음과 같은 코드를 작성하고 실행합니다.
-
1234567from langchain_openai.llms import OpenAIOpenAIAPIKey = "OpenAI에서 받은 APIKey로 작성합니다"model = OpenAI(model='gpt-3.5-turbo-instruct', openai_api_key=OpenAIAPIKeyprompt = '하늘은 파랗고, 구름은'completion = model.invoke(prompt)print(completion)
# 출력: 하얗다! (또는 유사한 응답)
-
OpenAI 클래스 생성자 매개변수 살펴보기
주요 매개변수:
* API 키를 생성 시 설정하고자 할 때, openai_api_key |
챗 방식으로 모델 사용하기
사용자의 생성 요구사항이 간단하다면, 단 한 번의 프롬프트와 LLM의 단 한 번의 응답만으로 원하는 결과를 얻을 수 있습니다. 예를 들어, “오늘 날씨는 어때?” 와 같은 간단한 질문은 LLM이 바로 날씨 정보를 응답으로 제공할 수 있습니다.
하지만 요구사항이 복잡해지면 단순한 일회성 상호작용만으로는 원하는 결과를 얻기 어렵습니다. 사용자는 LLM의 초기 응답을 바탕으로 추가적인 질문이나 지시를 해야 할 수도 있고, LLM은 사용자의 추가적인 입력을 받아 다시 응답을 생성해야 할 수도 있습니다. 이처럼 사용자와 LLM 간의 여러 번의 상호작용이 필요한 경우, 특히 챗봇 애플리케이션에서는 이러한 상호작용이 자연스러운 대화의 흐름으로 이루어집니다.
복잡한 생성 작업에서는 사용자의 초기 프롬프트가 LLM에게 충분한 정보를 제공하지 못할 수 있으며, LLM은 추가적인 정보가 필요하다는 것을 사용자에게 알리거나 부족한 정보를 추가적인 질문을 통해 확보해야 할 수도 있습니다. 이러한 과정을 통해 사용자와 LLM은 상호작용하며 점차적으로 원하는 결과물에 가까워집니다. 따라서, 복잡한 생성 요구사항을 처리하는 LLM 기반 챗봇은 단순한 일회성 응답 시스템이 아닌, 대화형 인터페이스를 통해 사용자와의 상호작용을 효과적으로 관리하는 것이 중요합니다.
LangChain의 Chat Model
단순한 프롬프트-응답 방식의 LLM
인터페이스와 달리, Chat Model
인터페이스는 System
, User
, Assistant
세 가지 역할을 가진 메시지를 사용하여 다중 턴(multi-turn) 대화를 효율적으로 처리합니다.
세 가지 역할:
System
: 모델의 동작 방식을 설정하는 데 사용됩니다. 개발자는System
메시지를 통해 모델에게 역할, 행동 규칙, 응답 스타일 등을 지정할 수 있습니다. 예를 들어, “당신은 친절하고 도움이 되는 조수이며, 항상 정중하고 명확하게 답변해야 합니다.” 와 같이 모델의 전반적인 행동 양식을 제어할 수 있습니다.User
: 사용자가 모델에 보내는 질문이나 요청을 나타냅니다. 사용자의 의도를 명확하게 전달하는 것이 중요합니다.Assistant
: 모델이 사용자의 질문에 대한 응답을 생성하여 보내는 메시지를 나타냅니다. 모델의 응답은System
메시지에서 설정된 지침에 따라 생성됩니다.
Python 예제:
1 2 3 4 5 6 7 8 9 |
from langchain_openai.chat_models import ChatOpenAI from langchain_core.messages import HumanMessage OpenAIAPIKey = "OpenAI에서 받은 APIKey로 작성합니다" model = ChatOpenAI(model="gpt-4o-mini", openai_api_key=OpenAIAPIKey) prompt = [HumanMessage('대한민국 수도는?')] answer= model.invoke(prompt) print(answer) |
user 메시지는 HumanMessage
가, assistant 메시지는 AIMessage
가, system 메시지는 SystemMessage 가 담당합니다. 시스템 메시지는 생성 지시에 해당하는 것으로 한 번만 작성되고, 사용자 메시지는 대화가 진행되면서 다양하게 작성될 수 있습니다. AI 메시지는 사용자 메시지에 대한 응답으로 작성됩니다. 대화가 여러 번 진행되면 이들 메시지는 챗 이력으로 관리됩니다.
챗 방식을 사용할 경우 prompt로 보통은 시스템 메시지와 사용자 메시지
[HumanMessage(‘대한민국 수도는?’)]
ChatOpenAI 객체 생성 시, 챗 방식을 지원하는 모델인 gpt-4o-mini를 사용합니다.
gpt-3.5-turbo-instruct 모델은 기존 GPT-3 모델과의 호환성을 중시하며, 단순한 텍스트 생성 작업에 적합한 모델임을 나타냅니다. 대화형 기능이 필요한 경우에는 다른 모델을 선택해야 합니다.
OpenAI API는 다양한 모델과 미세 조정 기능을 통해 사용자에게 유연성과 맞춤형 서비스를 제공합니다. 사용자는 자신의 요구사항에 가장 적합한 모델을 선택하고, 필요에 따라 미세 조정을 통해 모델의 성능을 더욱 향상시킬 수 있습니다. |