메인 콘텐츠로 건너뛰기
Colab에서 열기 weave.init()이 호출되면 Weave가 LiteLLM을 통한 LLM 호출을 자동으로 추적하고 로깅합니다.

트레이스

개발 중이든 프로덕션 환경이든, LLM 애플리케이션의 트레이스를 중앙 데이터베이스에 저장하는 것은 중요합니다. 이러한 트레이스는 디버깅에 활용할 수 있고, 애플리케이션 개선에 도움이 되는 데이터셋으로도 사용할 수 있습니다.
참고: LiteLLM을 사용할 때는 from litellm import completion 대신 import litellm으로 라이브러리를 임포트하고, completion 함수는 litellm.completion()으로 호출해야 합니다. 이렇게 해야 모든 함수와 파라미터가 올바르게 참조됩니다.
Weave는 LiteLLM의 트레이스를 자동으로 캡처합니다. 라이브러리는 평소처럼 사용하면 되며, 먼저 weave.init()를 호출해 시작하세요:
import litellm
import weave

weave.init("weave_litellm_integration")

openai_response = litellm.completion(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Translate 'Hello, how are you?' to French"}],
    max_tokens=1024
)
print(openai_response.choices[0].message.content)

claude_response = litellm.completion(
    model="claude-3-5-sonnet-20240620",
    messages=[{"role": "user", "content": "Translate 'Hello, how are you?' to French"}],
    max_tokens=1024
)
print(claude_response.choices[0].message.content)
이제 Weave는 LiteLLM을 통해 발생하는 모든 LLM 호출을 추적하고 로깅합니다. Weave 웹 인터페이스에서 트레이스를 확인할 수 있습니다.

자체 ops로 감싸기

Weave ops는 실험하는 동안 코드 버전을 자동으로 관리하고 입력과 출력을 캡처해 결과를 재현 가능하게 만듭니다. @weave.op()으로 데코레이팅한 함수를 만들고 그 안에서 LiteLLM의 completion 함수를 호출하기만 하면, Weave가 입력과 출력을 추적해 줍니다. 다음은 예시입니다:
import litellm
import weave

weave.init("weave_litellm_integration")

@weave.op()
def translate(text: str, target_language: str, model: str) -> str:
    response = litellm.completion(
        model=model,
        messages=[{"role": "user", "content": f"Translate '{text}' to {target_language}"}],
        max_tokens=1024
    )
    return response.choices[0].message.content

print(translate("Hello, how are you?", "French", "gpt-3.5-turbo"))
print(translate("Hello, how are you?", "Spanish", "claude-3-5-sonnet-20240620"))

더 쉽게 실험할 수 있도록 Model 만들기

구성 요소가 많아지면 실험을 체계적으로 정리하기가 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱의 실험 관련 세부 정보를 캡처하고 정리할 수 있습니다. 이렇게 하면 앱의 여러 반복 버전을 정리하고 비교하는 데 도움이 됩니다. Models는 코드 버전 관리와 입력/출력 캡처에 더해, 애플리케이션 동작을 제어하는 구조화된 매개변수도 함께 캡처하므로 어떤 매개변수가 가장 효과적이었는지 쉽게 찾을 수 있습니다. Weave Models는 serve 및 Evaluations와 함께 사용할 수도 있습니다. 아래 예제에서는 다양한 모델과 temperature로 실험할 수 있습니다:
import litellm
import weave

weave.init('weave_litellm_integration')

class TranslatorModel(weave.Model):
    model: str
    temperature: float

    @weave.op()
    def predict(self, text: str, target_language: str):
        response = litellm.completion(
            model=self.model,
            messages=[
                {"role": "system", "content": f"You are a translator. Translate the given text to {target_language}."},
                {"role": "user", "content": text}
            ],
            max_tokens=1024,
            temperature=self.temperature
        )
        return response.choices[0].message.content

# 다양한 모델로 인스턴스 생성
gpt_translator = TranslatorModel(model="gpt-3.5-turbo", temperature=0.3)
claude_translator = TranslatorModel(model="claude-3-5-sonnet-20240620", temperature=0.1)

# 번역에 다양한 모델 사용
english_text = "Hello, how are you today?"

print("GPT-3.5 Translation to French:")
print(gpt_translator.predict(english_text, "French"))

print("\nClaude-3.5 Sonnet Translation to Spanish:")
print(claude_translator.predict(english_text, "Spanish"))

함수 호출

LiteLLM은 호환되는 모델에서 함수 호출을 지원합니다. Weave는 이러한 함수 호출을 자동으로 추적합니다.
import litellm
import weave

weave.init("weave_litellm_integration")

response = litellm.completion(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Translate 'Hello, how are you?' to French"}],
    functions=[
        {
            "name": "translate",
            "description": "Translate text to a specified language",
            "parameters": {
                "type": "object",
                "properties": {
                    "text": {
                        "type": "string",
                        "description": "The text to translate",
                    },
                    "target_language": {
                        "type": "string",
                        "description": "The language to translate to",
                    }
                },
                "required": ["text", "target_language"],
            },
        },
    ],
)

print(response)
프롬프트에서 사용한 함수를 자동으로 캡처하고 버전 관리합니다. litellm.gif