티스토리 뷰
Swarm Note Github
https://github.com/lee-lou2/swarm
안녕하세요! 오늘은 AI 모델을 활용해 외부 도구를 호출하는 세 가지 방법에 대해 알아보겠습니다. Structured Outputs, Function Calling, 그리고 Swarm을 이용한 방식인데요. 각각의 장단점과 사용 사례를 상세히 설명하면서 어떤 상황에서 어떤 방식을 선택해야 할지 가이드해 드리겠습니다. 이 글을 통해 각 방식의 특징과 활용법을 이해하고, 여러분의 프로젝트에 적합한 방법을 선택해 보세요!
1. Structured Outputs
Introduction
Structured Outputs는 OpenAI 모델이 JSON Schema에 맞춰 응답을 생성하도록 보장하는 기능입니다. JSON은 애플리케이션 간 데이터 교환에 많이 사용되는 포맷이죠. Structured Outputs를 사용하면 모델이 필요한 키를 빠뜨리거나 잘못된 값을 생성하는 문제를 줄일 수 있어 안정적인 응답을 받을 수 있습니다.
How It Works
- JSON Schema 정의: 데이터의 구조와 형식을 정의하는 JSON Schema를 작성합니다.
- 모델 요청: 모델에게 Schema와 함께 요청을 보냅니다.
- 응답 생성: 모델은 정의된 Schema에 맞춰 응답을 생성하며, 필요한 경우 오류를 명시적으로 처리합니다.
사용 예시
금융 서비스나 의료 애플리케이션처럼 데이터의 형식이 엄격하게 정의되어야 하는 경우에 적합합니다. 예를 들어, 사용자의 입력을 받아 특정 형식의 응답을 반환해야 할 때 활용할 수 있어요.
import json
from pydantic import BaseModel
from openai import OpenAI
client = OpenAI()
class Tool(BaseModel):
name: str
tool_info = json.dumps(
[
{
"type": "function",
"function": {
"name": "translate_kor_to_en",
"description": "한국어를 영어로 번역",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "번역할 한국어 텍스트",
},
},
"required": ["text"],
},
},
},
{
"type": "function",
"function": {
"name": "translate_en_to_kor",
"description": "영어를 한국어로 번역",
"parameters": {
"type": "object",
"properties": {
"text": {"type": "string", "description": "번역할 영어 텍스트"},
},
"required": ["text"],
},
},
},
]
)
completion = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "사용자 질문에 맞는 도구를 골라줘. 도구 정보는 아래와 같아."
+ tool_info,
},
{
"role": "user",
"content": "'안녕하세요, 제 이름은 장승국입니다. 지금은 도구를 호출하는 여러가지 방법에 대해 소개해드리고 있습니다. 감사합니다.' 를 영어로 번역해줘",
},
],
response_format=Tool,
)
total_tokens = completion.usage.total_tokens
function = completion.choices[0].message.parsed.name
# total_tokens: 361
# function: "translate_kor_to_en"
# arguments: X
print(total_tokens, function)
장점
- JSON 형식에 대한 타입 안정성을 보장하여, 추가 검증이나 오류 처리 없이 데이터를 사용할 수 있습니다.
- 모델이 잘못된 데이터를 생성할 경우, 명시적으로 오류를 감지할 수 있어 안정적입니다.
- 복잡한 프롬프트 작성 없이도 일관된 형식의 데이터를 받을 수 있습니다.
단점
- 설정과 JSON Schema 작성이 다소 번거로울 수 있습니다.
- 응답 형식이 제한적이므로 유연한 응답 처리가 필요한 경우 사용하기 어려울 수 있습니다.
- 토큰 사용량이 높아질 수 있으며, 이는 비용에 영향을 미칠 수 있습니다.
2. Function Calling
Introduction
Function Calling은 OpenAI 모델과 외부 도구나 시스템을 연결하여 특정 작업을 수행할 수 있는 기능입니다. 이를 통해 번역 API 호출, 데이터베이스 검색, 외부 API와의 연동 등이 가능해집니다. 2024년 8월 Structured Outputs와 결합되어, 더욱 정밀한 제어와 데이터의 안정성을 제공하게 되었습니다.
How It Works
- 함수 정의: 함수의 이름, 설명, 파라미터를 JSON Schema 형식으로 정의합니다.
- 모델 요청: 모델에게 함수 정보를 포함한 요청을 보냅니다.
- 함수 호출: 모델이 적절한 함수와 파라미터를 반환하면, 이를 사용해 실제로 함수를 실행합니다.
사용 예시
챗봇에서 사용자의 요청을 처리하거나, 특정 데이터를 조회하고자 할 때 적합합니다. 예를 들어, 번역 요청을 받아 이를 처리하는 함수로 연결할 수 있습니다.
from openai import OpenAI
client = OpenAI()
messages = [
{
"role": "user",
"content": "'안녕하세요, 제 이름은 장승국입니다. 지금은 도구를 호출하는 여러가지 방법에 대해 소개해드리고 있습니다. 감사합니다.' 를 영어로 번역해줘",
},
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=[
{
"type": "function",
"function": {
"name": "translate_kor_to_en",
"description": "한국어를 영어로 번역",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "번역할 한국어 텍스트",
},
},
"required": ["text"],
},
},
},
{
"type": "function",
"function": {
"name": "translate_en_to_kor",
"description": "영어를 한국어로 번역",
"parameters": {
"type": "object",
"properties": {
"text": {"type": "string", "description": "번역할 영어 텍스트"},
},
"required": ["text"],
},
},
},
],
)
# 총 토큰 수
total_tokens = response.usage.total_tokens
# 함수 및 인자 정보
function = response.choices[0].message.tool_calls[0].function.name
arguments = response.choices[0].message.tool_calls[0].function.arguments
# total_tokens: 178
# function: "translate_kor_to_en"
# arguments: {"text": "안녕하세요, 제 이름은 장승국입니다. 지금은 도구를 호출하는 여러가지 방법에 대해 소개해드리고 있습니다. 감사합니다."}
print(total_tokens, function)
장점
- 외부 시스템과의 직접적인 통합이 가능하여, 모델의 활용도를 높일 수 있습니다.
- 정밀한 제어가 가능해, 입력된 파라미터와 반환되는 데이터에 대한 높은 신뢰성을 제공합니다.
- 특정 기능(예: 번역, 계산 등)에 대한 정확한 결과를 얻기 위해 적합합니다.
단점
- 여러 함수와 도구를 다룰 경우, 코드의 복잡성이 증가할 수 있습니다.
- 모델과 함수 간의 비동기 처리를 구현해야 할 때 추가적인 작업이 필요할 수 있습니다.
3. Swarm
Introduction
Swarm은 OpenAI가 실험적, 교육적 목적으로 개발한 프레임워크로, 여러 에이전트를 동시에 다루며 작업을 처리하는 패턴을 학습할 수 있는 환경입니다. 이를 통해 각 에이전트가 특정 역할을 수행하거나, 필요에 따라 다른 에이전트로 작업을 넘길 수 있습니다.
How It Works
- Swarm 클라이언트 생성: Swarm 클라이언트를 초기화하여 여러 에이전트를 정의합니다.
- 에이전트 정의: 각 에이전트는 특정 기능을 담당하며, 필요에 따라 다른 에이전트로 작업을 넘길 수 있습니다.
- 모델 요청: Swarm 클라이언트가 에이전트를 통해 요청을 처리하고, 필요한 경우 다른 에이전트로 작업을 넘깁니다.
사용 예시
다양한 기능을 수행하는 고객 서비스 봇을 구현하거나, 여러 종류의 요청을 적절한 에이전트에게 할당하는 시나리오에 적합합니다. 예를 들어, 고객의 요청에 따라 다양한 기능을 제공하는 챗봇에서 활용할 수 있습니다.
from swarm import Swarm, Agent
swarm_client = Swarm()
def translate_kor_to_en_tool(text: str):
"""한국어를 영어로 번역"""
return "한국어를 영어로 번역하는 함수입니다"
def translate_en_to_kor_tool(text: str):
"""영어를 한국어로 번역"""
return "영어를 한국어로 번역하는 함수입니다"
agent = Agent(
name="Translate Agent",
instructions="입력된 내용에 맞게 번역해줘.",
model="gpt-4o-mini",
functions=[translate_kor_to_en_tool, translate_en_to_kor_tool],
)
messages = [
{
"role": "user",
"content": "'안녕하세요, 제 이름은 장승국입니다. 지금은 도구를 호출하는 여러가지 방법에 대해 소개해드리고 있습니다. 감사합니다.' 를 영어로 번역해줘",
}
]
response = swarm_client.run(agent=agent, messages=messages, max_turns=1)
translated_text = response.messages[-1]["content"]
# total_tokens: 알 수 없음
# function: "translate_kor_to_en"
# arguments: "안녕하세요, 제 이름은 장승국입니다. 지금은 도구를 호출하는 여러가지 방법에 대해 소개해드리고 있습니다. 감사합니다."
# 도구로부터 얻은 답변을 해줌
print(translated_text)
장점
- 다중 에이전트 간의 협력을 쉽게 구현할 수 있어 복잡한 상호작용이 가능합니다.
- 코드 몇 줄만으로 다양한 기능을 처리할 수 있어 빠른 개발이 가능합니다.
- 여러 작업을 유연하게 분산하고 조합할 수 있어 대규모 시스템에 적합합니다.
단점
- 토큰 사용량을 추적하기 어려워 비용 관리가 까다로울 수 있습니다. (제가 못 찾는 걸지도...)
총정리 및 추천
방법 | 장점 | 단점 | 사용 사례 |
---|---|---|---|
Structured Outputs | 데이터 형식 일관성 보장, 타입 안정성 제공 | 설정이 복잡할 수 있으며, 토큰 사용량이 비교적 많을 수 있음 | 금융, 의료 등 형식이 명확한 데이터 처리 |
Function Calling | 외부 도구와의 연결을 통한 직접적인 기능 확장 | 다수의 도구 호출 시 코드 복잡성이 증가할 수 있음 | 번역, API 호출 등 정밀한 작업 |
Swarm | 다중 에이전트 간의 협력을 쉽게 구현, 코드 작성 간편 | 실험적이며, 토큰 사용량을 직접 파악하기 어려움 | 고객 서비스 봇, 복잡한 에이전트 작업 |
마무리
각각의 방식은 특정한 상황에 적합하며, 사용 목적에 따라 선택이 달라질 수 있습니다. 단일 도구 호출이 필요하고 정밀한 제어가 요구되는 경우에는 Function Calling을, 여러 에이전트가 협력해야 하거나 복잡한 상호작용을 처리해야 한다면 Swarm을 사용하는 것이 좋습니다. 반면, 데이터 형식이 엄격하게 정의되어야 하거나, 타입 안정성이 중요한 경우에는 Structured Outputs가 유용할 수 있습니다.
다양한 방식들을 경험해보고 자신에게 가장 적합한 방법을 선택해 보세요. 여러분의 AI 프로젝트에 큰 도움이 될 거예요!
'AI > OpenAI Swarm' 카테고리의 다른 글
[OpenAI Swarm] Swarm 의 기본 사용 방법 소개 (0) | 2024.10.27 |
---|---|
[OpenAI Swarm] OpenAI 모델만 사용할 수 있나요? NO! (2) | 2024.10.26 |
OpenAI Swarm 이란? 왜 다들 열광하는걸까? Multi AI Agent System (2) | 2024.10.26 |
- Total
- Today
- Yesterday
- function calling
- 다중 에이전트 시스템
- groq
- ai프레임워크
- 함수 호출
- Ollama
- 에이전트 오케스트레이션
- ai 프레임워크
- AI모델
- 인공지능 개발
- python
- 대화형 에이전트
- 에이전트 시스템
- ai 오케스트레이션
- 컨텍스트 변수
- ai 자동화
- ai 챗봇
- 챗봇
- AI 통합
- AI개발
- 도구 호출
- 외부모델연동
- python 개발
- json schema
- openai
- 에이전트 관리
- 멀티에이전트
- swarm
- structured outputs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |