> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# 절차적 룰

> 상시 동작. 'Y 전에 항상 X 해', '승인 없이 Z 절대 하지 마'

Agent가 하길 바라는 것 중에는 떠올릴 사실이 아니라 지킬 **룰** 인 것이 있습니다. 절차적 메모리가 이를 일급 항목으로 담아 알맞은 순간에 넣어 줍니다.

## 예

* "환불하기 전에 주문 상태를 항상 확인."
* "고객 티어를 확인하지 않고는 가격 정보를 절대 공유하지 않기."
* "배포 전 린터 실행, 에러면 중단."
* "사용자가 경쟁사를 말하면 세일즈로 넘김."

각각이 트리거 조건과 기대 동작을 가진 룰입니다.

## 룰의 구성

* **Trigger** 조건입니다. 이런 게 됩니다.
  * 의미형("사용자가 가격을 물으면").
  * 구조형("`refund` 도구 호출 전").
  * 이벤트형("낮은 확신 리트리벌이 일어나면").
* **Action** 무엇이 일어나야 하는지. 보통 Agent가 따를 지시입니다.
* **Scope** [스코핑](/ko/build/memory/scoping) 참고. 전역, 테넌트별, 사용자별.
* **Priority** 부딪히면 높은 우선순위가 낮은 걸 덮어씁니다.

## 룰이 가는 곳

**Wiki 스페이스**에 type = `rule`로 더합니다. 아니면 전용 절차 스페이스를 씁니다.

Agent는 턴마다 룰을 읽습니다. 리트리벌에 맡기지 않죠. 높은 우선순위 룰은 늘 컨텍스트 안에 있습니다.

## 룰 쓰기

룰은 구조화된 노트일 뿐입니다. Wiki 에디터에서 **Rule** 템플릿을 씁니다.

```
Trigger: 사용자가 "refund" 를 말함
Action: 주문이 환불 가능한지 보려고 `lookup_order`를 항상 먼저 호출.
Priority: high
```

또는 자유롭게 쓰고 Nora가 구조를 파싱하게 두면, 텍스트에서 트리거와 액션을 뽑아냅니다.

## 도구로

Agent는 사실을 쓰는 것과 같은 방식으로 룰을 쓸 수 있습니다. `remember_rule` 도구로요. Agent가 교정에서 룰을 배울 때 좋습니다.

> 사용자: 가격이 최종이라고 말하면 안 돼. 항상 부가세 전이라고 밝혀.
> Agent: \[룰 쓰기: "가격 답변에서 '부가세 전' 을 밝힘"]

## 리뷰어로

Approvals 큐에서 리뷰어가 교정을 룰로 바꿀 수 있습니다.

* Agent 액션을 이유와 함께 거부합니다.
* 교정에서 **Save as rule**을 누릅니다.
* 관련 메모리 스페이스에 룰이 더해져, 앞으로 모든 실행에 적용됩니다.

## 룰 충돌

같은 턴에 두 룰이 다른 액션으로 걸리면 우선순위가 정합니다. 우선순위가 같으면 두 액션 다 Agent에 뜨고, Agent가 둘 다 다루는 응답을 짭니다.

## 룰 은퇴

룰은 **inactive**로 표시하거나(참고용으로 남기고 더는 적용 안 함), (노트·문서처럼) 대체할 수 있습니다. 대체된 룰은 리트리벌에서 빠지고, inactive 룰은 조회는 되지만 걸리지 않습니다.

## 트레이스에서 룰 살피기

턴에서 걸린 룰이 모두 모델 호출 위 트레이스에 뜹니다.

* 맞은 트리거.
* 프롬프트에 넣은 액션.
* Agent 동작이 룰과 맞았는지.

룰이 계속 걸리는데 Agent가 무시하면 그게 신호입니다. 룰이 틀렸거나 흐릿하거나 프롬프트와 부딪히는 것이죠.
