AI 에이전트 기초부터 실습까지: LangChain을 활용한 에이전트 구축 가이드

GoGoComputer·2024년 11월 12일
0

LangChain Basics

목록 보기
35/40
post-thumbnail

에이전트란 무엇인가요?

에이전트(Agent)는 대형 언어 모델(Large Language Model, LLM)의 잠재력을 최대한 활용하여 더욱 강력한 응용 프로그램을 만들 수 있도록 도와주는 개념입니다. 이전에 배운 모델 입력과 출력, 데이터 연결, 체인을 결합하여 에이전트를 구성할 수 있습니다.

사실, 우리는 이미 에이전트와 유사한 직접 만든 응용 프로그램을 사용해 왔습니다. 하지만 에이전트는 반응 틀(ReAct Framework)을 활용하여 한 단계 더 발전된 기능을 제공합니다.

에이전트의 핵심 개념

에이전트의 핵심은 대형 언어 모델이 도구에 연결될 수 있도록 하는 것입니다. 여기서 도구란 위키피디아, 계산기, 구글 검색 등과 같은 다양한 서비스를 말합니다. 에이전트는 이러한 도구들 사이에서 적절한 것을 선택하고, 이를 활용하여 작업을 완수하는 구조적인 접근 방식을 취합니다.

이 접근 방식은 "언어 모델에서의 추론과 행동의 반응 시너지"라는 논문에 기반하고 있습니다. 이 논문은 언어 모델이 올바른 답을 찾기 위해 추론 과정을 추적하거나 행동을 취할 수 있는 모델을 설명하고 있습니다.

에이전트의 작동 방식

  1. 추론(Thought): 에이전트는 주어진 문제를 이해하고 해결 방안을 생각합니다.
  2. 행동(Action): 적절한 도구를 선택하여 행동을 취합니다.
  3. 관찰(Observation): 행동의 결과를 관찰하고 필요한 정보를 얻습니다.
  4. 이 과정을 반복하여 문제를 해결합니다.

예를 들어, 에이전트는 어떤 환경에서 행동을 취하고 그 결과를 관찰하여 다음 행동을 결정할 수 있습니다. 이는 마치 사슬을 구축하는 것과 같습니다.

에이전트의 예시: 복잡한 질문 해결하기

질문: "아인슈타인이 몇 년도에 태어났는지 알려주세요. 그 해에 5를 곱하면 얼마인가요?"

이 질문은 여러 단계로 나뉩니다:

  1. 아인슈타인이 태어난 해를 알아내기: 이 정보는 위키피디아나 구글 검색을 통해 얻을 수 있습니다.
  2. 그 해에 5를 곱하기: 계산기를 사용하여 수학적인 계산을 수행합니다.

에이전트는 먼저 적절한 도구를 선택합니다:

  • 검색 도구를 사용하여 아인슈타인이 태어난 해를 찾습니다.
  • 그 결과를 이용하여 계산기 도구로 수학 연산을 수행합니다.

단계별 과정

  1. 첫 번째 행동(검색):
    • 에이전트는 구글 검색을 통해 "아인슈타인 생년"을 검색합니다.
    • 관찰 결과: 아인슈타인은 1879년 3월 14일에 태어났습니다.
  2. 두 번째 행동(계산):
    • 에이전트는 계산기를 사용하여 1879 * 5를 계산합니다.
    • 관찰 결과: 결과는 9395입니다.
  3. 최종 답변 작성:
    • 에이전트는 얻은 정보를 종합하여 답변을 작성합니다.
    • 답변: "아인슈타인은 1879년에 태어났으며, 그 해에 5를 곱하면 9395입니다."

에이전트의 잠재력

에이전트는 몇 줄의 코드로도 만들 수 있을 만큼 사용과 설정이 간단합니다. 하지만 그 잠재력은 매우 큽니다. 특히 사용자 지정 도구와 결합하면 더욱 강력해집니다. 예를 들어:

  • 내부 회사 문서에 접근하여 필요한 정보를 얻을 수 있습니다.
  • 외부 API를 활용하여 다양한 기능을 수행할 수 있습니다.
  • 자동화된 비서로서 역할을 수행하여 업무 효율을 높일 수 있습니다.

에이전트의 한계

하지만 에이전트는 완벽하지 않습니다. 사용 중에 예상치 못한 행동을 할 수 있으며, 가끔은 반복되는 루프에 빠지거나 혼란스러워할 수 있습니다. 따라서 에이전트를 활용할 때는 이러한 한계를 이해하고 주의 깊게 사용해야 합니다.

실습 코드 제공

이제 실제로 작동하는 에이전트를 만들어 보겠습니다. 이 코드는 .env 파일에서 OPENAI_API_KEY를 불러와 사용합니다.

1. 필요한 라이브러리 설치

pip install openai langchain python-dotenv

2. .env 파일 생성 및 API 키 저장

프로젝트 루트 디렉토리에 .env 파일을 생성하고 다음 내용을 추가합니다:

OPENAI_API_KEY=your_openai_api_key_here

your_openai_api_key_here 부분을 실제 OpenAI API 키로 교체하세요.

3. 코드 작성

# agent_example.py

import os
from dotenv import load_dotenv
from langchain import OpenAI, LLMMathChain, SerpAPIWrapper
from langchain.agents import initialize_agent, Tool

# .env 파일에서 API 키 로드
load_dotenv()
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')

# LLM 설정
llm = OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY)

# 도구 설정
search = SerpAPIWrapper()  # 구글 검색 기능을 제공하는 래퍼
llm_math_chain = LLMMathChain(llm=llm)

tools = [
    Tool(
        name="검색",
        func=search.run,
        description="현재 정보를 검색할 때 사용합니다."
    ),
    Tool(
        name="계산기",
        func=llm_math_chain.run,
        description="수학 계산이 필요할 때 사용합니다."
    )
]

# 에이전트 초기화
agent = initialize_agent(
    tools,
    llm,
    agent="zero-shot-react-description",
    verbose=True
)

# 에이전트 실행
question = "아인슈타인이 몇 년도에 태어났는지 알려주세요. 그 해에 5를 곱하면 얼마인가요?"
agent.run(question)

4. 코드 설명

  • 환경 변수 로드: dotenv 라이브러리를 사용하여 .env 파일에서 OPENAI_API_KEY를 불러옵니다.
  • LLM 초기화: OpenAI의 GPT-3 모델을 사용하며, temperature를 0으로 설정하여 일관된 출력을 얻습니다.
  • 도구 설정:
    • SerpAPIWrapper: 구글 검색 기능을 제공합니다.
    • LLMMathChain: 수학 계산을 수행합니다.
  • 에이전트 초기화:
    • initialize_agent 함수를 사용하여 에이전트를 설정합니다.
    • agent 매개변수로 "zero-shot-react-description"을 사용하여 반응 틀을 적용합니다.
    • verbose=True로 설정하여 에이전트의 내부 동작을 출력합니다.
  • 에이전트 실행: 질문을 전달하고 에이전트가 답변을 생성하도록 합니다.

5. 실행 방법

터미널에서 다음 명령어를 실행하세요:

python agent_example.py

6. 예상 결과

에이전트는 다음과 같은 단계를 거쳐 답변을 생성합니다:

  1. 검색 도구를 사용하여 아인슈타인의 생년을 찾습니다.
  2. 검색 결과에서 1879년을 추출합니다.
  3. 계산기 도구를 사용하여 1879 * 5를 계산합니다.
  4. 최종 답변을 출력합니다: "아인슈타인은 1879년에 태어났으며, 그 해에 5를 곱하면 9395입니다."

7. 주의 사항

  • SerpAPIWrapper를 사용하기 위해서는 SerpAPI 키가 필요합니다. 키를 발급받아 .env 파일에 추가하세요:
SERPAPI_API_KEY=your_serpapi_key_here
  • 또는 SerpAPIWrapper 대신 다른 검색 도구를 사용하거나, 간단히 생년을 하드코딩하여 테스트할 수 있습니다.

마무리

이번 시간에는 에이전트의 개념과 작동 방식에 대해 자세히 알아보았습니다. 또한 실제로 에이전트를 구축하고 실행해 보았습니다.

에이전트는 강력한 도구이지만, 그만큼 책임감 있게 사용해야 합니다. 이제 이 코드를 기반으로 여러분만의 에이전트를 만들어 보세요!

profile
IT를 좋아합니다.

0개의 댓글