AI Agent의 개념과 기본 구현 방법
AI Agent는 특정한 목적을 달성하기 위해 설계된 인공지능 시스템으로, 외부 환경과 상호작용하며 데이터를 기반으로 결정을 내린다. 최근에는 다양한 AI Agent 프레임워크가 등장하면서, 이를 활용한 개발이 점점 쉬워지고 있다. 하지만 AI Agent의 핵심 개념을 이해하는 것이 중요하며, 이를 직접 구현해보는 과정이 큰 도움이 된다.
이번 글에서는 Dummy Agent를 구현해서 그 동작 과정을 살펴보도록 하겠다.
Hugging Face Serverless API 활용
Hugging Face는 AI 모델을 실행할 수 있는 Serverless API를 제공한다. 이를 이용하면 로컬 환경에서 직접 모델을 실행하지 않고도 Inference를 수행할 수 있다. API 호출을 위해 적절한 클라이언트를 활용하면, 이를 통해 텍스트 생성이나 명령 실행을 수행할 수 있다.
import os
from huggingface_hub import InferenceClient
os.environ['HF_TOKEN'] = "hf_xxxxxxxxxxxxxx"
client = InferenceClient('meta-llama/Llama-3.2-3B-Instruct')
output = client.text_generation(
"The capital of France is",
max_new_tokens=100,
)
print(output)
이러한 방식을 이용하면 AI 모델이 텍스트를 생성하여 출력하는 것을 확인할 수 있다.
일반적인 경우, chat template을 사용하지만, 여기서는 text_generation을 기준으로 작성하겠다.
Agent의 동작 방식
AI Agent는 특정한 입력을 받아 문제를 해결하기 위해 연속적인 사고 과정을 수행한다. 일반적인 구조는 다음과 같다:
- 사용자의 질문을 입력받는다.
- 어떤 행동을 취할지 결정한다.
- JSON 형식으로 도구를 호출한다.
- 도구의 실행 결과를 확인한다.
- 최종 결과를 반환한다.
이러한 사고 과정이 반복되며, 필요한 경우 여러 번의 Action과 Observation 단계를 거칠 수 있다.
구현
간단한 AI Agent는 특정 기능을 수행하도록 설계된 시스템 프롬프트와 함께 동작한다. 예를 들어, 날씨 정보를 가져오는 기능을 구현하는 Agent는 시스템 프롬프트에서 사용 가능한 도구와 실행 방식을 정의한다. 이후 AI 모델이 입력을 받아 도구를 호출하고, 최종적인 결과를 생성한다.
앞서 언급했듯이, 실제로 날씨 API를 불러오지는 않고, 간단한 더미 함수를 만들어서 뒤에 내용을 추가하도록 했다.
import os
from huggingface_hub import InferenceClient
from dotenv import load_dotenv
load_dotenv()
os.environ['HF_TOKEN'] = os.getenv('HF_TOKEN')
client = InferenceClient('Bllossom/llama-3.2-Korean-Bllossom-3B')
system_prompt = """
다음 질문에 최선을 다해 답변하세요. 당신은 다음 도구를 사용할 수 있습니다:
get_weather: 특정 위치의 현재 날씨를 가져옵니다.
사용 예시:
```markdown
{
"action": "get_weather",
"action_input": {"location": "Seoul"}
}
"""
prompt = f"""
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
{system_prompt}
<|begin_of_text|><|start_header_id|>user<|end_header_id|>
런던의 날씨는?
<|eot_id|><|start_header_id|>assistant<|end_header_id|>
"""
# Dummy function
def get_weather(location):
return f"The weather in {location} is sunny with low temperatures."
output = client.text_generation(
prompt,
max_new_tokens=200,
stop=['Observation:']
)
print(output)
dummy_output = prompt + output + get_weather('London')
print(dummy_output)
여기서, text_generation 안에 stop 파라미터가 포함된 것을 확인할 수 있다. 이 부분을 추가해주지 않으면 Agent는 이 Observation까지 마음대로 생성해버린다(실제 날씨 API의 응답이 오지 않았음에도). 따라서 이 부분을 추가해줌으로써 폭주(?)를 막을 수 있다.
여기서는 실제 날씨 API가 아닌, 더미 함수를 사용했는데, 실제 구현에서는 다양한 날씨 API를 사용할 수 있다. 이 과정에서 AI 모델은 직접 정보를 생성하는 것이 아니라, API 호출을 통해 실제 데이터를 가져오는 방식으로 동작한다. 이를 통해 보다 정확하고 신뢰할 수 있는 정보를 제공할 수 있다.
이처럼 AI Agent는 단순한 답변을 넘어 다단계 의사결정을 수행할 수 있도록 발전하고 있다. LangGraph, LangChain, LlamaIndex와 같은 프레임워크를 활용하면 복잡한 논리 흐름을 쉽게 구현할 수 있으며, 이를 통해 보다 정교한 AI Agent를 개발할 수 있다. 앞으로 AI Agent는 다양한 도구와 결합하여 더욱 강력한 성능을 발휘할 것이다.
'개인공부&프로젝트 > LLM 에이전트 스터디' 카테고리의 다른 글
LLM Agent의 Thought-Action-Observation Cycle (0) | 2025.02.23 |
---|---|
LLM 에이전트의 도구 사용 (0) | 2025.02.22 |
Message와 Special Token (0) | 2025.02.15 |
Agent의 두뇌, LLM에 대해서 알아보자 (1) | 2025.02.14 |
AI 에이전트에 대해서 알아보자 (feat. LLM) (0) | 2025.02.13 |
댓글