Как использовать MCP с API OpenAI с помощью Dolphin-MCP

💡Интересуетесь последними трендами в ИИ? Тогда вы не можете пропустить Anakin AI! Anakin AI — это универсальная платформа для автоматизации рабочих процессов, создание мощных ИИ приложений с помощью простого в использовании конструктора приложений без кода, с Deepseek, o3-mini-high от OpenAI, Claude 3.7 Sonnet, FLUX, Minimax Video, Hunyuan... Создавайте приложение своей

Build APIs Faster & Together in Apidog

Как использовать MCP с API OpenAI с помощью Dolphin-MCP

Start for free
Inhalte
💡
Интересуетесь последними трендами в ИИ?

Тогда вы не можете пропустить Anakin AI!

Anakin AI — это универсальная платформа для автоматизации рабочих процессов, создание мощных ИИ приложений с помощью простого в использовании конструктора приложений без кода, с Deepseek, o3-mini-high от OpenAI, Claude 3.7 Sonnet, FLUX, Minimax Video, Hunyuan...

Создавайте приложение своей мечты всего за несколько минут, а не за недели с Anakin AI!
Anakin AI: Ваша универсальная платформа ИИ
Anakin AI: Ваша универсальная платформа ИИ

Введение

Dolphin-MCP — это open-source реализация, которая расширяет протокол контекста модели (MCP) от Anthropic, чтобы работать с различными языковыми моделями помимо Claude. Этот технический гид проведёт вас через настройку и использование Dolphin-MCP, специально с API OpenAI, позволяя вам использовать модели GPT через архитектуру MCP.

Технический обзор

Dolphin-MCP служит переводным слоем между спецификацией MCP и различными API LLM. Для интеграции с OpenAI он:

  • Преобразует сообщения протокола MCP в форматы API OpenAI
  • Обрабатывает различия в отображении токенов между моделями
  • Управляет состоянием и историей разговоров
  • Предоставляет возможности выполнения инструментов независимо от модели

Предварительные условия

Перед началом убедитесь, что у вас есть:

  • Python 3.8+
  • pip (менеджер пакетов)
  • Ключ API OpenAI
  • Установленный Git
  • Базовое понимание LLM и концепций API

Шаги установки

# Клонируйте репозиторий Dolphin-MCP
git clone https://github.com/cognitivecomputations/dolphin-mcp.git
cd dolphin-mcp

# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate

# Установите зависимости
pip install -r requirements.txt

# Установите пакет в режиме разработки
pip install -e .

Конфигурация

1. Настройка переменных окружения

Создайте файл .env в корне вашего проекта:

OPENAI_API_KEY=sk-ваш-ключ-api-openai-здесь
MCP_MODEL=gpt-4-0125-preview
MCP_PROVIDER=openai

2. Создание файла конфигурации

Создайте файл config.json:

{
  "provider": "openai",
  "model_settings": {
    "model": "gpt-4-0125-preview",
    "temperature": 0.7,
    "max_tokens": 2048
  },
  "api_config": {
    "api_key": "sk-ваш-ключ-api-openai-здесь",
    "base_url": "https://api.openai.com/v1",
    "timeout": 120
  }
}

Основные примеры использования

Пример 1: Простой разговор

from dolphin_mcp import DolphinMCP

# Инициализация клиента
mcp_client = DolphinMCP.from_config("./config.json")

# Создание разговора
conversation = mcp_client.create_conversation()

# Добавление системного сообщения
conversation.add_system_message("Вы — полезный ИИ-ассистент, специализирующийся на программировании на Python.")

# Отправка пользовательского сообщения и получение ответа
response = conversation.add_user_message("Как реализовать бинарное дерево поиска в Python?")

# Вывод ответа
print(response.content)

Пример 2: Использование инструментов с OpenAI

from dolphin_mcp import DolphinMCP
from dolphin_mcp.tools import WebSearchTool, CodeExecutionTool

# Инициализация клиента с инструментами
mcp_client = DolphinMCP.from_config("./config.json")

# Регистрация инструментов
mcp_client.register_tool(WebSearchTool(api_key="ваш-ключ-api-поиска"))
mcp_client.register_tool(CodeExecutionTool())

# Создание разговора с включенными инструментами
conversation = mcp_client.create_conversation()

# Добавление системных инструкций для инструментов
conversation.add_system_message("""
Вы — ИИ-ассистент с доступом к следующим инструментам:
- web_search: Искать в интернете актуальную информацию
- code_execution: Безопасное выполнение кода на Python в песочнице

Используйте эти инструменты по мере необходимости для предоставления точных и полезных ответов.
""")

# Запрос пользователя, требующий использования инструментов
response = conversation.add_user_message(
    "Какова текущая погода в Нью-Йорке? Можете также показать, как вычислить факториал числа на Python?"
)

# Ответ будет автоматически включать использование инструментов
print(response.content)
print("\nИспользование инструментов:")
for tool_name, tool_result in response.tool_results.items():
    print(f"{tool_name}: {tool_result}")

Расширенная конфигурация

Использование совместимых с OpenAI конечных точек

Если вы хотите использовать альтернативные совместимые с OpenAI конечные точки (например, Azure OpenAI или модели, размещенные на собственном сервере), измените вашу конфигурацию:

{
  "provider": "openai",
  "model_settings": {
    "model": "ваш-класс-модели",
    "temperature": 0.7,
    "max_tokens": 2048
  },
  "api_config": {
    "api_key": "ваш-ключ-api",
    "base_url": "https://ваш-кастомный-эндпоинт.com/v1",
    "api_version": "2023-07-01-preview",  // Для Azure
    "api_type": "azure"  // Для Azure
  }
}

Реализация пользовательских инструментов

Dolphin-MCP позволяет создавать пользовательские инструменты для моделей OpenAI. Вот как реализовать инструмент калькулятора:

from dolphin_mcp.tools import BaseTool
import math

class CalculatorTool(BaseTool):
    name = "calculator"
    description = "Выполняет математические расчёты"
    
    async def execute(self, expression: str):
        try:
            # Создайте безопасную среду с ограниченными математическими функциями
            safe_env = {
                "sqrt": math.sqrt,
                "sin": math.sin,
                "cos": math.cos,
                "tan": math.tan,
                "pi": math.pi,
                "e": math.e
            }
            
            # Оцените выражение в безопасной среде
            result = eval(expression, {"__builtins__": {}}, safe_env)
            return str(result)
        except Exception as e:
            return f"Ошибка при расчёте: {str(e)}"
    
    @property
    def parameters(self):
        return {
            "type": "object",
            "properties": {
                "expression": {
                    "type": "string",
                    "description": "Математическое выражение для оценки"
                }
            },
            "required": ["expression"]
        }

# Пример использования
mcp_client = DolphinMCP.from_config("./config.json")
mcp_client.register_tool(CalculatorTool())

Обработка потоковых ответов

Для приложений, требующих ответов в реальном времени:

async def stream_response():
    mcp_client = DolphinMCP.from_config("./config.json")
    conversation = mcp_client.create_conversation()
    
    # Настройте разговор
    conversation.add_system_message("Вы — полезный ИИ-ассистент.")
    
    # Потоковый ответ
    async for chunk in conversation.add_user_message_streaming(
        "Объясните квантовые вычисления простыми словами."
    ):
        if chunk.type == "content":
            print(chunk.content, end="", flush=True)
        elif chunk.type == "tool_start":
            print(f"\n[Начало использования инструмента: {chunk.tool_name}]")
        elif chunk.type == "tool_result":
            print(f"\n[Результат инструмента от {chunk.tool_name}]: {chunk.result}")
        elif chunk.type == "error":
            print(f"\nОшибка: {chunk.error}")
    
    print("\nОтвет завершён.")

# Запуск асинхронной функции
import asyncio
asyncio.run(stream_response())

Обработка ошибок

Реализуйте надежную обработку ошибок для управления проблемами API:

from dolphin_mcp.exceptions import MCPAPIError, MCPConfigError, MCPTimeoutError

try:
    mcp_client = DolphinMCP.from_config("./config.json")
    conversation = mcp_client.create_conversation()
    response = conversation.add_user_message("Сгенерировать сложный ответ")
    
except MCPTimeoutError:
    print("Запрос истек. Проверьте ваше сетевое соединение или увеличьте значение тайм-аута.")
    
except MCPAPIError as e:
    print(f"Ошибка API: {e.status_code} - {e.message}")
    if e.status_code == 429:
        print("Превышен лимит частоты. Реализуйте экспоненциальное ожидание.")
    
except MCPConfigError as e:
    print(f"Ошибка конфигурации: {e}")
    
except Exception as e:
    print(f"Неожиданная ошибка: {e}")

Оптимизация производительности

Для производственных сред рассмотрите эти оптимизации:

# Повторное использование сессий для пуллинга соединений
from dolphin_mcp import DolphinMCP
import aiohttp

async def optimized_mcp_usage():
    # Создайте общую сессию для пуллинга соединений
    async with aiohttp.ClientSession() as session:
        mcp_client = DolphinMCP.from_config(
            "./config.json",
            session=session,
            request_timeout=60,
            connection_pool_size=10
        )
        
        # Эффективная обработка нескольких разговоров
        tasks = []
        for i in range(5):
            conversation = mcp_client.create_conversation()
            conversation.add_system_message("Вы — полезный ассистент.")
            tasks.append(conversation.add_user_message_async(f"Вопрос {i}: Что такое машинное обучение?"))
        
        # Сбор всех ответов
        responses = await asyncio.gather(*tasks)
        
        for i, response in enumerate(responses):
            print(f"Ответ {i}: {response.content[:100]}...")

Интеграция с веб-приложениями

Пример интеграции с Flask:

from flask import Flask, request, jsonify
from dolphin_mcp import DolphinMCP

app = Flask(__name__)
mcp_client = DolphinMCP.from_config("./config.json")

@app.route("/chat", methods=["POST"])
def chat():
    data = request.json
    conversation_id = data.get("conversation_id")
    message = data.get("message")
    
    # Получить или создать разговор
    if conversation_id and conversation_id in active_conversations:
        conversation = active_conversations[conversation_id]
    else:
        conversation = mcp_client.create_conversation()
        conversation_id = conversation.id
        active_conversations[conversation_id] = conversation
        conversation.add_system_message("Вы — полезный ИИ-ассистент.")
    
    # Обработка сообщения
    response = conversation.add_user_message(message)
    
    return jsonify({
        "conversation_id": conversation_id,
        "response": response.content,
        "tool_results": response.tool_results
    })

if __name__ == "__main__":
    active_conversations = {}
    app.run(debug=True)

Устранение распространённых проблем

Проблема Решение
Ошибка "Неверный ключ API" Проверьте, правильный ли ваш ключ API OpenAI и достаточно ли у него разрешений
Лимит частоты Реализуйте экспоненциальное ожидание и ограничение запросов
Ошибки таймаута Увеличьте таймаут в конфигурации или проверьте сетевое соединение
Модель не найдена Убедитесь, что имя модели существует в доступных моделях OpenAI
Превышен лимит токенов Разделите запросы на более мелкие части или используйте потоковую передачу

Заключение

Dolphin-MCP предоставляет гибкий, open-source способ использования моделей OpenAI с протоколом MCP. Эта реализация освобождает разработчиков от привязки к конкретным поставщикам, сохраняя при этом единый интерфейс для различных поставщиков LLM. Следуя шагам, изложенным в этом руководстве, вы можете использовать мощь моделей GPT через стандартизированную архитектуру MCP.

philschmid.de демонстрирует аналогичные интеграции с другими LLM, и такие инструменты, как mcpadapt, могут помочь ещё больше расширить возможности Dolphin-MCP.