Sly32

Рейтинг
378
Регистрация
29.03.2012
Должность
Software engineer
Как то я умудрился пропустить выход typeagent-ms от Гвидо Ван Россума... А ведь эта штука решает многие вещи при работе с LLM.  Теперь можно структурировать ответы в нужном формате без лишних телодвижений. Бухгалтера и сеошники не знают, но ответ от LLM часто меняет структуру и приходится  в нем искать нужные данные, а тайпагент решает проблему - ответ будет такой, как укажешь. Плюслм автоматический выбор подходящей модели. Ну и запрос теперь проходит не прямо в ЛЛМ а через МСР сервер. 
Попробовал - выглядит отлично. Походу можно переписывать часть сервера с использованием typeagent.

MrGray #:
Да, не, какая Гранта, шаха 1976 года.
У нее вообще расход 1 литр на 10.000
Я ее только раз в месяц завожу.
Так что завидуй

Ты про что тема, внимательно прочитал?

MrGray #:
Что у тебя за мотор, который при скоростях 140 потребляет 4.5 л/100км?

1.5 Ecoblue 125лс. + 8-ми ступенчатая коробка. На 120км/ч примерно 1900 оборотов.  А ты поди, на Ладе Гранте гоняешь из прошлого века?

MrGray #:
А чего не два с половиной литра, чоуш?

Потому что такой расход в реальности, не по паспорту.

Специально для таких как ты сфоткал. Сегодня пробег уже за 960 и еще четверть бака осталось, от есть 1200 км я запросто выезжу на одной заправке. Больше  140 я ехал полпути - 450 км, в реальности конечно меньше - километров 60 последних там уже  дорога с ограничением 90.

Если тошнить в районе сотки то расход будет в районе 3.9-4, но я так только однажды попробовал, когда  в закопаны  ездили. Не настолько уж я экономный)))

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

chaturanga #:
Попросите его сделать ограничение количества запросов от одного IP-адреса к локейшину /bu
Куда уж проще задача...
GPT
http {

    limit_req_zone $binary_remote_addr zone=bu_limit:10m rate=5r/s;

    server {
        listen *:80;
        server_name .example.com;

        add_header "Content-Type" "text/html; charset=UTF-8" always;

        location /bu {

            limit_req zone=bu_limit burst=10 nodelay;

            return 200 "bu!\n";
        }
    }
}
Что скажешь?

chaturanga #:
Достаточно простой админский вопрос:

Ну давай попробуем. Что ответил ГПТ -
# Разбор NGINX конфигурации с `auth_request`
Последовательность выполнения
1. Обработка запроса /

При запросе:

GET -S example.com

выполняются инструкции:

set $test one;
$test = "one"
Далее
echo "root: $test";

Вывод:

root: one
Следующая строка
set $test "$test two";

Теперь:

$test = "one two"
Затем
auth_request /auth;

Создаётся subrequest к /auth.

2. Выполнение /auth

В subrequest переменные наследуются.

Поэтому $test изначально:

one two
Выполняется
set $test "$test auth_pre";
$test = "one two auth_pre"
Затем
return 200 "auth: $test\n";

Subrequest возвращает:

auth: one two auth_pre

Но важно:

auth_request использует только HTTP статус, тело ответа игнорируется.

Эта строка никогда не выполнится
set $test "$test auth_post";

Потому что return завершает обработку.

3. Возврат в основной запрос

После auth_request выполнение продолжается:

set $test "$test three";

Теперь:

$test = "one two three"

Но этот результат уже нигде не выводится.

Итоговый ответ клиенту

Ответ:

HTTP/1.1 200 OK

root: one

Почему:

echo выполняется до auth_request

тело subrequest игнорируется

других echo нет

Проблемы конфигурации
1. echo — нестандартный модуль
echo "root: $test";

Работает только при установленном модуле:

ngx_http_echo_module

В стандартной сборке NGINX его нет.

2. /auth доступен извне

Сейчас любой пользователь может вызвать:

/auth

Это потенциальная уязвимость.

3. Мёртвый код
return 200 "auth: $test\n";
set $test "$test auth_post";

Код после return никогда не выполняется.

4. Переменные в subrequest

Переменные могут вести себя неожиданно при использовании:

auth_request

Поскольку subrequest наследует контекст.

Оптимизированная версия
server {
  listen 80;
  server_name example.com;

  location / {

    set $test "one";

    echo "root: $test";

    set $test "$test two";

    auth_request /auth;

    set $test "$test three";
  }

  location = /auth {
    internal;

    set $test "$test auth_pre";

    return 200;
  }
}
Что исправлено
1. Закрыт доступ к /auth
internal;

Теперь этот location может вызываться только из NGINX.

2. Убрано тело ответа
return 200;

Потому что auth_request тело не использует.

3. Удалён мёртвый код

Удалено:

set $test "$test auth_post";
Правильная передача данных из auth_request

Если нужно вернуть данные из авторизации, используется:

auth_request_set

Пример:

location / {

  auth_request /auth;

  auth_request_set $user $upstream_http_x_user;

  echo "user=$user";
}

location = /auth {

  internal;

  add_header X-User admin;

  return 200;
}

Ответ:

user=admin
Вывод

При выполнении:

GET -S example.com

ответ будет:

HTTP/1.1 200 OK

root: one

Причины:

echo выполняется до auth_request

тело subrequest игнорируется

return завершает обработку /auth

Ответ cloude

Анализ Nginx-конфигурации
Что произойдет при GET -S example.com
Ответ клиенту будет: root: one two three

Корневая проблема: фазы обработки Nginx
Nginx обрабатывает директивы не в порядке их записи в конфиге, а по фазам:

Фаза    Директивы       Порядок
REWRITE_PHASE   set     1
ACCESS_PHASE    auth_request    2
CONTENT_PHASE   echo    3
Реальный порядок выполнения в location /:

Разработчик, видимо, ожидал, что echo выведет "root: one" — это не так.

Ошибка 1: мёртвый код в /auth
return немедленно завершает обработку запроса. Строка после него — мёртвый код.

Ошибка 2: изоляция переменных в подзапросе
auth_request создаёт внутренний подзапрос с собственным scope переменных. $test в /auth не наследует значение из родительского / — она начинается как пустая строка.

Тело ответа /auth (auth: auth_pre\n) клиенту не отправляется — auth_request использует только HTTP-статус (2xx = разрешить, 401/403 = запретить).

Ошибка 3: нестандартный модуль echo
Директива echo — это не стандартный Nginx, а ngx_http_echo_module от OpenResty. В дистрибутивном Nginx этого модуля нет, конфиг упадёт с ошибкой.

Исправленная и оптимизированная версия
Если нужно отлаживать значения переменных на разных этапах — используйте error_log через lua_log (OpenResty) или add_header:

Итог ошибок
#       Проблема        Эффект
1       Смешение фаз set/echo/auth_request      echo видит финальное значение $test, а не промежуточное
2       Код после return в /auth        Мёртвый код, никогда не выполняется
3       Ожидание наследования $test в подзапросе        Переменная в /auth всегда пустая (независимый scope)
4       Использование echo      Не стандартный Nginx, требует сторонний модуль

Прокатился тут пару дней назад в консульство, отмотал 950 км за полдня, понял, что не готов я к переходу на электрички. Посчитал стоимость, время и понял что нет смысла. Посудите сами.
Чтоб красиво было, сделал выжимку ИИ, по факту цифры близки к действительности. Но нужно учитывать, что я выехал поздно и пришлось немного притапливать - меньше 140  туда не ехал, назад уже обычные 120-130. Для электирчки же расчет приусловии что она будет тащиться 100-110. Забавно на трассе было наблюдать за Теслами, которые в 4 раза мощнее моей табуретки, и тянуться 100-120, а я обгоняю их по левому ряду 150 и мне еще Мустанг моргает - мол, не тормози тут)))


Чтобы сравнить эти два автомобиля, возьмем стандартную дистанцию в 1000 км, так как на коротких дистанциях разница в «заправке» будет минимальной, а в «времени» — незаметной.
Сводная таблица (на 1000 км)
Параметр Ford Focus (Дизель) BYD Yuan Up (Электро)
Затраты на топливо/энергию ~106,20 BYN ~97,50 BYN (быстрая зарядка)
Количество остановок 1 (заправка 5 мин) 5–6 (зарядка по 30-40 мин)
Общее время в пути ~11 часов ~15 часов

1. Расчет стоимости (на 1000 км)
Для расчетов используем актуальные цены в Беларуси: дизель — 2,36 BYN, быстрый кВт·ч на «Маланке» — 0,65 BYN.
Ford Focus:
  • Расход:  4.5 л на 100 км.
  • Итого:  45 литров на 1000 км
  • Стоимость:  106 руб на топлио

BYD Yuan Up:

  • Расход: возьмем средний — 15 кВт·ч (трасса).(но это прям занижено сильно имхо)
  • Итого: 150  кВт·ч на 1000 км.
  • Стоимость: 98  BYN.
  • Примечание: Если заряжаться дома по ночному тарифу (~0,21 BYN), цена упадет до 31,50 BYN.
2. Расчет времени и автономности

Здесь кроется главная разница при поездках на дальние дистанции.

Ford Focus:
  • Запас хода: На баке 55
     л при расходе 4.5
     л можно проехать ~1220 км.
  • Остановки: Вам вообще не нужно заправляться в пути на дистанции 
     км. Остановка на кофе — 10
     минут.
BYD Yuan Up (батарея 32 кВт·ч или 45 кВт·ч):
  • Запас хода: Указанная вами батарея на 
     кВт·ч (версия 301 км по CLTC) в реальности на трассе при 
     км/ч обеспечит около 160–180 км.
  • Остановки: Чтобы проехать 
     км, вам придется заряжаться 5–6 раз.
  • Потеря времени: Каждая зарядка с 
     до 
     на быстрой станции занимает около 30–40 минут. Итого: плюс 3,5–4 часа к чистому времени в пути.


Так что я уж лучше на старом добром дизельке)))


Mik Foxi #:
но нельзя слепо верить и пускать в прод на сервер чтоб "сделай мне хорошо", я только про это. 

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

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

MrPi #:
Чисто для примера скинь рабочий проект. Посмотрю, как у него с масштабируемостью. Хочу просто увидеть полностью с бд готовый продакшн код на генерке и сколько времени ушло. 

Как раз из-за того, что не сделал так, как тебе посоветовал изначально - недавно уперся в то, что нужно полностью передизайнить архитектуру БД. После того как скормил ИИ существующую схему - получил очень дельные советы. Тепреь вот приходится переписывать и уже вижу результат. Та часть сервиса, которую полгода назад отложил, потому что не понимал, как правильно реализовать. 
Извини, но проект пока не покажу. 

А что ты понимаешь под масштабируемостью в твоем случае? БД? Код?  Так я как раз следую в работе доктрине  SOLID,  в отличие от KISS  она изначально об этом думает. В случае БД у меня Postgresql+ в перспективе DynamoDB+Neptune.

alaev #:

Если серьезно, то на прошлой неделе меня на бабки кинул перекрёсток. Сделал заказ, часть заказа не привезли. Сумма незначительная, но сам факт.

И деньги не отдают, хотя признают, что даже по их приложению часть товара не приехала.

Падажжи, а как же самые лучшие сервисы в мире??? Не ты ли утверждал? Как так, как же они могут кинуть - не верю 😂

На прошлой неделе ходили к дочке в гости. Решили пиццы заказать. Приехал курьер - одна пицца норм, вторая какая-то скособоченная, как-будто курьер ее боком вез. Доча сфоткала ее и отправила в СП сервиса. Через 15 минут на карту ей упали деньги за одну пиццу. Пиццы кстати вкусные были,  сьели обе, получается две по цены одной, только вид был непрезентабельный.

Всего: 7663