메인 콘텐츠로 건너뛰기
guardTool()은 도구 함수를 로컬 정책 검사로 감쌉니다. 정책은 실제 도구 호출 전에 실행됩니다. 정책이 차단을 결정하면 도구 함수는 실행되지 않습니다.
import { LynxPolicyError } from "@lynx/sdk";

const refund = lynx.guardTool(
  "refund",
  async ({ amount }: { amount: number }) => {
    return { refunded: amount };
  },
  {
    riskLevel: "HIGH",
    sideEffect: true,
    failureMode: "FAIL_CLOSED",
    beforeCall: ({ input }) => ({
      action: input.amount <= 100 ? "ALLOW" : "BLOCK",
      policyId: "refund-limit",
      reason: "Refund amount is over the limit",
      severity: "HIGH",
    }),
  },
);

try {
  await lynx.run("SupportAgent", () => refund({ amount: 500 }));
} catch (error) {
  if (error instanceof LynxPolicyError) {
    console.log(error.action, error.policyId, error.reason);
  }
}

정책 판단

beforeCall은 다음 action 중 하나를 반환할 수 있습니다.
Action동작
ALLOW도구를 실행합니다.
WARN도구를 실행하고 warning을 기록합니다.
BLOCK도구를 차단하고 LynxPolicyError를 던집니다.
REQUIRE_APPROVAL도구를 차단하고 LynxPolicyError를 던집니다.
REDACT판단을 기록합니다. 실제 redaction은 policy callback에서 적용한 뒤 도구에 넘기세요.
MODIFY판단을 기록합니다. 실제 modification은 policy callback에서 적용한 뒤 도구에 넘기세요.

Failure mode

정책 평가 자체가 실패하면 failureMode에 따라 동작이 달라집니다.
Failure mode동작
FAIL_OPEN도구 호출은 허용하고 policy error를 기록합니다.
FAIL_CLOSED도구 호출을 차단합니다.
REQUIRE_APPROVALREQUIRE_APPROVAL 상태로 차단합니다.

서버 가용성

가드레일 판단은 로컬에서 이루어집니다. Lynx 서버가 내려가도 SDK는 계속 정책을 평가합니다. 정책 판단 데이터는 큐에 보관했다가 나중에 다시 전송합니다.