홈으로 돌아가기

코드로 구현하는 정밀 LLM 산술

이 글은 Docker 샌드박스에서 Python 코드를 생성하고 실행하여 LLM 정밀 계산 방법을 설명합니다. 아키텍처, 공과금 계산 및 견적 분석 작업의 일반 문제와 해결책 논의. 100% 산술 정확성 달성.

계산 오류 없는 LLM: 코드 생성
Advertisement 728x90

LLM에서 정확한 계산을 위한 방법: 실행 가능한 코드 생성

LLM은 정밀한 계산을 위해 설계되지 않았다. 트랜스포머 아키텍처는 확률 기반으로 토큰을 예측할 뿐, 수학 연산을 수행하지 않는다. 예를 들어 '18 × 38.76'과 같은 질문에 대해 모델은 697.68 대신 680처럼 패턴 근거 추정 오류로 인해 잘못된 결과를 반환할 수 있다. 이는 모델의 성능 저하가 아니라 시스템적 한계다.

해결책: 직접 계산은 LLM이 하지 않도록 한다. 모델은 작업을 위한 파이썬 스크립트를 생성하고, 이 스크립트는 격리된 환경에서 실행된다. 파이썬은 정확성을 보장한다: 18 * 38.76은 항상 정확히 697.68을 반환한다.

시스템 아키텍처

처리 흐름: 사용자 → LLM → 파이썬 스크립트 → 도커 컨테이너 → 결과(텍스트 + 엑셀)

Google AdInline article slot

예시: 톰스크 지역 공공요금 계산

  • 사용자 입력: «CW 320, HW 229, electricity 7422, prev: CW 302, HW 222, electricity 7133»
  • 시스템 프롬프트(설정 파일에서 가져온 요금 정보)를 가진 LLM이 스크립트 생성
  • 스크립트는 사용량 계산, 요금 적용, 표 생성 수행
  • 사전 환경에서 실행 후 파일 반환

간단화된 생성 코드:

# 미터 읽기값
cold_current, cold_prev = 320, 302
hot_current, hot_prev = 229, 222
elec_current, elec_prev = 7422, 7133

# 사용량
cold_usage = cold_current - cold_prev   # 18 m³
hot_usage = hot_current - hot_prev      # 7 m³
elec_usage = elec_current - elec_prev   # 289 kWh

# 톰스크 2025년 요금 (설정 파일에서 가져옴, 모델이 아님)
tariffs = {
    'cold_water': 38.76,
    'hot_water': 142.63,
    'electricity': 4.94,
    'drainage': 27.04,
}

# 계산
cold_cost = cold_usage * tariffs['cold_water']       # 697.68
hot_cost = hot_usage * tariffs['hot_water']           # 998.41
elec_cost = elec_usage * tariffs['electricity']       # 1427.66
drain_cost = (cold_usage + hot_usage) * tariffs['drainage']  # 676.00

total = cold_cost + hot_cost + elec_cost + drain_cost  # 3799.75

# 엑셀 파일 생성
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['서비스', '사용량', '단가, ₽', '금액, ₽'])
ws.append(['냉수', f'{cold_usage} m³', tariffs['cold_water'], cold_cost])
ws.append(['온수', f'{hot_usage} m³', tariffs['hot_water'], hot_cost])
ws.append(['전기', f'{elec_usage} kWh', tariffs['electricity'], elec_cost])
ws.append(['하수도', f'{cold_usage + hot_usage} m³', tariffs['drainage'], drain_cost])
ws.append(['합계', '', '', total])
wb.save('communal.xlsx')

요금은 외부 설정 파일에서 주입되며 공식 출처를 통해 업데이트된다. 모델의 착각(홀루시네이션)이 발생하지 않는다.

Google AdInline article slot

LLM 및 사전 환경 선택

모델:

  • Qwen (알리바바): 무료 API 제공, 간단한 작업에 안정적인 코드 생성
  • DeepSeek V3: 복잡한 시나리오(문서 분석 등)에 적합, 프롬프트 캐싱 지원

20줄 미만의 스크립트에는 GPT-4나 Claude는 과잉이다.

사전 환경: 도커 컨테이너 기반 동적 실행

Google AdInline article slot
  • 사용자 격리 보장
  • 기본 라이브러리: openpyxl, math, datetime
  • 30초 타임아웃
  • Pandas/numpy는 프롬프트에서 차단

일반적인 문제와 해결법

| 문제 | 해결 방법 |

|--------|----------|

| 요금 착각 | 설정 파일에서 요금을 프롬프트에 주입 |

| 코드 없이 직접 계산 | 검증 후 지시어 "코드만" 포함 재시도 |

| 엑셀에서 깨진 텍스트 | encoding='utf-8' 사용 후 검증 |

| 임포트 누락 | 이미지 및 프롬프트에서 라이브러리 제한 |

| UX: 잘못된 토큰 수 | 백엔드 기반 카운팅 |

| 코드 오류 | stderr를 모델에 반환하여 반복 수정 |

stderr 반환은 반복 횟수를 5배 줄인다. 모델은 추적 정보를 분석해 오류를 더 빠르게 수정한다.

확장 기능: 예산 분석

예산 확인(엑셀 파일, 도시 기준) 시, 모델은 150~200줄의 코드를 생성한다.

  • 임의 구조 파싱 가능
  • 설정 파일의 시장 가격과 비교
  • 산술 오류 탐지
  • 색상 코드로 보고서 생성(openpyxl 활용)

예시: 톰스크 지역 욕실 리모델링 예산 — 과금 25.9% 초과, 8개 항목이 50% 이상 초과, 차이 1~4루블

핵심 요약

  • 산술 계산은 100% 정확하다: 파이썬으로 실행
  • 요금은 외부 데이터에서 가져오며, 모델이 생성하지 않음
  • 보안을 위해 사전 환경은 필수
  • stderr를 활용한 반복은 디버깅 속도를 크게 향상
  • 확장성 있음: 재훈련 없이 설정 파일만 업데이트 가능

— Editorial Team

Advertisement 728x90

다음 읽기