Урок 3. Harness и ограждения
Модель без обвязки опасна. Harness — вся инфраструктура вокруг модели: контекст, инструменты и три защитных слоя — ограничения (что нельзя), проверка (правильно ли сделано), исправление (как восстановиться). Расширенная формула: Агент = Модель + Harness.
вызов инструмента
│
▼
┌───────────────┐
│1. БЕЛЫЙ СПИСОК│──▶ «отказ»
└───────┬───────┘
│ есть
▼
┌───────────────┐
│ 2. ВЫПОЛНЕНИЕ │──────▶ «ошибка перехвачена»
└───────┬───────┘
│ результат
▼
┌───────────────┐
│ 3. ПРОВЕРКА │──────▶ «переспросить»
└───────┬───────┘
│ ок
▼
наблюдение в контекст
Что прочитать
- Harness-инженерия — почему обвязка важнее самой модели
- Пять функций Harness — из чего состоит инфраструктура
- Ограждения — как запрещать агенту опасные действия
В коде
Три слоя умещаются в одну обёртку над вызовом инструмента:
def run_tool(call):
fn = TOOLS.get(call["tool"])
if not fn: # слой 1: белый список
return "Инструмент не найден"
try:
result = fn(**call["args"]) # слой 2: перехват падения
except Exception as e:
return f"Инструмент упал: {e}"
if result is None: # слой 3: проверка результата
return "Инструмент вернул пустоту"
return result
function runTool(call) {
const fn = TOOLS[call.tool];
if (!fn) return "Инструмент не найден"; // слой 1
try {
const result = fn(call.args || {}); // слой 2
if (result === undefined || result === null) // слой 3
return "Инструмент вернул пустоту";
return String(result);
} catch (e) {
return "Инструмент упал: " + e;
}
}
Обрати внимание: ошибки инструмента не роняют агента — они возвращаются в контекст как наблюдение, и LLM может поправиться на следующем шаге.
Практика
Для агента из урока 1 придумай три ограждения: одно «нельзя», одну проверку результата и один способ восстановиться после ошибки. Затем оберни любую свою функцию в run_tool из примера.
Связано: Урок 2. Цикл ReAct, Урок 4. Инструменты