이 튜토리얼에서는 현재 watsonx.ai에서 사용할 수 있는 IBM® Granite-3.0-8B-Instruct 모델을 사용하여 LangChain 에이전틱 RAG 시스템을 생성합니다. 이 모델은 외부 정보를 사용하여 2024년 US Open에 대한 복잡한 질문에 답변할 수 있습니다.
검색 증강 생성(RAG)은 정보 검색 및 생성형 모델을 활용하여 보다 정확하고 관련성이 높으며 상황에 맞는 응답을 생성하는 자연어 처리(NLP) 기술입니다. 기존 언어 생성 작업에서는 Meta의 Llama 모델 또는 IBM의 Granite 모델과 같은 대규모 언어 모델(LLM)을 사용하여 입력 프롬프트를 기반으로 응답을 구성합니다. 이러한 대규모 언어 모델의 일반적인 실제 사용 사례는 챗봇입니다. 모델의 지식 기반에 최신 관련 정보가 누락된 경우, RAG는 강력한 툴로 작용합니다.
에이전틱 RAG 시스템의 핵심은 인공 지능(AI) 에이전트입니다. AI 에이전트는 워크플로를 설계하고 사용 가능한 툴을 활용하여 사용자 또는 다른 시스템을 대신하여 자율적으로 작업을 수행할 수 있는 시스템 또는 프로그램을 말합니다. 에이전트 기술은 백엔드에서 툴 사용을 구현하여 다양한 데이터 소스에서 최신 정보를 얻고, 워크플로를 최적화하고 복잡한 작업을 해결하기 위해 자율적으로 하위 작업을 생성합니다. 이러한 외부 툴에는 외부 데이터 세트, 검색 엔진, API 및 기타 에이전트가 포함될 수 있습니다. 단계별로 에이전트는 실시간으로 행동 계획을 재평가하고 자체 수정합니다.
에이전틱 RAG 프레임워크는 두 개 이상의 툴을 포함할 수 있으므로 강력합니다. 기존 애플리케이션에서 LLM에는 응답을 구성할 때 참조할 수 있는 벡터 데이터베이스가 제공됩니다. 반면, 에이전틱 AI 애플리케이션은 데이터 검색만 수행하는 문서 에이전트로 제한되지 않습니다. RAG 에이전트는 수학적 계산 해결, 이메일 작성, 데이터 분석 수행 등과 같은 작업을 위한 툴도 보유할 수 있습니다. 이러한 툴은 에이전트의 의사 결정 프로세스를 보완할 수 있습니다. AI 에이전트는 다단계 추론에서 상황을 인식하며, 적절한 툴을 사용할 시기를 결정할 수 있습니다.
AI 에이전트 또는 지능형 에이전트는 단일 에이전트보다 성능이 뛰어난 경향이 있는 멀티에이전트 시스템에서도 협업적으로 작동할 수 있습니다. 이러한 확장성과 적응성은 에이전틱 RAG 에이전트를 기존 RAG 파이프라인과 차별화하는 요소입니다.
watsonx.ai 프로젝트를 생성하려면 IBM Cloud 계정이 필요합니다.
여러 툴 중에서 선택할 수 있지만, 이 튜토리얼에서는 Jupyter Notebook을 사용하기 위해 IBM 계정을 설정하는 방법을 안내합니다.
IBM Cloud 계정을 사용하여 watsonx.ai에 로그인합니다.
watsonx.ai 프로젝트를 생성합니다.
프로젝트 내에서 프로젝트 ID를 가져올 수 있습니다. 관리 탭을 클릭합니다. 그런 다음 일반 페이지의 세부 정보 섹션에서 프로젝트 ID를 복사합니다. 이 튜토리얼에는 이 ID가 필요합니다.
Jupyter Notebook을 만듭니다.
이 단계에서는 이 튜토리얼의 코드를 복사할 수 있는 Notebook 환경이 열립니다. 또는 이 노트북을 로컬 시스템에 다운로드하여 watsonx.ai 프로젝트에 에셋으로 업로드할 수 있습니다. 더 많은 Granite 튜토리얼을 보려면 IBM Granite 커뮤니티를 확인하세요. 이 Jupyter Notebook과 함께 사용된 데이터 세트는 GitHub에서 확인할 수 있습니다.
watsonx.ai 런타임 서비스 인스턴스를 만듭니다(적절한 지역을 선택하고 무료 인스턴스인 Lite 요금제를 선택합니다).
API 키를 생성합니다.
watsonx.ai 런타임 서비스 인스턴스를 watsonx.ai에서 생성한 프로젝트에 연결합니다.
이 튜토리얼에는 몇 가지 종속성이 필요합니다. 다음 항목을 가져와야 합니다. 설치되지 않은 경우, 빠른 PIP 설치로 이 문제를 해결할 수 있습니다.
에이전틱 AI 시스템을 구축하기 위한 일반적인 Python 프레임워크에는 LangChain, LangGraph 및 LlamaIndex 등이 있습니다. 이 튜토리얼에서는 LangChain을 사용합니다.
자격 증명을 설정합니다. PROJECT_ID 및 APIKEY를 이 노트북과 동일한 디렉터리 수준에 있는 별도의 .env 파일에 저장합니다.
이 단계는 외부 데이터 소스가 있거나 없는 에이전트의 행동에 대한 명확한 예를 생성하므로 중요합니다. 먼저 매개변수를 설정해 보겠습니다.
사용 가능한 모델 매개변수는 여기에서 확인할 수 있습니다. 온도, 최소 및 최대 신규 토큰, 중지 시퀀스를 포함한 다양한 모델 매개변수를 실험했습니다. watsonx 문서에서 모델 매개변수와 그 의미에 대해 자세히 알아보세요. 에이전트 할루시네이션을 제한하기 위해 여기에 stop_sequences를 설정하는 것이 중요합니다. 이는 에이전트에게 특정 하위 문자열을 발견하면 추가 아웃풋 생성을 중지하도록 지시합니다. 이 사례에서는 에이전트가 관찰에 도달하면 반응을 종료하고 인간의 반응을 할루시네이션하지 않게 하고자 합니다. 따라서 여기의 stop_sequences 중 하나는 'Human:'이고 다른 하나는 최종 반응이 생성되면 Observation을 중단하는 것입니다.
이 튜토리얼에서는 유사한 결과를 얻기 위해 IBM의 Granite-3.0-8B-Instruct 모델을 LLM으로 사용할 것을 권장합니다. 물론 원하는 AI 모델을 자유롭게 사용해도 됩니다. watsonx를 통해 사용할 수 있는 파운데이션 모델은 여기에서 확인할 수 있습니다. LLM 애플리케이션에서 이러한 모델의 목적은 어떤 조치를 취할지 결정하는 추론 엔진 역할을 하는 것입니다.
여러 개의 질문을 하고 싶은 경우를 위한 프롬프트 템플릿을 설정해 드리겠습니다.
이제 프롬프트와 LLM을 사용하여 체인을 설정할 수 있습니다. 이를 통해 생성형 모델이 응답을 생성할 수 있습니다.
에이전트가 기본 쿼리에 어떻게 응답하는지 테스트해 보겠습니다.
아웃풋: ' 답을 지어내려고 하지 마십시오.\n\nUS Open의 경기 종목은 테니스입니다.'
에이전트가 기본 쿼리에 정답으로 성공적으로 응답했습니다. 이 튜토리얼의 다음 단계에서는 에이전트가 2024년 US Open에 대한 관련 정보에 액세스할 수 있는 RAG 툴을 만듭니다. 앞서 다뤘듯이, 기존 LLM은 자체적으로 최신 정보를 얻을 수 없습니다. 이를 확인해 보겠습니다.
아웃풋: ' 답을 지어내지 마십시오.\n\n2024년 US Open 테니스 챔피언십은 아직 공식적으로 발표되지 않았기 때문에 장소는 확정되지 않았습니다. 따라서 저는 이 질문에 대한 답을 모릅니다.'
보시다시피 LLM은 관련 정보를 제공할 수 없습니다. 이 모델에 사용된 훈련 데이터에는 2024년 US Open 이전의 정보가 포함되어 있으며, 적절한 툴이 없으면 에이전트는 이 정보에 액세스할 수 없습니다.
지식 기반을 만드는 첫 번째 단계는 콘텐츠를 추출할 URL을 나열하는 것입니다. 이 경우 데이터 소스는 2024년 IBM의 US Open 참여를 요약한 IBM의 온라인 콘텐츠에서 수집됩니다. 관련 URL은 URL 목록에 설정되어 있습니다.
다음으로, 나열된 URL에 대해 LangChain WebBaseLoader를 사용하여 문서를 로드합니다. 또한 샘플 문서를 인쇄하여 어떻게 로드되었는지 확인해 보겠습니다.
아웃풋: 문서(metadata={'source': 'https://www.ibm.com/kr-ko/case-studies/us-open', 'title': 'U.S. Open | IBM', 'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en'}, page_content='\n\n\n\n\n\n\n\n\n\nU.S. Open | IBM\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHome\n\n\n\n\nCase Studies\n\n\n\nUS Open \n\n\n\n \n\n\n\n \n US Open의 디지털 경험 최적화\n\n\n\n\n\n\n \n\n\n \n\n \n\n\n \n \n watsonx로 구축된 AI 모델이 데이터를 인사이트로 전환\n \n\n\n\n\n \n\n\n \n\n\n최신 AI 및 기술 인사이트 얻기\n\n\n더 알아보기\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n여름이 끝날 무렵이 되면 2주간 거의 100만 명 이상이 US Open 테니스 선수권 대회에서 세계 최고의 테니스 선수들이 경쟁하는 모습을 보기 위해 뉴욕 플러싱으로 향합니다....')
이러한 문서의 데이터를 LLM이 처리할 수 있는 청크로 분할하기 위해 RecursiveCharacterTextSplitter와 같은 텍스트 분할기를 사용할 수 있습니다. 이 텍스트 분할기는 문자 ["\n\n", "\n", " ", ""]로 콘텐츠를 분할합니다. 이는 단락, 문장 및 단어 등 동일한 청크 내에 텍스트를 유지하려는 의도로 수행됩니다.
텍스트 분할기가 시작되면 이 예의 docs_list에 적용할 수 있습니다.
이 예에서 사용하는 임베딩 모델은 watsonx.ai 임베딩 서비스를 통한 IBM Slate 모델입니다. 이 모델을 초기화해 보겠습니다.
임베딩된 문서를 저장하기 위해 오픈 소스 벡터 스토어인 Chroma DB를 사용합니다.
벡터 스토어의 정보에 액세스하려면 검색 툴을 설정해야 합니다.
에이전트가 사용할 get_IBM_US_Open_context() 툴을 정의해 보겠습니다. 이 툴의 유일한 매개변수는 사용자 쿼리입니다. 또한 에이전트에게 툴 사용에 대해 알리기 위해 툴 설명이 기록됩니다. 이렇게 하면 에이전트는 이 툴을 언제 호출해야 하는지 알 수 있습니다. 이 툴은 사용자 쿼리가 IBM의 2024년 US Open 참여와 관련된 경우 에이전트 RAG 시스템에서 사용자 쿼리를 벡터 스토어로 라우팅하는 데 사용할 수 있습니다.
다음으로, 여러 개의 질문을 할 수 있는 새로운 프롬프트 템플릿을 설정합니다. 이 템플릿은 더 복잡합니다. 이 프롬프트 템플릿은 구조화된 채팅 프롬프트로 불리며, 여러 개의 툴을 사용할 수 있는 에이전트를 만드는 데 사용할 수 있습니다. 이 사례에서 사용하는 툴은 6단계에서 정의되었습니다. 구조화된 채팅 프롬프트는 system_prompt, human_prompt 및 RAG 툴로 구성됩니다.
먼저 system_prompt를 설정합니다. 이 프롬프트는 에이전트의 하위 작업, 사용된 툴 및 최종 아웃풋을 포함한 '사고 과정'을 인쇄하도록 에이전트에 지시합니다. 이를 통해 에이전트의 함수 호출에 대한 인사이트를 얻을 수 있습니다. 또한 프롬프트는 JSON Blob 형식으로 응답을 반환하도록 에이전트에 지시합니다.
다음 코드에서는 human_prompt를 설정합니다. 이 프롬프트는 에이전트에게 사용자 입력과 에이전트가 agent_scratchpad의 일부로 수행한 중간 단계를 표시하도록 지시합니다.
다음으로 프롬프트 템플릿에서 새로 정의된 프롬프트의 순서를 설정합니다. 이 새 템플릿을 만들어 system_prompt 다음에 에이전트의 기억에 수집된 선택적 메시지 목록(있는 경우), 그리고 마지막으로 사람의 입력과 agent_scratchpad 모두 포함하는 human_prompt를 포함합니다.
이제 부분 프롬프트 템플릿을 사용해 툴 이름, 설명 및 인수를 추가하여 프롬프트 템플릿을 완성해 보겠습니다. 이를 통해 에이전트는 의도한 사용 사례를 포함하여 각 툴와 관련된 정보에 액세스할 수 있습니다. 이는 또한 전체 프롬프트 템플릿을 변경하지 않고도 툴을 추가하고 제거할 수 있음을 의미합니다.
AI 에이전트의 중요한 기능은 기억입니다. 에이전트는 과거 대화와 과거 결과를 기억에 저장하여 향후 응답의 정확성과 관련성을 높일 수 있습니다. 이 사례에서는 LangChain의 ConversationBufferMemory()를 기억 저장 수단으로 사용합니다.
이제 에이전트의 스크래치패드, 기억, 프롬프트 및 LLM으로 체인을 설정할 수 있습니다. AgentExecutor 클래스는 에이전트를 실행하는 데 사용되며, 에이전트, 해당 툴, 오류 처리 접근 방식, 자세한 매개변수 및 기억을 사용합니다.
이제 에이전트에게 질문할 수 있습니다. 이전에는 에이전트가 2024년 US Open과 관련된 정보를 제공하지 못했습니다. 이제 에이전트가 RAG 툴을 사용할 수 있으므로, 동일한 질문을 다시 해 보겠습니다.
아웃풋: (일부 설명 및 페이지 콘텐츠 필드가 결과를 간결하게 표시하기 위해 단축되었습니다)
> 새 AgentExecutor 체인 입력 중...
생각: 인간이 2024년 US 오픈 테니스 챔피언십의 장소에 대해 묻고 있습니다. 어디에서 개최되었는지 알아봐야 합니다.
행동:
```
{
"action": "get_IBM_US_Open_context",
"action_input": "Where was the 2024 US Open Tennis Championship held?"
}
```
Observation[Document(metadata={'description': "IBM and the United States Tennis Association (USTA) announced several watsonx-powered fan features coming to the US Open digital platforms ahead of this year's tournament. These new and enhanced capabilities – a product of collaboration between IBM and the USTA digital team – aim to deliver a more informative and engaging experience for millions of tennis fans around the world.", 'language': 'en-us', 'source': 'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms', 'title': 'IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms'}, page_content="IBM과 USTA, 2024년 US 오픈 디지털 플랫폼을 위한 새로운 생성형 AI 기능 제공\n-새로운 경기 보고서 요약은 다음을 제공합니다... ")]
Action:
```
{
"action": "Final Answer",
"action_input": "The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York."
}
```
Observation
> Finished chain.
{'input': 'Where was the 2024 US Open Tennis Championship?',
'history': '',
'output': 'The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.'}
좋습니다! 에이전트는 사용 가능한 RAG 툴을 이용해 사용자의 쿼리에 따라 2024년 US Open이 개최되는 곳을 반환했습니다. 에이전트가 정보를 검색하는 정확한 문서도 볼 수 있습니다. 이제 조금 더 복잡한 질문 쿼리를 사용해 보겠습니다. 이번에는 IBM의 2024년 US Open 참여에 대한 쿼리입니다.
아웃풋: (일부 설명 및 페이지 콘텐츠 필드가 결과를 간결하게 표시하기 위해 단축되었습니다)
> 새 AgentExecutor 체인 입력 중...
```
{
"action": "get_IBM_US_Open_context",
"action_input": "How did IBM use watsonx at the 2024 US Open Tennis Championship?"
}
```
관찰[Document(metadata={'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en', 'source': 'https://www.ibm.com/kr-ko/case-studies/us-open', 'title': 'U.S. Open | IBM'}, page_content='US Open은 22개의 서로 다른 코트에서 수백 개의 경기가 펼쳐지는 2주간의 대규모 토너먼트입니다. 모든 경기를 따라잡는 것은 테니스 팬과 대회를 취재하는 USTA 편집 팀 모두에게 어려운 일입니다....)]
행동:
```
{
"action": "Final Answer",
"action_input": "IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team."
}
```
관찰
> 완성된 체인.
{'input': 'How did IBM use watsonx at the 2024 US Open Tennis Championship?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.',
'output': 'IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.'}
에이전트는 이번에도 사용자 쿼리와 관련된 정보를 성공적으로 검색할 수 있었습니다. 또한 에이전트는 아웃풋에서 확인할 수 있듯이 새로운 정보를 학습하고 새로운 상호 작용을 경험하면서 지식 기반을 성공적으로 업데이트하고 있습니다.
이제 에이전트가 사용자 쿼리에 응답하기 위해 툴 호출이 필요하지 않은 경우를 해독할 수 있는지 테스트해 보겠습니다. RAG 에이전트에게 US Open에 관한 내용이 아닌 질문을 하여 이를 테스트할 수 있습니다.
아웃풋:
> 새 AgentExecutor 체인 입력 중...
{
"action": "Final Answer",
"action_input": "The capital of France is Paris."
}
관찰
> 완성된 체인.
{'input': 'What is the capital of France?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.\nHuman: How did IBM use watsonx at the 2024 US Open Tennis Championship?\nAI: IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.',
'output': 'The capital of France is Paris.'}
AgentExecutor 체인에서 확인할 수 있듯이 에이전트는 툴을 사용하지 않고 이 질문에 답변할 수 있는 정보가 지식 기반에 있음을 인식했습니다.
이 튜토리얼에서는 watsonx와 함께 Python에서 LangChain을 사용하여 RAG 에이전트를 생성했습니다. 협업한 LLM은 IBM Granite-3.0-8B-Instruct 모델이었습니다. 샘플 아웃풋은 이 생성형 AI 발전의 중요성을 보여주므로 중요합니다. AI 에이전트는 get_IBM_US_Open_context 툴을 통해 관련 정보를 성공적으로 검색하고, 각 상호 작용으로 기억을 업데이트하고, 적절한 응답을 출력할 수 있었습니다. 각 작업에서 툴 호출이 적절한지 여부를 결정하는 에이전트의 능력에도 주목해야 합니다. 에이전트가 입력 쿼리에 응답하는 데 필요한 정보를 갖고 있는 경우에는 질문 답변에 툴을 사용하지 않았습니다.
더 많은 AI 에이전트 콘텐츠를 보려면 NASA의 오픈 소스 API와 날짜 툴을 사용하여 오늘의 천문 사진을 반환하는 AI 에이전트 튜토리얼을 확인하세요.
생성형 AI로 워크플로와 프로세스를 자동화하는 강력한 AI 어시스턴트 및 에이전트를 구축, 배포, 관리하세요.
믿을 수 있는 AI 솔루션으로 비즈니스의 미래를 설계하세요.
IBM Consulting AI 서비스는 기업이 AI 활용 방식을 재구상하여 혁신을 달성하도록 지원합니다.