Image

Как подключить MCP-сервер для агента оптимизации цепочки поставок на базе искусственного интеллекта

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

Делиться

65c611daa57801d8663d3597555a2a90

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

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

1955fc59c957698049bcfa7e68726309

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

edd0b8560638792b3cf6b5505bc305dd

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

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

75cf5b8e4b830f92471df88f661bb5fa

Однако лица, принимающие решения, часто испытывали разочарование во время презентаций результатов исследования:

Указание: «Что, если мы увеличим мощность завода на 25%?»

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

А что если бы мы могли улучшить пользовательский опыт, используя диалоговые агенты?

В этой статье я показываю, как я подключил сервер MCP к микросервису FastAPI с алгоритмом оптимизации цепочки поставок .

6df2603c72b77545ab72a13c3d1736ea

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

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

5cd0359012d6c05bb26147045e57b44f

Для этого эксперимента я буду использовать:

  • Claude Desktop как диалоговый интерфейс
  • Сервер MCP для предоставления агенту типизированных инструментов
  • Микросервис FastAPI с конечной точкой оптимизации сети

В первом разделе я представлю проблему проектирования сети цепочек поставок на конкретном примере.

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

1b4803d8c03fe7ed61de819a3118abc2

Впервые я был впечатлен ИИ, когда агент выбрал правильные визуальные образы для ответа на открытый вопрос без каких-либо подсказок!

Оптимизация сети поставок с помощью Python

Постановка проблемы: проектирование сети цепочки поставок

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

a79c9841cde527d4f105f921c6fcd0ea

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

f5ff09df30af09ef7009093c3d6bc4ac

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

ea63bec9f584b0f24abe39d04158393c

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

d7fe52fb05651178ff149874b24acfd9

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

39fcf25ae75f149a25f5d5ed5fdd3bf9

Кроме того, существуют расходы, связанные с доставкой контейнера из страны XXX в страну YYY.

В совокупности все это определит общую стоимость производства и доставки продукции с места производства на различные рынки.

А как насчет устойчивого развития?

Помимо этих параметров мы учитываем количество потребляемых ресурсов на единицу произведенной продукции.

30b0d03da67e903556a631b4207c70f1

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

Что касается воздействия на окружающую среду, мы также учитываем загрязнение, возникающее в результате выбросов CO2 и образования отходов.

7454a5d40d23466373e6da982299bd06

В приведенном выше примере Япония является страной с самым чистым производством.

Где следует производить продукцию, чтобы минимизировать потребление воды?

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

f4a32c5d49eabab722951826aba1a1fd

Модель укажет, где разместить фабрики, и обозначит потоки от этих фабрик на различные рынки.

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

92dae58553241b6f2c96264fa076f67e

Идея сегодняшнего эксперимента заключается в подключении бэкэнда к 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, отходы).

Эту сетевую конструкцию можно наглядно представить с помощью диаграммы Сэнки.

ef262630bf452d6bac024810746ed0d8

Давайте посмотрим, что наш диалоговый агент сможет с этим сделать!

Для быстрой демонстрации вы можете посмотреть это видео на 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.

9e81ab41144e92bfddbd950af315b14b

Поскольку я использую WSL, я мог сделать это только вручную, используя JSON-файл конфигурации Claude Desktop:

  1. Откройте Claude Desktop → Настройки → Разработчик → Изменить конфигурацию (или откройте файл конфигурации напрямую).
  2. Добавьте запись, которая запускает ваш сервер 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, вы сможете увидеть эту функцию в разделе «Сеть».

b4060c8c7ab83bbacf538c901be41d12

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

8799866264be3727d845bce3f5356dc4

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

a7f40e626341886b5379796a4b1e4834

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

36285993a258886de2e095f623a4e22c

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

А что, если немного усложнить упражнение?

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

0c7efb3c3ba7c1cb9aa9b86e12d4d01f

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

328fb58bd041d7347914abad1385257b

Хоть и неохотно, но агент рефлекторно воспользовался специальным инструментом добавления для Самира, поскольку он является специалистом по цепочке поставок.

Теперь, когда мы знакомы с нашим новым сервером 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)) «»»

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

Это далеко не кратко , но моя цель здесь — гарантировать, что агент будет готов использовать инструмент с максимальной эффективностью.

Эксперимент с инструментом: от простых к сложным инструкциям

Чтобы протестировать рабочий процесс, я прошу агента запустить симуляцию с параметрами по умолчанию.

59cf9e8048237b93429a4480c354496c

Как и ожидалось, агент вызывает микросервис FastAPI, собирает результаты и кратко их резюмирует.

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

6001e40616f4d14842d7bba657c9cc8c

Мне хотелось изучить серверы MCP с Claude Desktop для более продвинутого использования.

Директор по цепочке поставок: «Я хочу провести сравнительное исследование нескольких сценариев».

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

Давайте попробуем задать более сложный вопрос:

860c98678ff3c3ea34910cbffdc8a753

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

f76fffd81a8f5975bae7ec6ca1ba722a

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

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

8564caa57c14b4e9b70ac5defdf1bf3a

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

На данном этапе, по моему мнению, мы уже получаем дополнительную ценность от включения в цикл магистра права.

Следующие выходные данные более традиционны и могли быть получены с помощью детерминированного кода.

db7481aaf84eefda7752104df0118a47

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

887123e1ad97ba9f0abea507f31ff589

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

ec7be2621a3df2d1d5250009ba03dbec

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

Агент взял на себя инициативу поднять этот вопрос при представлении результатов.

Это, по-видимому, продемонстрировало способность выбирать соответствующие индикаторы для эффективной передачи сообщения с использованием данных.

Можем ли мы задавать открытые вопросы?

Позвольте мне рассмотреть это в следующем разделе.

Агент общения, способный принимать решения?

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

Вопрос 1: Компромисс между стоимостью и устойчивостью

c3e261a152091791781f458880f46559

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

8c82d7db970dbb0373ed49ba65973830

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

439dc9f21603029bb8a31faff01c41b3

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

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

a5be0d8590dc7b93b897ec01794955cf

В отличие от некоторых фирм, занимающихся стратегическим консалтингом, она не забыла и о внедрении.

Более подробную информацию можно получить, перейдя по этой ссылке.

Давайте попробуем ответить на еще один каверзный вопрос.

Вопрос 2: Лучшие показатели по выбросам CO2

4fe95f1a2a87d589b6b5d0ebff5b5267

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

201a8ce8614cd864cfcabe2794d83f81

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

bef6ea3d22d4ff4c452b98dbce03fba6

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

710c49e8fabd45da93b40e589f941a46

На изображении выше мы можем видеть различные сценарии, моделируемые инструментом.

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

55ee0cbc83aabc6752c6fd88481ef64c

Я чувствую, что LLM проигрывает мне в количестве и краткости стратегических рекомендаций.

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

Заключение

Этот эксперимент удался!

Нет никаких сомнений в добавленной стоимости серверов MCP по сравнению с простыми рабочими процессами ИИ, представленными в предыдущих статьях.

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

Я бы применил это решение к таким алгоритмам, как

  • Модуль оптимизации планирования производства
    Пример из практики: смоделируйте сценарии с различными затратами на хранение и настройку, чтобы понять их влияние.
  • Модуль оптимизации планирования дистрибуции
    Пример исследования: Моделирование нескольких схем дистрибуции с дополнительными складами или различными мощностями для обработки заказов.
  • Модуль оптимизации закупок
    Пример исследования: проверка влияния минимального объема заказа (MOQ) или затрат на заказ на оптимальную стратегию закупок.

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

Можем ли мы выйти за рамки оперативных тем?

Способность к рассуждению, продемонстрированная Клодом в этом эксперименте, также вдохновила меня на изучение тем бизнеса.

Решение, представленное в одном из моих руководств на YouTube, может стать хорошим кандидатом для нашей следующей интеграции MCP.

5d794051ac7ea0992872804bd2f82fdf

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

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

49be68a4b514a84744f808f7854f4326

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

ecf69f6f64f0f05ad253b576b9675201

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

7924812b02ef4797ed0315d975b9bc99

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

Я ясно вижу, как разговорный агент, работающий на базе сервера MCP, идеально справляется с этой задачей.

Для получения более подробной информации посмотрите видео, ссылка на которое приведена ниже.

Я поделюсь этим новым экспериментом в будущей статье.

Следите за обновлениями!

Ищете вдохновение?

Вы дошли до конца этой статьи и готовы настроить свой собственный MCP-сервер?

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

Вам не нужно использовать микросервис FastAPI.

Инструменты можно создавать непосредственно в той же среде, где размещен сервер MCP (здесь локально).

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

Обо мне

Давайте общаться в Linkedin и Twitter. Я инженер по цепочке поставок, использующий аналитику данных для оптимизации логистических операций и снижения затрат.

Если вам нужна консультация или совет по аналитике и устойчивой трансформации цепочки поставок, свяжитесь со мной через Logigreen Consulting.

Если вас интересуют аналитика данных и цепочка поставок, посетите мой сайт.

Самир Сачи | Наука о данных и производительность

Источник: towardsdatascience.com

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

галерея

Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.
dummy-img
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
dummy-img
dummy-img
Взаимодействие человека и машины погружается под воду.
Взаимодействие человека и машины погружается под воду.
Дифференциально приватное машинное обучение в масштабе с использованием JAX-Privacy
Image Not Found
Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Вкратце Опубликовано: Изображение предоставлено: Thos Robinson/Getty Images для The New York Times (откроется в новом окне) Джули Борт Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.…

Апр 21, 2026
dummy-img

Как почистить виниловые пластинки (2026): пылесос, ультразвук, чистящий раствор, щетка.

Эти щелчки и треск недопустимы. Приведите свою музыку в порядок с помощью этого удобного руководства. Источник: www.wired.com

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых