메인 콘텐츠로 건너뛰기
Colab에서 열기 Weave는 MistralAI Python 라이브러리를 통해 수행되는 LLM 호출을 자동으로 추적하고 로그를 기록합니다.
새로운 Mistral v1.0 SDK를 지원합니다. 마이그레이션 가이드는 여기에서 확인하세요.

트레이스

LLM 애플리케이션의 트레이스를 개발 및 프로덕션 환경 모두에서 중앙 데이터베이스에 저장하는 것은 중요합니다. 이러한 트레이스는 디버깅에 사용하고, 애플리케이션을 개선하는 데 도움이 되는 데이터셋으로 활용할 수 있습니다. Weave는 mistralai에 대한 트레이스를 자동으로 캡처합니다. 라이브러리를 평소처럼 사용하되, 먼저 weave.init()을 호출해서 시작하세요:
import weave
weave.init("cheese_recommender")

# 그런 다음 mistralai 라이브러리를 평소와 같이 사용합니다
import os
from mistralai import Mistral

api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"

client = Mistral(api_key=api_key)

messages = [
    {
        "role": "user",
        "content": "What is the best French cheese?",
    },
]

chat_response = client.chat.complete(
    model=model,
    messages=messages,
)
이제 Weave는 MistralAI 라이브러리를 통해 발생하는 모든 LLM 호출을 추적해 로그로 기록합니다. Weave 웹 인터페이스에서 추적 내역을 확인할 수 있습니다. mistral_trace.png

직접 op으로 래핑하기

Weave op은 실험하면서 코드를 자동으로 버전 관리하고 입력과 출력을 캡처해, 결과를 재현 가능하게 만들어 줍니다. @weave.op()으로 데코레이트된 함수를 하나 만들고 그 안에서 mistralai.client.MistralClient.chat()을 호출하면, Weave가 입력과 출력을 대신 추적해 줍니다. 이제 이 방식을 우리 치즈 추천기에 어떻게 적용할 수 있는지 살펴보겠습니다:
@weave.op()
def cheese_recommender(region:str, model:str) -> str:
    "Recommend the best cheese in a given region"
    
    messages = [
        {
            "role": "user",
            "content": f"What is the best cheese in {region}?",
        },
    ]

    chat_response = client.chat.complete(
        model=model,
        messages=messages,
    )
    return chat_response.choices[0].message.content

cheese_recommender(region="France", model="mistral-large-latest")
cheese_recommender(region="Spain", model="mistral-large-latest")
cheese_recommender(region="Netherlands", model="mistral-large-latest")
mistral_ops.png

더 쉽게 실험하기 위해 Model 만들기

여러 요소가 동시에 변할 때 실험을 체계적으로 관리하는 것은 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱의 실험 관련 세부 정보를 캡처하고 정리할 수 있습니다. 이를 통해 앱의 다양한 반복 버전을 구조적으로 정리하고 비교할 수 있습니다. 코드 버전 관리와 입력/출력 캡처에 더해, Model은 애플리케이션 동작을 제어하는 구조화된 파라미터도 함께 캡처하므로, 어떤 파라미터 조합이 가장 잘 동작했는지 쉽게 찾을 수 있습니다. 또한 Weave Model을 serveEvaluation과 함께 사용할 수도 있습니다. 아래 예시에서는 modelcountry를 바꿔 가며 실험할 수 있습니다. 이 둘 중 하나를 변경할 때마다 CheeseRecommender의 새로운 버전이 생성됩니다.
import weave
from mistralai import Mistral

weave.init("mistralai_project")

class CheeseRecommender(weave.Model): # `weave.Model`로 변경
    model: str
    temperature: float

    @weave.op()
    def predict(self, region:str) -> str: # `predict`로 변경
        "Recommend the best cheese in a given region"
        
        client = Mistral(api_key=api_key)

        messages = [
            {
                "role": "user",
                "content": f"What is the best cheese in {region}?",
            },
        ]

        chat_response = client.chat.complete(
            model=model,
            messages=messages,
            temperature=self.temperature
        )
        return chat_response.choices[0].message.content

cheese_model = CheeseRecommender(
    model="mistral-medium-latest",
    temperature=0.0
    )
result = cheese_model.predict(region="France")
print(result)
mistral_model.png