5a558eb09e
TypeScript SDK Compatibility V1.x E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / TypeScript SDK Compatibility V1.x E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
TypeScript SDK E2E Tests / TypeScript SDK E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
Python SDK E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK E2E Tests / Python SDK E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK E2E Tests / build-opik (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Python SDK Compatibility V1.x E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK E2E Tests / build-opik (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer E2E Tests Python ${{matrix.python_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer Integration Smoke Tests (push) Has been cancelled
🐙 Code Quality / detect (push) Has been cancelled
🐙 Code Quality / lint (${{ matrix.leg.name }}) (push) Has been cancelled
🐙 Code Quality / summary (push) Has been cancelled
TypeScript SDK Library Integration Tests / Check Secrets (push) Has been cancelled
TypeScript SDK Library Integration Tests / opik-vercel (Vercel AI SDK / eve) (push) Has been cancelled
SDK Library Integration Tests Runner / Check Secrets (push) Has been cancelled
SDK Library Integration Tests Runner / Missed OpenAI API Key Warning (push) Has been cancelled
SDK Library Integration Tests Runner / Build (push) Has been cancelled
SDK Library Integration Tests Runner / openai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_legacy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / llama_index_tests (push) Has been cancelled
SDK Library Integration Tests Runner / anthropic_tests (push) Has been cancelled
SDK Library Integration Tests Runner / mistral_tests (push) Has been cancelled
SDK Library Integration Tests Runner / groq_tests (push) Has been cancelled
SDK Library Integration Tests Runner / aisuite_tests (push) Has been cancelled
SDK Library Integration Tests Runner / haystack_tests (push) Has been cancelled
SDK Library Integration Tests Runner / dspy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v1_tests (push) Has been cancelled
SDK Library Integration Tests Runner / genai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_legacy_1_3_0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / evaluation_metrics_tests (push) Has been cancelled
SDK Library Integration Tests Runner / bedrock_tests (push) Has been cancelled
SDK Library Integration Tests Runner / litellm_tests (push) Has been cancelled
SDK Library Integration Tests Runner / harbor_tests (push) Has been cancelled
SDK Library Integration Tests Runner / Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / render-equality (push) Has been cancelled
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Has been cancelled
Python BE E2E Tests / Python BE E2E (push) Has been cancelled
Python Backend Tests / run-python-backend-tests (push) Has been cancelled
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
SDK E2E Libraries Integration Tests / Check Secrets (push) Has been cancelled
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Has been cancelled
SDK E2E Libraries Integration Tests / build-opik (push) Has been cancelled
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Has been cancelled
TypeScript SDK Build & Publish / build-and-publish (push) Has been cancelled
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Has been cancelled
Backend Tests / discover-tests (push) Has been cancelled
Backend Tests / ${{ matrix.name }} (push) Has been cancelled
Build and Publish SDK / build-and-publish (push) Has been cancelled
Build Opik Docker Images / set-version (push) Has been cancelled
Build Opik Docker Images / build-backend (push) Has been cancelled
Build Opik Docker Images / build-sandbox-executor-python (push) Has been cancelled
Build Opik Docker Images / build-python-backend (push) Has been cancelled
Build Opik Docker Images / build-frontend (push) Has been cancelled
Build Opik Docker Images / create-git-tag (push) Has been cancelled
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Has been cancelled
Docs - Publish / run (push) Has been cancelled
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Has been cancelled
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Has been cancelled
Frontend Unit Tests / Test on Node 20 (push) Has been cancelled
Guardrails E2E Tests / Select Python version matrix (push) Has been cancelled
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Guardrails E2E Tests / 📢 Slack Notification (push) Has been cancelled
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Has been cancelled
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Has been cancelled
Lint Opik Helm Chart / unittest-helm-chart (push) Has been cancelled
203 lines
7.3 KiB
Plaintext
203 lines
7.3 KiB
Plaintext
---
|
||
description: Start here to integrate Opik into your AutoGen-based genai application
|
||
for end-to-end LLM observability, unit testing, and optimization.
|
||
headline: Autogen | Opik Documentation
|
||
og:description: Build robust AI agents using Autogen's enterprise-ready framework,
|
||
featuring built-in logging and observability for effective multi-agent systems.
|
||
og:site_name: Opik Documentation
|
||
og:title: Build AI Agents with Autogen - Opik
|
||
title: Observability for AutoGen with Opik
|
||
canonical-url: https://www.comet.com/docs/opik/integrations/autogen
|
||
---
|
||
|
||
[Autogen](https://microsoft.github.io/autogen/stable/) is a framework for building AI agents and applications built and maintained by Microsoft.
|
||
|
||
Autogen's primary advantage is its enterprise-ready architecture with built-in logging and observability features, making it ideal for production multi-agent systems that require robust monitoring and debugging capabilities.
|
||
|
||
<Frame>
|
||
<img src="/img/tracing/autogen_integration.png" alt="Autogen tracing" />
|
||
</Frame>
|
||
|
||
## Getting started
|
||
|
||
To use the Autogen integration with Opik, you will need to have the following
|
||
packages installed:
|
||
|
||
```bash
|
||
pip install -U "autogen-agentchat" "autogen-ext[openai]" opik opentelemetry-sdk opentelemetry-instrumentation-openai opentelemetry-exporter-otlp
|
||
```
|
||
|
||
In addition, you will need to set the following environment variables to
|
||
configure the OpenTelemetry integration:
|
||
|
||
<Tabs>
|
||
<Tab value="Opik Cloud" title="Opik Cloud">
|
||
If you are using Opik Cloud, you will need to set the following
|
||
environment variables:
|
||
|
||
```bash wordWrap
|
||
export OTEL_EXPORTER_OTLP_ENDPOINT=https://www.comet.com/opik/api/v1/private/otel
|
||
export OTEL_EXPORTER_OTLP_HEADERS='Authorization=<your-api-key>,Comet-Workspace=default'
|
||
```
|
||
|
||
<Tip>
|
||
To log the traces to a specific project, you can add the
|
||
`projectName` parameter to the `OTEL_EXPORTER_OTLP_HEADERS`
|
||
environment variable:
|
||
|
||
```bash wordWrap
|
||
export OTEL_EXPORTER_OTLP_HEADERS='Authorization=<your-api-key>,Comet-Workspace=default,projectName=<your-project-name>'
|
||
```
|
||
|
||
You can also update the `Comet-Workspace` parameter to a different
|
||
value if you would like to log the data to a different workspace.
|
||
</Tip>
|
||
</Tab>
|
||
<Tab value="Enterprise deployment" title="Enterprise deployment">
|
||
If you are using an Enterprise deployment of Opik, you will need to set the following
|
||
environment variables:
|
||
|
||
```bash wordWrap
|
||
export OTEL_EXPORTER_OTLP_ENDPOINT=https://<comet-deployment-url>/opik/api/v1/private/otel
|
||
export OTEL_EXPORTER_OTLP_HEADERS='Authorization=<your-api-key>,Comet-Workspace=default'
|
||
```
|
||
|
||
<Tip>
|
||
To log the traces to a specific project, you can add the
|
||
`projectName` parameter to the `OTEL_EXPORTER_OTLP_HEADERS`
|
||
environment variable:
|
||
|
||
```bash wordWrap
|
||
export OTEL_EXPORTER_OTLP_HEADERS='Authorization=<your-api-key>,Comet-Workspace=default,projectName=<your-project-name>'
|
||
```
|
||
|
||
You can also update the `Comet-Workspace` parameter to a different
|
||
value if you would like to log the data to a different workspace.
|
||
</Tip>
|
||
</Tab>
|
||
<Tab value="Self-hosted instance" title="Self-hosted instance">
|
||
|
||
If you are self-hosting Opik, you will need to set the following environment
|
||
variables:
|
||
|
||
```bash
|
||
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5173/api/v1/private/otel
|
||
```
|
||
|
||
<Tip>
|
||
To log the traces to a specific project, you can add the `projectName`
|
||
parameter to the `OTEL_EXPORTER_OTLP_HEADERS` environment variable:
|
||
|
||
```bash
|
||
export OTEL_EXPORTER_OTLP_HEADERS='projectName=<your-project-name>'
|
||
```
|
||
|
||
</Tip>
|
||
</Tab>
|
||
|
||
</Tabs>
|
||
|
||
## Using Opik with Autogen
|
||
|
||
The Autogen library includes some examples on how to integrate with OpenTelemetry
|
||
compatible tools, you can learn more about it here:
|
||
|
||
1. If you are using [autogen-core](https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/framework/telemetry.html)
|
||
2. If you are using [autogen_agentchat](https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/tracing.html)
|
||
|
||
In the example below, we will focus on the `autogen_agentchat` library that is a
|
||
little easier to use:
|
||
|
||
```python
|
||
# First we will configure the OpenTelemetry
|
||
from opentelemetry import trace
|
||
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
|
||
OTLPSpanExporter
|
||
)
|
||
from opentelemetry.sdk.resources import Resource
|
||
from opentelemetry.sdk.trace import TracerProvider
|
||
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
||
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
|
||
|
||
def setup_telemetry():
|
||
"""Configure OpenTelemetry with HTTP exporter"""
|
||
# Create a resource with service name and other metadata
|
||
resource = Resource.create({
|
||
"service.name": "autogen-demo",
|
||
"service.version": "1.0.0",
|
||
"deployment.environment": "development"
|
||
})
|
||
|
||
# Create TracerProvider with the resource
|
||
provider = TracerProvider(resource=resource)
|
||
|
||
# Create BatchSpanProcessor with OTLPSpanExporter
|
||
processor = BatchSpanProcessor(
|
||
OTLPSpanExporter()
|
||
)
|
||
provider.add_span_processor(processor)
|
||
|
||
# Set the TracerProvider
|
||
trace.set_tracer_provider(provider)
|
||
|
||
# Instrument OpenAI calls
|
||
OpenAIInstrumentor().instrument()
|
||
|
||
# Now we can define and call the Agent
|
||
import asyncio
|
||
from autogen_agentchat.agents import AssistantAgent
|
||
from autogen_agentchat.ui import Console
|
||
from autogen_ext.models.openai import OpenAIChatCompletionClient
|
||
|
||
|
||
# Define a model client. You can use other model client that implements
|
||
# the `ChatCompletionClient` interface.
|
||
model_client = OpenAIChatCompletionClient(
|
||
model="gpt-4o",
|
||
# api_key="YOUR_API_KEY",
|
||
)
|
||
|
||
# Define a simple function tool that the agent can use.
|
||
# For this example, we use a fake weather tool for demonstration purposes.
|
||
async def get_weather(city: str) -> str:
|
||
"""Get the weather for a given city."""
|
||
return f"The weather in {city} is 73 degrees and Sunny."
|
||
|
||
|
||
# Define an AssistantAgent with the model, tool, system message, and reflection
|
||
# enabled. The system message instructs the agent via natural language.
|
||
agent = AssistantAgent(
|
||
name="weather_agent",
|
||
model_client=model_client,
|
||
tools=[get_weather],
|
||
system_message="You are a helpful assistant.",
|
||
reflect_on_tool_use=True,
|
||
model_client_stream=True, # Enable streaming tokens from the model client.
|
||
)
|
||
|
||
|
||
# Run the agent and stream the messages to the console.
|
||
async def main() -> None:
|
||
tracer = trace.get_tracer(__name__)
|
||
with tracer.start_as_current_span("agent_conversation") as span:
|
||
task = "What is the weather in New York?"
|
||
|
||
span.set_attribute("input", task) # Manually log the question
|
||
res = await Console(agent.run_stream(task=task))
|
||
|
||
# Manually log the response
|
||
span.set_attribute("output", res.messages[-1].content)
|
||
|
||
# Close the connection to the model client.
|
||
await model_client.close()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
setup_telemetry()
|
||
asyncio.run(main())
|
||
```
|
||
|
||
## Further improvements
|
||
|
||
If you would like to see us improve this integration, simply open a new feature
|
||
request on [Github](https://github.com/comet-ml/opik/issues). |