メインコンテンツへスキップ
Colab で開く weave.init() の呼び出し後、Weave は LiteLLM 経由で行われた LLM 呼び出しを自動的にトラッキングしてログします。

トレース

開発中でも本番環境でも、LLM アプリケーションのトレースを一元的なデータベースに保存しておくことが重要です。これらのトレースはデバッグに使用するほか、アプリケーションの改善に役立つデータセットとしても活用できます。
注: LiteLLM を使用する場合は、from litellm import completion ではなく、必ず import litellm を使ってライブラリをインポートし、litellm.completion() で 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 の Web インターフェースでトレースを確認できます.

独自の ops でラップする

Weave の op は、実験中のコードを自動的にバージョン管理し、入力と出力を記録することで、結果の再現性を高めます。@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 クラスを使用すると、system prompt や使用しているモデルなど、アプリの実験に関する詳細を取得して整理できます。これにより、アプリの異なるバージョンを整理して比較しやすくなります。 コードのバージョン管理や入出力の記録に加えて、Models はアプリケーションの挙動を制御する構造化されたパラメーターも取得するため、どのパラメーターが最も効果的だったかを簡単に確認できます。さらに、Weave Models は serve や評価でも使用できます。 以下の例では、さまざまなモデルと 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