Lorsque vous avez instrumenté votre application pour monitoring de l'IA, l'agent Ruby New Relic collecte automatiquement de nombreuses métriques d'IA, mais fournit également des API pour collecter des informations sur le nombre de jetons et les commentaires des utilisateurs.
Conseil
Monitoring des API IA est disponible dans l'agent Ruby version 9.8.0 et supérieure.
nombre de jetons
Vous pouvez définir une procédure de rappel pour calculer l'attribut token_count
pour l'événement LlmEmbedding et LlmChatCompletionMessage, puis transmettre ces informations à New Relic à l'aide de l'API NewRelic::Agent.set_llm_token_count_callback
.
Cette API ne doit être appelée qu'une seule fois pour définir un rappel à utiliser avec tous les calculs de jetons LLM. S'il est appelé plusieurs fois, chaque nouveau rappel remplacera l'ancien. Le processus sera appelé avec un seul hacher comme argument d'entrée et doit renvoyer un entier représentant le nombre de jetons utilisés pour cette prompt, ce message d'achèvement ou cette incorporation (incorporation) particuliers. Les valeurs inférieures ou égales à 0 ne seront pas attachées à un événement.
Le hacher possède les touches suivantes :
:model
(Chaîne) - Le nom du modèle LLM:content
(Chaîne) - Le contenu du message ou prompt
L'exemple de code suivant montre comment définir un rappel qui calcule le nombre de jetons et transmettre ce rappel à NewRelic::Agent.set_llm_token_count_callback
.
require 'tiktoken_ruby' # Example library for counting GPT model tokens used
token_count_callback = proc do |hash| return unless hash[:model].includes?('gpt') enc = Tiktoken.encoding_for_model(hash[:model]) enc.encode(hash[:content]).length end
NewRelic::Agent.set_llm_token_count_callback(token_count_callback)
Commentaires des utilisateurs
monitoring de l'IA peut corréler les identifiants trace entre un message généré par votre IA et le message de retour d'un utilisateur final en utilisant NewRelic::Agent.record_llm_feedback_event
.
NewRelic::Agent.record_llm_feedback_event
accepte les arguments suivants :
trace_id
(obligatoire) - ID de la trace où les complétions de chat liées au commentaire se sont produitesrating
(obligatoire) - Évaluation fournie par un utilisateur final (ex : « Bon », « Mauvais », 1, 2, 5, 8, 10)category
(facultatif) - Catégorie du commentaire tel que fourni par l'utilisateur final (ex : « informatif », « inexact »)message
(facultatif) - Commentaires sous forme de texte libre d'un utilisateur finalmetadata
(facultatif) - Ensemble de paires valeur-clé pour stocker toute autre donnée souhaitée à soumettre avec l'événement de rétroaction
Cette API nécessite le trace_id
actuel pour corréler les messages avec les commentaires, qui peuvent être obtenus à l'aide de NewRelic::Agent::traceur.current_trace_id.
L'exemple de code suivant utilise une application Sinatra pour démontrer la collecte des commentaires utilisateur requis et la trace d'une transaction en cours (avec les paramètres facultatifs de cette API), puis la transmission de ces paramètres à NewRelic::Agent.record_llm_feedback_event
.
responses = {}
get '/chat-completion' do @response_message = client.chat( parameters: { model: 'gpt-3.5-turbo', messages: [ {'role': 'system', 'content': 'You are a helpful assistant.'}, ], temperature: 0.7, } )
# trace_id must be obtained within the current transaction trace_id = NewRelic::Agent::Tracer.current_trace_id responses[@response_message.id] = trace_id
render(@response_message)end
post '/feedback' do trace_id = responses[@response_message.id] rating = 1 category = 'feedback-test' message = 'Good talk' metadata = {user: 'new'}
halt(404) if !responses[@response_message.id]
NewRelic::Agent.record_llm_feedback_event( trace_id: responses[@response_message.id], rating: 1, category: 'feedback-test', message: 'Good talk', metadata: {user: 'new'} )
render('Feedback Recorded')end