프롬프트 체이닝은 대규모 언어 모델(LLM)을 사용하여 고급 워크플로를 구축하는 데 있어 기본이 되는 개념입니다. 여기에는 여러 프롬프트를 논리적 순서로 연결하는 작업이 포함되며, 여기서 한 프롬프트의 아웃풋은 다음 프롬프트의 입력 역할을 합니다. 이 모듈식 접근 방식은 다단계 텍스트 처리, 요약, 질문 답변 등과 같은 복잡한 작업을 해결하는 데 강력합니다.
LangChain은 워크플로 생성을 단순화하도록 설계된 다용도 프레임워크입니다. IBM® Granite 모델 또는 OpenAI의 GPT(사전 훈련된 생성형 트랜스포머) 모델과 같은 LLM을 관리하고, 맞춤 프롬프트를 정의하고, 이를 재사용 가능한 체인에 연결하는 도구를 제공합니다. LangChain은 프롬프트 관리의 복잡성을 추상화함으로써 개발자가 LLM과의 프롬프트 상호 작용을 조정하는 대신 문제 해결에 집중할 수 있도록 지원합니다.
이 튜토리얼에서는 다음을 수행합니다.
LangChain은 챗봇 애플리케이션에서 워크플로를 구축하기 위한 강력한 프레임워크를 제공합니다. 구조화된 프롬프트, 동적 체인 및 고급 LLM 통합을 결합하여 개발자가 RAG 기술을 활용하고 JSON과 같은 구조화된 아웃풋을 제공하는 확장 가능한 적응형 파이프라인을 만들 수 있습니다. LangChain이 프롬프트 체인을 효과적으로 처리하는 방법은 다음과 같습니다.
프롬프트 추상화: LangChain은 from_template을 활용하여 각 단계에 대한 구조화된 입력/아웃풋 워크플로를 설계하여 복잡한 챗봇 작업을 쉽게 처리할 수 있도록 합니다.
LLM 통합: 이 프레임워크는 IBM Granite, OpenAI, Hugging Face 등 다양한 LLM과 원활하게 통합되어 맞춤형 작업에 대한 미세 조정이 가능합니다.
체인 관리: LangChain의 SequentialChain과 SimpleSequentialChain은 챗봇 파이프라인에 대한 모듈식 워크플로를 지원하는 반면, stroutputparser는 JSON과 같은 구조화된 아웃풋을 보장합니다.
동적 워크플로: ConditionalChain 및 systemmessage 템플릿과 같은 도구를 사용하는 LangChain은 동적 콘텐츠 생성을 위한 RAG(검색 증강 생성) 원칙에 맞춰 적응형 워크플로를 지원합니다.
이 튜토리얼을 마치면 LangChain을 사용하여 다양한 애플리케이션을 위한 모듈식의 확장 가능한 워크플로를 구축하는 방법을 확실히 이해할 수 있을 것입니다.
프롬프트 체이닝을 사용하면 한 단계의 아웃풋이 다음 단계로 전달되는 워크플로를 설계할 수 있습니다. 다양한 유형의 체인은 단순한 순차적 작업부터 보다 복잡하고 역동적인 워크플로에 이르기까지 다양한 워크플로를 지원합니다. 프롬프트 체이닝의 유형을 간략하게 살펴보겠습니다.
순차 체이닝: 한 프롬프트의 아웃풋이 다음 프롬프트의 입력으로 직접 전달되는 가장 간단한 유형의 체니인입니다. 이 유형은 선형 진행이 있는 작업에 적합합니다.[1]
분기 체이닝: 분기 체이닝에서는 단일 아웃풋이 여러 병렬 워크플로로 분할됩니다. 각 분기는 아웃풋을 독립적으로 처리합니다. [2]
반복 체이닝: 반복 체이닝에는 지정된 조건이 충족될 때까지 프롬프트 또는 체인을 반복적으로 실행하는 작업이 포함됩니다. 이 유형은 아웃풋을 구체화하는 데 유용합니다.[3]
계층적 체이닝: 이 유형은 큰 작업을 계층적으로 실행되는 더 작은 하위 작업으로 나눕니다. 더 낮은 수준의 아웃풋은 더 높은 수준의 작업에 공급됩니다. [4]
조건부 체이닝: 조건부 체이닝은 이전 프롬프트의 아웃풋을 기반으로 다음 단계를 동적으로 선택합니다. 이 유형을 사용하면 워크플로 내에서 의사 결정을 내릴 수 있습니다.
멀티모달 체이닝: 멀티모달 체이닝은 다양한 데이터 유형(예: 텍스트, 이미지 또는 오디오)을 처리하는 프롬프트를 통합합니다. 여러 양식이 결합된 애플리케이션에 적합합니다. [2]
동적 체이닝: 동적 체이닝은 실시간 아웃풋 또는 변화하는 조건에 따라 워크플로를 조정합니다. 이 유형은 프롬프트 체이닝에 유연성을 더합니다. [5]
재귀 체이닝: 재귀 체이닝에서는 개별 처리를 위해 큰 입력을 더 작은 청크로 나눈 다음 결과를 결합합니다. 긴 문서나 데이터 세트를 처리할 때 유용합니다. [6]
역방향 체이닝: 역방향 체이닝은 예상 아웃풋으로 시작하여 이를 달성하는 데 필요한 입력 또는 단계를 결정하기 위해 거꾸로 작동합니다. 문제 해결 및 디버깅에 유용합니다. [5]
각 유형의 체이닝은 고유한 사용 사례에 적합하므로, 작업의 복잡성과 요구 사항에 따라 올바른 사용 사례를 선택하는 것이 중요합니다.
이 워크플로에서는 채팅 모델과 프롬프트 엔지니어링을 통해 고객 피드백을 처리하여 확장 가능한 텍스트 처리 파이프라인을 구축합니다. 튜토리얼의 다음 단계에서는 생성형 AI를 기반으로 하는 순차, 분기 및 반복 체이닝 기술을 보여줍니다.
키워드 추출(순차적 체이닝)
감정 요약 생성(분기 체이닝)
감정 요약 정제(반복 체이닝)
최종 아웃풋
이 접근 방식은 Python의 순차, 분기 및 반복 체이닝과 채팅 모델 및 프롬프트 엔지니어링을 결합합니다. 키워드 추출, 감정 분석 및 정제를 위해 생성형 AI를 활용하여 고객 피드백을 강력하게 처리합니다.
watsonx.ai 프로젝트를 생성하려면 IBM® Cloud 계정이 필요합니다.
여러 툴 중에서 선택할 수 있지만, 이 튜토리얼에서는 Jupyter Notebook을 사용하기 위해 IBM 계정을 설정하는 방법을 안내합니다.
이 단계에서는 이 튜토리얼의 코드를 복사할 수 있는 Notebook 환경이 열립니다. 또는 이 노트북을 로컬 시스템에 다운로드하여 watsonx.ai 프로젝트에 에셋으로 업로드할 수 있습니다. 더 많은 Granite 튜토리얼을 보려면 IBM Granite 커뮤니티를 확인하세요. 이 튜토리얼은 Github에서도 보실 수 있습니다.
langchain 프레임워크 및 watsonxLLM을 사용하여 작업하려면 라이브러리가 필요합니다. 먼저 필요한 패키지를 설치해 보겠습니다.
참고: 이전 버전의 'pip'를 사용하는 경우 pip install --upgrade pip' 명령을 사용하여 업그레이드할 수 있습니다. 이 단계는 이전 버전과 호환되지 않을 수 있는 최신 패키지를 쉽게 설치하는 데 도움이 됩니다. 그러나 이미 최신 버전을 사용하고 있거나 최근에 패키지를 업그레이드한 경우 이 명령어를 건너뛸 수 있습니다.
이 코드 블록은 LangChain 및 IBM Watson LLM을 사용하여 LLM 애플리케이션을 구축하고 관리하는 데 필요한 필수 Python 라이브러리 및 도구를 가져옵니다.
os 모듈은 프로젝트 자격 증명이나 API 키와 같은 환경 변수에 액세스하는 데 사용됩니다.
WatsonxLLM은 생성형 AI 모델에서 아웃풋을 생성하기 위해 IBM Watson LLM을 통합하는 langchain_ibm의 모듈입니다.
PromptTemplate은 프롬프트에 대한 재사용 가능한 템플릿을 만드는 데 도움이 되며, 프롬프트 엔지니어링에서 입력 구조와 유연성을 보장합니다.
LLMChain은 개별 작업 체인을 구축하고,
SequencialChain는 여러 단계를 하나의 워크플로로 연결하며 `getpass`는 민감한 정보(예: API 키)를 화면에 노출하지 않고도 안전하게 검색합니다.
이 코드는 IBM Watson Machine Learning(WML) API에 액세스하기 위한 자격 증명을 설정하고 PROJECT_ID가 올바르게 구성되었는지 확인합니다.
이 코드는 IBM Watson LLM을 애플리케이션에서 사용할 수 있도록 초기화합니다.
이 단계는 Watson LLM이 워크플로에서 응답을 생성하도록 준비합니다.
이 코드는 텍스트 처리 워크플로에 대한 프롬프트 템플릿을 정의합니다.
이러한 PromptTemplate 인스턴스는 LLM 애플리케이션에 대한 재사용 가능하고 구조화된 프롬프트 엔지니어링을 가능하게 합니다.
이 코드는 프롬프트를 초기화된 IBM Watson LLM과 연결하는 LLM 체인을 정의하여 각 단계에 고유한 아웃풋 키를 할당합니다.
이러한 LLMChain 인스턴스는 모듈식 작업 실행을 지원하여, 단계별 애플리케이션 워크플로를 용이하게 합니다.
이 코드는 이전에 정의된 체인을 순차적 워크플로로 결합하여 텍스트 입력을 위한 단계별 프로세스를 가능하게 합니다. SequentialChain은 정의된 순서로 keyword_chain, sentiment_chain 및 refine_chain을 연결하여 한 체인의 아웃풋이 다음 체인의 입력 역할을 하도록 합니다. 워크플로는 텍스트를 초기 입력으로 받아들이고, 최종 아웃풋인 정제된 감정 요약을 "refined_summary" 키에 저장하도록 구성됩니다. 이 설정을 통해 LLM 애플리케이션을 간소화하고 효율적으로 실행할 수 있어 일관되고 모듈화된 처리 파이프라인이 보장됩니다.
이 코드 블록에서 워크플로 전체를 실행하겠니다. 첫째, 앱에 대한 긍정적인 사용자 의견과 부정적인 사용자 의견이 모두 포함된, feedback_text로 정의된 여러 줄 피드백 문자열이 있습니다. workflow.run 메서드는 제공된 입력을 사용하여 순차적 체인(키워드 추출, 감정 분석, 정제)을 통해 피드백을 처리합니다. 그리고 정제된 감정 요약은 최종 결과로 직접 인쇄됩니다.
아웃풋
정제된 감정 요약:
앱의 기능과 가끔 유용한 고객 지원에 대한 감사에도 불구하고 반복되는 앱 충돌과 느린 고객 지원 응답 시간으로 인해 사용자의 감정은 주로 부정적입니다. 사용자 만족도를 높이려면 개발팀은 앱 충돌을 해결하고 고객 지원 응답을 신속하게 처리하는 데 집중해야 합니다.
정제된 감정 요약은 피드백에 대한 간결하고 명확한 평가입니다. 이 요약은 앱 기능에 대한 사용자의 감사를 강조하되, 잦은 충돌과 느린 고객 지원에 대한 불만을 표현하여 중요한 통찰력을 효과적으로 추출하는 워크플로의 능력을 반영합니다.
LLM 애플리케이션에 적합한 체이닝 유형을 선택하려면 효율성과 일관성을 보장하기 위한 핵심 요소를 평가해야 합니다.
작업 복잡성: 여러 단계로 구성된 작업에는 실행 가능한 워크플로를 사용합니다. 퓨샷 예시 또는 chatprompttemplate은 다양한 프롬프트가 필요한 복잡한 작업을 구성하는 데 도움이 될 수 있습니다.
종속성: 한 단계의 아웃풋이 다음 프롬프트의 자리 표시자인 경우 순차적 체이닝을 사용합니다. 아웃풋 구문 분석기는 아웃풋을 구조화된 입력으로 원활하게 전환할 수 있도록 합니다.
적응성: Langchain 에이전트와 관련된 동적 워크플로의 경우 반복적 체이닝을 통해 매개변수와 다음 프롬프트를 실시간으로 조정할 수 있습니다.
데이터 양식: 다양한 데이터 유형과 호환되는 워크플로를 선택합니다. 텍스트 및 벡터 데이터에 임베딩 메서드를 사용하거나 유연한 작업을 위해 LangChain 표현식 언어를 사용합니다.
이러한 요소를 고려하면 일관된 체이닝 워크플로를 통해 강력하고 적응력이 뛰어난 LLM 애플리케이션을 구축할 수 있습니다.
프롬프트 체이닝은 정교한 자연어 처리(NLP) 워크플로를 구축하기 위한 다용도 기술입니다. 이 튜토리얼에서는 다양한 체이닝 유형을 살펴보고 여러 체이닝 접근 방식을 통합하는 일반적인 예제를 시연했습니다. 이러한 방법을 실험함으로써 실제 애플리케이션을 위한 언어 모델의 잠재력을 최대한 활용할 수 있습니다.
[1] Roegiest, A., & Chitta, R. (2024년). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J., & Zhang, S. (2023년). Chain of Thought Prompt Tuning in Vision Language Models.
[3] Sun, S., Yuan, R., Cao, Z., Li, W., & Liu, P. (2024년). Prompt Chaining or Stepwise Prompt? Refinement in Text Summarization. , 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C., & Xu, X. (2023년). PCR-Chain: Partial Code Reuse Assisted by Hierarchical Chaining of Prompts on Frozen Copilot. 2023 IEEE/ACM 45th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 1-5. https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M., & Cai, C. (2022년). PromptChainer: Chaining Large Language Model Prompts through Visual Programming. CHI Conference on Human Factors in Computing Systems Extended Abstracts. https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023년). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.