MMCL/backend/05. 자연어 검색 API로 변경(장비명 추출).txt
2026-09-04 11:24:42 +09:00

75 lines
4.3 KiB
Plaintext

# 자연어 기반 장비명 추출 및 API 통신 구조 변경 계획
사용자가 `machine_id`를 명시적으로 알 필요 없이 자연어(예: "CNC 선반 1호기 빨간색 켜줘")만 보내면 파이썬 백엔드의 LLM이 장비명과 색상을 함께 추출하여 자동으로 매핑하도록 구조를 개선합니다.
## ⚠️ User Review Required (검토 및 확인 필요)
> [!IMPORTANT]
> 본 구조로 변경되면 클라이언트는 `machine_id` 없이 오직 `{"message": "자연어 텍스트"}` 형태의 페이로드만 전송하게 됩니다.
> 백엔드의 LLM 프롬프트가 `JSON` 포맷으로 장비명과 색상을 추출하도록 변경되며, 데이터베이스에서는 추출된 장비명으로 `LIKE` 검색을 수행합니다. 이 설계가 맞는지 확인 부탁드립니다.
## 🛠️ Proposed Changes (제안하는 코드 변경 사항)
### 1. `backend/main.py`
* **[MODIFY] API 요청 모델 (`ChatRequest`)**:
* `machine_id` 필드를 삭제하고 `message` 필드만 남깁니다.
* **[MODIFY] 프롬프트 (`get_control_prompt`)**:
* 단순 색상 텍스트가 아닌 JSON 형태로 `{ "machine_name": "...", "color": "..." }` 값을 추출하도록 지시문(Prompt)을 변경합니다.
* **[MODIFY] 의도 분석 함수 (`analyze_intent_with_llm`)**:
* LLM이 반환한 결과값에서 JSON을 파싱하여 `machine_name`과 `color` 값을 동시에 반환(`target, color_name, machine_name`) 하도록 구조를 개선합니다.
* **[MODIFY] API 엔드포인트 (`chat_control`)**:
* 요청 모델에 `machine_id`가 없어졌으므로, LLM이 반환한 `machine_name`을 이용해 DB의 `dev_info` 테이블에서 장비를 찾습니다.
* 검색 방식: `SELECT dev_no, led_sensorNo FROM dev_info WHERE dev_name LIKE %s`
## ✅ Verification Plan (검증 계획)
* Postman이나 `curl`을 통해 POST `/api/chat_control` 호출 시 페이로드에 `{"message": "CNC 선반 1호기 노란색 켜줘"}` 만 보냅니다.
* API가 정상적으로 장비("CNC 선반 1호기")를 매핑하고 15초 타임아웃 룰을 거쳐 LEDAgent와 핸드쉐이크가 되는지 확인합니다.
# 자연어 기반 장비 제어 (LLM JSON 매핑) 워크스루
클라이언트에서 복잡하게 장비 ID(`machine_id`)를 관리하거나 전송할 필요 없이, 오직 자연어 문자열 하나만 던지면 서버가 장비명과 색상을 모두 유추해 내는 지능형 API로 백엔드를 업데이트했습니다.
## 주요 변경 사항 요약
1. **API 페이로드 간소화 (`/api/chat_control`)**:
이제 POST 요청 시 `machine_id`를 보내지 않아도 됩니다.
오직 `{"message": "자연어 문장"}` 형태만 보내면 동작합니다.
2. **LLM 프롬프트 고도화 (JSON 응답 유도)**:
기존에는 LLM에게 'RED, YELLOW, GREEN 중 하나만 대답해' 라고 지시했지만, 이제는 **JSON 포맷**으로 대답하라고 지시합니다.
(예: `{"machine_name": "CNC 선반 1호기", "color": "RED"}`)
3. **자동 `LIKE` 매핑 시스템 (`main.py`)**:
LLM이 JSON 형태로 추출해 낸 `machine_name`을 이용해, 서버가 `dev_info` 테이블에서 `LIKE '%CNC 선반 1호기%'` 조건으로 쿼리하여 스스로 장비를 찾아냅니다. 장비를 찾으면 해당 장비에 매핑된 경광등(LED)과 앞서 구성한 **중앙 관제 델파이 에이전트** 간의 통신(Handshake)을 시작합니다.
## 확인 및 테스트 방법
> [!TIP]
> 이제 파이썬 백엔드가 설치된 Ubuntu 서버에서 `main.py`를 다시 실행해 주셔야 합니다.
1. Ubuntu 터미널에서 백엔드를 재시작합니다.
```bash
cd ~/mmcl_backend
kill -9 (기존 실행중인 프로세스 PID)
nohup uvicorn main:app --host 0.0.0.0 --port 8000 > backend.log 2>&1 &
```
2. Postman 등 REST API 테스트 도구를 사용하여 다음 형태로 전송해 보세요.
* **URL**: `POST http://[우분투서버IP]:8000/api/chat_control`
* **Body (JSON)**:
```json
{
"message": "CNC 선반 1호기 에러 났어 빨간색 불 켜줘"
}
```
3. 에이전트(`LEDAgent.exe`)가 켜져 있다면 곧바로 장비를 찾아 LED를 켜주고, 15초 내에 파이썬 서버로부터 `[LLM] 명령이 승인되었습니다.` 라는 성공적인 자연어 응답이 내려오는 것을 확인하실 수 있습니다!