Spaces:
Sleeping
Sleeping
Update docs/agent-architecture.md
Browse files- docs/agent-architecture.md +27 -17
docs/agent-architecture.md
CHANGED
|
@@ -7,8 +7,8 @@
|
|
| 7 |
1. `bootstrap.py`에서 환경변수와 런타임 데이터 경로를 준비
|
| 8 |
2. `retrieval.py`에서 FAISS 인덱스와 메타데이터를 로드
|
| 9 |
3. `agent.py`에서 Google ADK `LlmAgent`와 retrieval tool 구성
|
| 10 |
-
4. `chat.py`에서 세션 실행
|
| 11 |
-
5. `app_gradio.py`에서 PC
|
| 12 |
|
| 13 |
## 파일별 역할
|
| 14 |
|
|
@@ -59,19 +59,27 @@ tool 반환 핵심:
|
|
| 59 |
### `megumin_agent/chat.py`
|
| 60 |
|
| 61 |
- `Runner`와 `InMemorySessionService` 생성
|
| 62 |
-
-
|
| 63 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
|
| 65 |
### `app_gradio.py`
|
| 66 |
|
| 67 |
- PC용 3패널 레이아웃 제공
|
| 68 |
-
- 왼쪽: 메구밍 프로필
|
| 69 |
-
- 가운데:
|
| 70 |
- 오른쪽: 메구밍 비주얼 패널
|
| 71 |
-
-
|
| 72 |
- `create_chat_services()`는 import 시점이 아니라 첫 질문 시점에 lazy init
|
| 73 |
- 첫 질문 전에는 `서비스 준비 중...`, 이후 응답 생성 중에는 `답변 생성 중...` 상태 표시
|
| 74 |
-
-
|
|
|
|
| 75 |
- 모바일에서는 제목, 최소 설명, 이미지, 채팅창만 보이도록 단순화
|
| 76 |
|
| 77 |
### `app.py`
|
|
@@ -83,15 +91,16 @@ tool 반환 핵심:
|
|
| 83 |
|
| 84 |
사용자 입력이 들어오면:
|
| 85 |
|
| 86 |
-
1. `app_gradio.py`가
|
| 87 |
-
2. `
|
| 88 |
-
3. `
|
| 89 |
-
4. `
|
|
|
|
| 90 |
- 페르소나 데이터 top-3
|
| 91 |
- 사실 데이터 top-3
|
| 92 |
를 각각 검색
|
| 93 |
-
|
| 94 |
-
|
| 95 |
|
| 96 |
## 세션과 메모리
|
| 97 |
|
|
@@ -100,12 +109,13 @@ tool 반환 핵심:
|
|
| 100 |
- 서버 프로세스가 살아 있는 동안만 유지
|
| 101 |
- 재시작 시 초기화
|
| 102 |
- 최근 6턴만 유지
|
| 103 |
-
- 오래된 내용은
|
| 104 |
|
| 105 |
## UI 목적
|
| 106 |
|
| 107 |
-
현재 UI는
|
| 108 |
|
| 109 |
- 캐릭터와 실제로 마주 보고 대화하는 느낌
|
| 110 |
- 반투명 유리 패널 중심 구성
|
| 111 |
-
- 메구밍
|
|
|
|
|
|
| 7 |
1. `bootstrap.py`에서 환경변수와 런타임 데이터 경로를 준비
|
| 8 |
2. `retrieval.py`에서 FAISS 인덱스와 메타데이터를 로드
|
| 9 |
3. `agent.py`에서 Google ADK `LlmAgent`와 retrieval tool 구성
|
| 10 |
+
4. `chat.py`에서 세션 실행, 스트리밍 응답, 대화 요약 관리
|
| 11 |
+
5. `app_gradio.py`에서 PC/모바일 반응형 채팅 UI 제공
|
| 12 |
|
| 13 |
## 파일별 역할
|
| 14 |
|
|
|
|
| 59 |
### `megumin_agent/chat.py`
|
| 60 |
|
| 61 |
- `Runner`와 `InMemorySessionService` 생성
|
| 62 |
+
- `stream_chat()`으로 ADK SSE 스트리밍 응답 생성
|
| 63 |
+
- `chat_once()`는 스트리밍 결과를 모아 최종 문자열만 필요할 때 사용하는 래퍼
|
| 64 |
+
- 최근 6턴을 남기고, 그 이전 대화는 `conversation_summary_map` key-value 구조로 압축
|
| 65 |
+
- 압축된 요약은 짧은 문자열 형태의 `conversation_summary`로도 함께 렌더링
|
| 66 |
+
|
| 67 |
+
요약 구조:
|
| 68 |
+
|
| 69 |
+
- `user_topics`
|
| 70 |
+
- `assistant_points`
|
| 71 |
|
| 72 |
### `app_gradio.py`
|
| 73 |
|
| 74 |
- PC용 3패널 레이아웃 제공
|
| 75 |
+
- 왼쪽: 메구밍 프로필과 예시 질문
|
| 76 |
+
- 가운데: 채팅 패널
|
| 77 |
- 오른쪽: 메구밍 비주얼 패널
|
| 78 |
+
- 첫 접속 시 기본 인삿말을 assistant 메시지로 미리 표시
|
| 79 |
- `create_chat_services()`는 import 시점이 아니라 첫 질문 시점에 lazy init
|
| 80 |
- 첫 질문 전에는 `서비스 준비 중...`, 이후 응답 생성 중에는 `답변 생성 중...` 상태 표시
|
| 81 |
+
- 작은 규칙 기반 상태 배지를 추가해 메구밍의 현재 분위기를 표시
|
| 82 |
+
- ADK의 SSE partial event를 받아 답변을 점진적으로 스트리밍 표시
|
| 83 |
- 모바일에서는 제목, 최소 설명, 이미지, 채팅창만 보이도록 단순화
|
| 84 |
|
| 85 |
### `app.py`
|
|
|
|
| 91 |
|
| 92 |
사용자 입력이 들어오면:
|
| 93 |
|
| 94 |
+
1. `app_gradio.py`가 상태 문구를 먼저 갱신
|
| 95 |
+
2. 첫 질문이면 `get_services()`가 lazy init으로 서비스 준비
|
| 96 |
+
3. `chat.py`의 `stream_chat()`이 ADK `run_async(..., RunConfig(streaming_mode=SSE))`로 실행
|
| 97 |
+
4. `agent.py`의 tool이 retrieval 수행
|
| 98 |
+
5. `retrieval.py`가
|
| 99 |
- 페르소나 데이터 top-3
|
| 100 |
- 사실 데이터 top-3
|
| 101 |
를 각각 검색
|
| 102 |
+
6. ADK partial event가 들어올 때마다 UI가 assistant 답변을 점진적으로 갱신
|
| 103 |
+
7. 세션 종료 후 오래된 이벤트를 key-value summary로 압축
|
| 104 |
|
| 105 |
## 세션과 메모리
|
| 106 |
|
|
|
|
| 109 |
- 서버 프로세스가 살아 있는 동안만 유지
|
| 110 |
- 재시작 시 초기화
|
| 111 |
- 최근 6턴만 유지
|
| 112 |
+
- 오래된 내용은 `user_topics`, `assistant_points` 중심의 key-value summary로 state에 남김
|
| 113 |
|
| 114 |
## UI 목적
|
| 115 |
|
| 116 |
+
현재 UI는 체험형 캐릭터 챗봇 화면을 목표로 합니다.
|
| 117 |
|
| 118 |
- 캐릭터와 실제로 마주 보고 대화하는 느낌
|
| 119 |
- 반투명 유리 패널 중심 구성
|
| 120 |
+
- 메구밍의 기본 소개와 사용 예시 제공
|
| 121 |
+
- 스트리밍 답변과 작은 상태 배지로 생동감 보강
|