Пример демонстрирует работу агента с MCP-сервером (math_server.py
), который дает доступ к функциям сложения, умножения и поиска данных человека по имени.
Доступны два варианта агента:
agent.py
— реализует MCP-клиент для локального взаимодействия и не требует отдельного запуска MCP-сервера;agent_http.py
— реализует MCP-клиент для взаимодействия по HTTP. Для работы агента нужно запустить MCP-серввер в режиме SSE.
Агент разработан с помощью фреймворков LangChain и LangGraph, а также библиотеки langchain-mcp-adapters. Библиотека предоставляет обертку для функций, описанных в формате MCP, и позволяет использовать их совместно с LangChain и LangGraph.
В роли LLM агент использует модель GigaChat. Обмен сообщениями с моделью выполняется через GigaChat API.
Model Context Protocol (или MCP) — открытый протокол, который унифицирует обмен контекстом между приложением и LLM. Другими словами, использование MCP упрощает подключение больших языковых моделей к различным функциям (инструментам) и источникам данных.
Протокол предоставляет:
- растущий список готовых интеграций, доступных для подключения LLM;
- простоту переключения между различными моделями и их поставщиками;
- набор лучших практик для обеспечения безопасности данных внутри вашей инфраструктуры.
MCP разработан компанией Anthropic. Подробнее о протоколе — в официальной документации.
Установите зависимости:
pip install langchain-gigachat langchain_mcp_adapters langgraph rich
В папке примера создайте файл с переменными окружения .env
и добавьте в него переменную GIGACHAT_CREDENTIALS
:
GIGACHAT_CREDENTIALS=<ключ_авторизации>
О том как получить ключ авторизации — в официальной документации GigaChat.
Tip
Вы также можете указать другие переменные окружения, которые поддерживает Python-библиотека GigaChat.
Для запуска локального клиента выполните команду:
python agent.py
Для запуска HTTP-клиента:
-
Запустите MCP-сервер в режиме SSE с помощью команды:
python math_server.py sse
-
Запустите клиент с помощью команды:
python agent_http.py
Пример вывода агента:
[HumanMessage] Сколько будет (3 + 5) x 12?
[AIMessage] [{'name': 'add', 'args': {'a': 3, 'b': 5}, 'id': '99f7f6c7-baac-4e61-9577-03903e83f3a7', 'type': 'tool_call'}]
[ToolMessage] 8.0
[AIMessage] [{'name': 'multiply', 'args': {'a': 8, 'b': 12}, 'id': 'c923315e-0888-47c3-a380-2f91d95c3177', 'type': 'tool_call'}]
[ToolMessage] 96.0
[AIMessage] Результат выражения $(3+5)\times12$ равен $96$. []
[HumanMessage] Найди сколько лет Джону Доу?
[AIMessage] [{'name': 'find_preson', 'args': {'name': {'query': 'Джон Доу'}}, 'id': 'fa2ecddc-c446-477b-adc7-7d4f09281953', 'type': 'tool_call'}]
[ToolMessage] {"name": "John Doe", "age": 30}
[AIMessage] Джону Доу 30 лет. []