재구성 AX Agent 설정과 채팅 UI를 Claude형 구조로
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
This commit is contained in:
@@ -1,132 +0,0 @@
|
||||
# 자동 모델 라우팅 (Auto Model Router) 개발자 가이드
|
||||
|
||||
## 개요
|
||||
|
||||
자동 모델 라우팅은 사용자 메시지의 유형(코딩/번역/분석 등)을 키워드 기반으로 감지하여,
|
||||
해당 유형에 최적화된 AI 모델로 자동 전환하는 기능입니다.
|
||||
|
||||
**현재 상태**: 잠금 (설정 UI에 표시되나 활성화 불가)
|
||||
**활성화 조건**: 사내 Ollama/vLLM 서버 확정 후 개발자가 아래 절차에 따라 활성화
|
||||
|
||||
---
|
||||
|
||||
## 활성화 절차
|
||||
|
||||
### 1단계: 사내 모델 능력 점수 등록
|
||||
|
||||
**파일**: `src/AxCopilot/Services/ModelRouterService.cs`
|
||||
**메서드**: `GetDefaultCapabilities()`
|
||||
|
||||
주석 처리된 Ollama/vLLM 예시를 해제하고 실제 모델 정보로 수정:
|
||||
|
||||
```csharp
|
||||
// ── 사내 Ollama/vLLM (예시 — 서버 확정 후 수정) ──
|
||||
new()
|
||||
{
|
||||
Service = "ollama", // "ollama" 또는 "vllm"
|
||||
Model = "codellama:34b", // 실제 모델 ID
|
||||
Alias = "CodeLlama 34B", // UI 표시명
|
||||
Scores = new()
|
||||
{
|
||||
["coding"] = 0.85, // 코딩 적합도 (0.0~1.0)
|
||||
["translation"] = 0.40, // 번역 적합도
|
||||
["analysis"] = 0.55, // 분석 적합도
|
||||
["creative"] = 0.35, // 창작 적합도
|
||||
["document"] = 0.40, // 문서 작성 적합도
|
||||
["math"] = 0.50, // 수학/계산 적합도
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
**점수 가이드라인**:
|
||||
| 점수 | 의미 |
|
||||
|------|------|
|
||||
| 0.90+ | 해당 분야 최고 수준 |
|
||||
| 0.70~0.89 | 우수 |
|
||||
| 0.50~0.69 | 보통 |
|
||||
| 0.30~0.49 | 기본 가능하나 비추천 |
|
||||
| 0.30 미만 | 부적합 |
|
||||
|
||||
**인텐트 카테고리 키**:
|
||||
- `coding` — 코드 작성/디버그/리팩토링
|
||||
- `translation` — 번역/다국어
|
||||
- `analysis` — 데이터 분석/요약/비교
|
||||
- `creative` — 창작 글쓰기/스토리/에세이
|
||||
- `document` — 보고서/문서/제안서 작성
|
||||
- `math` — 수학/계산/증명
|
||||
|
||||
### 2단계: 설정 UI 잠금 해제
|
||||
|
||||
**파일**: `src/AxCopilot/Views/SettingsWindow.xaml`
|
||||
|
||||
"자동 모델 라우팅" 섹션에서 다음을 변경:
|
||||
|
||||
1. 두 `Border`의 `Opacity="0.5"` 제거 (또는 `Opacity="1.0"`으로 변경)
|
||||
2. `CheckBox`의 `IsEnabled="False" IsHitTestVisible="False"` 제거
|
||||
3. `Slider`의 `IsEnabled="False"` 제거
|
||||
4. 힌트 텍스트를 "비활성 시 항상 현재 선택된 모델을 사용합니다."로 변경
|
||||
|
||||
### 3단계: 기본값 활성화 (선택)
|
||||
|
||||
사용자가 직접 활성화하도록 할 수도 있지만, 기본 활성화하려면:
|
||||
|
||||
**파일**: `src/AxCopilot/Models/AppSettings.cs`
|
||||
|
||||
```csharp
|
||||
// 변경 전
|
||||
public bool EnableAutoRouter { get; set; } = false;
|
||||
|
||||
// 변경 후
|
||||
public bool EnableAutoRouter { get; set; } = true;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 아키텍처 요약
|
||||
|
||||
```
|
||||
사용자 메시지
|
||||
↓
|
||||
IntentDetector.Detect(message) ← 키워드 매칭으로 인텐트 감지
|
||||
↓ (category, confidence)
|
||||
ModelRouterService.Route(message) ← 후보 모델 점수 비교 → 최적 모델 선택
|
||||
↓ ModelRouteResult
|
||||
ChatWindow.SendMessageAsync() ← PushRouteOverride → LLM 호출 → ClearRouteOverride
|
||||
↓
|
||||
LlmService.ResolveService/ResolveModel ← 오버라이드 있으면 해당 서비스/모델 사용
|
||||
```
|
||||
|
||||
### 핵심 파일
|
||||
|
||||
| 파일 | 역할 |
|
||||
|------|------|
|
||||
| `Services/IntentDetector.cs` | 키워드 기반 인텐트 분류기 |
|
||||
| `Services/ModelRouterService.cs` | 모델 라우팅 로직 + 하드코딩 기본값 |
|
||||
| `Services/LlmService.cs` | PushRouteOverride/ClearRouteOverride |
|
||||
| `Services/LlmService.ToolUse.cs` | 에이전트 도구 호출 시 오버라이드 반영 |
|
||||
| `Models/AppSettings.cs` | EnableAutoRouter, AutoRouterConfidence, ModelCapability |
|
||||
| `Views/ChatWindow.xaml.cs` | 라우터 호출 및 상태 표시 |
|
||||
| `Views/SettingsWindow.xaml` | 설정 UI (현재 잠금) |
|
||||
|
||||
### 키워드 추가/수정
|
||||
|
||||
**파일**: `Services/IntentDetector.cs`
|
||||
|
||||
`_keywords` 딕셔너리에서 카테고리별 키워드와 가중치를 수정할 수 있습니다.
|
||||
한국어 키워드는 `string.Contains`로 매칭 (조사 붙어도 감지),
|
||||
영어 키워드는 단어 경계 매칭 (공백 분리).
|
||||
|
||||
---
|
||||
|
||||
## 테스트 방법
|
||||
|
||||
1. `GetDefaultCapabilities()`에 사내 모델 추가
|
||||
2. 설정 UI 잠금 해제
|
||||
3. `dotnet build` — 경고/오류 0 확인
|
||||
4. 앱 실행 → 설정 → 자동 라우팅 활성화
|
||||
5. 테스트 시나리오:
|
||||
- "이 함수를 리팩토링해줘" → coding 감지 → 코드 특화 모델
|
||||
- "이 문장을 영어로 번역해줘" → translation 감지
|
||||
- "이 데이터를 분석해줘" → analysis 감지
|
||||
- "안녕하세요" → general → 기본 모델 유지 (라우팅 안함)
|
||||
6. 상태바에 "라우팅: coding → [모델명]" 표시 확인
|
||||
Reference in New Issue
Block a user