Skip to main content
Lors de la création de flux de travail LLM complexes, vous pouvez avoir besoin de solliciter différents modèles selon la précision, le coût ou la latence des appels. Vous pouvez utiliser Not Diamond pour acheminer les prompts dans ces flux de travail vers le modèle le plus adapté à vos besoins, afin de maximiser la précision tout en réduisant les coûts liés aux modèles. Ce guide vous montre comment intégrer Not Diamond à W&B Weave afin que Weave trace automatiquement les appels de modèle acheminés, et comment entraîner un routeur personnalisé à l’aide de Weave Evaluations pour acheminer les prompts en fonction de vos propres données de performances.

Premiers pas

Pour utiliser Not Diamond avec Weave, vous devez disposer d’un compte Not Diamond et d’une clé API. Créez un compte et générez une clé API, puis ajoutez votre clé API à vos variables d’environnement sous le nom NOTDIAMOND_API_KEY. Créer une clé API À partir de là, vous pouvez effectuer l’une des actions suivantes :

Tracing

Weave s’intègre à la bibliothèque Python de Not Diamond pour journaliser automatiquement les appels d’API, afin que vous puissiez inspecter les décisions de routage et les réponses des fournisseurs avec le reste de vos traces Weave. Exécutez weave.init() au début de votre flux de travail, puis continuez à utiliser le fournisseur sélectionné par le routeur comme d’habitude :
from notdiamond import NotDiamond

import weave
weave.init('notdiamond-quickstart')

client = NotDiamond()
session_id, provider = client.chat.completions.model_select(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Concisely explain merge sort."}
    ],
    model=['openai/gpt-4o', 'anthropic/claude-3-5-sonnet-20240620']
)

print("LLM called: ", provider.provider)  # openai, anthropic, etc.
print("Provider model: ", provider.model) # gpt-4o, claude-3-5-sonnet-20240620, etc.

Routage personnalisé

Pour des cas d’usage spécialisés, vous pouvez entraîner votre propre [routeur personnalisé] à partir d’Évaluations, ce qui permet à Not Diamond d’acheminer les prompts selon les performances des évaluations plutôt que selon la stratégie de routage par défaut. Commencez par entraîner un routeur personnalisé. L’appel train_router renvoie un preference_id qui identifie votre routeur entraîné pour une utilisation ultérieure :
from weave.flow.eval import EvaluationResults
from weave.integrations.notdiamond.custom_router import train_router

# Créer une Évaluation sur gpt-4o et Claude 3.5 Sonnet
evaluation = weave.Evaluation(...)
gpt_4o = weave.Model(...)
sonnet = weave.Model(...)

model_evals = {
    'openai/gpt-4o': evaluation.get_eval_results(gpt_4o),
    'anthropic/claude-3-5-sonnet-20240620': evaluation.get_eval_results(sonnet),
}
preference_id = train_router(
    model_evals=model_evals,
    prompt_column="prompt",
    response_column="actual",
    language="en",
    maximize=True,
)
Lorsque vous transmettez cet ID de préférence à une requête model_select, vous pouvez réutiliser votre routeur personnalisé pour acheminer les prompts de façon à maximiser les performances et à minimiser les coûts sur vos données d’évaluation :
from notdiamond import NotDiamond
client = NotDiamond()

import weave
weave.init('notdiamond-quickstart')

session_id, provider = client.chat.completions.model_select(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Concisely explain merge sort."}
    ],
    model=['openai/gpt-4o', 'anthropic/claude-3-5-sonnet-20240620'],

    # passer cet ID de préférence réutilise votre routeur personnalisé
    preference_id=preference_id
)

print("LLM called: ", provider.provider)  # openai, anthropic, etc.
print("Provider model: ", provider.model) # gpt-4o, claude-3-5-sonnet-20240620, etc.

Assistance complémentaire

Consultez la docs ou envoyez un message si vous avez besoin d’une aide supplémentaire.