AI Assistant 모듈 가이드

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  echo = TRUE,
  eval = FALSE
)

AI Assistant 모듈

jsmodule 패키지를 위한 AI 기반 통계 분석 코드 생성 모듈입니다.

개요

AI Assistant 모듈은 통계 분석을 위한 R 코드를 생성하는 대화형 채팅 인터페이스를 제공합니다. jsmodule의 gadget들과 완벽하게 통합되며 여러 AI 제공자(Anthropic Claude, OpenAI GPT, Google Gemini)를 지원합니다.

빠른 시작

1. API 키 설정

.Renviron 파일에 API 키를 추가하세요:

# .Renviron 파일 열기
usethis::edit_r_environ()

# 다음 중 하나를 추가:
# ANTHROPIC_API_KEY=your_key_here
# OPENAI_API_KEY=your_key_here
# GOOGLE_API_KEY=your_key_here

# 저장 후 R 세션 재시작

2. 기본 사용법

옵션 A: jsBasicGadget과 함께 사용

library(jsmodule)

# AI Assistant가 포함된 gadget 실행
jsBasicGadget()

# "AI Assistant" 탭으로 이동

옵션 B: 독립 실행형 Shiny 앱

library(shiny)
library(jsmodule)
library(survival)

ui <- fluidPage(
  titlePanel("AI Statistical Assistant"),
  aiAssistantUI("ai")
)

server <- function(input, output, session) {
  data <- reactive(colon)
  data.label <- reactive(jstable::mk.lev(colon))

  callModule(aiAssistant, "ai",
    data = data,
    data_label = data.label
  )
}

shinyApp(ui, server)

주요 기능

코드 생성

다양한 AI 제공자

내보내기 옵션

안전 기능

중요 사항

데이터 접근

허용된 패키지

생성된 코드는 다음 패키지만 사용할 수 있습니다:

jstable, jskm, jsmodule, survival, ggplot2, ggpubr,
pROC, data.table, DT, gridExtra, GGally, forestploter,
MatchIt, timeROC

변수 구조

모듈은 변수 구조 정보를 자동으로 생성합니다: - Factor 변수 - Numeric 변수 - 사용자 정의 구조 (data_varStruct 파라미터로 제공 시)

API 키 우선순위

  1. callModule()의 명시적 api_key 인자
  2. UI 입력 (show_api_config = TRUE인 경우)
  3. 환경 변수 (.Renviron 파일)

API 설정 모드

show_api_config 파라미터는 API 키 관리 방식을 제어합니다:

show_api_config = TRUE (기본값)

# 개발 모드 - 사용자가 UI에서 설정 가능
aiAssistantUI("ai", show_api_config = TRUE)  # 기본값

callModule(aiAssistant, "ai",
  data = data,
  data_label = data.label,
  show_api_config = TRUE
)

show_api_config = FALSE

# 프로덕션 모드 - .Renviron에서만 API 키 읽기
aiAssistantUI("ai", show_api_config = FALSE)

callModule(aiAssistant, "ai",
  data = data,
  data_label = data.label,
  show_api_config = FALSE
)

고급 사용법

사용자 정의 변수 구조

server <- function(input, output, session) {
  data <- reactive(lung)
  data.label <- reactive(jstable::mk.lev(lung))

  # 변수 역할 정의
  var_struct <- reactive({
    list(
      variable = names(lung),
      Base = c("age", "sex", "ph.ecog"),
      Event = "status",
      Time = "time"
    )
  })

  callModule(aiAssistant, "ai",
    data = data,
    data_label = data.label,
    data_varStruct = var_struct
  )
}

분석 컨텍스트

AI 응답을 개선하기 위해 배경 정보를 제공하세요:

callModule(aiAssistant, "ai",
  data = data,
  data_label = data.label,
  analysis_context = reactive({
    "NCCTG 폐암 임상시험 데이터.
     주요 결과: 사망까지의 시간 (status/time).
     수행능력 점수(ph.ecog)를 예측 변수로 중점 분석."
  })
)

프로덕션 배포

프로덕션 환경에서는 API 설정 UI를 숨기세요:

ui <- fluidPage(
  aiAssistantUI("ai", show_api_config = FALSE)
)

server <- function(input, output, session) {
  callModule(aiAssistant, "ai",
    data = data,
    data_label = data.label,
    show_api_config = FALSE  # .Renviron만 사용
  )
}

문제 해결

API 키를 찾을 수 없음

문제: "API key not configured" 오류

해결책:

  1. .Renviron 파일에 올바른 변수명이 있는지 확인
  2. .Renviron 편집 후 R 세션 재시작
  3. 키가 유효한지 확인 (터미널에서 테스트: Sys.getenv("ANTHROPIC_API_KEY"))

코드 실행 오류

문제: 생성된 코드가 실행 실패

해결책:

  1. 자동 수정을 위해 "Ask AI to Fix" 버튼 클릭
  2. 실행 전 에디터에서 코드 검토
  3. 데이터에 필요한 변수가 있는지 확인
  4. 패키지가 설치되어 있는지 확인

Summary 결과가 너무 조각남

문제: summary() 결과가 여러 조각으로 나뉨

해결책: 최신 버전에서 수정되었습니다. jsmodule 패키지를 업데이트하세요.

텍스트 출력에 이스케이프 시퀀스 표시

문제: \n이 줄바꿈 대신 그대로 보임

해결책: 최신 버전에서 수정되었습니다. jsmodule 패키지를 업데이트하세요.

모범 사례

1. 구체적인 질문하기

❌ 나쁨: "이 데이터를 분석해줘"

✅ 좋음: "wt.loss를 결과변수로, age, sex, ph.ecog를 예측변수로 선형회귀분석 수행"

2. 생성된 코드 검토

"Run Code" 클릭 전에 항상 에디터에서 코드를 검토하세요

3. 컨텍스트 제공

analysis_context 파라미터를 사용하여 AI에게 데이터에 대한 배경 정보를 제공하세요

4. 적절한 모델 사용

5. 반복적 개선

처음부터 다시 시작하기보다 후속 질문으로 코드를 개선하세요

제한사항

  1. 외부 데이터 접근 불가: 파일을 읽거나 데이터베이스에 연결할 수 없음
  2. 제한된 패키지 범위: 허용된 패키지만 사용 가능
  3. 컨텍스트 윈도우: 매우 긴 대화는 초기화가 필요할 수 있음
  4. 시각화 미리보기: 일부 복잡한 플롯은 즉시 렌더링되지 않을 수 있음
  5. 통계 전문성: AI는 코드를 제공하지 통계 컨설팅을 제공하지 않음

예제

예제 1: 기술통계

Q: "치료군(rx)별 기저 특성을 비교하는 Table 1을 만들어줘"

예제 2: 생존분석

Q: "time과 status를 생존 결과로, age, sex, ph.ecog를 보정하여
    Cox 회귀분석 수행"

예제 3: 시각화

Q: "치료군별로 층화한 Kaplan-Meier plot을 risk table과 함께 그려줘"

예제 4: 모델 진단

Q: "wt.loss ~ age + sex + ph.ecog 선형모델에서 VIF로 다중공선성 확인"

보안 고려사항

코드 실행 보안

환경 인식 실행 (개발 vs 프로덕션)

AI Assistant 모듈은 보안과 사용성의 균형을 위해 환경 인식 코드 실행을 구현합니다:

개발 모드 (기본값): - 표준 eval() 함수로 코드 실행 - 디버깅과 개발이 용이 - 모든 콘솔 출력 표시 - 로컬, 신뢰할 수 있는 환경에 적합

프로덕션 모드: - RAppArmor::eval.secure()로 샌드박스 실행 (Linux 전용) - 향상된 보안 및 리소스 제한: - 1GB RAM 제한 - 1MB 파일 크기 제한 - 10초 타임아웃 - 새 프로세스 생성 금지 - 시스템 명령 실행 방지 - 공개 배포 시 필수

환경 감지: 모듈은 다음을 통해 프로덕션 환경을 자동 감지합니다:

  1. DEPLOYMENT_ENV 환경 변수 (production 또는 development)
  2. shinyapps.io 배포 감지
  3. RStudio Connect 감지
  4. .production 마커 파일

배포 모드 설정:

로컬 개발용 (기본값):

# 별도 설정 불필요 - 기본값이 개발 모드
# 또는 .Renviron에 명시적으로 설정:
# DEPLOYMENT_ENV=development

프로덕션 배포용:

# .Renviron 파일에 추가:
# DEPLOYMENT_ENV=production

또는 마커 파일 생성:

# 앱 디렉토리에서
touch .production

Linux 서버 설정 (RAppArmor용):

# AppArmor 설치
sudo apt-get install apparmor apparmor-utils libapparmor-dev

# R 패키지 설치
R -e "install.packages('RAppArmor')"

플랫폼 지원:

기본 보안 기능

API 키 보안

⚠️ 중요: API 키 처리 방식

API 키 사용 방법:

오픈소스입니다:

이 모듈이 API 키로 하지 않는 것:

AI 제공자로 전송되는 것:

전송되지 않는 것:

배포 유형별 모범 사례

개인/데스크톱 사용 (권장):

# .Renviron에 API 키 저장 (사용자 홈 디렉토리)
# 사용자 계정에만 비공개로 유지됩니다
# ANTHROPIC_API_KEY=your_key_here

팀/공유 사용:

공개 웹 애플리케이션:

API 키 저장 위치

  1. .Renviron 파일 (개인 사용 권장):
  2. 위치: ~/.Renviron (사용자 홈 디렉토리)
  3. 보안: 사용자 계정만 접근 가능
  4. 지속성: R 세션 재시작 후에도 유지

  5. UI 입력 (개발용만):

  6. 위치: 브라우저 메모리 (임시)
  7. 보안: 브라우저 탭을 닫으면 사라짐
  8. 지속성: 없음 - 매 세션마다 재입력 필요

  9. api_key 인자 (고급 사용):

  10. 위치: R 스크립트 또는 코드
  11. 보안: ⚠️ 피하세요 - 코드에 키가 노출됨
  12. 지속성: 코드가 저장된 위치에 따라 다름

규정 준수 고려사항

민감한 데이터로 작업하는 경우:

  1. ✅ 데이터 구조 및 변수명이 AI 제공자로 전송됨
  2. ✅ 통계 요약이 전송될 수 있음
  3. ⚠️ 질문에 실제 데이터 값을 포함하지 마세요
  4. ⚠️ 조직의 AI 사용 정책을 검토하세요
  5. ⚠️ 분석 전 데이터 익명화를 고려하세요

권장 보안 설정

최대 보안을 위해:

# 1. .Renviron에 API 키 저장 (코드에 절대 포함하지 않음)
usethis::edit_r_environ()
# 추가: ANTHROPIC_API_KEY=your_key

# 2. 프로덕션에서는 show_api_config = FALSE 사용
aiAssistantUI("ai", show_api_config = FALSE)

# 3. .Renviron을 버전 관리에 커밋하지 않음
# .gitignore에 추가:
# .Renviron
# .Renviron.local

# 4. API 키를 정기적으로 교체 (90일마다 권장)

# 5. 제공자의 대시보드를 통해 API 사용량 모니터링

지원

이슈나 기능 요청은 다음에서 제출해주세요: https://github.com/jinseob2kim/jsmodule/issues

라이선스

jsmodule 패키지 라이선스와 동일합니다.



Try the jsmodule package in your browser

Any scripts or data that you put into this service are public.

jsmodule documentation built on Dec. 18, 2025, 9:08 a.m.