2025년 January 21일
  1. 개발 히스토리
  2. [Backend] MMF – Claude API Cost 절약을 위한...

[Backend] MMF – Claude API Cost 절약을 위한 모델 전환

Claude 모델 비교

https://docs.anthropic.com/en/docs/about-claude/models

3.5 Sonnect

Claude 모델 중 가장 성능이 좋다고 평가되는 모델

Cost는 Haiku보다 더 높지만 코드 작성이나 복잡한 계산을 요구하는 질문에는

Sonnect가 필요할 것 같음

3.5 Haiku

기존의 3.0 Haiku보다 학습 데이터 기준 날짜가 최신이고 최대 출력 토큰이 2배임

그 대신 기존 Haiku보다 3배 정도 더 높은 Cost 필요함

속도는 기존 Haiku와 마찬가지로 Claude 모델 중 가장 빠름

3.0 Haiku

Claude 모델 중 가장 적은 Cost가 장점 ( Sonnect와 12배, 3.5 Haiku와 3배 차이 나는 가격 )

그러나 학습 데이터 기준일 2023년이기 때문에 정보 제공 자체는 3.5 모델을 사용해야 함

모델에게 직접 답변을 생성하기 전 단계, 질문의 유형을 분류하는 역할로 사용하기에 적합하다

3 Opus

매우 복잡한 작업을 처리하기에 좋은 모델

유창함과 이해력이 뛰어나고 속도도 느리지 않으나 Cost가 가장 높음

( Sonnect의 5배, Haiku의 60배 )

높은 Cost를 지불할 정도로 유의미한 성능 차이가 있는지 테스트 중 검증 필요

Claude 2.0, Claude 2.1, Claude Instant 1.2

최신 모델들이 더 성능도 좋고 Cost도 적기 때문에 해당 모델들은 사용되지 않을 예정

질문에 따른 Claude 모델 전환

Cost 절약을 위해 Haiku 계열 모델을 사용하려니 복잡한 질문에 대한 답변이 아쉬웠고,

양질의 답변을 위해 Sonnect와 Opus 모델을 사용하려니 간단한 테스트에도 Cost를 많이 사용하는 점이 비효율적이었습니다.

그래서 답변 유형에 따라 그에 적합한 모델을 추천하는 모델 전환 기능을 시도했습니다.

import anthropic
import os

client = anthropic.Anthropic(
    api_key="API KEY"
)

prompt = "내가 보내준 파이썬 코드를 분석해줘."
file_path = """
from fastapi import FastAPI
from database import engine
from models import User
import crud_user
from user_router import router
from fastapi.middleware.cors import CORSMiddleware

# uvicorn main:app --host 0.0.0.0 --port 5000    (터미널로 실행시킬 )

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 모든 도메인에서 접근 허용, 실제 운영 환경에서는 특정 도메인만 허용하는 것이 좋음
    allow_credentials=True,
    allow_methods=["*"],  # 모든 HTTP 메서드 허용
    allow_headers=["*"],  # 모든 헤더 허용
)


app.include_router(router)

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI on port 5000!"}
"""


message = client.messages.create(
    model="claude-3-haiku-20240307",
    max_tokens=4096,
    temperature=0.0,
    system= " 이 질문에 답하기 위해 해당 유형 중 몇 번을 주로 수행해야 하는지 번호만 출력. ( 1. 수학적 계산 필요 / 2. 프로그래밍 / 3. 문서 분석 후 수정 및 작성 / 4. 간단한 정보 제공). 답변 예시: '4' ",
    messages=[
        {"role": "user", "content": prompt}
    ])

prompt_case = message.content[0].text

print(prompt_case)
if prompt_case == "1":
    result = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=4096,
        temperature=0.0,
        messages=[
            {"role": "user", "content": f"참고 자료: {file_path}, 요청(질문): {prompt}"}
        ])
    print("(Calude 3.5 Sonnect - Math )")
    print(result.content[0].text)
elif prompt_case == "2":
    result = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=4096,
        temperature=0.0,
        messages=[
            {"role": "user", "content": f"참고 자료: {file_path}, 요청(질문): {prompt}"}
        ])
    print("(Calude 3.5 Sonnect - Code )")
    print(result.content[0].text)
elif prompt_case == "3":
    result = client.messages.create(
        model="claude-3-opus-20240229",
        max_tokens=4096,
        temperature=0.0,
        messages=[
            {"role": "user", "content": f"참고 자료: {file_path}, 요청(질문): {prompt}"}
        ])
    print("(Calude 3 Opus )")
    print(result.content[0].text)
elif prompt_case == "4":
    result = client.messages.create(
        model="claude-3-haiku-20240307",
        max_tokens=4096,
        temperature=0.0,
        messages=[
            {"role": "user", "content": f"참고 자료: {file_path}, 요청(질문): {prompt}"}
        ])
    print("(Calude 3 Haiku )")
    print(result.content[0].text)

가장 먼저 Haiku 3 모델에게 사용자의 질문을 전달합니다.

그리고 해당 질문이 수학 계산 / 프로그래밍 / 문서 작성 / 지식 제공 중 어떤 유형에 속하는지 답변을 요청합니다.

이후 유형에 따라 다른 모델이 답변을 수행합니다.

수학적 계산이나 프로그래밍을 요구하는 질문은 Sonnect가 답변합니다.

그리고 문서 작성을 요구하는 질문은 Opus가 답변을 제공합니다.

마지막으로 지식과 정보를 요구하는 간단한 질문은 Haiku ( 3.5 )가 답변합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

연관 글
BCT NEWS
인기 글
워드프레스 보안
워드프레스 모음
워드프레스 유지보수
워드프레스 제작 팁