이 자습서에서는 포털을 사용하여 두 가지 거버넌스 후크를 만듭니다. 즉, 데이터 서식을 적용하는 중지 후크 (굵은 헤더가 있는 markdown 테이블) 및 위험한 셸 명령을 차단하는 PostToolUse 후크 입니다. 에이전트 수준(모든 스레드 및 스바젠트에 적용됨) 및 스바겐트 수준(특정 스바겐트 하나에 적용됨)에서 후크를 구성합니다.
예상 시간: 10분
이 튜토리얼에서는 다음을 배우게 됩니다:
- 응답 서식의 유효성을 검사하는 중지 후크 만들기
- 위험한 셸 명령을 차단하는 PostToolUse 후크 만들기
- 특정 하위 에이전트에 훅 추가
- 개별 스레드에서 후크 활성화 관리
사전 요구 사항
- 실행 중인 상태의 Azure SRE 에이전트
- SRE Agent 리소스에서 기여자 이상의 역할
팁 (조언)
이전에 REST API 자습서를 통해 만든 후크는 포털 UI에 자동으로 표시됩니다. 아무것도 다시 구성하지 않고 시각적으로 관리할 수 있습니다.
포털에서 후크가 어떤 위치에 있는지 파악하기
후크는 두 수준에서 작동합니다. 이러한 차이점을 이해하는 것이 주요 아키텍처 개념입니다.
| 수준 | 포털의 위치 | Scope | 사용 시기 |
|---|---|---|---|
| 에이전트 수준 | 빌더>후크 | 전체 에이전트, 모든 스레드 및 모든 스바겐트 적용 | "모든 도구 호출 감사" 또는 "모든 곳에서 위험한 명령 차단"와 같은 에이전트 차원의 정책을 원합니다. |
| 하위 에이전트 수준 | 서브에이전트 빌더> 서브에이전트 > 선택 후크 관리 | 특정 스바겐트가 실행되는 경우에만 적용됩니다. | 하나의 서브에이전트에 맞춰 후크를 조정하려고 합니다. 예를 들어, "이 서브에이전트의 출력 형식을 유효성 검사"와 같습니다. |
팁 (조언)
두 수준 모두 공존할 수 있습니다. 에이전트 수준 후크와 스바겐트 수준 후크가 모두 동일한 이벤트와 일치하면 둘 다 실행됩니다. 에이전트 수준 후크가 먼저 실행된 다음, 스바겐트 수준 후크를 실행합니다.
에이전트 수준 후크 만들기
에이전트 수준 후크는 모든 스레드와 모든 하위 에이전트를 포함하여 전체 에이전트에 적용됩니다. 활성 상태일 때 제어하는 활성화 모드가 있습니다.
후크 페이지 열기
다음 단계에 따라 후크 페이지로 이동합니다.
- sre.azure.com 이동하여 에이전트를 선택합니다.
- 사이드바에서 작성기를 확장합니다.
- 후크를 선택하십시오.
설명, 후크 만들기 단추 및 빈 데이터 그리드(또는 기존 후크 목록)가 있는 후크 제목이 표시됩니다.
중지 후크 만들기
에이전트가 최종 응답을 보내려는 순간 중지 후크가 트리거됩니다. 이를 사용하여 응답 품질의 유효성을 검사하고 서식 규칙을 적용합니다.
후크 만들기를 선택합니다.
양식 필드를 입력합니다.
분야 가치 이름 require-table-format이벤트 유형 중지 활성화 모드 늘 설명 응답이 굵은 헤더가 있는 markdown 테이블로 구조화된 데이터를 표시하도록 합니다. 후크 정의에서 후크 유형을프롬프트로 설정합니다.
모델을추론 빠른(기본값)으로 설정합니다.
프롬프트 편집기에서 다음 텍스트를 입력합니다.
Check the agent response below. $ARGUMENTS Does the response present any structured data (lists of items, comparisons, metrics) as a markdown table with **bold** column headers? If no structured data is present, approve. If structured data IS present as a table with bold headers: {"ok": true} If structured data is present but NOT formatted as a table: {"ok": false, "reason": "Reformat the structured data as a markdown table with **bold** column headers."}시간 제한(초)를
30에서, 실패 모드를Allow에서, 최대 거부를3에서 그대로 둡니다.저장을 선택합니다.
대화 상자가 성공 알림과 함께 닫힙니다. 후크는 이벤트 유형 중지와 활성화 항상이 있는 데이터 그리드에 나타납니다.
팁 (조언)
$ARGUMENTS 자리 표시자는 후크 컨텍스트(에이전트의 최종 응답 포함)를 프롬프트에 삽입합니다. LLM은 응답이 기준에 맞는지 평가하고, 승인 시 {"ok": true}를 반환하고, 거부 시 {"ok": false, "reason": "..."}를 반환합니다. 세 번의 거부(기본값) 후 에이전트가 중지됩니다.
중지 후크 테스트
다음 단계에 따라 중지 후크가 올바르게 작동하는지 확인합니다.
- 사이드바에서 채팅을 선택합니다.
- Python과 Go의 장단점을 비교하여 마이크로 서비스를 빌드하고 보내기를 선택합니다.
- 에이전트의 응답을 확인합니다.
- 에이전트는 처음에 일반 텍스트 비교로 응답합니다.
- 중지 후크는 데이터가 테이블에 없기 때문에 응답을 평가하고 거부합니다.
- 에이전트는 굵게 머리글이 있는 markdown 테이블로 응답을 재구성합니다.
최종 응답은 다음 예제와 유사한 형식의 테이블로 비교를 제공합니다.
| Language | 장점 | 단점 |
|---|---|---|
| 파이썬 | 신속한 개발, 풍부한 에코시스템 | 실행 속도 저하, GIL 제한 사항 |
| 이동 | 빠른 컴파일, 내장 동시성 | 규모가 작은 에코시스템, 자세한 오류 처리 |
PostToolUse 후크 만들기
도구 실행이 완료되면 PostToolUse 후크가 실행됩니다. 도구 사용을 감사하거나, 위험한 명령을 차단하거나, 추가 컨텍스트를 추가하는 데 사용합니다.
빌더>후크로 돌아갑니다.
후크 만들기를 선택합니다.
양식을 입력합니다.
분야 가치 이름 block-dangerous-commands이벤트 유형 사후 도구 사용 활성화 모드 늘 설명 셸 명령에서 rm -rf, sudo 및 chmod 777 차단 후크 유형 Command 도구 매칭기 Bash\|ExecuteShellCommand스크립트 언어로 Python 을 선택합니다.
스크립트 편집기에서 다음 스크립트를 입력합니다.
#!/usr/bin/env python3 import sys, json, re context = json.load(sys.stdin) command = context.get('tool_input', {}).get('command', '') dangerous = [r'\brm\s+-rf\b', r'\bsudo\b', r'\bchmod\s+777\b'] for pattern in dangerous: if re.search(pattern, command): print(json.dumps({"decision": "block", "reason": f"Blocked: {pattern}"})) sys.exit(0) print(json.dumps({"decision": "allow"}))실패 모드를 차단으로 설정합니다(스크립트가 충돌하는 경우 도구 결과가 차단됨).
저장을 선택합니다.
이제 후크 데이터 그리드에 두 후크가 모두 표시됩니다.
메모
도구 검사기 필드는 regex를 사용합니다.
Bash|ExecuteShellCommand는 "Bash" 또는 "ExecuteShellCommand"라는 도구와 정확히 일치합니다(패턴은 ^(Bash|ExecuteShellCommand)$로 고정됩니다).
* 모든 도구를 일치시키는 데 사용합니다.
PostToolUse 후크 테스트
PostToolUse 후크가 올바르게 작동하는지 확인하려면 다음 단계를 수행합니다.
- 사이드바에서 채팅을 선택합니다.
- 에이전트에 "Echo hello 실행"이라는 안전한 명령을 실행하도록 요청합니다. 후크에서 이 명령을 사용할 수 있습니다.
- 에이전트에 "rm -rf /tmp/test 실행"이라는 위험한 명령을 실행하도록 요청합니다. 후크가 이 명령을 차단합니다.
safe 명령은 정상적으로 실행됩니다. 위험한 명령이 차단되고 에이전트가 이유를 설명하는 메시지를 받습니다.
에이전트 수준 후크 편집 및 삭제
후크 데이터 그리드에서 기존 후크를 수정하거나 제거할 수 있습니다.
- 편집: 데이터 표의 후크 행에서 편집 아이콘을 선택하고 필드를 수정한 다음 저장을 선택합니다.
- 삭제: 제거할 후크 옆에 있는 확인란을 선택하고 도구 모음에서 삭제 를 선택한 다음 확인합니다.
데이터 그리드는 변경 내용을 즉시 반영합니다.
서브에이전트 수준 후크 생성하기
서브에이전트의 설정에서 직접 서브에이전트 수준의 후크를 구성합니다. 주 에이전트 또는 기타 스바겐트가 아닌 특정 스바겐트가 실행되는 경우에만 적용됩니다.
서브에이전트 후크 패널을 열다
특정 하위 에이전트에 대한 후크 구성에 액세스하려면 다음 단계를 수행합니다.
- 사이드바에서 Builder 를 확장하고 Subagent Builder를 선택합니다.
- 기존 스바젠트를 선택하여 편집하거나 만들기 를 선택하여 새 스바젠트를 시작합니다.
- 서브에이전트 양식에서 후크 섹션까지 스크롤하여 이동합니다.
- 후크 관리를 선택합니다.
측면 패널이 열리고, 그 안에는 중지 및 도구 사용 후 섹션이 있습니다. 후크가 구성되지 않은 경우 지침 텍스트가 있는 빈 상태가 표시됩니다.
하위 에이전트에 훅 추가
다음 단계에서는 이 스바겐트가 항상 요약 섹션으로 응답하도록 하는 중지 후크를 추가합니다.
후크 관리 패널에서 패널 아래쪽에 있는 후크 추가를 선택합니다.
대화 상자에서 후크 양식을 입력합니다.
분야 가치 이벤트 유형 중지 후크 유형 프롬프트 프롬프트 Check the response below. $ARGUMENTS Does it include a clear summary section at the end? If yes: {"ok": true} If no: {"ok": false, "reason": "Add a Summary section at the end of your response."}시간 제한(초) 30 실패 모드 Allow 최대 거부 수 3 후크에서 저장 을 선택합니다.
서브에이전트에서 만들기 (또는 저장)를 선택하여 전체 구성을 저장합니다.
후크가 후크 관리 패널의 중지 섹션 아래에 나타납니다. 서브에이전트 양식의 버튼에 후크 관리(1)가 표시됩니다.
팁 (조언)
스바겐트 수준 후크를 테스트하려면 스바겐트 빌더로 이동하고, 테스트 플레이그라운드 보기를 선택하고, 드롭다운에서 스바겐트를 선택하고, 질문을 입력합니다. 후크는 이 특정 스바겐트가 호출될 때만 실행됩니다.
스레드당 후크 관리
Always Activation을 사용하는 에이전트 수준 후크는 기본적으로 모든 대화에서 활성화됩니다. 스레드당 주문형 활성화를 사용하여 후크를 수동으로 활성화해야 합니다.
대화에서 기능 전환
다음 단계에 따라 특정 스레드에서 후크를 활성화하거나 비활성화합니다.
- 채팅 스레드를 엽니다.
- 채팅 하단에서 + 단추를 선택합니다.
- 후크 관리를 선택합니다.
- 현재 스레드에서 후크를 켜거나 끕니다.
Always hook를 일시적으로 비활성화할 수 있습니다. 필요한 경우 주문형 후크를 활성화할 수 있습니다. 필요한 시스템 후크를 전환할 수 없습니다.
후크 변경 내용은 현재 스레드에서 즉시 적용됩니다.
Troubleshooting
다음 표에서는 포털에서 후크를 만들고 관리할 때 발생하는 일반적인 문제 및 솔루션을 나열합니다.
| 문제 | 해결 방법 |
|---|---|
| 사이드바에 후크 페이지가 표시되지 않음 | 후크 페이지가 빌더 아래에 나타납니다. 에이전트가 실행 중 상태인지 확인합니다. 옵션이 여전히 표시되지 않으면 고객 지원팀에 문의하세요. |
| "후크 이름이 필요합니다." | 문자, 숫자, 하이픈 및 밑줄만 사용하여 이름을 입력합니다. |
| "이름은 문자, 숫자, 하이픈 및 밑줄만 포함해야 합니다." | 후크 이름에서 특수 문자를 제거합니다. |
| 후크 이름은 system__으로 시작할 수 없습니다. |
system__ 접두사는 시스템 후크용으로 예약되어 있습니다. 다른 이름을 선택합니다. |
| "PostToolUse 후크에는 Tool matcher가 필요합니다." | PostToolUse 후크를 사용할 때는 정규 표현식 매처를 지정해야 합니다.
* 모든 도구를 일치시키는 데 사용합니다. |
| 후크가 실행되지 않음 | 에이전트 수준 후크의 경우 활성화 모드를 확인합니다. 주문형 후크는 스레드당 활성화되어야 합니다. 스바겐트 수준 후크의 경우 스바겐트가 호출되고 있는지 확인합니다. |
| 중단 후크가 모든 것을 승인합니다. | 거부 시 프롬프트가 {"ok": false, "reason": "..."}을 반환하도록 합니다. 거부가 없는 reason 경우 승인으로 처리됩니다. |
| 작업을 막는 스크립트 오류 | 개발 중에 정상적인 성능 저하를 허용하도록 실패 모드를 설정합니다. 프로덕션에서 차단 으로 전환합니다. |