콘텐츠로 이동

Release Notes

v1.3.4

  • Release date: 2026-08-23
  • Baseline: v1.3.3

LLM 기반 fallback 응답

  • no_inputnot_understood 응답을 고정 문구 대신 전체 대화 이력, 현재 node와 fallback 재시도 횟수를 바탕으로 LLM이 생성하도록 변경했습니다.
  • no_input은 첫 번째, 두 번째, 세 번째 이상 무응답에 서로 다른 지침을 적용합니다. 재시도 중에는 질문과 표현을 반복하지 않고, 재시도 소진 전에는 종료 인사를 미리 생성하지 않습니다.
  • not_understood는 사용자 입력에서 파악할 수 있는 의미를 먼저 확인합니다. STT confidence가 낮을 때는 소음이나 마이크 거리 등 발화 환경을 부드럽게 확인할 수 있도록 했습니다.
  • Scenario의 responses.no_inputresponses.not_understood는 LLM 호출이 실패했을 때 사용하는 안전망으로 역할을 정리했습니다.

중복 방지와 자연스러운 종료

  • LLM 응답이 기존 assistant 응답과 같으면 중복 정보를 prompt에 전달하고 최대 두 번 다시 생성합니다.
  • 재생성 후에도 같은 문장이 반복되면 대화 이력과 겹치지 않는 안전 문장을 반환합니다.
  • fallback 재시도가 소진되면 일반 node 지침과 기준 문장을 제외하고, 전체 대화 맥락에 맞는 짧은 최종 인사만 LLM이 생성합니다.
  • 최종 무응답 문장을 만든 턴에 terminal node로 이동하면 Session도 같은 턴에 완료합니다. 종료 node에서 추가 입력이나 중복 마무리 응답을 요구하지 않습니다.

Scenario와 Runtime 계약

  • Runtime이 지원하는 node parameter를 공통 계약으로 정의하고, 알 수 없는 parameter를 Scenario 검증 단계에서 거부하도록 강화했습니다.
  • Scenario 생성기가 Runtime에서 실제로 소비하는 V2 필드와 parameter만 생성하도록 prompt와 검증 기준을 정리했습니다.
  • SeniMate 날씨 Scenario에서 고정 skill_errorempathy 응답을 제거해 일반 응답과 fallback 표현을 LLM 중심으로 단순화했습니다.

문서와 테스트

  • Policy, NLU, Executor, Transition, State, Skill, API, Scenario 및 배포 문서를 현재 코드와 테스트를 기준으로 다시 정리했습니다.
  • docs/policy/README.md를 전체 정책의 시작점으로 구성하고 상세 구현 문서와의 링크를 정비했습니다.
  • fallback 단계별 prompt, 중복 재생성, 재시도 소진과 같은 턴의 Session 완료를 회귀 테스트로 추가했습니다.

v1.3.3

  • Release date: 2026-08-19
  • Baseline: v1.3.2

Skill 설정 표준화

  • 외부 Skill을 지정하는 node parameter의 표준 이름을 params.capability에서 params.skill로 변경했습니다.
  • Executor 선택, bot-first 실행과 Skill Runtime 요청은 skill을 우선 사용합니다.
  • 기존 Scenario 호환을 위해 capability도 계속 읽지만, 두 값이 모두 있으면 skill이 우선합니다.
  • 실행 결과의 last_skill, 저장 결과 key와 metadata에도 최종 선택된 Skill 이름을 일관되게 기록합니다.

Scenario·생성기·문서

  • SeniMate 날씨 Scenario를 params.skill 형식으로 이전했습니다.
  • Scenario 생성기가 skill parameter를 생성할 수 있도록 허용 목록을 갱신했습니다.
  • Runtime, Executor, API 흐름과 Skill 연동 문서의 용어와 예제를 skill 기준으로 통일했습니다.
  • skill 우선순위와 기존 capability 호환 경로를 단위 테스트로 검증했습니다.

v1.3.2

  • Release date: 2026-08-17
  • Current behavior: 각 항목에서 연결한 Runtime·API·Scenario 기준 문서 참고

Fallback과 STT confidence

  • 기본 fallback 재시도 한도를 3으로 변경하고 세션 생성의 max_fallback_retries로 재정의할 수 있게 했습니다.
  • 같은 종류의 fallback이 한도를 넘으면 fallback_exhausted를 기록합니다. Scenario 전이가 있으면 선언된 target으로 이동하고, 없지만 terminal node가 있으면 runtime이 기본 종료 전이를 보충합니다. 종료 노드의 max_fallback_retries: 0은 세션 override보다 우선합니다.
  • 무응답과 이해 불가 counter는 정상 발화에서 초기화하며 세션 전체 누적이 아닌 연속 구간을 나타냅니다.
  • Fallback 응답은 직전 non-fallback 응답에서 질문만 추출해 문맥에 맞게 다시 확인합니다.
  • Fallback 재시도와 재시도 소진 입력은 논리적인 진행 턴이 아니므로 turn_count를 증가시키지 않습니다.
  • MessageInput.confidence를 STT confidence로 사용합니다. 값이 세션의 stt_confidence_threshold 이하이면 LLM NLU를 생략하고 이해 불가 fallback으로 처리합니다.
  • API 세션 threshold 기본값은 -0.7이며 /v1/session/v1/session/json에서 설정할 수 있습니다.

CLI

  • detaileddebug 출력에 연속 무응답 횟수를 표시합니다.
  • --max-fallback-retries--stt-confidence-threshold 세션 옵션을 추가했습니다. CLI threshold 기본값은 0입니다.
  • --locale, --location, --latitude, --longitude로 세션 사용자 정보를 전달할 수 있습니다.
  • 위도와 경도는 함께 입력해야 하며 문자열 --location과 좌표는 동시에 사용할 수 없습니다.

Session·API·문서

  • 세션의 사용자 위치, locale과 STT threshold를 SessionManager와 DialogueState context에 보존합니다.
  • 호스트와 Docker container에서 위치 기반 Skill Runtime을 호출하는 URL과 날씨 scenario 검증 절차를 문서화했습니다.
  • Pydantic v2의 폐기 예정 Field(example=...)json_schema_extra={"example": ...}로 이전했습니다.

Bot-first 초기 응답 fallback

  • 시작 노드에 responses.default가 있으면 기존처럼 NLU와 LLM 호출 없이 초기 응답으로 반환합니다.
  • responses.default가 없으면 노드 description과 시나리오 bot prompt를 기반으로 LLM이 초기 응답을 생성합니다.
  • LLM 호출 실패 또는 빈 응답에는 시나리오 언어에 맞는 공통 인사말을 반환합니다.
  • 응답 context의 executor_route로 정적 경로 InitialBotResponse와 LLM 경로 InitialBotResponseLLM을 구분할 수 있습니다.

Sohri Graph Builder v1.2.1 Release Notes

  • Version: v1.2.1
  • Release date: 2026-08-04
  • Baseline: v1.2.0

개요

v1.2.1은 대화 시작 방식을 명시적으로 제어하는 bot-first 기능과 규칙 기반 NLU fast path를 추가하고, CLI 및 API의 실행 결과에 처리 시간을 제공하는 릴리스입니다.

명확하고 반복적으로 발생하는 사용자 입력은 LLM 호출 없이 처리하여 응답 지연과 비용을 줄였으며, bot-first 설정을 Scenario v2의 graph 영역으로 통합했습니다. 문서 구조와 시나리오 다이어그램도 함께 정비했습니다.

Features

Bot-first 대화 시작

  • Scenario v2의 graph.bot_first로 봇이 먼저 대화를 시작할지 설정할 수 있습니다.
  • Bot-first가 적용되면 빈 사용자 입력과 NLU 처리를 거치지 않고 시작 노드의 responses.default를 첫 응답으로 반환합니다.
  • REST API의 /v1/session/v1/session/json 요청에서 bot_first 값을 지정해 시나리오 설정을 재정의할 수 있습니다.
  • 기존 metadata.bot_first는 이전 시나리오와의 호환을 위한 fallback으로 지원합니다.
  • 세션 상태의 context.bot_first에서 실제 적용 여부를 확인할 수 있습니다.

규칙 기반 NLU fast path

  • 다음과 같이 의도가 명확한 입력은 LLM NLU 호출 없이 규칙으로 처리합니다.
  • 빈 입력과 무응답
  • 짧은 긍정 및 부정
  • 명시적인 대화 종료
  • 반복 요청
  • 인사와 감사
  • 식사 노드의 명확한 식사 여부 응답
  • 규칙만으로 확정하기 어려운 입력은 기존 LLM NLU로 자동 위임합니다.
  • Detailed CLI 출력에서 NLU 처리 경로가 규칙인지 LLM인지 확인할 수 있습니다.
  • 무응답 입력은 현재 노드의 responses.no_input을 사용해 즉시 응답합니다.

처리 시간 제공

  • Bot-first 초기 응답과 일반 메시지 처리 결과에 processing_time_ms를 제공합니다.
  • API session 및 message response schema에 처리 시간 필드를 추가했습니다.
  • CLI turn 출력에서 응답 처리 시간을 확인할 수 있습니다.

CLI

  • --bot-first 옵션으로 graph.bot_firstfalse인 시나리오에서도 봇의 첫 응답으로 대화를 시작할 수 있습니다.
  • 기존 --user-first 옵션은 --bot-first로 대체되었습니다.
  • README의 CLI parameters를 필수 여부, 기본값과 설명을 포함한 표로 정리했습니다.

문서

  • 문서를 docs/ 아래의 API, definition, graph builder, scenario 및 refactor 영역으로 재구성했습니다.
  • 중복되거나 이전 구조에 속한 문서를 정리하고 내부 참조 경로를 갱신했습니다.
  • General Conversation과 SeniMate의 Mermaid 다이어그램을 SVG 이미지로 교체했습니다.

호환성 참고

  • metadata.bot_first는 계속 동작하지만, 신규 시나리오는 graph.bot_first를 사용해야 합니다.
  • CLI의 --user-first는 더 이상 지원되지 않으므로 필요한 경우 graph.bot_first 설정 또는 --bot-first를 사용해야 합니다.

Sohri Graph Builder v1.2.0 Release Notes

  • Version: v1.2.0
  • Release date: 2026-08-02
  • Baseline: 최초 fork 시점

개요

v1.2.0은 최초 fork 이후 Graph Builder를 Scenario v2 기반의 Dialogue Manager로 확장한 릴리스입니다.

시나리오 정의, NLU, 대화 상태, 정책, executor, transition을 분리하고 목적 대화와 자유 대화를 동일한 graph runtime에서 처리할 수 있도록 구조를 정비했습니다. CLI·REST API·상태 저장·검증 기능과 실제 서비스 시나리오도 함께 제공합니다.

Features

Scenario v2

  • metadata, prompts, slots, graph로 구성된 Scenario v2 구조를 지원합니다.
  • graph.entry, nodes, default_next, next_nodes, global_transitions로 대화 흐름을 선언할 수 있습니다.
  • 전역 slot registry와 node별 collect_slots를 통해 수집 정보를 분리해 정의할 수 있습니다.
  • required/optional slot 정책과 string, number, enum 등의 값 유형을 지원합니다.
  • node별 description, responses, params를 이용해 공통 runtime 수정 없이 대화 동작을 설정할 수 있습니다.

Graph 기반 Dialogue State Tracking

  • Scenario JSON을 networkx.DiGraph 기반 실행 graph로 구성합니다.
  • DialogueState에 현재 node, slots, context, history, turn count와 종료 상태를 유지합니다.
  • 한 턴에서 수집한 slot과 context를 반영한 후 transition condition을 평가합니다.
  • 정적 graph edge와 runtime routing을 분리해 조건부 이동과 현재 node 유지 동작을 지원합니다.

NLU와 Dialog Act

  • 사용자 입력에서 intent, dialog act, entities, confidence와 slot 상태를 추출합니다.
  • NLG와 NLU에 서로 다른 LLM을 지정할 수 있습니다.
  • question, request, correct, greeting, thank, goodbye를 포함한 16종의 dialog act를 지원합니다.
  • 질문, 요청, 정정, 긍정, 부정, 반복 요청과 무응답을 slot 수집 상태와 함께 처리합니다.
  • 기본 모델은 NLG gpt-4o, NLU gpt-4o-mini로 구성됩니다.

Policy Pipeline

  • Executor 실행 전에 Safety, Fallback, Topic Guard를 적용하는 Global Policy Pipeline을 제공합니다.
  • Slot 수집 node의 update, missing slot과 turn outcome을 결정하는 Task Policy Pipeline을 제공합니다.
  • 응답 생성 이후 반복 방지와 response act를 관리하는 Post Policy Pipeline을 제공합니다.
  • 무응답, 낮은 신뢰도, 이해 불가 입력과 off-topic 발화를 공통 정책으로 처리합니다.
  • 연속 무응답과 fallback 횟수를 context에 기록하고 시나리오 조건에서 사용할 수 있습니다.

Executor

  • 유효한 collect_slots가 있는 node에는 TaskOrientedExecutor를 자동 선택합니다.
  • Slot을 수집하지 않는 node에는 GeneralResponseExecutor를 자동 선택합니다.
  • 도메인별 질문과 응답은 Python 하드코딩 대신 Scenario가 소유합니다.
  • Task Policy의 판단과 NLG 표현 생성을 분리합니다.
  • Node handoff 시 다음 node의 질문을 중복 생성하지 않도록 응답 범위를 제어합니다.

Transition과 종료 제어

  • Global transition, action, node condition, default_next, terminal 판정을 포함한 routing 우선순위를 제공합니다.
  • slots.*, nlu.*, system.*, context.* namespace를 이용한 조건식을 지원합니다.
  • action: stay를 통해 graph self-loop 없이 현재 node에 머물 수 있습니다.
  • terminal: true로 graph topology와 독립적인 종료 node를 선언할 수 있습니다.
  • 명시적인 종료 intent와 closure node를 통해 세션 종료 권한을 routing으로 통합했습니다.
  • Closure node에서 사용자가 대화를 계속하려는 경우 이전 대화로 복귀할 수 있습니다.

자유 대화

  • Slot 수집이나 정해진 목적 없이 대화를 이어가는 free-conversation node를 지원합니다.
  • free_conversation 설정으로 목적 대화용 질문 유도 규칙을 비활성화할 수 있습니다.
  • turn_limit_enabled를 이용해 node별 turn limit 적용 여부를 제어할 수 있습니다.
  • 명시적인 종료 의도가 감지되기 전까지 현재 대화 node에 머무는 시나리오를 구성할 수 있습니다.

State 저장

  • Process-local in-memory 저장소를 지원합니다.
  • Redis 기반 ContextStore를 통해 DialogueState를 저장할 수 있습니다.
  • Session TTL과 context TTL을 환경 변수로 설정할 수 있습니다.
  • Slot value의 값, confidence, source와 update 시점을 함께 관리합니다.

CLI

  • Scenario 실행, 구조 검증과 node 목록 조회 기능을 제공합니다.
  • 특정 node에서 시작해 이동을 보류하면서 반복 테스트할 수 있습니다.
  • chat, compact, detailed, debug 출력 수준을 제공합니다.
  • Detailed 출력에서 NLU, slot update, policy, routing과 transition 결과를 확인할 수 있습니다.
  • NLG/NLU 모델, Redis 사용 여부와 사용자 선입력 등을 실행 옵션으로 지정할 수 있습니다.

Dialogue Manager API

  • Scenario 이름 또는 JSON payload로 session을 생성할 수 있습니다.
  • Session에 사용자 메시지를 전달하고 턴 처리 결과를 받을 수 있습니다.
  • Session state 조회와 Scenario JSON 검증 endpoint를 제공합니다.
  • FastAPI/Pydantic 기반 request·response schema와 OpenAPI 생성을 지원합니다.
  • API version을 저장소 루트의 version.py에서 일관되게 관리합니다.

제공 시나리오

  • SeniMate: 일상, 식사와 건강 상태 확인 후 자유 대화와 마무리로 이어지는 시나리오
  • General Conversation: 목적과 slot 수집 없이 명시적 종료 전까지 대화를 이어가는 시나리오
  • Card Issuance: 개인정보, 카드 종류, 소득, 배송 정보와 동의를 수집해 신청 결과를 분기하는 시나리오
  • Call for Fire: 군사 도메인의 정보 수집과 절차 실행 시나리오
  • Dental Caries: 치과 진료 상담 흐름을 구성한 시나리오

문서

  • Graph Builder 아키텍처, class diagram과 DSTManager call flow를 제공합니다.
  • NLU, Policy, Executor, Transition과 DialogueState의 구현 계약을 문서화했습니다.
  • Dialogue Manager API endpoint와 request·response schema를 문서화했습니다.
  • Scenario v2 생성 가이드와 실제 시나리오별 graph, slot, intent, dialog act 문서를 제공합니다.
  • 최초 fork 이후의 주요 설계 변경과 문제 해결 과정을 refactor 문서로 제공합니다.

주요 문서