PPI · 전사 실패 이후의 응답

AI는 앞 대화를 보고
“다시 물어볼지” 고릅니다.

마지막 업데이트 2026-10-01

기존 대화에 “방금 말을 못 알아들었다”는 안내를 더해, LLM에게 다음 말을 만들어 달라고 요청합니다.

① 전달되는 재료현재 대화 문맥
+ 못 알아들었다는 안내
+ 기존 에이전트 지침
② LLM이 응답 생성“앞 질문에 답이 꼭 필요한가?”
지시와 문맥을 바탕으로 다음 말을 만듭니다.
③ 아동에게 할 말다시 말해 달라고 요청
또는 자연스럽게 대화 계속

코드가 두 문장 중 하나를 선택하는 방식은 아닙니다. LLM이 문장을 생성하므로 정확한 표현과 지시 준수는 보장되지 않습니다.

같은 실패라도, 앞 대화가 다르면

아래는 이해를 위한 가상 예시입니다. 실제 생성 응답이 아닙니다.

답이 필요한 상황
AI: “빨강과 파랑 중 무엇을 고를래?”

아동의 답을 알아듣지 못함

가능한 응답: “다시 한 번 말해 줄래?”

선택을 알아야 다음 단계로 진행할 수 있습니다.

답 없이 이어갈 수 있는 상황
AI: “이제 다음 그림을 같이 보자.”

아동의 말을 알아듣지 못함

가능한 응답: “다음 그림에는 무엇이 보이니?”

못 들은 말의 내용을 지어내지 않고 이어갑니다.

실제로 LLM에 보내는 안내문
(아동의 방금 발화를 알아듣지 못했습니다. 답이 필요하면 다시 말해 달라고 하고, 없어도 괜찮으면 추측하지 말고 자연스럽게 이어가세요. 같은 요청은 반복하지 마세요.)

이 문구는 user_input으로 전달됩니다. 아동이 실제로 한 말이 아니라, 시스템이 복구를 위해 넣는 입력입니다.

브라우저에 발화 기록용으로 보내는 짧은 문구는 (판독 불가)입니다. 이 짧은 문구만으로 응답을 생성하는 것이 아닙니다.

코드에서 확인한 근거와 범위

agent.py:158 부근에서 표시 문구와 LLM 입력 지시문을 각각 정의합니다. _deliver_unreadable_recovery()는 입력 정리와 응답 중단을 시도한 뒤 session.generate_reply(user_input=STT_NO_FINAL_LLM_INPUT_TEXT, tool_choice="none")을 호출합니다.

agent_activity.py:2042 부근에서 일반 LLM 경로는 기존 _agent._chat_ctx를 사용합니다. Realtime 경로는 agent_activity.py:5139 부근에서 현재 대화 문맥을 복사하고 새 입력을 추가합니다. 따라서 복구 안내와 현재 유지되는 대화 문맥을 함께 사용합니다.

특정 세션의 실제 프롬프트 전체나 생성 응답은 확인하지 않았습니다. 위의 예시는 실행 로그가 아닌 설명용이며, 실패한 음성을 다시 전사하거나 그 내용을 복원하는 흐름이 아닙니다.

문서 범위와 확인 기록 · 2026-10-01

이 문서는 PPI-1348의 기존 구현을 설명하는 교육 자료입니다. 앱 코드 변경 및 새로운 배포는 없습니다. 기존 구현 리뷰의 보충 자료로, 변경 전후 분석은 연결된 리뷰를 참고하세요.

확인 기준: PPI 브랜치 커밋 ba3942742f5d2144a8ae9c24ee6fd7924a545795. apps/livekit-agent/agent.py의 복구 지시문과 호출, apps/livekit-agent/vendor/livekit-agents/livekit/agents/voice/agent_activity.py의 대화 문맥 전달 코드를 직접 확인했습니다.

검증: 원문 코드 대조, 문서 목록 등록 및 상대 링크 확인. 런타임 변경이 없어 앱 테스트는 실행하지 않았으며, 브라우저 렌더링 검증과 실제 생성 응답 관찰은 수행하지 않았습니다.