이번 강의에서는 이전에 몇 줄의 코드로 에이전트를 생성하는 기본 방법과, 계산기와 같은 내부 평가 모음을 수행하기 위한 대형 언어 모델의 기본 제공 도구에 대해 알아보았습니다.
이번에는 이 개념을 확장하여 에이전트와 다양한 도구를 통합하는 방법을 알아보고, 특히 파이썬 코드를 실행하기 위한 파이썬 에이전트에 대해 자세히 살펴보겠습니다.
LangChain에서는 여러 가지 에이전트 유형을 제공합니다. 각 에이전트는 특정 작업에 최적화되어 있습니다. 예를 들어, 대화형 에이전트는 사용자와의 대화를 유지하면서 작업을 수행하고, 제로샷 리액트 설명자(Zero-shot ReAct Description) 에이전트는 도구 사용 없이 직접 답변을 생성합니다.
이번 강의에서는 제로샷 리액트 설명자 에이전트를 사용하여 도구와 통합하는 방법을 알아보겠습니다.
LangChain은 다양한 외부 도구와의 통합을 지원합니다. 여기에는 검색 엔진, 계산기, 위키피디아, Wolfram Alpha 등이 포함됩니다. 이러한 도구를 사용하면 에이전트가 더욱 풍부한 정보를 제공하고 복잡한 작업을 수행할 수 있습니다.
에이전트에 Google과 같은 검색 기능을 추가하고 싶다면 SerpAPI를 사용할 수 있습니다. SerpAPI는 Google 검색 결과를 가져오는 API로, 에이전트가 실시간 정보를 검색할 수 있도록 도와줍니다.
SerpAPI 설정 방법:
SerpAPI 계정 생성 및 API 키 획득:
필요한 라이브러리 설치:
SerpAPI를 사용하려면 google-search-results
라이브러리를 설치해야 합니다.
터미널이나 명령 프롬프트에서 다음 명령을 실행합니다:
pip install google-search-results
pip install google-search-results
pip install numexpr
환경 변수 설정:
API 키를 코드에 직접 포함하지 않고 .env
파일에 저장하여 보안성을 높일 수 있습니다.
프로젝트 루트 디렉토리에 .env
파일을 생성하고 다음과 같이 작성합니다:
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
SERPAPI_API_KEY=YOUR_SERPAPI_API_KEY
여기서 YOUR_OPENAI_API_KEY
와 YOUR_SERPAPI_API_KEY
를 실제 API 키로 대체하세요.
.env
파일에서 환경 변수 로드:
python-dotenv
라이브러리를 사용하여 .env
파일에서 환경 변수를 로드합니다.
필요하다면 python-dotenv
를 설치합니다:
pip install python-dotenv
LangChain은 그 외에도 위키피디아, Wolfram Alpha, AWS Lambda 등 다양한 도구와의 통합을 지원합니다. 각 도구마다 필요한 라이브러리 설치와 API 키 설정 방법이 다르므로 해당 도구의 문서를 참고해야 합니다.
파이썬 에이전트를 사용하면 에이전트가 파이썬 코드를 생성하고 실행할 수 있습니다. 이를 통해 복잡한 계산이나 데이터 처리를 수행할 수 있습니다.
파이썬 에이전트 설정 방법:
필요한 모듈 임포트:
from langchain.llms import OpenAI
from langchain.agents.agent_types import AgentType
from langchain.agents import initialize_agent, load_tools
from langchain.tools.python.tool import PythonREPLTool
from dotenv import load_dotenv
import os
환경 변수 로드:
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
SERPAPI_API_KEY = os.getenv("SERPAPI_API_KEY")
LLM 초기화:
llm = OpenAI(temperature=0)
도구 설정:
tools = load_tools(
["serpapi", "llm-math"],
llm=llm
)
tools.append(PythonREPLTool())
에이전트 생성:
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
에이전트 실행:
예제 1: 검색 및 계산
result = agent.run("아인슈타인은 몇 년도에 태어났나요? 그 해에 5를 곱하면 얼마인가요?")
print("결과:", result)
예제 2: 파이썬 코드 실행
python_task = """
다음 파이썬 리스트를 오름차순으로 정렬해주세요: [3, 1, 4, 1, 5, 9, 2, 6, 5]
"""
result = agent.run(python_task)
print("결과:", result)
주의사항: 파이썬 코드를 실행할 때는 보안에 유의해야 합니다. 외부에서 입력된 코드를 실행하면 시스템에 위험을 초래할 수 있으므로 신뢰할 수 있는 환경에서만 사용해야 합니다.
이제 모든 내용을 통합하여 작동하는 전체 코드를 제공하겠습니다.
# 필요한 라이브러리 임포트
import os
from langchain.llms import OpenAI
from langchain.agents.agent_types import AgentType
from langchain.agents import initialize_agent, load_tools
# from langchain.tools.python.tool import PythonREPLTool
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
SERPAPI_API_KEY = os.getenv("SERPAPI_API_KEY")
# LLM 초기화
llm = OpenAI(temperature=0)
# 도구 로드
tools = load_tools(
["serpapi", "llm-math"],
llm=llm
)
# tools.append(PythonREPLTool())
# 에이전트 초기화
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 에이전트 실행 예제 1: 검색 및 계산
result = agent.run("아인슈타인은 몇 년도에 태어났나요? 그 해에 5를 곱하면 얼마인가요?")
print("결과:", result)
# 에이전트 실행 예제 2: 파이썬 코드 실행
python_task = """
다음 파이썬 리스트를 오름차순으로 정렬해주세요: [3, 1, 4, 1, 5, 9, 2, 6, 5]
"""
result = agent.run(python_task)
print("결과:", result)
.env
파일 내용 예시:
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
SERPAPI_API_KEY=YOUR_SERPAPI_API_KEY
여기서 YOUR_OPENAI_API_KEY
와 YOUR_SERPAPI_API_KEY
를 실제 API 키로 대체하세요.
코드 설명:
load_dotenv()
를 사용하여 .env
파일에서 API 키를 로드합니다.OpenAI
LLM을 초기화합니다.load_tools
를 사용하여 serpapi
와 llm-math
도구를 로드합니다.PythonREPLTool()
을 추가하여 파이썬 코드를 실행할 수 있도록 합니다.initialize_agent
를 사용하여 에이전트를 초기화합니다.실행 결과 예시:
> Entering new AgentExecutor chain...
질문에 답하기 위해 'Search' 도구를 사용합니다.
Action: Search
Action Input: "아인슈타인 출생년도"
Observation: 알베르트 아인슈타인은 1879년 3월 14일에 태어났습니다.
Thought: 출생년도인 1879년에 5를 곱하면 됩니다.
Action: Calculator
Action Input: 1879 * 5
Observation: 9395
Thought: 답을 얻었습니다.
Final Answer: 아인슈타인은 1879년에 태어났으며, 그 해에 5를 곱하면 9395입니다.
> Finished chain.
결과: 아인슈타인은 1879년에 태어났으며, 그 해에 5를 곱하면 9395입니다.
> Entering new AgentExecutor chain...
질문에 답하기 위해 'Python REPL' 도구를 사용합니다.
Action: Python REPL
Action Input:
sorted_list = sorted([3, 1, 4, 1, 5, 9, 2, 6, 5])
print(sorted_list)
Observation: [1, 1, 2, 3, 4, 5, 5, 6, 9]
Thought: 리스트가 성공적으로 정렬되었습니다.
Final Answer: 정렬된 리스트는 [1, 1, 2, 3, 4, 5, 5, 6, 9]입니다.
> Finished chain.
결과: 정렬된 리스트는 [1, 1, 2, 3, 4, 5, 5, 6, 9]입니다.
이번 강의에서는 에이전트에 외부 도구를 통합하여 기능을 확장하는 방법에 대해 자세히 알아보았습니다. SerpAPI를 사용하여 검색 기능을 추가하고, 파이썬 REPL 도구를 사용하여 파이썬 코드를 실행하는 방법을 실습해보았습니다.
에이전트에 다양한 도구를 추가하면 더욱 복잡하고 유용한 작업을 수행할 수 있습니다. 다음 강의에서는 사용자 지정 도구를 생성하여 에이전트를 더욱 확장하는 방법에 대해 알아보겠습니다.
주의사항:
.env
파일이나 환경 변수를 사용하여 보안성을 유지하세요.추가 팁:
이번 강의를 통해 에이전트와 외부 도구를 통합하여 더욱 강력한 응용 프로그램을 개발하는 방법을 이해하셨길 바랍니다.