23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
OpenAI는 개발자들이 자신만의 AI 어시스턴트를 애플리케이션에 통합할 수 있도록 지원하는 Assistant API를 새롭게 선보였습니다.
이 API는 명확한 지침, 모델, 도구, 파일 등을 활용하여 사용자 요청에 대한 지능적이고 맞춤형 응답을 제공합니다.
Assistant API는 현재 다음과 같은 주요 기능을 지원합니다: Code Interpreter, File Search, Function Calling.
다음 그림은 Assistant API를 설명하는 그림입니다.
정의: 특정 목적에 맞게 설계된 AI로, OpenAI의 모델과 다양한 도구를 호출합니다.
역할: Assistant는 특정한 기능(예: 개인 금융 관리)을 수행하도록 미리 설정된 지침과 도구를 사용하여 사용자 요청에 응답합니다.
정의: Assistant와 사용자 간의 대화 세션을 나타냅니다.
역할: Thread는 Message를 저장하고, 대화가 모델의 컨텍스트 길이를 초과하지 않도록 자동으로 잘라냅니다.
예: "은퇴 계획에 대한 대화"라는 주제로 Thread가 생성됩니다.*
정의: Assistant 또는 사용자가 생성한 텍스트, 이미지, 파일 등의 콘텐츠입니다.
역할: 메시지는 Thread에 저장되며, 대화의 흐름을 기록합니다.
예: 사용자의 메시지: "내 은퇴 계획에 얼마나 기여해야 하나요?"
Assistant의 메시지: "매년 $478를 기여하는 것이 적합합니다."*
정의: 특정 스레드에서 Assistant가 도구와 모델을 호출하여 작업을 수행하는 인스턴스.
역할: Assistant가 실행 중 모델을 호출하거나 도구를 사용하는 일련의 과정입니다.
예: "코드 인터프리터를 사용하여 사용자의 질문을 처리하고 메시지를 생성."
정의: Run의 일부로, Assistant가 작업을 수행하는 세부 단계.
역할: Assistant가 도구를 호출하거나 메시지를 생성하는 등의 구체적인 작업을 보여줍니다. Run Step을 통해 Assistant 작업 과정을 자세히 확인할 수 있습니다.
다음으로는 Assistant API의 개념과 주요 기능, 그리고 실질적인 활용 방법에 대해 살펴보겠습니다.
Assistant API는 OpenAI 모델을 활용하여 맞춤형 AI Assistant를 구축할 수 있는 도구입니다.
Assistant는 특정 목적에 따라 사용자 요청에 응답하며, 다양한 도구와 외부 데이터를 활용해 복잡한 작업을 수행할 수 있습니다.
맞춤형 지침 제공: Assistant의 성격과 기능을 특정 지침에 맞게 조정할 수 있습니다.
다양한 도구 지원: OpenAI가 제공하는 기본 도구(Code Interpreter, File Search)와 사용자가 직접 만든 도구(Function Calling)를 병렬로 활용할 수 있습니다.
Persistent Threads: Assistant와 사용자가 대화 내역을 저장하고 관리할 수 있는 영구 스레드를 제공합니다. 스레드는 대화 기록을 보존하고 Context 길이를 초과하지 않도록 자동으로 관리합니다.
파일 관리 및 생성: 다양한 형식의 파일(PDF, DOCX 등)을 Assistant와 공유하거나 Assistant가 직접 파일(예: 스프레드시트)을 생성할 수도 있습니다.
Assistant API는 세 가지 주요 도구를 통해 사용자의 요구를 충족시킵니다.
File Search는 Assistant가 외부 문서 데이터를 검색하고 처리할 수 있도록 돕는 도구로, RAG를 기반으로 합니다.
이 도구는 다음과 같은 과정을 거쳐 작동합니다.
from openai import OpenAI
client = OpenAI()
assistant = client.beta.assistants.create(
name="Document Analysis Assistant",
instructions="Use File Search to answer user queries based on uploaded documents.",
model="gpt-4o",
tools=[{"type": "file_search"}],
)# 벡터 스토어 생성 및 파일 업로드
vector_store = client.beta.vector_stores.create(name="Company Docs")
file_paths = ["docs/company_policy.pdf", "docs/employee_handbook.txt"]
file_streams = [open(path, "rb") for path in file_paths]
file_batch = client.beta.vector_stores.file_batches.upload_and_poll(
vector_store_id=vector_store.id, files=file_streams
)
print(file_batch.status)assistant = client.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)예) 기업의 재무 보고서를 업로드하고, 주요 재무 지표에 대해 질문.
질문: "2023년 10월 말 기준 Apple의 발행 주식 수는 몇 주인가요?"
작동 방식:
1. 사용자는 aapl-10k.pdf 파일을 업로드합니다.
2. Assistant는 파일에서 관련 데이터를 검색합니다.
3. *"Apple의 발행 주식 수는 23억 주입니다."*와 같은 답변을 제공합니다.사용자가 업로드한 문서를 기반으로 질문에 답합니다.
예: 법률 문서나 계약서에서 특정 조항을 빠르게 검색합니다.
질문 : "계약 해지 조항의 세부 내용을 알려줘."
작동방식:
1. 계약서를 업로드합니다.
2. file_search는 "해지" 키워드와 관련된 청크를 검색합니다.
3. Assistant는 검색된 내용을 요약하여 사용자에게 제공합니다.Code Interpreter는 Python 코드를 실행하여 데이터를 분석하거나 계산을 처리하는 도구입니다.
ex)
데이터 분석: CSV 파일을 업로드하여 매출 데이터를 분석하고 시각화합니다.
이미지 처리: 업로드된 이미지에서 특정 객체를 탐지하거나 변환합니다.
상세 예제)
1. 사용자 요청: "이 이미지에서 사람의 얼굴을 감지하고 표시해줘."
2. 이미지 파일 업로드
3. Code 자동 생성 및 실행
==============================================================================
import cv2
# 이미지 읽기
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 얼굴 탐지
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 얼굴에 사각형 표시
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 결과 이미지 저장
cv2.imwrite("output.jpg", image)
==============================================================================
4. 코드 구동 & 결과 반환
5. 추가 질문 가능.수학적 계산: 복잡한 수학 문제를 해결하거나 간단한 머신러닝 모델을 구축합니다.
Function Calling은 사용자가 정의한 함수를 호출하여 외부 시스템과의 연동 및 복잡한 작업 처리를 가능하게 합니다.
ex)
실시간 데이터 조회: 외부 API를 호출해 최신 환율 정보를 제공합니다.
주문 상태 확인: 사용자의 요청에 따라 주문 내역을 검색하고 상태를 반환합니다.
상세 예제)
1. 사용자 요청: "내 주문 번호 #1234의 상태를 확인해줘."
2. 사용자 요청 분석: Assistant는 요청에서 주문 번호를 추출합니다. (#1234)
3. Function 호출: get_order_status(미리 등록된 함수) 함수를 호출하여 주문 정보를 검색합니다.
==============================================================================
def get_order_status(order_id: str) -> dict:
import requests
response = requests.get(f"https://api.mystore.com/orders/{order_id}")
return response.json()
===============================================================================
4. 결과 처리 (예시)
==============================================================================
{
"order_id": "1234",
"status": "배송 중",
"expected_delivery": "2024-11-23"
}
==============================================================================
5. 결과 반환 : 결과를 보고 사람에게 익숙한 메세지로 결과를 출력합니다.IoT 기기 제어: 스마트 조명을 켜거나 특정 기기를 제어합니다.
긴급 상황(예: 화재, 도난)에서 AI가 빠르게 필요한 조치를 취함.
고객 요청: "여기서 화재가 발생했어. 소방서에 연락하고 대피 경로를 알려줘." (현재 백화점)
실행과정
Function Call 실행 : 소방서에 연락
def report_fire(location: str) -> str:
import requests
response = requests.post("https://api.firedepartment.com/report", json={"location": location})
return response.json().get("status", "unknown")Function Call 실행 : 대피경로 안내
def generate_escape_route(home_layout: dict, fire_location: str) -> list:
# 단순한 알고리즘으로 대피 경로 생성
escape_route = ["오른쪽", "왼쪽", "비상구", "계단", "1층 출구"]
return escape_route결과 반환: "화재 신고가 접수되었습니다. 대피 경로는 오른쪽으로 가서 다시 왼쪽에 보면 비상구가 있습니다.
비상구를 통해 계단으로 내려가 1층 출구로 가십시오. 빠르고 안전하게 대피하세요.
사용자의 재무 데이터를 분석하고, 투자 조언을 제공합니다.
사용자 요청: "1000달러를 원화로 변환하면 얼마인가요?"
API 호출: 환율 API를 호출하여 최신 환율 정보를 검색합니다.
결과 반환: "현재 환율로 1000달러는 약 1,150,000원입니다."
Assistant API는 AI와의 상호작용을 새로운 차원으로 이끌며, 개발자들이 맞춤형 AI Assistant를 구축할 수 있는 강력한 도구입니다.
File Search, Code Interpreter, Function Calling 같은 기능을 활용해 다양한 분야에서 실질적인 문제를 해결할 수 있다고 합니다.
하지만 개인적으로는 조만간 Agent 시대가 도래할 것으로 예상되며, OpenAI의 API도 이러한 방향으로 발전하고 있다고 생각합니다.
내년에는 더 다양하고 강력한 Agent가 등장할 것으로 보이며, 개인적으로도 어떤 방향의 Agent가 개발 아이템으로 적합할지 깊이 고민하게 됩니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.