Il est important de stocker les traces des applications LLM dans une base de données centrale, aussi bien pendant le développement qu’en production. Vous utiliserez ces traces pour le débogage, ainsi que pour constituer un jeu de données d’exemples difficiles servant à l’évaluation au fur et à mesure que vous améliorez votre application.Weave peut capturer automatiquement les traces de la bibliothèque Python OpenAI.Commencez à capturer des traces en appelant weave.init(<project-name>) avec le nom de projet de votre choix. OpenAI sera automatiquement patché, quel que soit le moment où vous l’importez.Si vous ne spécifiez pas d’équipe W&B lorsque vous appelez weave.init(), votre entité par défaut sera utilisée. Pour trouver ou mettre à jour votre entité par défaut, consultez Paramètres utilisateur dans la documentation W&B Models.Patch automatiqueWeave patche automatiquement OpenAI, qu’il soit importé avant ou après weave.init() :
from openai import OpenAIimport weaveweave.init('emoji-bot') # OpenAI est automatiquement patché !client = OpenAI()response = client.chat.completions.create( model="gpt-4", messages=[ { "role": "system", "content": "You are AGI. You will be provided with a message, and your task is to respond using emojis only." }, { "role": "user", "content": "How are you?" } ])
import { OpenAI } from 'openai';import { wrapOpenAI } from '@wandb/weave';const openai = wrapOpenAI(new OpenAI());// Tous les appels à OpenAI seront désormais tracésopenai.chat.completions.create( { model: "gpt-4", messages: [ { role: "system", content: "You are AGI. You will be provided with a message, and your task is to respond using emojis only." }, { role: "user", content: "How are you?" } ] });
Patch explicite (facultatif)Vous pouvez toujours appliquer explicitement un patch si vous souhaitez un contrôle plus fin :
import weaveweave.init('emoji-bot')weave.integrations.patch_openai() # Activer le tracing OpenAIfrom openai import OpenAIclient = OpenAI()response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": "Make me a emoji"} ])
Weave prend également en charge les sorties structurées avec OpenAI. C’est utile pour garantir que les réponses de votre LLM suivent un format spécifique.
from openai import OpenAIfrom pydantic import BaseModelimport weaveclass UserDetail(BaseModel): name: str age: intclient = OpenAI()weave.init('extract-user-details')completion = client.beta.chat.completions.parse( model="gpt-4o-2024-08-06", messages=[ {"role": "system", "content": "Extract the user details from the message."}, {"role": "user", "content": "My name is David and I am 30 years old."}, ], response_format=UserDetail,)user_detail = completion.choices[0].message.parsedprint(user_detail)
Weave prend également en charge les fonctions asynchrones avec OpenAI.
from openai import AsyncOpenAIimport weaveclient = AsyncOpenAI()weave.init('async-emoji-bot')async def call_openai(): response = await client.chat.completions.create( model="gpt-4", messages=[ { "role": "system", "content": "You are AGI. You will be provided with a message, and your task is to respond using emojis only." }, { "role": "user", "content": "How are you?" } ] ) return response# Appel de la fonction asynchroneresult = await call_openai()
Weave prend également en charge le streaming des réponses d’OpenAI.
from openai import OpenAIimport weaveclient = OpenAI()weave.init('streaming-emoji-bot')response = client.chat.completions.create( model="gpt-4", messages=[ { "role": "system", "content": "You are AGI. You will be provided with a message, and your task is to respond using emojis only." }, { "role": "user", "content": "How are you?" } ], stream=True)for chunk in response: print(chunk.choices[0].delta.content or "", end="")
Weave effectue également le tracing des appels de fonction effectués par OpenAI lors de l’utilisation d’outils.
from openai import OpenAIimport weaveclient = OpenAI()weave.init('function-calling-bot')tools = [ { "type": "function", "function": { "name": "get_weather", "description": "Get the weather in a given location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The location to get the weather for" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "The unit to return the temperature in" } }, "required": ["location"] } } }]response = client.chat.completions.create( model="gpt-4", messages=[ { "role": "user", "content": "What's the weather like in New York?" } ], tools=tools)print(response.choices[0].message.tool_calls)
Weave prend également en charge l’API Assistants d’OpenAI pour créer des applications d’IA conversationnelle.
from openai import OpenAIimport weaveclient = OpenAI()weave.init('assistant-bot')# Créer un assistantassistant = client.beta.assistants.create( name="Math Assistant", instructions="You are a personal math tutor. Answer questions about math.", model="gpt-4")# Créer un threadthread = client.beta.threads.create()# Ajouter un message au threadmessage = client.beta.threads.messages.create( thread_id=thread.id, role="user", content="What is 2+2?")# Exécuter l’assistantrun = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id)# Obtenir la réponse de l’assistantmessages = client.beta.threads.messages.list(thread_id=thread.id)