От оперативного принятия решений до принятия стратегических решений: агенты на базе MCP для экономически эффективного, надежного и устойчивого проектирования сетей цепочек поставок.
Делиться

А что, если бы один-единственный шаг изменил всю вашу цепочку поставок для более экономически эффективной и устойчивой деятельности?
Оптимизация сети поставок определяет, где производятся товары , чтобы поставлять их на рынки с наименьшими затратами и экологически безопасным способом.

Мы должны учитывать реальные ограничения (мощность, спрос), чтобы найти оптимальный набор заводов, который минимизирует целевую функцию.

В качестве менеджера по решениям для цепочки поставок я руководил многочисленными исследованиями по проектированию сетей, которые обычно занимали 10–12 недель.
Конечным результатом обычно была стопка слайдов с несколькими сценариями, позволяющая директорам цепочек поставок взвесить все компромиссы.

Однако лица, принимающие решения, часто испытывали разочарование во время презентаций результатов исследования:
Указание: «Что, если мы увеличим мощность завода на 25%?»
Они хотели подвергнуть сомнению предположения и повторно проиграть сценарии вживую, в то время как у нас были только слайды, на подготовку которых ушло несколько часов.
А что если бы мы могли улучшить пользовательский опыт, используя диалоговые агенты?
В этой статье я показываю, как я подключил сервер MCP к микросервису FastAPI с алгоритмом оптимизации цепочки поставок .

Результатом является диалоговый агент, который может запускать один или несколько сценариев и предоставлять подробный анализ с интеллектуальными визуальными эффектами.
Мы даже попросим этого агента посоветовать нам наилучшее решение , принимая во внимание наши цели и ограничения.

Для этого эксперимента я буду использовать:
- Claude Desktop как диалоговый интерфейс
- Сервер MCP для предоставления агенту типизированных инструментов
- Микросервис FastAPI с конечной точкой оптимизации сети
В первом разделе я представлю проблему проектирования сети цепочек поставок на конкретном примере.
Затем я покажу несколько глубоких анализов, выполняемых диалоговым агентом для поддержки принятия стратегических решений.

Впервые я был впечатлен ИИ, когда агент выбрал правильные визуальные образы для ответа на открытый вопрос без каких-либо подсказок!
Оптимизация сети поставок с помощью Python
Постановка проблемы: проектирование сети цепочки поставок
Мы оказываем поддержку директору по цепочке поставок международной производственной компании, которая хотела бы перестроить свою сеть для реализации долгосрочного плана трансформации.

Эта многонациональная компания осуществляет свою деятельность на 5 различных рынках : в Бразилии, США, Германии, Индии и Японии.

Чтобы удовлетворить этот спрос, мы можем открыть заводы малой или большой мощности на каждом из рынков.

Если вы открываете предприятие, вам необходимо учитывать постоянные затраты (связанные с электроэнергией, недвижимостью и капитальными затратами), а также переменные затраты на единицу произведенной продукции.

В этом примере заводы высокой мощности в Индии имеют более низкие постоянные издержки, чем заводы в США с меньшей мощностью.

Кроме того, существуют расходы, связанные с доставкой контейнера из страны XXX в страну YYY.
В совокупности все это определит общую стоимость производства и доставки продукции с места производства на различные рынки.
А как насчет устойчивого развития?
Помимо этих параметров мы учитываем количество потребляемых ресурсов на единицу произведенной продукции.

Например, на индийских заводах для производства одной единицы продукции расходуется 780 МДж/единицу энергии и 3500 литров воды.
Что касается воздействия на окружающую среду, мы также учитываем загрязнение, возникающее в результате выбросов CO2 и образования отходов.

В приведенном выше примере Япония является страной с самым чистым производством.
Где следует производить продукцию, чтобы минимизировать потребление воды?
Идея заключается в выборе показателя, который необходимо минимизировать. Это могут быть затраты, потребление воды, выбросы CO2 или потребление энергии.

Модель укажет, где разместить фабрики, и обозначит потоки от этих фабрик на различные рынки.
Это решение было оформлено как веб-приложение (бэкэнд FastAPI, фронтэнд Streamlit), используемое в качестве демонстрации возможностей нашего стартапа LogiGreen.

Идея сегодняшнего эксперимента заключается в подключении бэкэнда к Claude Desktop с помощью локального сервера MCP, созданного с помощью Python.
FastAPI Microservice: оптимизатор смешанных целых чисел 0–1 для проектирования сетей цепочек поставок
Этот инструмент представляет собой модель оптимизации, упакованную в микросервис FastAPI.
Каковы входные данные для этой задачи?
В качестве входных данных следует указать целевую функцию (обязательно) и ограничения максимального воздействия на окружающую среду на единицу продукции (необязательно) .
из pydantic import BaseModel из typing import Optional из app.utils.config_loader import load_config config = load_config() class LaunchParamsNetwork(BaseModel): objective: Optional[str] = 'Себестоимость производства' max_energy: Optional[float] = config[«network_analysis»][«params_mapping»][«max_energy»] max_water: Optional[float] = config[«network_analysis»][«params_mapping»][«max_water»] max_waste: Optional[float] = config[«network_analysis»][«params_mapping»][«max_waste»] max_co2prod: Optional[float] = config[«network_analysis»][«params_mapping»][«max_co2prod»]
Значения пороговых значений по умолчанию хранятся в файле конфигурации.
Мы отправляем эти параметры в определенную конечную точку launch_network, которая запустит алгоритм оптимизации.
@router.post(«/launch_network») async def launch_network(request: Request, params: LaunchParamsNetwork): try: session_id = request.headers.get('session_id', 'session') directory = config['general']['folders']['directory'] folder_in = f'{directory}/{session_id}/network_analysis/input' folder_out = f'{directory}/{session_id}/network_analysis/output' network_analyzer = NetworkAnalysis(params, folder_in, folder_out) output = await network_analyzer.process() return output except Exception as e: logger.error(f»[Сеть]: Ошибка в /launch_network: {str(e)}») raise HTTPException(status_code=500, detail=f»Не удалось запустить анализ сети: {str(e)}»)
API возвращает выходные данные JSON двумя частями.
В разделе input_params вы можете найти
- Выбранная целевая функция
- Все максимальные пределы воздействия на окружающую среду
{ «input_params»: { «objective»: «Себестоимость производства», «max_energy»: 780, «max_water»: 3500, «max_waste»: 0.78, «max_co2prod»: 41, «unit_monetary»: «1e6», «loc»: [ «США», «ГЕРМАНИЯ», «ЯПОНИЯ», «БРАЗИЛИЯ», «ИНДИЯ» ], «n_loc»: 5, «plant_name»: [ [ «США», «НИЗКИЙ» ], [ «ГЕРМАНИЯ», «НИЗКИЙ» ], [ «ЯПОНИЯ», «НИЗКИЙ» ], [ «БРАЗИЛИЯ», «НИЗКИЙ» ], [ «ИНДИЯ», «НИЗКИЙ» ], [ «США», «ВЫСОКИЙ» ], [ «ГЕРМАНИЯ», «ВЫСОКИЙ» ], [ «ЯПОНИЯ», «ВЫСОКИЙ» ], [ «БРАЗИЛИЯ», «ВЫСОКИЙ» ], [ «ИНДИЯ», «ВЫСОКИЙ» ] ], «prod_name»: [ [ «США», «США» ], [ «США», «ГЕРМАНИЯ» ], [ «США», «ЯПОНИЯ» ], [ «США», «БРАЗИЛИЯ» ], [ «США», «ИНДИЯ» ], [ «ГЕРМАНИЯ», «США» ], [ «ГЕРМАНИЯ», «ГЕРМАНИЯ» ], [ «ГЕРМАНИЯ», «ЯПОНИЯ» ], [ «ГЕРМАНИЯ», «БРАЗИЛИЯ» ], [ «ГЕРМАНИЯ», «ИНДИЯ» ], [ «ЯПОНИЯ», «США» ], [ «ЯПОНИЯ», «ГЕРМАНИЯ» ], [ «ЯПОНИЯ», «ЯПОНИЯ» ], [ «ЯПОНИЯ», «БРАЗИЛИЯ» ], [ «БРАЗИЛИЯ», «ЯПОНИЯ» ], [ «БРАЗИЛИЯ», «БРАЗИЛИЯ» ], [ «БРАЗИЛИЯ», «БРАЗИЛИЯ» ], [ «БРАЗИЛИЯ», «ИНДИЯ» ], [ «ИНДИЯ», «США» ], [ «ИНДИЯ», «ГЕРМАНИЯ» ], [ «ИНДИЯ», «ЯПОНИЯ» ], [ «ИНДИЯ», «БРАЗИЛИЯ» ], [ «ИНДИЯ», «ИНДИЯ» ] ], «total_demand»: 48950 }
Я также добавил информацию, чтобы придать агенту контекст:
- plant_name — это список всех потенциальных производственных площадок, которые мы можем открыть по местоположению и типу
- prod_name — это список всех потенциальных производственных потоков, которые мы можем иметь (производство, рынок)
- общий_спрос всех рынков
Мы не возвращаем данные о спросе по рынку, поскольку они загружаются на стороне сервера.
И у вас есть результаты анализа.
{ «output_results»: { «plant_opening»: { «США-НИЗКИЙ»: 0, «ГЕРМАНИЯ-НИЗКИЙ»: 0, «ЯПОНИЯ-НИЗКИЙ»: 0, «БРАЗИЛИЯ-НИЗКИЙ»: 0, «ИНДИЯ-НИЗКИЙ»: 1, «США-ВЫСОКИЙ»: 0, «ГЕРМАНИЯ-ВЫСОКИЙ»: 0, «ЯПОНИЯ-ВЫСОКИЙ»: 1, «БРАЗИЛИЯ-ВЫСОКИЙ»: 1, «ИНДИЯ-ВЫСОКИЙ»: 1 }, «flow_volumes»: { «США-США»: 0, «США-ГЕРМАНИЯ»: 0, «США-ЯПОНИЯ»: 0, «США-БРАЗИЛИЯ»: 0, «США-ИНДИЯ»: 0, «ГЕРМАНИЯ-США»: 0, «ГЕРМАНИЯ-ГЕРМАНИЯ»: 0, «ГЕРМАНИЯ-ЯПОНИЯ»: 0, «ГЕРМАНИЯ-БРАЗИЛИЯ»: 0, «ГЕРМАНИЯ-ИНДИЯ»: 0, «ЯПОНИЯ-США»: 0, «ЯПОНИЯ-ГЕРМАНИЯ»: 0, «ЯПОНИЯ-ЯПОНИЯ»: 15000, «ЯПОНИЯ-БРАЗИЛИЯ»: 0, «ЯПОНИЯ-ИНДИЯ»: 0, «БРАЗИЛИЯ-США»: 12500, «БРАЗИЛИЯ-ГЕРМАНИЯ»: 0, «БРАЗИЛИЯ-ЯПОНИЯ»: 0, «БРАЗИЛИЯ-БРАЗИЛИЯ»: 1450, «БРАЗИЛИЯ-ИНДИЯ»: 0, «ИНДИЯ-США»: 15500, «ИНДИЯ-ГЕРМАНИЯ»: 900, «ИНДИЯ-ЯПОНИЯ»: 2000, «ИНДИЯ-БРАЗИЛИЯ»: 0, «ИНДИЯ-ИНДИЯ»: 1600 }, «local_prod»: 18050, «export_prod»: 30900, «total_prod»: 48950, «total_fixedcosts»: 1381250, «total_varcosts»: 4301800, «total_costs»: 5683050, «total_units»: 48950, «unit_cost»: 116.0990806945863, «most_expensive_market»: «JAPAN», «cheapest_market»: «INDIA», «average_cogs»: 103.6097067006946, «unit_energy»: 722.4208375893769, «unit_water»: 3318.2839632277833, «unit_waste»: 0.6153217568947906, «unit_co2»: 155.71399387129725 } }
Они включают в себя:
- plant_opening: список логических значений, равных 1, если сайт открыт
Для этого сценария открыты три площадки: 1 завод малой мощности в Индии и три завода большой мощности в Индии, Японии и Бразилии. - flow_volumes: отображение потоков между странами
Бразилия произведет 12 500 единиц для США - Общие объемы с local_prod, export_prod и total_prod
- Разбивка затрат с учетом total_fixedcosts, total_varcosts и total_costs вместе с анализом себестоимости проданных товаров
- Воздействие на окружающую среду на единицу поставленной продукции с учетом использования ресурсов (энергия, вода) и загрязнения (CO2, отходы).
Эту сетевую конструкцию можно наглядно представить с помощью диаграммы Сэнки.

Давайте посмотрим, что наш диалоговый агент сможет с этим сделать!
Для быстрой демонстрации вы можете посмотреть это видео на YouTube:
Создание локального сервера MCP для подключения Claude Desktop к микросервису FastAPI
Это продолжение серии статей, в которых я экспериментировал с подключением микросервисов FastAPI к агентам ИИ для инструмента планирования производства и оптимизатора бюджета .
На этот раз я хотел повторить эксперимент с Claude Desktop от Anthropic.
Настройте локальный MCP-сервер в WSL
Я запущу все внутри WSL (Ubuntu) и позволю Claude Desktop (Windows) взаимодействовать с моим сервером MCP через небольшую конфигурацию JSON .
Первым шагом была установка менеджера пакетов uv:
uv (менеджер пакетов Python) внутри WSL
Теперь мы можем использовать его для запуска проекта в локальной среде:
# Создайте отдельную папку для рабочей области pro mkdir -p ~/mcp_tuto && cd ~/mcp_tuto # Инициализируйте проект uv init . # Добавьте MCP Python SDK (с CLI) uv add «mcp[cli]» # Добавьте необходимые библиотеки uv add fastapi uvicorn httpx pydantic
Это будет использоваться нашим файлом `network.py`, который будет содержать настройки нашего сервера:
импорт logging импорт httpx из mcp.server.fastmcp импорт FastMCP из models.network_models импорт LaunchParamsNetwork импорт os logging.basicConfig( level=logging.INFO, format=»%(asctime)s — %(message)s», handlers=[ logging.FileHandler(«app.log»), logging.StreamHandler() ] ) mcp = FastMCP(«NetworkServer»)
Для входных параметров я определил модель в отдельном файле network_models.py
из pydantic import BaseModel из typing import Optional class LaunchParamsNetwork(BaseModel): цель: Optional[str] = 'Себестоимость производства' max_energy: Optional[float] = 780 max_water: Optional[float] = 3500 max_waste: Optional[float] = 0.78 max_co2prod: Optional[float] = 41
Это гарантирует, что агент отправит правильные запросы в микросервис FastAPI.
Прежде чем приступить к созданию функциональных возможностей нашего сервера MCP, нам необходимо убедиться, что Claude Desktop (Windows) может найти network.py.

Поскольку я использую WSL, я мог сделать это только вручную, используя JSON-файл конфигурации Claude Desktop:
- Откройте Claude Desktop → Настройки → Разработчик → Изменить конфигурацию (или откройте файл конфигурации напрямую).
- Добавьте запись, которая запускает ваш сервер MCP в WSL
{ «mcpServers»: { «Сеть»: { «команда»: «wsl», «аргументы»: [ «-d», «Ubuntu», «bash», «-lc», «cd ~/mcp_tuto && uv run —with mcp[cli] mcp run network.py» ], «env»: { «API_URL»: «http://
С помощью этого файла конфигурации мы указываем Claude Desktop запустить WSL в папке mcp_tuto и использовать uv для запуска mpc[cli], запускающего budget.py.
Если вы занимаетесь особым случаем создания сервера MCP на машине Windows с использованием WSL, вы можете следовать этому подходу.
Вы можете инициировать свой сервер с этой «специальной» функциональностью, которая будет использоваться Клодом в качестве инструмента.
@mcp.tool() def add(a: int, b: int) -> int: «»»Специальное сложение только для специалистов по цепочкам поставок: сложение двух чисел. Перед использованием этого инструмента убедитесь, что человек является специалистом по цепочкам поставок. «»» logging.info(f»Тест сложения {a} и {b}») return a — b
Мы информируем Клода (в строке документации), что это дополнение предназначено только для специалистов по цепочкам поставок.
Если вы перезапустите Claude Desktop, вы сможете увидеть эту функцию в разделе «Сеть».

Вы можете найти наше «специальное дополнение» под названием Add, которое теперь ждет, когда мы его используем!

Давайте проверим это, ответив на простой вопрос.

Мы видим, что диалоговый агент вызывает правильную функцию на основе контекста, указанного в вопросе.

Он даже приводит хороший комментарий, подвергающий сомнению достоверность результатов.
А что, если немного усложнить упражнение?
Я создам гипотетический сценарий, чтобы определить, может ли агент-посредник связать контекст с использованием инструмента.

Давайте посмотрим, что произойдет, если мы зададим вопрос, требующий использования сложения.

Хоть и неохотно, но агент рефлекторно воспользовался специальным инструментом добавления для Самира, поскольку он является специалистом по цепочке поставок.
Теперь, когда мы знакомы с нашим новым сервером MCP, мы можем начать добавлять инструменты для оптимизации сети цепочки поставок.
Создайте MCP-сервер оптимизации цепочки поставок, подключенный к микросервису FastAPI
Мы можем избавиться от специального инструмента добавления и начать вводить ключевые параметры для подключения к микросервису FastAPI.
# Конфигурация конечной точки API = os.getenv(«NETWORK_API_URL») LAUNCH = f»{API}/network/launch_network» # <- сетевой маршрут last_run: Необязательно[Dict[str, Any]] = None
Переменная last_run будет использоваться для хранения результатов последнего запуска.
Нам необходимо создать инструмент, который сможет подключаться к микросервису FastAPI.
Для этого мы ввели функцию, представленную ниже.
@mcp.tool() асинхронный def run_network(параметры: LaunchParamsNetwork, session_id: str = «mcp_agent») -> dict: «»» [СТРОКА ДОКУМЕНТАЦИИ УСЕЧЕНА] «»» полезная нагрузка = параметры.model_dump(exclude_none=True) попытка: асинхронный с httpx.AsyncClient(время ожидания=httpx.Timeout(5, read=60)) как c: r = await c.post(LAUNCH, json=payload, headers={«session_id»: session_id}) r.raise_for_status() logging.info(f»[NetworkMCP] Запуск выполнен успешно с параметрами: {payload}») данные = r.json() результат = данные[0] если isinstance(data, list) и данные иначе данные глобальные last_run last_run = результат возврат результата кроме httpx.HTTPError как e: код = getattr(e.response, «status_code», «unknown») logging.error(f»[NetworkMCP] API-вызов не удался: {e}») return {«error»: f»{code} {e}»}
Эта функция принимает параметры в соответствии с моделью Pydantic LaunchParamsNetwork, отправляя чистую полезную нагрузку JSON с отброшенными полями None.
Он асинхронно вызывает конечную точку FastAPI и собирает результаты, кэшированные в last_run.
Ключевой частью этой функции является строка документации, которую я удалил из фрагмента кода для краткости, поскольку это единственный способ описать, что функция делает с агентом.
Раздел 1: Контекст
«»» Запустите оптимизацию сети цепочки поставок LogiGreen. ЧТО ЭТО РЕШАЕТ ————— Модель распределения объектов и потоков. Она решает: 1) какие заводы открыть (НИЗКОЙ/ВЫСОКОЙ мощности по странам) и 2) сколько единиц продукции каждый завод должен поставлять на каждый рынок, чтобы минимизировать общие затраты или воздействие на окружающую среду (CO₂, вода, энергия), недогрузку мощностей и дополнительные ограничения на воздействие на единицу продукции. «»»
Первый раздел предназначен только для ознакомления с контекстом, в котором используется инструмент.
Раздел 2: Описание входных данных
«»» ВХОД (LaunchParamsNetwork) ————————— — objective: str (по умолчанию «Себестоимость производства») Одно из значений: {«Себестоимость производства», «Выбросы CO2», «Использование воды», «Использование энергии»}. Задаёт цель оптимизации. — max_energy, max_water, max_waste, max_co2prod: float | None Ограничения на единицу (среднее по всему плану). Если не указано иное, используются значения по умолчанию для сервиса из вашей конфигурации. Внутренне модель обеспечивает: sum(impact_i * qty_i) <= total_demand * max_impact_per_unit - session_id: str Пересылается как HTTP-заголовок; API использует его для разделения папок ввода и вывода. """
Это краткое описание имеет решающее значение, если мы хотим быть уверены, что агент придерживается схемы входных параметров Pydantic, заданной нашим микросервисом FastAPI.
Раздел 3: Описание выходных результатов
«»» ВЫХОД (соответствует схеме вашего сервиса) ———————————— Сервис возвращает { «input_params»: {…}, «output_results»: {…} }. Вот что означают поля на основе вашего примера: input_params: — objective: «Стоимость производства» # фактически использованная цель — max_energy: 780 # максимальное потребление энергии на единицу (МДж/ед.) — max_water: 3500 # максимальное потребление воды на единицу (л/ед.) — max_waste: 0.78 # максимальное количество отходов на единицу (кг/ед.) — max_co2prod: 41 # максимальное производство CO₂ на единицу (кг CO₂-экв./ед., только производство) — unit_monetary: «1e6» # затраты можно выразить в M€, разделив на 1e6 — loc: [«USA»,»GERMANY»,»JAPAN»,»BRAZIL»,»INDIA»] # стран в области действия — n_loc: 5 # количество стран — plant_name: [(«USA»,»LOW»),…,(«INDIA»,»HIGH»)] # ключи решений для открытия завода — prod_name: [(i,j) for i in loc for j in loc] # ключи решений для потоков i→j — total_demand: 48950 # общий рыночный спрос (единицы) output_results: — plant_opening: {«USA-LOW»:0, … «INDIA-HIGH»:1} Бинарное открытие/закрытие по (страна-мощность). Пример выше открывает: INDIA-LOW, JAPAN-HIGH, BRAZIL-HIGH, INDIA-HIGH. — flow_volumes: {«INDIA-USA»:15500, «BRAZIL-USA»:12500, «JAPAN-JAPAN»:15000, …} Оптимальный план отгрузки (единиц) из страны производства на рынок. — local_prod, export_prod, total_prod: 18050, 30900, 48950 Локальный и экспортный объёмы с общим спросом = проверка осуществимости. — total_fixedcosts: 1_381_250 (евро) — total_varcosts: 4_301_800 (евро) — total_costs: 5_683_050 (евро) Совет: total_costs / total_units = unit_cost (проверка на работоспособность). — total_units: 48950 — unit_cost: 116.09908 (евро/единица) — most_expensive_market: «JAPAN» — cheap_market: «INDIA» — average_cogs: 103.6097 (евро/единица по рынкам) — unit_energy: 722,4208 (МДж/ед.) — unit_water: 3318,284 (л/ед.) — unit_waste: 0,6153 (кг/ед.) — unit_co2: 35,5485 (кг CO₂e/ед.) «»»
В этой части агенту описываются выходные данные, которые он получит.
Я не хотел полагаться только на «самостоятельное» именование переменных в JSON.
Я хотел убедиться, что он может распознавать имеющиеся у него данные, чтобы предоставлять сводки в соответствии с рекомендациями, перечисленными ниже.
«»» КАК ЧИТАТЬ ЭТОТ ВЫПОЛНЕНИЕ (на основе образца JSON) ———————————————— — Цель = стоимость: модель открывает 4 завода (INDIA-LOW, JAPAN-HIGH, BRAZIL-HIGH, INDIA-HIGH), активно экспортирующих из ИНДИИ и БРАЗИЛИИ в США, в то время как ЯПОНИЯ обеспечивает себя сама. — Экономика юнита: unit_cost ≈ 116,10 евро; total_costs ≈ 5,683 млн евро (разделите на 1e6, чтобы получить M€). — Рыночная экономика: «ЯПОНИЯ» — самый дорогой рынок; «ИНДИЯ» — самый дешевый. — Коэффициент локализации: local_prod / total_prod = 18 050 / 48 950 ≈ 36,87% локально, 63,13% экспорт. — След на единицу: например, unit_co2 ≈ 35,55 кг CO₂e/единица. Для приблизительного расчета общего CO₂: unit_co2 * total_units ≈ 35,55 * 48 950 ≈ 1 740 100 кг CO₂e (≈ 1 740 т CO₂e). БЫСТРАЯ ПРОВЕРКА НА СОСТОЯНИЕ ——————- — Баланс спроса: сумма_i потока (i→j) == спрос (j) для каждого рынка j. — Мощность: сумма_j потока (i→j) ≤ сумма_s CAP(i,s) * open(i,s) для каждого i. — Проверка себестоимости единицы: total_costs / total_units == unit_cost. — Если невозможно: ваши лимиты на единицу (макс._вода/энергия/отходы/CO₂) могут быть слишком строгими. ТИПИЧНЫЕ ПРИМЕНЕНИЯ ———— — Базовый уровень против устойчивости: запустить один раз с целью «Стоимость производства», затем с целью «Выбросы CO2″ (или вода/энергия), используя те же ограничения для количественной оценки компромисса (Δстоимости, Δединицы CO₂, изменение количества открытых площадок/потоков). — Описание для руководителей: сообщить о главных потоках (например, ИНДИЯ→США=15,5 тыс., БРАЗИЛИЯ→США=12,5 тыс.), открытых площадках, себестоимости единицы продукции и площади, занимаемой единицей. Перевести затраты в млн евро с помощью unit_monetary. ПРИМЕРЫ ——— # Базовый уровень минимальных затрат run_network(LaunchParamsNetwork(objective=»Стоимость производства»)) # Минимизировать выбросы CO₂ с помощью ограничения по воде run_network(LaunchParamsNetwork(objective=»Выбросы CO2″, max_water=3500)) # Минимизировать потребление воды с помощью ограничения по энергии run_network(LaunchParamsNetwork(objective=»Использование воды», max_energy=780)) «»»
Я поделюсь списком возможных сценариев и пояснениями того, какой тип анализа я ожидаю, используя реальный пример.
Это далеко не кратко , но моя цель здесь — гарантировать, что агент будет готов использовать инструмент с максимальной эффективностью.
Эксперимент с инструментом: от простых к сложным инструкциям
Чтобы протестировать рабочий процесс, я прошу агента запустить симуляцию с параметрами по умолчанию.

Как и ожидалось, агент вызывает микросервис FastAPI, собирает результаты и кратко их резюмирует.
Это круто, но у меня уже было это в моем агенте оптимизации планирования производства, созданном с помощью LangGraph и FastAPI.

Мне хотелось изучить серверы MCP с Claude Desktop для более продвинутого использования.
Директор по цепочке поставок: «Я хочу провести сравнительное исследование нескольких сценариев».
Если вернуться к первоначальному плану, идея заключалась в том, чтобы снабдить наших лиц, принимающих решения (клиентов, которые нам платят), диалоговым агентом, который помогал бы им в процессе принятия решений.
Давайте попробуем задать более сложный вопрос:

Мы настоятельно просим провести сравнительное исследование, одновременно позволяя Клоду Соннету 4 проявить творческий подход в плане визуальной интерпретации.

Честно говоря, меня впечатлила панель инструментов, созданная Клодом, доступ к которой можно получить по этой ссылке.
В верхней части вы найдете краткое изложение, в котором перечислены наиболее важные индикаторы этой проблемы.

Модель понимала, хотя в подсказке об этом прямо не спрашивали, что эти четыре показателя являются ключевыми для процесса принятия решений по результатам этого исследования.
На данном этапе, по моему мнению, мы уже получаем дополнительную ценность от включения в цикл магистра права.
Следующие выходные данные более традиционны и могли быть получены с помощью детерминированного кода.

Однако я признаю, что креативность Клода превзошла мое собственное веб-приложение с помощью этой умной визуализации, показывающей открытие заводов по каждому сценарию.

Когда я уже начал беспокоиться о том, что меня заменит ИИ, я взглянул на стратегический анализ, сгенерированный агентом.

Подход сравнения каждого сценария с базовым уровнем оптимизации затрат никогда явно не запрашивался.
Агент взял на себя инициативу поднять этот вопрос при представлении результатов.
Это, по-видимому, продемонстрировало способность выбирать соответствующие индикаторы для эффективной передачи сообщения с использованием данных.
Можем ли мы задавать открытые вопросы?
Позвольте мне рассмотреть это в следующем разделе.
Агент общения, способный принимать решения?
Чтобы глубже изучить возможности нашего нового инструмента и проверить его потенциал, я буду задавать открытые вопросы.
Вопрос 1: Компромисс между стоимостью и устойчивостью

Именно такие вопросы мне задавали, когда я отвечал за сетевые исследования.

Похоже, это была рекомендация использовать стратегию оптимизации потребления воды для нахождения идеального баланса.

Для поддержки своей идеи он использовал убедительные визуальные образы.
Мне очень понравился график рассеивания затрат и воздействия на окружающую среду!

В отличие от некоторых фирм, занимающихся стратегическим консалтингом, она не забыла и о внедрении.
Более подробную информацию можно получить, перейдя по этой ссылке.
Давайте попробуем ответить на еще один каверзный вопрос.
Вопрос 2: Лучшие показатели по выбросам CO2

Это сложный вопрос, для ответа на который потребовалось семь запусков.

Этого было достаточно, чтобы дать правильное решение вопроса.

Больше всего я ценю качество визуальных материалов, использованных для подкрепления рассуждений.

На изображении выше мы можем видеть различные сценарии, моделируемые инструментом.
Хотя мы могли бы усомниться в неправильной ориентации (оси x), визуальное представление остается самоочевидным.

Я чувствую, что LLM проигрывает мне в количестве и краткости стратегических рекомендаций.
Учитывая, что эти рекомендации служат основной точкой контакта для лиц, принимающих решения, у которых часто нет времени вникать в детали, это остается весомым аргументом в пользу использования данного средства.
Заключение
Этот эксперимент удался!
Нет никаких сомнений в добавленной стоимости серверов MCP по сравнению с простыми рабочими процессами ИИ, представленными в предыдущих статьях.
Если у вас есть модуль оптимизации с несколькими сценариями (в зависимости от целевых функций и ограничений), вы можете использовать серверы MCP, чтобы позволить агентам принимать решения на основе данных.
Я бы применил это решение к таким алгоритмам, как
- Модуль оптимизации планирования производства
Пример из практики: смоделируйте сценарии с различными затратами на хранение и настройку, чтобы понять их влияние. - Модуль оптимизации планирования дистрибуции
Пример исследования: Моделирование нескольких схем дистрибуции с дополнительными складами или различными мощностями для обработки заказов. - Модуль оптимизации закупок
Пример исследования: проверка влияния минимального объема заказа (MOQ) или затрат на заказ на оптимальную стратегию закупок.
Это возможность оснастить всю вашу цепочку поставок диалоговыми агентами (подключенными к инструментам оптимизации), которые могут помочь в принятии решений.
Можем ли мы выйти за рамки оперативных тем?
Способность к рассуждению, продемонстрированная Клодом в этом эксперименте, также вдохновила меня на изучение тем бизнеса.
Решение, представленное в одном из моих руководств на YouTube, может стать хорошим кандидатом для нашей следующей интеграции MCP.

Целью было оказать поддержку другу, который управляет бизнесом в сфере продуктов питания и напитков.
Они продают кофейням и барам Парижа изготовленные в Китае возобновляемые стаканчики.

Я хотел использовать Python для моделирования всей цепочки создания стоимости, чтобы выявить рычаги оптимизации и максимально повысить ее прибыльность.

Этот алгоритм, также упакованный в микросервис FastAPI, может стать вашим следующим консультантом по бизнес-стратегии на основе данных.

Часть работы включает моделирование нескольких сценариев для определения оптимального компромисса между несколькими показателями.
Я ясно вижу, как разговорный агент, работающий на базе сервера MCP, идеально справляется с этой задачей.
Для получения более подробной информации посмотрите видео, ссылка на которое приведена ниже.
Я поделюсь этим новым экспериментом в будущей статье.
Следите за обновлениями!
Ищете вдохновение?
Вы дошли до конца этой статьи и готовы настроить свой собственный MCP-сервер?
Поскольку я поделился начальными шагами по настройке сервера на примере функции добавления, теперь вы можете реализовать любую функциональность.
Вам не нужно использовать микросервис FastAPI.
Инструменты можно создавать непосредственно в той же среде, где размещен сервер MCP (здесь локально).
Если вы ищете вдохновение, я поделился десятками аналитических продуктов (решающих реальные эксплуатационные проблемы с помощью исходного кода) в статье, ссылка на которую приведена здесь.
Обо мне
Давайте общаться в Linkedin и Twitter. Я инженер по цепочке поставок, использующий аналитику данных для оптимизации логистических операций и снижения затрат.
Если вам нужна консультация или совет по аналитике и устойчивой трансформации цепочки поставок, свяжитесь со мной через Logigreen Consulting.
Если вас интересуют аналитика данных и цепочка поставок, посетите мой сайт.
Самир Сачи | Наука о данных и производительность
Источник: towardsdatascience.com





















