메인 콘텐츠로 건너뛰기
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

직접 만든 ops로 감싸기

Weave ops는 실험하는 동안 코드 버전을 자동으로 관리하고 입력과 출력을 함께 캡처해 결과를 재현 가능하게 만듭니다. mistralai.client.MistralClient.chat()을 호출하는 함수를 @weave.op() 데코레이터로 만들기만 하면, 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 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱 실험과 관련된 세부 정보를 캡처하고 정리할 수 있습니다. 이렇게 하면 앱의 여러 반복 버전을 정리하고 비교하기가 쉬워집니다. 코드를 버전 관리하고 입력/출력을 캡처하는 것에 더해, Models는 애플리케이션의 동작을 제어하는 구조화된 매개변수도 캡처하므로 어떤 매개변수가 가장 효과적인지 쉽게 찾을 수 있습니다. 또한 Weave Models는 serveEvaluations와 함께 사용할 수도 있습니다. 아래 예시에서는 modelcountry를 바꿔 가며 실험할 수 있습니다. 이 둘 중 하나를 변경할 때마다 CheeseRecommender의 새로운 version이 생성됩니다.
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`로 변경
        "특정 지역에서 가장 좋은 치즈를 추천합니다"
        
        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