Pular para o conteúdo principal

Rastreamento do DSPy

Rastreamento DSPy via autolog

DSPy é uma estrutura de código aberto para a criação de sistemas AI modulares e oferece algoritmos para otimizar seus prompts e pesos.

O MLflow Tracing fornece o recurso de rastreamento automático para o DSPy. O senhor pode habilitar o rastreamento para DSPy chamando a função mlflow.dspy.autolog, e os rastreamentos aninhados são automaticamente registrados no registro ativo MLflow Experiment mediante a invocação dos módulos DSPy.

Python
import mlflow

mlflow.dspy.autolog()

Pré-requisitos

Para usar o MLflow Tracing com o DSPy, o senhor precisa instalar o MLflow e a biblioteca dspy-ai.

Para ambientes de desenvolvimento, instale o pacote completo do MLflow com os extras do Databricks e dspy-ai:

Bash
pip install --upgrade "mlflow[databricks]>=3.1" dspy-ai

O pacote completo do mlflow[databricks] inclui todos os recursos para desenvolvimento local e experimentação no Databricks.

nota

O MLflow 3 é altamente recomendado para obter a melhor experiência de rastreamento com o DSPy.

Antes de executar os exemplos, você precisará configurar seu ambiente:

Para usuários fora do Databricks Notebook : Defina seu Databricks variável de ambiente:

Bash
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"

Para usuários do Databricks Notebook : Essas credenciais são definidas automaticamente para o senhor.

API chave : Verifique se a chave do provedor LLM API está definida:

Bash
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed

Exemplo de uso

Python
import dspy
import mlflow
import os

# Ensure your OPENAI_API_KEY (or other LLM provider keys) is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured

# Enabling tracing for DSPy
mlflow.dspy.autolog()

# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/dspy-tracing-demo")

# Define a simple ChainOfThought model and run it
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)


# Define a simple summarizer model and run it
class SummarizeSignature(dspy.Signature):
"""Given a passage, generate a summary."""

passage: str = dspy.InputField(desc="a passage to summarize")
summary: str = dspy.OutputField(desc="a one-line summary of the passage")


class Summarize(dspy.Module):
def __init__(self):
self.summarize = dspy.ChainOfThought(SummarizeSignature)

def forward(self, passage: str):
return self.summarize(passage=passage)


summarizer = Summarize()
summarizer(
passage=(
"MLflow Tracing is a feature that enhances LLM observability in your Generative AI (GenAI) applications "
"by capturing detailed information about the execution of your application's services. Tracing provides "
"a way to record the inputs, outputs, and metadata associated with each intermediate step of a request, "
"enabling you to easily pinpoint the source of bugs and unexpected behaviors."
)
)

Rastreamento durante a avaliação

A avaliação dos modelos do DSPy é uma etapa importante no desenvolvimento dos sistemas do AI. MLflow Tracing pode ajudá-lo a acompanhar o desempenho de seus programas após a avaliação, fornecendo informações detalhadas sobre a execução de seus programas para cada entrada.

Quando MLflow o rastreamento automático DSPy DSPydo estiver ativado para o, os rastreamentos serão gerados automaticamente quando o usuário executar os conjuntos de avaliação integrada do. O exemplo a seguir demonstra como executar a avaliação e revisar os rastreamentos em MLflow:

Python
import dspy
from dspy.evaluate.metrics import answer_exact_match
import mlflow
import os

# Ensure your OPENAI_API_KEY (or other LLM provider keys) is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured

# Enabling tracing for DSPy evaluation
mlflow.dspy.autolog(log_traces_from_eval=True)

# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/dspy-eval-demo")

# Define a simple evaluation set
eval_set = [
dspy.Example(
question="How many 'r's are in the word 'strawberry'?", answer="3"
).with_inputs("question"),
dspy.Example(
question="How many 'a's are in the word 'banana'?", answer="3"
).with_inputs("question"),
dspy.Example(
question="How many 'e's are in the word 'elephant'?", answer="2"
).with_inputs("question"),
]


# Define a program
class Counter(dspy.Signature):
question: str = dspy.InputField()
answer: str = dspy.OutputField(
desc="Should only contain a single number as an answer"
)


cot = dspy.ChainOfThought(Counter)

# Evaluate the programs
with mlflow.start_run(run_name="CoT Evaluation"):
evaluator = dspy.evaluate.Evaluate(
devset=eval_set,
return_all_scores=True,
return_outputs=True,
show_progress=True,
)
aggregated_score, outputs, all_scores = evaluator(cot, metric=answer_exact_match)

# Log the aggregated score
mlflow.log_metric("exact_match", aggregated_score)
# Log the detailed evaluation results as a table
mlflow.log_table(
{
"question": [example.question for example in eval_set],
"answer": [example.answer for example in eval_set],
"output": outputs,
"exact_match": all_scores,
},
artifact_file="eval_results.json",
)

Se o senhor abrir a interface do usuário MLflow e acessar "CoT Evaluation" execução, verá o resultado da avaliação e a lista de rastreamentos gerados durante a avaliação no site Traces tab.

nota

Você pode desativar o rastreamento para essas etapas chamando a função mlflow.dspy.autolog com os parâmetros log_traces_from_eval definidos como False.

Rastreamento durante a compilação (otimização)

A compilação (otimização) é o conceito central do DSPy. Por meio da compilação, o DSPy otimiza automaticamente os prompts e os pesos do seu programa DSPy para obter o melhor desempenho.

Por default, MLflow NÃO gera traços durante a complicação, porque a complicação pode acionar centenas ou milhares de invocações de módulos DSPy. Para ativar o rastreamento para compilação, você pode chamar a função mlflow.dspy.autolog com o parâmetro log_traces_from_compile definido como True.

Python
import dspy
import mlflow
import os

# Ensure your OPENAI_API_KEY (or other LLM provider keys) is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured

# Enable auto-tracing for compilation
mlflow.dspy.autolog(log_traces_from_compile=True)

# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/dspy-compile-demo")

# Optimize the DSPy program as usual
tp = dspy.MIPROv2(metric=metric, auto="medium", num_threads=24)
optimized = tp.compile(cot, trainset=trainset, ...)

Desativar o rastreamento automático

O rastreamento automático do LlamaIndex pode ser desativado globalmente ligando para mlflow.llama_index.autolog(disable=True) ou mlflow.autolog(disable=True).