[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XG7D3YNK8PRB38AH89RR98":3,"skill-same:01M6XG7D3YNK8PRB38AH89RR98":85},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":14,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":60,"install":61,"resources":74},"01M6XG7D3YNK8PRB38AH89RR98","phoenix-observability",null,"Open-source AI observability platform for LLM tracing, evaluation, and monitoring. Use when debugging LLM applications with detailed traces, running evaluations on datasets, or monitoring production AI systems with real-time insights.","fadrienne\u002FMyGitHub","fadrienne","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197874571?v=4","01M6X64V8VWCRSMFZ4EPS2BWXG","Francesca Adrienne","01M6X64VD5MW4F9PHDWQKS7ZAF",0,"MIT","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fml-inference\u002Fphoenix\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"observability","Phoenix","phoenix observability","running","debugging","when","source","for","insights","LLM Applications","synthetic","platform","time","observability platform","open","real-time","OpenTelemetry","Evaluation","monitoring","tracing","2026-11-10 10:12:30",false,"---\nname: phoenix-observability\ndescription: Open-source AI observability platform for LLM tracing, evaluation, and monitoring. Use when debugging LLM applications with detailed traces, running evaluations on datasets, or monitoring production AI systems with real-time insights.\ncategory: ml-inference\nversion: 1.0.0\nauthor: Synthetic Sciences\nlicense: MIT\ntags: [Observability, Phoenix, Arize, Tracing, Evaluation, Monitoring, LLM Ops, OpenTelemetry]\ndependencies: [arize-phoenix>=12.0.0]\n---\n\n# Phoenix - AI Observability Platform\n\nOpen-source AI observability and evaluation platform for LLM applications with tracing, evaluation, datasets, experiments, and real-time monitoring.\n\n## When to use Phoenix\n\n**Use Phoenix when:**\n- Debugging LLM application issues with detailed traces\n- Running systematic evaluations on datasets\n- Monitoring production LLM systems in real-time\n- Building experiment pipelines for prompt\u002Fmodel comparison\n- Self-hosted observability without vendor lock-in\n\n**Key features:**\n- **Tracing**: OpenTelemetry-based trace collection for any LLM framework\n- **Evaluation**: LLM-as-judge evaluators for quality assessment\n- **Datasets**: Versioned test sets for regression testing\n- **Experiments**: Compare prompts, models, and configurations\n- **Playground**: Interactive prompt testing with multiple models\n- **Open-source**: Self-hosted with PostgreSQL or SQLite\n\n**Use alternatives instead:**\n- **LangSmith**: Managed platform with LangChain-first integration\n- **Weights & Biases**: Deep learning experiment tracking focus\n- **Arize Cloud**: Managed Phoenix with enterprise features\n- **MLflow**: General ML lifecycle, model registry focus\n\n## Quick start\n\n### Installation\n\n```bash\npip install arize-phoenix\n\n# With specific backends\npip install arize-phoenix[embeddings]  # Embedding analysis\npip install arize-phoenix-otel         # OpenTelemetry config\npip install arize-phoenix-evals        # Evaluation framework\npip install arize-phoenix-client       # Lightweight REST client\n```\n\n### Launch Phoenix server\n\n```python\nimport phoenix as px\n\n# Launch in notebook (ThreadServer mode)\nsession = px.launch_app()\n\n# View UI\nsession.view()  # Embedded iframe\nprint(session.url)  # http:\u002F\u002Flocalhost:6006\n```\n\n### Command-line server (production)\n\n```bash\n# Start Phoenix server\nphoenix serve\n\n# With PostgreSQL\nexport PHOENIX_SQL_DATABASE_URL=\"postgresql:\u002F\u002Fuser:pass@host\u002Fdb\"\nphoenix serve --port 6006\n```\n\n### Basic tracing\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.openai import OpenAIInstrumentor\n\n# Configure OpenTelemetry with Phoenix\ntracer_provider = register(\n    project_name=\"my-llm-app\",\n    endpoint=\"http:\u002F\u002Flocalhost:6006\u002Fv1\u002Ftraces\"\n)\n\n# Instrument OpenAI SDK\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n\n# All OpenAI calls are now traced\nfrom openai import OpenAI\nclient = OpenAI()\nresponse = client.chat.completions.create(\n    model=\"gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello!\"}]\n)\n```\n\n## Core concepts\n\n### Traces and spans\n\nA **trace** represents a complete execution flow, while **spans** are individual operations within that trace.\n\n```python\nfrom phoenix.otel import register\nfrom opentelemetry import trace\n\n# Setup tracing\ntracer_provider = register(project_name=\"my-app\")\ntracer = trace.get_tracer(__name__)\n\n# Create custom spans\nwith tracer.start_as_current_span(\"process_query\") as span:\n    span.set_attribute(\"input.value\", query)\n\n    # Child spans are automatically nested\n    with tracer.start_as_current_span(\"retrieve_context\"):\n        context = retriever.search(query)\n\n    with tracer.start_as_current_span(\"generate_response\"):\n        response = llm.generate(query, context)\n\n    span.set_attribute(\"output.value\", response)\n```\n\n### Projects\n\nProjects organize related traces:\n\n```python\nimport os\nos.environ[\"PHOENIX_PROJECT_NAME\"] = \"production-chatbot\"\n\n# Or per-trace\nfrom phoenix.otel import register\ntracer_provider = register(project_name=\"experiment-v2\")\n```\n\n## Framework instrumentation\n\n### OpenAI\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.openai import OpenAIInstrumentor\n\ntracer_provider = register()\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n### LangChain\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.langchain import LangChainInstrumentor\n\ntracer_provider = register()\nLangChainInstrumentor().instrument(tracer_provider=tracer_provider)\n\n# All LangChain operations traced\nfrom langchain_openai import ChatOpenAI\nllm = ChatOpenAI(model=\"gpt-4o\")\nresponse = llm.invoke(\"Hello!\")\n```\n\n### LlamaIndex\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.llama_index import LlamaIndexInstrumentor\n\ntracer_provider = register()\nLlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n### Anthropic\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.anthropic import AnthropicInstrumentor\n\ntracer_provider = register()\nAnthropicInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n## Evaluation framework\n\n### Built-in evaluators\n\n```python\nfrom phoenix.evals import (\n    OpenAIModel,\n    HallucinationEvaluator,\n    RelevanceEvaluator,\n    ToxicityEvaluator,\n    llm_classify\n)\n\n# Setup model for evaluation\neval_model = OpenAIModel(model=\"gpt-4o\")\n\n# Evaluate hallucination\nhallucination_eval = HallucinationEvaluator(eval_model)\nresults = hallucination_eval.evaluate(\n    input=\"What is the capital of France?\",\n    output=\"The capital of France is Paris.\",\n    reference=\"Paris is the capital of France.\"\n)\n```\n\n### Custom evaluators\n\n```python\nfrom phoenix.evals import llm_classify\n\n# Define custom evaluation\ndef evaluate_helpfulness(input_text, output_text):\n    template = \"\"\"\n    Evaluate if the response is helpful for the given question.\n\n    Question: {input}\n    Response: {output}\n\n    Is this response helpful? Answer 'helpful' or 'not_helpful'.\n    \"\"\"\n\n    result = llm_classify(\n        model=eval_model,\n        template=template,\n        input=input_text,\n        output=output_text,\n        rails=[\"helpful\", \"not_helpful\"]\n    )\n    return result\n```\n\n### Run evaluations on dataset\n\n```python\nfrom phoenix import Client\nfrom phoenix.evals import run_evals\n\nclient = Client()\n\n# Get spans to evaluate\nspans_df = client.get_spans_dataframe(\n    project_name=\"my-app\",\n    filter_condition=\"span_kind == 'LLM'\"\n)\n\n# Run evaluations\neval_results = run_evals(\n    dataframe=spans_df,\n    evaluators=[\n        HallucinationEvaluator(eval_model),\n        RelevanceEvaluator(eval_model)\n    ],\n    provide_explanation=True\n)\n\n# Log results back to Phoenix\nclient.log_evaluations(eval_results)\n```\n\n## Datasets and experiments\n\n### Create dataset\n\n```python\nfrom phoenix import Client\n\nclient = Client()\n\n# Create dataset\ndataset = client.create_dataset(\n    name=\"qa-test-set\",\n    description=\"QA evaluation dataset\"\n)\n\n# Add examples\nclient.add_examples_to_dataset(\n    dataset_name=\"qa-test-set\",\n    examples=[\n        {\n            \"input\": {\"question\": \"What is Python?\"},\n            \"output\": {\"answer\": \"A programming language\"}\n        },\n        {\n            \"input\": {\"question\": \"What is ML?\"},\n            \"output\": {\"answer\": \"Machine learning\"}\n        }\n    ]\n)\n```\n\n### Run experiment\n\n```python\nfrom phoenix import Client\nfrom phoenix.experiments import run_experiment\n\nclient = Client()\n\ndef my_model(input_data):\n    \"\"\"Your model function.\"\"\"\n    question = input_data[\"question\"]\n    return {\"answer\": generate_answer(question)}\n\ndef accuracy_evaluator(input_data, output, expected):\n    \"\"\"Custom evaluator.\"\"\"\n    return {\n        \"score\": 1.0 if expected[\"answer\"].lower() in output[\"answer\"].lower() else 0.0,\n        \"label\": \"correct\" if expected[\"answer\"].lower() in output[\"answer\"].lower() else \"incorrect\"\n    }\n\n# Run experiment\nresults = run_experiment(\n    dataset_name=\"qa-test-set\",\n    task=my_model,\n    evaluators=[accuracy_evaluator],\n    experiment_name=\"baseline-v1\"\n)\n\nprint(f\"Average accuracy: {results.aggregate_metrics['accuracy']}\")\n```\n\n## Client API\n\n### Query traces and spans\n\n```python\nfrom phoenix import Client\n\nclient = Client(endpoint=\"http:\u002F\u002Flocalhost:6006\")\n\n# Get spans as DataFrame\nspans_df = client.get_spans_dataframe(\n    project_name=\"my-app\",\n    filter_condition=\"span_kind == 'LLM'\",\n    limit=1000\n)\n\n# Get specific span\nspan = client.get_span(span_id=\"abc123\")\n\n# Get trace\ntrace = client.get_trace(trace_id=\"xyz789\")\n```\n\n### Log feedback\n\n```python\nfrom phoenix import Client\n\nclient = Client()\n\n# Log user feedback\nclient.log_annotation(\n    span_id=\"abc123\",\n    name=\"user_rating\",\n    annotator_kind=\"HUMAN\",\n    score=0.8,\n    label=\"helpful\",\n    metadata={\"comment\": \"Good response\"}\n)\n```\n\n### Export data\n\n```python\n# Export to pandas\ndf = client.get_spans_dataframe(project_name=\"my-app\")\n\n# Export traces\ntraces = client.list_traces(project_name=\"my-app\")\n```\n\n## Production deployment\n\n### Docker\n\n```bash\ndocker run -p 6006:6006 arizephoenix\u002Fphoenix:latest\n```\n\n### With PostgreSQL\n\n```bash\n# Set database URL\nexport PHOENIX_SQL_DATABASE_URL=\"postgresql:\u002F\u002Fuser:pass@host:5432\u002Fphoenix\"\n\n# Start server\nphoenix serve --host 0.0.0.0 --port 6006\n```\n\n### Environment variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `PHOENIX_PORT` | HTTP server port | `6006` |\n| `PHOENIX_HOST` | Server bind address | `127.0.0.1` |\n| `PHOENIX_GRPC_PORT` | gRPC\u002FOTLP port | `4317` |\n| `PHOENIX_SQL_DATABASE_URL` | Database connection | SQLite temp |\n| `PHOENIX_WORKING_DIR` | Data storage directory | OS temp |\n| `PHOENIX_ENABLE_AUTH` | Enable authentication | `false` |\n| `PHOENIX_SECRET` | JWT signing secret | Required if auth enabled |\n\n### With authentication\n\n```bash\nexport PHOENIX_ENABLE_AUTH=true\nexport PHOENIX_SECRET=\"your-secret-key-min-32-chars\"\nexport PHOENIX_ADMIN_SECRET=\"admin-bootstrap-token\"\n\nphoenix serve\n```\n\n## Best practices\n\n1. **Use projects**: Separate traces by environment (dev\u002Fstaging\u002Fprod)\n2. **Add metadata**: Include user IDs, session IDs for debugging\n3. **Evaluate regularly**: Run automated evaluations in CI\u002FCD\n4. **Version datasets**: Track test set changes over time\n5. **Monitor costs**: Track token usage via Phoenix dashboards\n6. **Self-host**: Use PostgreSQL for production deployments\n\n## Common issues\n\n**Traces not appearing:**\n```python\nfrom phoenix.otel import register\n\n# Verify endpoint\ntracer_provider = register(\n    project_name=\"my-app\",\n    endpoint=\"http:\u002F\u002Flocalhost:6006\u002Fv1\u002Ftraces\"  # Correct endpoint\n)\n\n# Force flush\nfrom opentelemetry import trace\ntrace.get_tracer_provider().force_flush()\n```\n\n**High memory in notebook:**\n```python\n# Close session when done\nsession = px.launch_app()\n# ... do work ...\nsession.close()\npx.close_app()\n```\n\n**Database connection issues:**\n```bash\n# Verify PostgreSQL connection\npsql $PHOENIX_SQL_DATABASE_URL -c \"SELECT 1\"\n\n# Check Phoenix logs\nphoenix serve --log-level debug\n```\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Custom evaluators, experiments, production setup\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues, debugging, performance\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fdocs.arize.com\u002Fphoenix\n- **Repository**: https:\u002F\u002Fgithub.com\u002FArize-ai\u002Fphoenix\n- **Docker Hub**: https:\u002F\u002Fhub.docker.com\u002Fr\u002Farizephoenix\u002Fphoenix\n- **Version**: 12.0.0+\n- **License**: Apache 2.0\n","# Phoenix - AI Observability Platform\n\nOpen-source AI observability and evaluation platform for LLM applications with tracing, evaluation, datasets, experiments, and real-time monitoring.\n\n## When to use Phoenix\n\n**Use Phoenix when:**\n- Debugging LLM application issues with detailed traces\n- Running systematic evaluations on datasets\n- Monitoring production LLM systems in real-time\n- Building experiment pipelines for prompt\u002Fmodel comparison\n- Self-hosted observability without vendor lock-in\n\n**Key features:**\n- **Tracing**: OpenTelemetry-based trace collection for any LLM framework\n- **Evaluation**: LLM-as-judge evaluators for quality assessment\n- **Datasets**: Versioned test sets for regression testing\n- **Experiments**: Compare prompts, models, and configurations\n- **Playground**: Interactive prompt testing with multiple models\n- **Open-source**: Self-hosted with PostgreSQL or SQLite\n\n**Use alternatives instead:**\n- **LangSmith**: Managed platform with LangChain-first integration\n- **Weights & Biases**: Deep learning experiment tracking focus\n- **Arize Cloud**: Managed Phoenix with enterprise features\n- **MLflow**: General ML lifecycle, model registry focus\n\n## Quick start\n\n### Installation\n\n```bash\npip install arize-phoenix\n\n# With specific backends\npip install arize-phoenix[embeddings]  # Embedding analysis\npip install arize-phoenix-otel         # OpenTelemetry config\npip install arize-phoenix-evals        # Evaluation framework\npip install arize-phoenix-client       # Lightweight REST client\n```\n\n### Launch Phoenix server\n\n```python\nimport phoenix as px\n\n# Launch in notebook (ThreadServer mode)\nsession = px.launch_app()\n\n# View UI\nsession.view()  # Embedded iframe\nprint(session.url)  # http:\u002F\u002Flocalhost:6006\n```\n\n### Command-line server (production)\n\n```bash\n# Start Phoenix server\nphoenix serve\n\n# With PostgreSQL\nexport PHOENIX_SQL_DATABASE_URL=\"postgresql:\u002F\u002Fuser:pass@host\u002Fdb\"\nphoenix serve --port 6006\n```\n\n### Basic tracing\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.openai import OpenAIInstrumentor\n\n# Configure OpenTelemetry with Phoenix\ntracer_provider = register(\n    project_name=\"my-llm-app\",\n    endpoint=\"http:\u002F\u002Flocalhost:6006\u002Fv1\u002Ftraces\"\n)\n\n# Instrument OpenAI SDK\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n\n# All OpenAI calls are now traced\nfrom openai import OpenAI\nclient = OpenAI()\nresponse = client.chat.completions.create(\n    model=\"gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello!\"}]\n)\n```\n\n## Core concepts\n\n### Traces and spans\n\nA **trace** represents a complete execution flow, while **spans** are individual operations within that trace.\n\n```python\nfrom phoenix.otel import register\nfrom opentelemetry import trace\n\n# Setup tracing\ntracer_provider = register(project_name=\"my-app\")\ntracer = trace.get_tracer(__name__)\n\n# Create custom spans\nwith tracer.start_as_current_span(\"process_query\") as span:\n    span.set_attribute(\"input.value\", query)\n\n    # Child spans are automatically nested\n    with tracer.start_as_current_span(\"retrieve_context\"):\n        context = retriever.search(query)\n\n    with tracer.start_as_current_span(\"generate_response\"):\n        response = llm.generate(query, context)\n\n    span.set_attribute(\"output.value\", response)\n```\n\n### Projects\n\nProjects organize related traces:\n\n```python\nimport os\nos.environ[\"PHOENIX_PROJECT_NAME\"] = \"production-chatbot\"\n\n# Or per-trace\nfrom phoenix.otel import register\ntracer_provider = register(project_name=\"experiment-v2\")\n```\n\n## Framework instrumentation\n\n### OpenAI\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.openai import OpenAIInstrumentor\n\ntracer_provider = register()\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n### LangChain\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.langchain import LangChainInstrumentor\n\ntracer_provider = register()\nLangChainInstrumentor().instrument(tracer_provider=tracer_provider)\n\n# All LangChain operations traced\nfrom langchain_openai import ChatOpenAI\nllm = ChatOpenAI(model=\"gpt-4o\")\nresponse = llm.invoke(\"Hello!\")\n```\n\n### LlamaIndex\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.llama_index import LlamaIndexInstrumentor\n\ntracer_provider = register()\nLlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n### Anthropic\n\n```python\nfrom phoenix.otel import register\nfrom openinference.instrumentation.anthropic import AnthropicInstrumentor\n\ntracer_provider = register()\nAnthropicInstrumentor().instrument(tracer_provider=tracer_provider)\n```\n\n## Evaluation framework\n\n### Built-in evaluators\n\n```python\nfrom phoenix.evals import (\n    OpenAIModel,\n    HallucinationEvaluator,\n    RelevanceEvaluator,\n    ToxicityEvaluator,\n    llm_classify\n)\n\n# Setup model for evaluation\neval_model = OpenAIModel(model=\"gpt-4o\")\n\n# Evaluate hallucination\nhallucination_eval = HallucinationEvaluator(eval_model)\nresults = hallucination_eval.evaluate(\n    input=\"What is the capital of France?\",\n    output=\"The capital of France is Paris.\",\n    reference=\"Paris is the capital of France.\"\n)\n```\n\n### Custom evaluators\n\n```python\nfrom phoenix.evals import llm_classify\n\n# Define custom evaluation\ndef evaluate_helpfulness(input_text, output_text):\n    template = \"\"\"\n    Evaluate if the response is helpful for the given question.\n\n    Question: {input}\n    Response: {output}\n\n    Is this response helpful? Answer 'helpful' or 'not_helpful'.\n    \"\"\"\n\n    result = llm_classify(\n        model=eval_model,\n        template=template,\n        input=input_text,\n        output=output_text,\n        rails=[\"helpful\", \"not_helpful\"]\n    )\n    return result\n```\n\n### Run evaluations on dataset\n\n```python\nfrom phoenix import Client\nfrom phoenix.evals import run_evals\n\nclient = Client()\n\n# Get spans to evaluate\nspans_df = client.get_spans_dataframe(\n    project_name=\"my-app\",\n    filter_condition=\"span_kind == 'LLM'\"\n)\n\n# Run evaluations\neval_results = run_evals(\n    dataframe=spans_df,\n    evaluators=[\n        HallucinationEvaluator(eval_model),\n        RelevanceEvaluator(eval_model)\n    ],\n    provide_explanation=True\n)\n\n# Log results back to Phoenix\nclient.log_evaluations(eval_results)\n```\n\n## Datasets and experiments\n\n### Create dataset\n\n```python\nfrom phoenix import Client\n\nclient = Client()\n\n# Create dataset\ndataset = client.create_dataset(\n    name=\"qa-test-set\",\n    description=\"QA evaluation dataset\"\n)\n\n# Add examples\nclient.add_examples_to_dataset(\n    dataset_name=\"qa-test-set\",\n    examples=[\n        {\n            \"input\": {\"question\": \"What is Python?\"},\n            \"output\": {\"answer\": \"A programming language\"}\n        },\n        {\n            \"input\": {\"question\": \"What is ML?\"},\n            \"output\": {\"answer\": \"Machine learning\"}\n        }\n    ]\n)\n```\n\n### Run experiment\n\n```python\nfrom phoenix import Client\nfrom phoenix.experiments import run_experiment\n\nclient = Client()\n\ndef my_model(input_data):\n    \"\"\"Your model function.\"\"\"\n    question = input_data[\"question\"]\n    return {\"answer\": generate_answer(question)}\n\ndef accuracy_evaluator(input_data, output, expected):\n    \"\"\"Custom evaluator.\"\"\"\n    return {\n        \"score\": 1.0 if expected[\"answer\"].lower() in output[\"answer\"].lower() else 0.0,\n        \"label\": \"correct\" if expected[\"answer\"].lower() in output[\"answer\"].lower() else \"incorrect\"\n    }\n\n# Run experiment\nresults = run_experiment(\n    dataset_name=\"qa-test-set\",\n    task=my_model,\n    evaluators=[accuracy_evaluator],\n    experiment_name=\"baseline-v1\"\n)\n\nprint(f\"Average accuracy: {results.aggregate_metrics['accuracy']}\")\n```\n\n## Client API\n\n### Query traces and spans\n\n```python\nfrom phoenix import Client\n\nclient = Client(endpoint=\"http:\u002F\u002Flocalhost:6006\")\n\n# Get spans as DataFrame\nspans_df = client.get_spans_dataframe(\n    project_name=\"my-app\",\n    filter_condition=\"span_kind == 'LLM'\",\n    limit=1000\n)\n\n# Get specific span\nspan = client.get_span(span_id=\"abc123\")\n\n# Get trace\ntrace = client.get_trace(trace_id=\"xyz789\")\n```\n\n### Log feedback\n\n```python\nfrom phoenix import Client\n\nclient = Client()\n\n# Log user feedback\nclient.log_annotation(\n    span_id=\"abc123\",\n    name=\"user_rating\",\n    annotator_kind=\"HUMAN\",\n    score=0.8,\n    label=\"helpful\",\n    metadata={\"comment\": \"Good response\"}\n)\n```\n\n### Export data\n\n```python\n# Export to pandas\ndf = client.get_spans_dataframe(project_name=\"my-app\")\n\n# Export traces\ntraces = client.list_traces(project_name=\"my-app\")\n```\n\n## Production deployment\n\n### Docker\n\n```bash\ndocker run -p 6006:6006 arizephoenix\u002Fphoenix:latest\n```\n\n### With PostgreSQL\n\n```bash\n# Set database URL\nexport PHOENIX_SQL_DATABASE_URL=\"postgresql:\u002F\u002Fuser:pass@host:5432\u002Fphoenix\"\n\n# Start server\nphoenix serve --host 0.0.0.0 --port 6006\n```\n\n### Environment variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `PHOENIX_PORT` | HTTP server port | `6006` |\n| `PHOENIX_HOST` | Server bind address | `127.0.0.1` |\n| `PHOENIX_GRPC_PORT` | gRPC\u002FOTLP port | `4317` |\n| `PHOENIX_SQL_DATABASE_URL` | Database connection | SQLite temp |\n| `PHOENIX_WORKING_DIR` | Data storage directory | OS temp |\n| `PHOENIX_ENABLE_AUTH` | Enable authentication | `false` |\n| `PHOENIX_SECRET` | JWT signing secret | Required if auth enabled |\n\n### With authentication\n\n```bash\nexport PHOENIX_ENABLE_AUTH=true\nexport PHOENIX_SECRET=\"your-secret-key-min-32-chars\"\nexport PHOENIX_ADMIN_SECRET=\"admin-bootstrap-token\"\n\nphoenix serve\n```\n\n## Best practices\n\n1. **Use projects**: Separate traces by environment (dev\u002Fstaging\u002Fprod)\n2. **Add metadata**: Include user IDs, session IDs for debugging\n3. **Evaluate regularly**: Run automated evaluations in CI\u002FCD\n4. **Version datasets**: Track test set changes over time\n5. **Monitor costs**: Track token usage via Phoenix dashboards\n6. **Self-host**: Use PostgreSQL for production deployments\n\n## Common issues\n\n**Traces not appearing:**\n```python\nfrom phoenix.otel import register\n\n# Verify endpoint\ntracer_provider = register(\n    project_name=\"my-app\",\n    endpoint=\"http:\u002F\u002Flocalhost:6006\u002Fv1\u002Ftraces\"  # Correct endpoint\n)\n\n# Force flush\nfrom opentelemetry import trace\ntrace.get_tracer_provider().force_flush()\n```\n\n**High memory in notebook:**\n```python\n# Close session when done\nsession = px.launch_app()\n# ... do work ...\nsession.close()\npx.close_app()\n```\n\n**Database connection issues:**\n```bash\n# Verify PostgreSQL connection\npsql $PHOENIX_SQL_DATABASE_URL -c \"SELECT 1\"\n\n# Check Phoenix logs\nphoenix serve --log-level debug\n```\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Custom evaluators, experiments, production setup\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues, debugging, performance\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fdocs.arize.com\u002Fphoenix\n- **Repository**: https:\u002F\u002Fgithub.com\u002FArize-ai\u002Fphoenix\n- **Docker Hub**: https:\u002F\u002Fhub.docker.com\u002Fr\u002Farizephoenix\u002Fphoenix\n- **Version**: 12.0.0+\n- **License**: Apache 2.0\n",{"name":5,"tags":44,"author":50,"license":15,"version":51,"category":52,"description":7,"dependencies":53},[45,20,46,47,36,48,49,35],"Observability","Arize","Tracing","Monitoring","LLM Ops","Synthetic Sciences","1.0.0","ml-inference",[54],"arize-phoenix>=12.0.0","main","4aa39efd1cdab0b4657ecee16c92a92011a5b10f","openscience\u002Fbackend\u002Fcli\u002Fskills\u002Fml-inference\u002Fphoenix","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub","https:\u002F\u002Fgithub.com\u002Ffadrienne","2026-10-28 00:43:09",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add fadrienne\u002FMyGitHub --skill phoenix-observability",{"tool":67,"command":68},"bunx","bunx skills add fadrienne\u002FMyGitHub --skill phoenix-observability",{"tool":70,"command":71},"pnpm","pnpm dlx skills add fadrienne\u002FMyGitHub --skill phoenix-observability","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fml-inference\u002Fphoenix\u002FSKILL.md",true,[75,81],{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fadvanced-usage.md","REFERENCE","参考文档",15277,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fml-inference\u002Fphoenix\u002Freferences\u002Fadvanced-usage.md",{"path":82,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Ftroubleshooting.md",10944,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fml-inference\u002Fphoenix\u002Freferences\u002Ftroubleshooting.md",[86,117,143,177,204,230],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":97,"publishedAt":39},"01M7167B28PK20HP7R7ZED2DY0","statistical-power","Sample size calculation, power analysis, and effect size conversion for scientific studies. Use BEFORE data collection (a priori) to determine required N, or after (post-hoc) to compute achieved power. Covers parametric tests (t-test, ANOVA, chi-square, proportions, correlation, regression), simulation-based power for complex\u002Fclustered\u002Fnested designs, and power curves. Use this skill when someone asks 'how many samples do I need', 'what is my power', 'what effect size can I detect', or any variant. Pairs with \u002Fexperimental-design (choose design first, then compute power) and \u002Fstatistical-analysis (analyze data after collection).","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-power\u002FSKILL.md",[92],{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[98,99,100,101,102,103,104,105,24,106,107,108,109,110,111,112,113,114,115,116],"power","statistical power","effect","scipy","regression","choose","design","uv","Bash","collection","analysis","calculation","ANOVA","conversion","analyze","t-test","chi-square","simulation","sample",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":126,"publishedAt":39},"01M71677EBCM8EPCE9BZCK8505","statistical-analysis","Guided statistical analysis with test selection and reporting. Use when you need help choosing appropriate tests for your data, assumption checking, power analysis, and APA-formatted results. Best for academic research reporting, test selection guidance. For implementing specific models programmatically use statsmodels.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-analysis\u002FSKILL.md",[123],{"categoryNo":124,"categoryName":125,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000008","测试与质量",[108,127,98,128,129,130,24,131,132,133,26,134,135,136,137,138,139,140,141,142],"statistical analysis","academic research","implementing","selection","you","reporting","data","tests","use","with","test","research","results","statsmodels","models","help",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":158,"publishedAt":39},"01M71673R93XAHFH81DBNVNG7H","scientific-writing","Core skill for the deep research and writing tool. Write scientific manuscripts in full paragraphs (never bullet points). Use two-stage process with (1) section outlines with key points using research-lookup then (2) convert to flowing prose. IMRAD structure, citations (APA\u002FAMA\u002FVancouver), figures\u002Ftables, reporting guidelines (CONSORT\u002FSTROBE\u002FPRISMA), for research papers and journal submissions.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-writing\u002FSKILL.md",[149,152,153],{"categoryNo":150,"categoryName":151,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},{"categoryNo":154,"categoryName":155,"taxonomyType":156,"taxonomyTypeDesc":157},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[159,160,161,162,163,164,165,166,167,168,106,169,170,171,172,173,174,175,132,176],"writing","scientific","scientific writing","Citations","deep","deep research","never","papers","journal","false","api","prisma","structure","openrouter","Outlines","core skill","read","features",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":187,"publishedAt":39},"01M7166ZPKXBF4EBPHVTJPQBB1","scientific-visualization","Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib\u002Fseaborn\u002Fplotly with publication styles. For quick exploration use seaborn or plotly directly.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-visualization\u002FSKILL.md",[183,186],{"categoryNo":184,"categoryName":185,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},[188,160,189,190,191,192,193,194,195,167,24,196,197,198,199,200,201,202,26,203],"visualization","scientific visualization","error","ready","quick","exploration","meta-skill","Meta","safe","plotly","annotations","formatting","Publication","figures","panel","submission",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":216,"publishedAt":39},"01M7166VXJWQSSC3RQZP60WBGR","research-code","Debug, profile, review, and restructure Python research and analysis code. Use when analysis scripts crash, produce wrong results, run too slowly, or need a correctness review. Covers: reading tracebacks and diagnosing root causes, hypothesis-driven debugging, reviewing code for common statistical\u002Fnumerical errors, profiling data pipelines, improving reproducibility (seeds, environments, determinism), and structuring analysis scripts for sharing. Distinct from \u002Fexploratory-data-analysis (which understands data) and \u002Fstatistical-analysis (which chooses and runs tests) — this skill focuses on the code itself.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fresearch-code\u002FSKILL.md",[210,213],{"categoryNo":211,"categoryName":212,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":214,"categoryName":215,"taxonomyType":156,"taxonomyTypeDesc":157},"01JBSEEDCAT000000000000030","开发工程师",[217,218,138,219,220,221,222,105,23,24,106,108,223,224,225,226,227,228,175,229],"code","research code","which","memory","data-analysis","errors","common","review","data pipelines","run","scripts","line","write",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":234,"licenseFileUrl":6,"sourceHtmlUrl":235,"categories":236,"keywords":243,"publishedAt":39},"01M7166CF5HSR7SVZYZFWTDX55","markdown-mermaid-writing","Comprehensive markdown and Mermaid diagram writing skill. Use when creating any scientific document, report, analysis, or visualization. Establishes text-based diagrams as the default documentation standard with full style guides (markdown + mermaid), 24 diagram type references, and 9 document templates.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fmarkdown-mermaid-writing\u002FSKILL.md",[237,240,241,242],{"categoryNo":238,"categoryName":239,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":150,"categoryName":151,"taxonomyType":95,"taxonomyTypeDesc":96},{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},{"categoryNo":154,"categoryName":155,"taxonomyType":156,"taxonomyTypeDesc":157},[159,244,245,246,247,248,188,249,250,24,106,108,251,252,253,254,255,256,160,175],"markdown mermaid writing","mermaid","markdown","community","diagrams","project","default","team","guides","text","documentation","references","diagram"]