메인 콘텐츠로 건너뛰기
Colab에서 열기
아무 설정 없이 Weave에서 Groq 모델을 실험해 보고 싶으신가요? LLM 플레이그라운드를 사용해 보세요.
Groq은 빠른 AI Inference를 제공하는 AI 인프라 기업입니다. Groq의 LPU™ Inference Engine은 뛰어난 연산 속도, 품질, 에너지 효율을 제공하는 하드웨어 및 소프트웨어 플랫폼입니다. Weave는 Groq Chat Completion call로 이루어지는 call을 자동으로 추적하고 로깅합니다.

트레이싱

개발 중이든 프로덕션 환경이든, 언어 모델 애플리케이션의 트레이스를 한곳에 저장해 두는 것은 중요합니다. 이러한 트레이스는 디버깅에 유용할 뿐만 아니라, 애플리케이션을 개선하는 데 도움이 되는 데이터셋으로도 활용할 수 있습니다. Weave는 Groq의 트레이스를 자동으로 수집합니다. 추적을 시작하려면 weave.init(project_name="<YOUR-WANDB-PROJECT-NAME>")를 호출한 다음, 평소처럼 라이브러리를 사용하세요.
import os
import weave
from groq import Groq

weave.init(project_name="groq-project")

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)
chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain the importance of fast language models",
        }
    ],
    model="llama3-8b-8192",
)
추적된 LLM call, 성능 메트릭, 트레이스 정보가 표시된 Groq Weave 대시보드
이제 Weave가 Groq 라이브러리를 통해 수행되는 모든 LLM call을 추적하고 로깅합니다. Weave 웹 인터페이스에서 해당 트레이스를 확인할 수 있습니다.

직접 ops 추적하기

함수를 @weave.op으로 감싸면 입력, 출력, 앱 로직을 캡처하기 시작하므로 앱에서 데이터가 어떻게 흐르는지 디버그할 수 있습니다. ops를 깊게 중첩해 추적하려는 함수 트리를 구성할 수 있습니다. 또한 실험하는 동안 코드 버전 관리도 자동으로 시작되어 아직 git에 커밋되지 않은 임시 세부 정보까지 캡처합니다. @weave.op으로 데코레이트된 함수를 만들기만 하면 됩니다. 아래 예시에서는 도시에서 방문할 장소를 추천하는 @weave.op으로 감싼 함수 recommend_places_to_visit를 사용합니다.
import os
import weave
from groq import Groq


weave.init(project_name="groq-test")

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

@weave.op()
def recommend_places_to_visit(city: str, model: str="llama3-8b-8192"):
    chat_completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "You are a helpful assistant meant to suggest places to visit in a city",
            },
            {
                "role": "user",
                "content": city,
            }
        ],
        model="llama3-8b-8192",
    )
    return chat_completion.choices[0].message.content


recommend_places_to_visit("New York")
recommend_places_to_visit("Paris")
recommend_places_to_visit("Kolkata")
op 데코레이터, 함수 call 계층 구조, 트레이스 세부 정보가 표시된 Groq Weave 트레이싱 인터페이스
recommend_places_to_visit 함수에 @weave.op를 데코레이션하면 입력, 출력, 그리고 함수 내부에서 발생하는 모든 LM call이 트레이스됩니다.

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

관리해야 할 요소가 많으면 실험을 체계적으로 정리하기 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱 실험의 세부 정보를 기록하고 정리할 수 있습니다. 이렇게 하면 앱의 여러 반복 버전을 정리하고 비교하기가 쉬워집니다. 코드를 버전 관리하고 입력/출력을 기록하는 것에 더해, Model은 애플리케이션의 동작을 제어하는 구조화된 매개변수도 기록하므로 어떤 매개변수가 가장 효과적이었는지 쉽게 찾을 수 있습니다. Weave Models는 serveEvaluations와 함께 사용할 수도 있습니다. 아래 예시에서는 GroqCityVisitRecommender를 실험해 볼 수 있습니다. 이 항목들 중 하나를 변경할 때마다 GroqCityVisitRecommender의 새로운 version이 생성됩니다.
import os
from groq import Groq
import weave


class GroqCityVisitRecommender(weave.Model):
    model: str
    groq_client: Groq

    @weave.op()
    def predict(self, city: str) -> str:
        system_message = {
            "role": "system",
            "content": """
You are a helpful assistant meant to suggest places to visit in a city
""",
        }
        user_message = {"role": "user", "content": city}
        chat_completion = self.groq_client.chat.completions.create(
            messages=[system_message, user_message],
            model=self.model,
        )
        return chat_completion.choices[0].message.content


weave.init(project_name="groq-test")
city_recommender = GroqCityVisitRecommender(
    model="llama3-8b-8192", groq_client=Groq(api_key=os.environ.get("GROQ_API_KEY"))
)
print(city_recommender.predict("New York"))
print(city_recommender.predict("San Francisco"))
print(city_recommender.predict("Los Angeles"))
모델 버전, 트레이스 이력 및 성능 메트릭이 표시된 Groq Weave Model 트레이싱 및 버전 관리 인터페이스
Model을 사용한 call 트레이싱 및 버전 관리

Weave Model 서빙

임의의 weave.Model 객체에 대한 Weave 레퍼런스가 있으면 fastapi 서버를 실행해 이를 서빙할 수 있습니다.
dspy_weave_model_serve.png
모델로 이동한 다음 UI에서 복사하면 모든 WeaveModel의 Weave 레퍼런스를 확인할 수 있습니다.
터미널에서 다음 명령어를 사용해 모델을 서빙할 수 있습니다:
weave serve weave://your_entity/project-name/YourModel:<hash>