Skip to main content
Glama

@arizeai/phoenix-mcp

Official
by Arize-ai
openai_agents_routing.ipynb5.44 kB
{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "SUknhuHKyc-E" }, "source": [ "# <center>OpenAI agent pattern: routing</center>\n", "\n", "A starter guide for building an agent loop using the `openai-agents` library.\n", "\n", "This pattern uses routing to choose which specialized agent to use for a specific sub-task. The specialized agent attempts to complete the sub-task and return a result.\n", "\n", "In the following example, we'll build an agent which creates a portfolio of stocks and ETFs based on a user's investment strategy.\n", "1. **Router Agent:** Chooses which worker to use based on the user's investment strategy.\n", "2. **Research Agent:** Searches the web for information about stocks and ETFs that could support the user's investment strategy.\n", "3. **Question Answering Agent:** Answers questions about investing like Warren Buffett." ] }, { "cell_type": "markdown", "metadata": { "id": "n69HR7eJswNt" }, "source": [ "### Install Libraries" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Install base libraries for OpenAI\n", "!pip install -q openai openai-agents\n", "\n", "# Install optional libraries for OpenInference/OpenTelemetry tracing\n", "!pip install -q arize-phoenix-otel openinference-instrumentation-openai-agents openinference-instrumentation-openai" ] }, { "cell_type": "markdown", "metadata": { "id": "jQnyEnJisyn3" }, "source": [ "### Setup Keys\n", "\n", "Add your OpenAI API key to the environment variable `OPENAI_API_KEY`.\n", "\n", "Copy your Phoenix `API_KEY` from your settings page at [app.phoenix.arize.com](https://app.phoenix.arize.com)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "from getpass import getpass\n", "\n", "if \"OPENAI_API_KEY\" not in os.environ:\n", " os.environ[\"OPENAI_API_KEY\"] = getpass(\"🔑 Enter your OpenAI API key: \")\n", "\n", "if \"PHOENIX_API_KEY\" not in os.environ:\n", " os.environ[\"PHOENIX_API_KEY\"] = getpass(\"🔑 Enter your Phoenix API key: \")\n", "\n", "if \"PHOENIX_COLLECTOR_ENDPOINT\" not in os.environ:\n", " os.environ[\"PHOENIX_COLLECTOR_ENDPOINT\"] = getpass(\"🔑 Enter your Phoenix Collector Endpoint\")" ] }, { "cell_type": "markdown", "metadata": { "id": "kfid5cE99yN5" }, "source": [ "### Setup Tracing" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from phoenix.otel import register\n", "\n", "tracer_provider = register(\n", " project_name=\"openai-agents\",\n", " auto_instrument=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the agents" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from pprint import pprint\n", "from textwrap import dedent\n", "\n", "from agents import Agent, Runner, TResponseInputItem, WebSearchTool\n", "from agents.model_settings import ModelSettings\n", "\n", "qa_agent = Agent(\n", " name=\"Investing Q&A Agent\",\n", " instructions=dedent(\"\"\"You are Warren Buffett. You are answering questions about investing.\"\"\"),\n", " model=\"gpt-4.1\",\n", ")\n", "\n", "research_agent = Agent(\n", " name=\"Financial Search Agent\",\n", " instructions=dedent(\n", " \"\"\"You are a research assistant specializing in financial topics. Given a stock ticker, use web search to retrieve up‑to‑date context and produce a short summary of at most 50 words. Focus on key numbers, events, or quotes that will be useful to a financial analyst.\"\"\"\n", " ),\n", " model=\"gpt-4.1\",\n", " tools=[WebSearchTool()],\n", " model_settings=ModelSettings(tool_choice=\"required\", parallel_tool_calls=True),\n", ")\n", "\n", "orchestrator_agent = Agent(\n", " name=\"Routing Agent\",\n", " instructions=dedent(\n", " \"\"\"You are a senior financial analyst. Your task is to handoff to the appropriate agent or tool.\"\"\"\n", " ),\n", " model=\"gpt-4.1\",\n", " handoffs=[\n", " research_agent,\n", " qa_agent,\n", " ],\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "input_items: list[TResponseInputItem] = []\n", "\n", "while True:\n", " user_input = input(\"Enter your question: \")\n", " if user_input == \"exit\":\n", " break\n", " input_item = {\"content\": user_input, \"role\": \"user\"}\n", " input_items.append(input_item)\n", " orchestrator = await Runner.run(orchestrator_agent, input_items)\n", " orchestrator_output = orchestrator.final_output\n", " pprint(orchestrator.last_agent)\n", " pprint(orchestrator_output)\n", " input_items = orchestrator.to_input_list()" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 0 }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arize-ai/phoenix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server