govon 1.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- govon-1.0.5/LICENSE +21 -0
- govon-1.0.5/PKG-INFO +422 -0
- govon-1.0.5/README.md +338 -0
- govon-1.0.5/govon.egg-info/PKG-INFO +422 -0
- govon-1.0.5/govon.egg-info/SOURCES.txt +62 -0
- govon-1.0.5/govon.egg-info/dependency_links.txt +1 -0
- govon-1.0.5/govon.egg-info/entry_points.txt +2 -0
- govon-1.0.5/govon.egg-info/requires.txt +62 -0
- govon-1.0.5/govon.egg-info/top_level.txt +1 -0
- govon-1.0.5/pyproject.toml +206 -0
- govon-1.0.5/setup.cfg +4 -0
- govon-1.0.5/src/__init__.py +8 -0
- govon-1.0.5/src/cli/__init__.py +8 -0
- govon-1.0.5/src/cli/approval_ui.py +284 -0
- govon-1.0.5/src/cli/commands.py +49 -0
- govon-1.0.5/src/cli/daemon.py +238 -0
- govon-1.0.5/src/cli/http_client.py +322 -0
- govon-1.0.5/src/cli/renderer.py +565 -0
- govon-1.0.5/src/cli/shell.py +506 -0
- govon-1.0.5/src/cli/terminal.py +56 -0
- govon-1.0.5/src/data_collection_preprocessing/__init__.py +13 -0
- govon-1.0.5/src/data_collection_preprocessing/__main__.py +5 -0
- govon-1.0.5/src/data_collection_preprocessing/cli.py +76 -0
- govon-1.0.5/src/data_collection_preprocessing/config.py +14 -0
- govon-1.0.5/src/data_collection_preprocessing/parsers.py +235 -0
- govon-1.0.5/src/data_collection_preprocessing/pipeline.py +177 -0
- govon-1.0.5/src/inference/__init__.py +0 -0
- govon-1.0.5/src/inference/actions/__init__.py +4 -0
- govon-1.0.5/src/inference/actions/base.py +226 -0
- govon-1.0.5/src/inference/actions/data_go_kr.py +931 -0
- govon-1.0.5/src/inference/adapter_registry.py +258 -0
- govon-1.0.5/src/inference/agent_manager.py +134 -0
- govon-1.0.5/src/inference/api_server.py +1529 -0
- govon-1.0.5/src/inference/db/__init__.py +58 -0
- govon-1.0.5/src/inference/db/alembic/env.py +82 -0
- govon-1.0.5/src/inference/db/alembic/versions/001_create_rag_tables.py +346 -0
- govon-1.0.5/src/inference/db/crud.py +306 -0
- govon-1.0.5/src/inference/db/database.py +77 -0
- govon-1.0.5/src/inference/db/models.py +448 -0
- govon-1.0.5/src/inference/feature_flags.py +54 -0
- govon-1.0.5/src/inference/graph/__init__.py +27 -0
- govon-1.0.5/src/inference/graph/builder.py +212 -0
- govon-1.0.5/src/inference/graph/capabilities/__init__.py +32 -0
- govon-1.0.5/src/inference/graph/capabilities/api_lookup.py +292 -0
- govon-1.0.5/src/inference/graph/capabilities/base.py +131 -0
- govon-1.0.5/src/inference/graph/capabilities/defaults.py +91 -0
- govon-1.0.5/src/inference/graph/capabilities/demographics_lookup.py +310 -0
- govon-1.0.5/src/inference/graph/capabilities/issue_detector.py +315 -0
- govon-1.0.5/src/inference/graph/capabilities/keyword_analyzer.py +288 -0
- govon-1.0.5/src/inference/graph/capabilities/registry.py +70 -0
- govon-1.0.5/src/inference/graph/capabilities/stats_lookup.py +323 -0
- govon-1.0.5/src/inference/graph/nodes.py +731 -0
- govon-1.0.5/src/inference/graph/state.py +79 -0
- govon-1.0.5/src/inference/graph/tools/__init__.py +76 -0
- govon-1.0.5/src/inference/graph/tools/adapter_tools.py +76 -0
- govon-1.0.5/src/inference/graph/tools/analysis_tools.py +232 -0
- govon-1.0.5/src/inference/graph/tools/search_tools.py +75 -0
- govon-1.0.5/src/inference/health_checker.py +115 -0
- govon-1.0.5/src/inference/prompt_validator.py +87 -0
- govon-1.0.5/src/inference/rate_tracker.py +124 -0
- govon-1.0.5/src/inference/response_formatter.py +123 -0
- govon-1.0.5/src/inference/runtime_config.py +393 -0
- govon-1.0.5/src/inference/schemas.py +71 -0
- govon-1.0.5/src/inference/session_context.py +752 -0
govon-1.0.5/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 umyunsang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
govon-1.0.5/PKG-INFO
ADDED
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: govon
|
|
3
|
+
Version: 1.0.5
|
|
4
|
+
Summary: Agentic CLI shell for Korean public-sector civil complaint workflows
|
|
5
|
+
Author-email: umyunsang <dbstkd5865@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/GovOn-org/GovOn
|
|
8
|
+
Project-URL: Documentation, https://github.com/GovOn-org/GovOn#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/GovOn-org/GovOn.git
|
|
10
|
+
Project-URL: Issues, https://github.com/GovOn-org/GovOn/issues
|
|
11
|
+
Keywords: agentic-shell,cli,civil-complaint,korean-nlp,public-sector
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: httpx>=0.27.0
|
|
28
|
+
Requires-Dist: loguru>=0.7.0
|
|
29
|
+
Requires-Dist: rich>=13.0.0
|
|
30
|
+
Requires-Dist: prompt-toolkit>=3.0.0
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
37
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
|
39
|
+
Requires-Dist: pre-commit>=3.4.0; extra == "dev"
|
|
40
|
+
Requires-Dist: bandit>=1.7.5; extra == "dev"
|
|
41
|
+
Requires-Dist: safety>=2.3.5; extra == "dev"
|
|
42
|
+
Provides-Extra: test
|
|
43
|
+
Requires-Dist: pytest>=7.4.0; extra == "test"
|
|
44
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
45
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
|
|
46
|
+
Provides-Extra: server
|
|
47
|
+
Requires-Dist: torch>=2.8.0; extra == "server"
|
|
48
|
+
Requires-Dist: transformers>=4.53.0; extra == "server"
|
|
49
|
+
Requires-Dist: accelerate>=1.0.0; extra == "server"
|
|
50
|
+
Requires-Dist: datasets>=2.14.0; extra == "server"
|
|
51
|
+
Requires-Dist: bitsandbytes>=0.44.0; extra == "server"
|
|
52
|
+
Requires-Dist: optimum>=1.13.0; extra == "server"
|
|
53
|
+
Requires-Dist: autoawq>=0.2.8; extra == "server"
|
|
54
|
+
Requires-Dist: peft>=0.16.0; extra == "server"
|
|
55
|
+
Requires-Dist: trl>=0.15.0; extra == "server"
|
|
56
|
+
Requires-Dist: vllm>=0.14.1; extra == "server"
|
|
57
|
+
Requires-Dist: fastapi>=0.100.0; extra == "server"
|
|
58
|
+
Requires-Dist: uvicorn>=0.23.0; extra == "server"
|
|
59
|
+
Requires-Dist: pydantic>=2.0.0; extra == "server"
|
|
60
|
+
Requires-Dist: rank-bm25>=0.2.2; extra == "server"
|
|
61
|
+
Requires-Dist: sentence-transformers>=3.0.0; extra == "server"
|
|
62
|
+
Requires-Dist: faiss-cpu>=1.7.4; extra == "server"
|
|
63
|
+
Requires-Dist: langgraph==1.1.6; extra == "server"
|
|
64
|
+
Requires-Dist: langgraph-checkpoint==4.0.1; extra == "server"
|
|
65
|
+
Requires-Dist: langgraph-checkpoint-sqlite==3.0.3; extra == "server"
|
|
66
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.0; extra == "server"
|
|
67
|
+
Requires-Dist: langchain-openai>=0.3.0; extra == "server"
|
|
68
|
+
Requires-Dist: pandas>=2.0.0; extra == "server"
|
|
69
|
+
Requires-Dist: numpy>=1.24.0; extra == "server"
|
|
70
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "server"
|
|
71
|
+
Requires-Dist: tqdm>=4.66.0; extra == "server"
|
|
72
|
+
Requires-Dist: python-dotenv>=1.0.0; extra == "server"
|
|
73
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "server"
|
|
74
|
+
Provides-Extra: korean-nlp
|
|
75
|
+
Requires-Dist: konlpy>=0.6.0; extra == "korean-nlp"
|
|
76
|
+
Requires-Dist: mecab-python3>=1.0.6; extra == "korean-nlp"
|
|
77
|
+
Provides-Extra: database
|
|
78
|
+
Requires-Dist: sqlalchemy>=2.0.0; extra == "database"
|
|
79
|
+
Requires-Dist: alembic>=1.12.0; extra == "database"
|
|
80
|
+
Requires-Dist: psycopg2-binary>=2.9.0; extra == "database"
|
|
81
|
+
Provides-Extra: all
|
|
82
|
+
Requires-Dist: govon[database,dev,korean-nlp,server]; extra == "all"
|
|
83
|
+
Dynamic: license-file
|
|
84
|
+
|
|
85
|
+
# GovOn — Agentic CLI Shell for Korean Public Sector
|
|
86
|
+
|
|
87
|
+
> **"도로 파손 민원에 대한 답변 초안을 작성해줘"** — 한마디면 AI가 법령을 찾고, 유사 사례를 조회하고, 공문서 형식의 초안을 생성합니다.
|
|
88
|
+
|
|
89
|
+
GovOn은 **동아대학교 컴퓨터공학과** 현장미러형 산학연계 프로젝트로 개발된 에이전틱 CLI 셸입니다.
|
|
90
|
+
지방자치단체 공무원의 민원 답변 업무를 AI 에이전트가 보조합니다.
|
|
91
|
+
|
|
92
|
+
[](https://pypi.org/project/govon/)
|
|
93
|
+
[](https://pypi.org/project/govon/)
|
|
94
|
+
[](https://govon-org.github.io/GovOn/)
|
|
95
|
+
[](https://github.com/GovOn-Org/GovOn/issues/402)
|
|
96
|
+
[](https://huggingface.co/spaces/umyunsang/govon-runtime)
|
|
97
|
+
[](https://github.com/GovOn-Org/GovOn/discussions/606)
|
|
98
|
+
|
|
99
|
+
<!-- DORA-BADGES:START -->
|
|
100
|
+

|
|
101
|
+

|
|
102
|
+

|
|
103
|
+

|
|
104
|
+

|
|
105
|
+
<!-- DORA-BADGES:END -->
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 핵심 특징
|
|
110
|
+
|
|
111
|
+
### 1. ReAct 자율 에이전트
|
|
112
|
+
|
|
113
|
+
LLM이 사용자의 의도를 이해하고 **7개 도구 중 어떤 것을 호출할지 자율적으로 판단**합니다.
|
|
114
|
+
키워드 매칭이 아니라, 맥락 기반 추론으로 도구를 선택합니다.
|
|
115
|
+
|
|
116
|
+
| 도구 | 역할 |
|
|
117
|
+
|------|------|
|
|
118
|
+
| `api_lookup` | 민원 데이터 API 조회 |
|
|
119
|
+
| `issue_detector` | 주요 이슈 탐지 |
|
|
120
|
+
| `stats_lookup` | 통계 데이터 조회 |
|
|
121
|
+
| `keyword_analyzer` | 핵심 키워드 분석 |
|
|
122
|
+
| `demographics_lookup` | 인구통계 조회 |
|
|
123
|
+
| `public_admin_adapter` | 공공행정 민원 답변 생성 (civil LoRA) |
|
|
124
|
+
| `legal_adapter` | 법률 해석 및 법령 인용 답변 생성 (legal LoRA) |
|
|
125
|
+
|
|
126
|
+
### 2. 도메인 특화 Multi-LoRA
|
|
127
|
+
|
|
128
|
+
단일 EXAONE 4.0-32B-AWQ 베이스 모델 위에 요청별로 LoRA 어댑터를 동적 전환합니다.
|
|
129
|
+
|
|
130
|
+
| 어댑터 | 학습 데이터 | 용도 |
|
|
131
|
+
|--------|-----------|------|
|
|
132
|
+
| [**civil-adapter**](https://huggingface.co/umyunsang/govon-civil-adapter) (r16) | 74K 민원-답변 쌍 | `public_admin_adapter` tool_call 시 attach |
|
|
133
|
+
| [**legal-adapter**](https://huggingface.co/siwo/govon-legal-adapter) (r16) | 270K 법률 문서 | `legal_adapter` tool_call 시 attach |
|
|
134
|
+
|
|
135
|
+
### 3. Human-in-the-loop 승인 흐름
|
|
136
|
+
|
|
137
|
+
AI가 도구를 실행하기 전에 사용자에게 승인을 요청합니다.
|
|
138
|
+
완전 자동화가 아닌, **사람의 판단을 존중하는 반자동화**입니다.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
$ govon
|
|
142
|
+
GovOn Shell v1.0 — 무엇을 도와드릴까요?
|
|
143
|
+
|
|
144
|
+
> 도로 파손 민원에 대한 답변 초안을 작성해줘
|
|
145
|
+
|
|
146
|
+
┌─ 작업 승인 요청 ─────────────────┐
|
|
147
|
+
│ 유형: 답변 초안 작성 │
|
|
148
|
+
│ 목표: 도로 파손 민원 답변 생성 │
|
|
149
|
+
│ 작업: │
|
|
150
|
+
│ • 민원 처리 근거 확인 │
|
|
151
|
+
│ • 유사 사례 및 담당 부서 조회 │
|
|
152
|
+
│ │
|
|
153
|
+
│ ● 승인 ○ 거절 │
|
|
154
|
+
└───────────────────────────────────┘
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 아키텍처
|
|
160
|
+
|
|
161
|
+
```mermaid
|
|
162
|
+
graph LR
|
|
163
|
+
subgraph Client ["사용자 터미널"]
|
|
164
|
+
CLI["govon CLI"]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
subgraph HFSpace ["HF Space — A100 80GB"]
|
|
168
|
+
subgraph FastAPI ["FastAPI :7860"]
|
|
169
|
+
V4["v4 Agent\n(approval flow)"]
|
|
170
|
+
V3["v3 Agent\n(auto-execute)"]
|
|
171
|
+
CTX["6-Layer\nContext Mgmt"]
|
|
172
|
+
end
|
|
173
|
+
subgraph VLLM ["vLLM :8000"]
|
|
174
|
+
BASE["EXAONE-4.0\n32B-AWQ"]
|
|
175
|
+
LORA1["civil LoRA"]
|
|
176
|
+
LORA2["legal LoRA"]
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
CLI -- "HTTP/SSE" --> V4
|
|
181
|
+
CLI -- "HTTP/SSE" --> V3
|
|
182
|
+
V4 --> CTX
|
|
183
|
+
V3 --> CTX
|
|
184
|
+
V4 -- "httpx" --> BASE
|
|
185
|
+
V3 -- "httpx" --> BASE
|
|
186
|
+
BASE --- LORA1
|
|
187
|
+
BASE --- LORA2
|
|
188
|
+
|
|
189
|
+
style Client fill:#e0f2fe,stroke:#0284c7
|
|
190
|
+
style HFSpace fill:#fef3c7,stroke:#d97706
|
|
191
|
+
style FastAPI fill:#dcfce7,stroke:#16a34a
|
|
192
|
+
style VLLM fill:#fce7f3,stroke:#db2777
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### ReAct 루프 흐름
|
|
196
|
+
|
|
197
|
+
```mermaid
|
|
198
|
+
graph TD
|
|
199
|
+
START([START]) --> SL[session_load\n컨텍스트 복원]
|
|
200
|
+
SL --> AGENT[agent\nLLM 자율 도구 선택]
|
|
201
|
+
AGENT -->|tool_calls 없음| END_NODE[persist + END]
|
|
202
|
+
AGENT -->|Tier 0 도구| TOOLS[tools\nToolNode 실행]
|
|
203
|
+
AGENT -->|승인 필요| APPROVAL[approval_wait\nHuman-in-the-loop]
|
|
204
|
+
APPROVAL -->|승인| TOOLS
|
|
205
|
+
APPROVAL -->|거절| AGENT
|
|
206
|
+
TOOLS --> AGENT
|
|
207
|
+
|
|
208
|
+
style SL fill:#dbeafe
|
|
209
|
+
style AGENT fill:#fef9c3
|
|
210
|
+
style TOOLS fill:#dcfce7
|
|
211
|
+
style END_NODE fill:#f3e8ff
|
|
212
|
+
style APPROVAL fill:#fee2e2
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 6-Layer 컨텍스트 관리
|
|
216
|
+
|
|
217
|
+
장기 대화에서 토큰 오버플로를 방지하는 6단계 파이프라인:
|
|
218
|
+
|
|
219
|
+
| Layer | 단계 | 메커니즘 |
|
|
220
|
+
|-------|------|---------|
|
|
221
|
+
| L1 | 도구 실행 | 도구 출력 3000자 head+tail 절단 |
|
|
222
|
+
| L2 | LLM 호출 | 오래된 도구 결과 placeholder 교체 |
|
|
223
|
+
| L3 | LLM 호출 | 역순 토큰 예산 trim (4500 토큰) |
|
|
224
|
+
| L4 | LLM 호출 | 예산 초과 시 강제 제거 |
|
|
225
|
+
| L5 | 세션 복원 | 룰 기반 대화 요약 |
|
|
226
|
+
| L6 | 세션 복원 | 토큰 예산 영구 삭제 |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 데이터 파이프라인
|
|
231
|
+
|
|
232
|
+
```mermaid
|
|
233
|
+
flowchart LR
|
|
234
|
+
subgraph Sources["공공 데이터 소스"]
|
|
235
|
+
A1["AI Hub 71852\n민원 QA 29K"]
|
|
236
|
+
A2["AI Hub 71847\n행정법 QA 37K"]
|
|
237
|
+
A3["AI Hub 71841/43/48\n민사/지재/형사 200K"]
|
|
238
|
+
A4["HF 판례\n법원 판결 85K"]
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
subgraph Civil["Civil Adapter"]
|
|
242
|
+
B1["parsers.py"] --> B2["train 74K"]
|
|
243
|
+
B2 --> B3["HF Hub"]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
subgraph Legal["Legal Adapter"]
|
|
247
|
+
C1["build_dataset.py"] --> C2["train 270K"]
|
|
248
|
+
C2 --> C3["HF Hub"]
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
subgraph Training["Unsloth QLoRA"]
|
|
252
|
+
D1["EXAONE 4.0-32B\n4-bit NF4"] --> D2["LoRA r16"]
|
|
253
|
+
D2 --> D3["HF Spaces\nA100 80GB"]
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
A1 --> B1
|
|
257
|
+
A2 --> B1
|
|
258
|
+
A3 --> C1
|
|
259
|
+
A4 --> C1
|
|
260
|
+
B3 --> D1
|
|
261
|
+
C3 --> D1
|
|
262
|
+
|
|
263
|
+
style Sources fill:#e0f2fe,stroke:#0284c7
|
|
264
|
+
style Civil fill:#dcfce7,stroke:#16a34a
|
|
265
|
+
style Legal fill:#fce7f3,stroke:#db2777
|
|
266
|
+
style Training fill:#fef9c3,stroke:#ca8a04
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
| 데이터셋 | 건수 | HuggingFace Hub |
|
|
270
|
+
|---------|------|-----------------|
|
|
271
|
+
| Civil Response | 74K | [umyunsang/govon-civil-response-data](https://huggingface.co/datasets/umyunsang/govon-civil-response-data) |
|
|
272
|
+
| Legal Citation | 270K | [umyunsang/govon-legal-response-data](https://huggingface.co/datasets/umyunsang/govon-legal-response-data) |
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 설치
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# PyPI에서 CLI 클라이언트 설치
|
|
280
|
+
pip install govon
|
|
281
|
+
|
|
282
|
+
# 서버 런타임 전체 설치 (GPU 환경)
|
|
283
|
+
pip install govon[server]
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## 빠른 시작
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# 1. HF Space 런타임에 직접 요청
|
|
290
|
+
export GOVON_RUNTIME_URL=https://umyunsang-govon-runtime.hf.space
|
|
291
|
+
|
|
292
|
+
# 2. v3 자동 실행 모드
|
|
293
|
+
curl -X POST $GOVON_RUNTIME_URL/v3/agent/run \
|
|
294
|
+
-H "Content-Type: application/json" \
|
|
295
|
+
-d '{"query": "도로 파손 민원 현황 알려줘", "session_id": "demo-1", "max_iterations": 10}'
|
|
296
|
+
|
|
297
|
+
# 3. v4 승인 흐름 (CLI 권장)
|
|
298
|
+
pip install govon
|
|
299
|
+
export GOVON_RUNTIME_URL=https://umyunsang-govon-runtime.hf.space
|
|
300
|
+
govon
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
상세한 사용법은 [사용자 가이드](docs/guide/user-guide.md)를 참고하세요.
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 검증 지표
|
|
308
|
+
|
|
309
|
+
### E2E 테스트: 27/27 통과
|
|
310
|
+
|
|
311
|
+
| Phase | 시나리오 | 검증 대상 |
|
|
312
|
+
|-------|---------|---------|
|
|
313
|
+
| 1. Infrastructure | 3 | 헬스체크, 베이스 모델, vLLM 연결 |
|
|
314
|
+
| 2. v2 Pipeline | 6 | 승인 흐름, 거절, 멀티턴, 동시성 |
|
|
315
|
+
| 3. v3 ReAct | 10 | 직접 응답, 도구 실행, SSE 스트리밍 |
|
|
316
|
+
| 4. Cross-version | 2 | v2↔v3 일관성 |
|
|
317
|
+
| 5. Multi-turn | 3 | 컨텍스트 유지, 세션 격리, 3턴 워크플로우 |
|
|
318
|
+
| 6. Context Mgmt | 3 | 도구 클리어링, 5턴 요약 |
|
|
319
|
+
|
|
320
|
+
### DORA Elite
|
|
321
|
+
|
|
322
|
+
| 지표 | 값 | 수집 방식 |
|
|
323
|
+
|------|---|----------|
|
|
324
|
+
| Deployment Frequency | 30/주 | main 머지 PR 수 |
|
|
325
|
+
| Lead Time | 0.9h | PR 첫 커밋 → 머지 |
|
|
326
|
+
| Change Failure Rate | 28.6% | hotfix/revert 비율 |
|
|
327
|
+
| MTTR | 0.0h | bug 이슈 open → close |
|
|
328
|
+
|
|
329
|
+
- **실시간 대시보드**: [Grafana Cloud](https://umyunsang.grafana.net/d/govon-dora/)
|
|
330
|
+
- **주간 보고서**: [`metrics/reports/`](metrics/reports/)
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 문서
|
|
335
|
+
|
|
336
|
+
| 문서 | 설명 |
|
|
337
|
+
|------|------|
|
|
338
|
+
| [사용자 가이드](docs/guide/user-guide.md) | 설치, CLI 사용법, 도구 설명 |
|
|
339
|
+
| [운영 가이드](docs/guide/ops-guide.md) | 배포, 환경변수, 모니터링, 트러블슈팅 |
|
|
340
|
+
| [데모 패키지](docs/demo/README.md) | 시연 시나리오 3종 + curl 재현 |
|
|
341
|
+
| [프로젝트 회고](docs/retrospective.md) | v1→v4 진화, 기술적 도전, KPT |
|
|
342
|
+
| [ADR](docs/adr/README.md) | Architecture Decision Records |
|
|
343
|
+
| [PRD](docs/prd.md) | Product Requirements Document |
|
|
344
|
+
| [WBS](docs/wbs.md) | Work Breakdown Structure |
|
|
345
|
+
| [Docs Portal](https://govon-org.github.io/GovOn/) | GitHub Pages 통합 문서 |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## 프로젝트 구조
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
src/
|
|
353
|
+
├── cli/ # CLI 인터페이스
|
|
354
|
+
│ ├── shell.py # 인터랙티브 REPL
|
|
355
|
+
│ ├── approval_ui.py # Rich Panel 승인 UI
|
|
356
|
+
│ ├── daemon.py # 백그라운드 데몬
|
|
357
|
+
│ └── renderer.py # 출력 렌더러
|
|
358
|
+
└── inference/ # 추론 엔진
|
|
359
|
+
├── api_server.py # FastAPI 서버
|
|
360
|
+
├── session_context.py # SQLite 세션 저장소
|
|
361
|
+
└── graph/ # LangGraph 코어
|
|
362
|
+
├── builder.py # v4/v3 그래프 빌더
|
|
363
|
+
├── nodes.py # 노드 팩토리 (5개 노드)
|
|
364
|
+
├── state.py # GovOnGraphState
|
|
365
|
+
├── capabilities/ # 도구 Capability 클래스
|
|
366
|
+
└── tools/ # StructuredTool 팩토리
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## API 엔드포인트
|
|
372
|
+
|
|
373
|
+
| 메서드 | 엔드포인트 | 용도 |
|
|
374
|
+
|--------|-----------|------|
|
|
375
|
+
| GET | `/health` | 헬스체크 (인증 불필요) |
|
|
376
|
+
| POST | `/v2/agent/stream` | v4 에이전트 스트리밍 (승인 흐름) |
|
|
377
|
+
| POST | `/v2/agent/run` | v4 에이전트 동기 실행 |
|
|
378
|
+
| POST | `/v2/agent/approve` | 도구 실행 승인/거절 |
|
|
379
|
+
| POST | `/v2/agent/cancel` | 실행 취소 |
|
|
380
|
+
| POST | `/v3/agent/stream` | v3 에이전트 SSE 스트리밍 |
|
|
381
|
+
| POST | `/v3/agent/run` | v3 에이전트 동기 실행 |
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## 리소스
|
|
386
|
+
|
|
387
|
+
| 자원 | 링크 |
|
|
388
|
+
|------|------|
|
|
389
|
+
| HF Space (Runtime) | [umyunsang/govon-runtime](https://huggingface.co/spaces/umyunsang/govon-runtime) |
|
|
390
|
+
| Civil Adapter | [umyunsang/govon-civil-adapter](https://huggingface.co/umyunsang/govon-civil-adapter) |
|
|
391
|
+
| Legal Adapter | [siwo/govon-legal-adapter](https://huggingface.co/siwo/govon-legal-adapter) |
|
|
392
|
+
| Civil Dataset | [umyunsang/govon-civil-response-data](https://huggingface.co/datasets/umyunsang/govon-civil-response-data) |
|
|
393
|
+
| Legal Dataset | [umyunsang/govon-legal-response-data](https://huggingface.co/datasets/umyunsang/govon-legal-response-data) |
|
|
394
|
+
| DORA Dashboard | [Grafana Cloud](https://umyunsang.grafana.net/d/govon-dora/) |
|
|
395
|
+
| Public Roadmap | [#402](https://github.com/GovOn-Org/GovOn/issues/402) |
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## 개발 규칙
|
|
400
|
+
|
|
401
|
+
- 브랜치 전략: GitHub Flow (`main` 단일 브랜치)
|
|
402
|
+
- 모든 변경은 PR을 통해 진행
|
|
403
|
+
- CI: lint(Black+isort+flake8) + test(pytest 3.10/3.11/3.12) + security + runtime-contract
|
|
404
|
+
- 기여 가이드: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## GitHub 이슈 구조
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
#402 Public Roadmap (root)
|
|
412
|
+
├── Workstream (🧭 라벨)
|
|
413
|
+
│ └── Task ([Task X.Y] 접두사)
|
|
414
|
+
└── Workstream
|
|
415
|
+
└── Task
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## 라이선스
|
|
421
|
+
|
|
422
|
+
이 프로젝트는 동아대학교 현장미러형 산학연계 프로젝트의 산출물입니다.
|