From 0ca3baafb95e19b221e4ab837a6f35110947f287 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 23 Mar 2026 18:53:35 +0900 Subject: [PATCH] docs: add self-inspect and query rewrite ssot --- skills/self-inspect/SKILL.md | 16 +- .../web_search_query_rewrite_workflow.md | 140 ++++++++++++++++++ 2 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 workflow/01_conversation/web_search_query_rewrite_workflow.md diff --git a/skills/self-inspect/SKILL.md b/skills/self-inspect/SKILL.md index 490d1d7..0dade43 100644 --- a/skills/self-inspect/SKILL.md +++ b/skills/self-inspect/SKILL.md @@ -1,18 +1,24 @@ --- name: self-inspect -description: 로빙 자기 인식. 시간/날짜 답변, 자기 코드/파일/컨테이너 탐색, NAS 드래프트 읽기/쓰기/기록/메모, 과거 대화 이력 검색, bash 명령 실행. 사용자가 로빙에게 무언가를 파일로 저장/기록/메모/NAS에 남기라고 할 때, 과거 대화를 물어볼 때, 시간/날짜를 물어볼 때 사용. +description: 로빙 자기 인식. 시간/날짜 답변, 자기 코드/파일/컨테이너 탐색, NAS 드래프트 읽기/쓰기/기록/메모, 과거 대화 이력 검색, 사용자 자기정보 회상(이름/이전 발화), bash 명령 실행에 사용. 사용자가 로빙에게 무언가를 파일로 저장/기록/메모/NAS에 남기라고 할 때, 과거 대화나 자신의 이름/정보를 물어볼 때, 시간/날짜를 물어볼 때 사용. --- # Self Inspect 로빙이 자기 자신과 환경을 인식하고 조작하는 스킬. +## 상위 원칙 + +- [Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/20_Governance/writing-principles.md) +- [프로젝트 아티팩트 SSOT](https://github.com/happybell80/0_VALUE/blob/main/20_Governance/project-artifacts-ssot.md) + ## Trigger - 시간/날짜 질문: "몇시야?", "오늘 날짜", "무슨 요일" - 자기 코드/파일 탐색: "네 코드 보여줘", "컨테이너 정보", "네 파일 뭐 있어?" - NAS 드래프트 읽기/쓰기: "드래프트 확인해줘", "드래프트에 써줘", "NAS에 기록해줘", "메모 남겨줘", "기도문을 써서 기록해줘", "파일로 저장해줘" - 과거 대화 검색: "지난주에 뭐라 했어?", "어제 한 질문이 뭐야?", "이전 대화 보여줘", "내가 전에 뭐라고 했지?" +- 사용자 자기정보 회상: "내 이름이 뭐야?", "내가 누구야?", "내 정보 기억해?", "내 이름 기억나?" - bash 명령 실행: "명령어 실행 ls", "bash로 확인해줘" ## Do @@ -21,8 +27,16 @@ description: 로빙 자기 인식. 시간/날짜 답변, 자기 코드/파일/ - 파일/코드를 물으면 컨테이너 내부를 탐색해서 답한다. - 기록/메모/저장 요청이면 NAS 드래프트에 파일을 생성한다. - 과거 대화를 물으면 conversation_log에서 검색해서 답한다. +- 사용자 자기정보를 물으면 세션 메모, 사용자 프로필, 최근 대화에서 확인 가능한 범위만 답한다. +- "내 이름", "내가 누구" 같은 자기지시 표현은 일반 웹 검색보다 self-inspect를 우선한다. ## Do Not - 허용되지 않은 명령(rm, kill 등)을 실행하지 않는다. - 비밀값을 노출하지 않는다. +- 사용자 자기정보 질문을 노래 제목, 사전 뜻풀이, 일반 웹 검색으로 먼저 보내지 않는다. + +## 관련 문서 + +- [Web Search](../web-search/SKILL.md) +- [web_search_query_rewrite_workflow](../../workflow/01_conversation/web_search_query_rewrite_workflow.md) diff --git a/workflow/01_conversation/web_search_query_rewrite_workflow.md b/workflow/01_conversation/web_search_query_rewrite_workflow.md new file mode 100644 index 0000000..852b391 --- /dev/null +++ b/workflow/01_conversation/web_search_query_rewrite_workflow.md @@ -0,0 +1,140 @@ +--- +tags: [workflow, conversation, web-search, query-rewrite, ssot, robeing] +--- + +# web_search_query_rewrite_workflow 워크플로우 + +## 상위 원칙 + +- [Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/20_Governance/writing-principles.md) +- [프로젝트 아티팩트 SSOT](https://github.com/happybell80/0_VALUE/blob/main/20_Governance/project-artifacts-ssot.md) + +## 목적 + +웹 검색이 필요한 사용자 질문을 검색 엔진에 바로 던지기 전에, 검색어를 맥락에 맞게 재작성하는 고정 기준을 정의합니다. + +이 문서는 특히 아래 회귀를 막기 위한 SSOT입니다. + +- `fear & greed`를 일반 단어로 분해해 음악/도서/일반 공포 검색으로 흐르는 문제 +- `"내 이름이 뭐야?"` 같은 자기지시 표현을 웹 검색으로 보내는 문제 +- 사용자가 힌트를 줬는데도 검색 질의에 반영하지 못하는 문제 + +## 적용 범위 + +- rb8001의 Slack 대화 처리 중 `web_search`로 분류된 요청 +- `message_router.py` 또는 동등한 검색 진입 전처리 레이어 +- 검색 쿼리 생성이 필요한 실시간 질의 + +## 흐름 + +```text +사용자 메시지 수신 + → 자기지시 / self-inspect 보호 표현 검사 + → 복수 질문이면 질의 단위 분해 + → 직전 정정/재촉/힌트 발화 확인 + → 고정 표현 보호 사전 검사 + → 검색용 쿼리 재작성 + → web_search 실행 + → 결과 요약 + 출처 반환 +``` + +## 고정 규칙 + +### 1. 자기지시 표현은 웹 검색보다 self-inspect를 우선합니다 + +아래 표현은 검색 전 단계에서 먼저 보호합니다. + +- `내 이름` +- `내가 누구` +- `내 정보` +- `내가 전에 뭐라고` +- `지난주에 뭐라 했어` + +처리 기준: +- 사용자 자신, 세션 정보, 최근 대화, 사용자 프로필을 묻는 질문이면 검색으로 보내지 않습니다. +- 이 단계에서 self-inspect 또는 대화 이력 조회 경로로 분기합니다. + +### 2. 복합 고정 표현은 분해하지 않고 보존합니다 + +아래와 같은 표현은 단어 단위로 분해하지 않습니다. + +- `fear & greed index` +- `cnn fear and greed index` +- 회사명/제품명/서비스명 +- 사용자가 직접 다시 설명한 전문 용어 + +처리 기준: +- 띄어쓰기나 특수문자가 있어도 하나의 검색 단위로 유지합니다. +- 일반 명사 해석보다 관용 표현/전문 용어 해석을 우선합니다. + +### 3. 사용자가 준 힌트는 다음 검색 질의에 반드시 반영합니다 + +예: +- 사용자: `미국 주식시장의 분위기를 평가할 때 많이 쓰는 지수야` + +처리 기준: +- 후속 검색 질의에 `미국 주식시장`, `지수`, `fear and greed index` 같은 보강어를 포함합니다. +- 직전 힌트를 무시하고 원문만 반복 검색하지 않습니다. + +### 4. 정정/재촉 표현은 새 검색의 우선 신호로 봅니다 + +예: +- `아니 날씨말고` +- `알려달라고 했잖아` +- `그거 말고` +- `다시 검색해봐` + +처리 기준: +- 직전 검색 결과를 유지하지 않고, 검색어를 재작성하거나 검색 대상을 교체합니다. +- 정정 발화가 들어왔는데도 이전 질문으로 회귀하지 않습니다. + +## 쿼리 재작성 규칙 + +### A. 용어 보강 + +- `fear & greed` → `fear and greed index cnn` +- `공포탐욕지수` → `cnn fear and greed index` +- `달러 환율` → `usd krw exchange rate` + +원칙: +- 검색 엔진이 더 잘 이해하는 표준 영문 표현이 있으면 병기합니다. +- 단, 사용자가 한국어 결과를 기대하는 질의면 한국어 핵심어는 유지합니다. + +### B. 힌트 병합 + +예: +- 원문: `fear & greed 지수 알려줘` +- 힌트 후 재작성: `cnn fear and greed index 미국 주식시장 지수` + +원칙: +- 직전 1~2턴 안의 설명, 정정, 범위 제한 표현을 병합합니다. +- 힌트는 추가 옵션이 아니라 질의 본문 일부로 승격합니다. + +### C. 보호 사전 우선 + +원칙: +- 보호 사전에 등록된 표현은 일반 토큰화 전에 먼저 검사합니다. +- 보호 표현과 일반 표현이 섞여 있으면 보호 표현을 보존한 상태로 나머지만 재작성합니다. + +## 실패 방지 규칙 + +- `.*이 뭐야`, `.*가 뭐야` 같은 광범위 패턴만으로 곧바로 웹 검색하지 않습니다. +- 자기지시 표현, 대화 회상 표현, 사용자 프로필 질문은 web_search 예외 대상으로 둡니다. +- 검색 실패 후 재질문이 들어오면 이전 질문을 반복 처리하지 않고, 새 정정 신호를 우선 반영합니다. + +## 검증 기준 + +- `fear & greed 지수 알려줘` → 음악/도서가 아니라 지수 검색으로 가야 합니다. +- `미국 주식시장 분위기 지수야 다시 검색해봐` → 힌트 반영된 보강 검색어가 생성되어야 합니다. +- `내 이름이 뭐야?` → 웹 검색이 아니라 self-inspect 계열로 빠져야 합니다. +- `아니 날씨말고` → 직전 날씨 질의로 회귀하지 않아야 합니다. + +## 관련 문서 + +- [slack_basic_dialogue](./slack_basic_dialogue.md) +- [Self Inspect](../../skills/self-inspect/SKILL.md) +- [Web Search](../../skills/web-search/SKILL.md) + +## 한 줄 결론 + +웹 검색 품질의 핵심은 검색 엔진 호출 자체가 아니라, 호출 전에 `자기지시 표현 보호`, `고정 용어 보존`, `힌트 병합`, `정정 반영`을 먼저 수행하는 데 있습니다.