Passer au contenu principal
Pour afficher votre code en cours d’exécution sous forme de traces détaillées dans Weave, créez des appels. Vous pouvez procéder de trois façons principales :

1. Suivi automatique des appels de bibliothèques LLM

Weave s’intègre automatiquement à de nombreuses intégrations et frameworks courants, comme openai, anthropic, cohere, mistral et LangChain. Importez la bibliothèque LLM ou le framework, initialisez votre projet Weave, puis Weave trace automatiquement tous les appels effectués vers le LLM ou la plateforme dans votre projet, sans aucune modification de code supplémentaire. Pour obtenir la liste complète des intégrations de bibliothèques prises en charge, voir Aperçu des intégrations.
import weave

from openai import OpenAI
client = OpenAI()

# Initialiser Weave Tracing
weave.init('intro-example')

response = client.chat.completions.create(
    model="gpt-4",
    messages=[
        {
            "role": "user",
            "content": "How are you?"
        }
    ],
    temperature=0.8,
    max_tokens=64,
    top_p=1,
)
Si vous souhaitez mieux contrôler le comportement automatique, voir Configurer le suivi automatique des appels LLM.

2. Suivi des fonctions personnalisées

Les applications LLM comportent souvent une logique supplémentaire (comme le prétraitement/post-traitement, les prompts, etc.) que vous souhaitez suivre.
Weave vous permet de suivre manuellement ces appels à l’aide du décorateur @weave.op. Par exemple :
import weave

# Initialiser Weave Tracing
weave.init('intro-example')

# Décorer votre fonction
@weave.op
def my_function(name: str):
    return f"Hello, {name}!"

# Appelez votre fonction -- Weave suivra automatiquement les entrées et les sorties
print(my_function("World"))
Vous pouvez également suivre les méthodes de classe.

Suivre les méthodes de classe et d’instance

Vous pouvez également suivre les méthodes de classe et d’instance. Vous pouvez suivre n’importe quelle méthode d’une classe en la décorant avec weave.op.
import weave

# Initialiser Weave Tracing
weave.init("intro-example")

class MyClass:
    # Décorez votre méthode
    @weave.op
    def my_method(self, name: str):
        return f"Hello, {name}!"

instance = MyClass()

# Appelez votre méthode -- Weave suivra automatiquement les entrées et les sorties
print(instance.my_method("World"))

Tracer des appels de fonction parallèles (multithread)

Par défaut, les appels parallèles apparaissent tous dans Weave comme des appels racine distincts. Pour obtenir un imbriquement correct sous le même op parent, utilisez un ThreadPoolExecutor.
L’exemple de code suivant montre comment utiliser ThreadPoolExecutor. La première fonction, func, est un op simple qui prend x et renvoie x+1. La deuxième fonction, outer, est un autre op qui accepte une liste d’entrées. Dans outer, l’utilisation de ThreadPoolExecutor et de exc.map(func, inputs) signifie que chaque appel à func conserve le même contexte de trace parent.
import weave

@weave.op
def func(x):
    return x+1

@weave.op
def outer(inputs):
    with weave.ThreadPoolExecutor() as exc:
        exc.map(func, inputs)

# Mettez à jour le nom de votre projet Weave
client = weave.init('my-weave-project')
outer([1,2,3,4,5])
Dans la Weave UI, cela produit un seul appel parent avec cinq appels enfants imbriqués, ce qui vous permet d’obtenir une trace entièrement hiérarchisée, même si les opérations d’incrémentation s’exécutent en parallèle. La Trace UI, montrant un seul appel parent pour outer, avec cinq appels enfants imbriqués.

3. Suivi manuel des appels

Vous pouvez également créer manuellement des appels directement via l’API.
import weave

# Initialiser Weave Tracing
client = weave.init('intro-example')

def my_function(name: str):
    # Démarrer un appel
    call = client.create_call(op="my_function", inputs={"name": name})

    # ... code de votre fonction ...

    # Terminer un appel
    client.finish_call(call, output="Hello, World!")

    # Appeler votre fonction
    print(my_function("World"))