jsmodule 패키지를 위한 AI 기반 통계 분석 코드 생성 모듈입니다.
AI Assistant 모듈은 통계 분석을 위한 R 코드를 생성하는 대화형 채팅 인터페이스를 제공합니다. jsmodule의 gadget들과 완벽하게 통합되며 여러 AI 제공자(Anthropic Claude, OpenAI GPT, Google Gemini)를 지원합니다.
.Renviron 파일에 API 키를 추가하세요:
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)data 파라미터를 통해 제공된 데이터만 접근
가능out으로 참조됨생성된 코드는 다음 패키지만 사용할 수 있습니다:
jstable, jskm, jsmodule, survival, ggplot2, ggpubr,
pROC, data.table, DT, gridExtra, GGally, forestploter,
MatchIt, timeROC
모듈은 변수 구조 정보를 자동으로 생성합니다: - Factor 변수 - Numeric
변수 - 사용자 정의 구조 (data_varStruct 파라미터로 제공
시)
callModule()의 명시적 api_key 인자show_api_config = TRUE인 경우).Renviron 파일)show_api_config 파라미터는 API 키 관리 방식을
제어합니다:
show_api_config = TRUE (기본값).Renviron 파일보다 우선show_api_config = FALSE.Renviron 파일 또는 명시적 api_key 인자만
사용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 응답을 개선하기 위해 배경 정보를 제공하세요:
문제: “API key not configured” 오류
해결책:
.Renviron 파일에 올바른 변수명이 있는지 확인.Renviron 편집 후 R 세션 재시작Sys.getenv("ANTHROPIC_API_KEY"))문제: 생성된 코드가 실행 실패
해결책:
문제: summary() 결과가 여러 조각으로
나뉨
해결책: 최신 버전에서 수정되었습니다. jsmodule 패키지를 업데이트하세요.
문제: \n이 줄바꿈 대신 그대로 보임
해결책: 최신 버전에서 수정되었습니다. jsmodule 패키지를 업데이트하세요.
❌ 나쁨: “이 데이터를 분석해줘”
✅ 좋음: “wt.loss를 결과변수로, age, sex, ph.ecog를 예측변수로 선형회귀분석 수행”
“Run Code” 클릭 전에 항상 에디터에서 코드를 검토하세요
analysis_context 파라미터를 사용하여 AI에게 데이터에
대한 배경 정보를 제공하세요
처음부터 다시 시작하기보다 후속 질문으로 코드를 개선하세요
Q: "치료군(rx)별 기저 특성을 비교하는 Table 1을 만들어줘"
Q: "time과 status를 생존 결과로, age, sex, ph.ecog를 보정하여
Cox 회귀분석 수행"
Q: "치료군별로 층화한 Kaplan-Meier plot을 risk table과 함께 그려줘"
Q: "wt.loss ~ age + sex + ph.ecog 선형모델에서 VIF로 다중공선성 확인"
AI Assistant 모듈은 보안과 사용성의 균형을 위해 환경 인식 코드 실행을 구현합니다:
개발 모드 (기본값): - 표준 eval()
함수로 코드 실행 - 디버깅과 개발이 용이 - 모든 콘솔 출력 표시 - 로컬,
신뢰할 수 있는 환경에 적합
프로덕션 모드: -
RAppArmor::eval.secure()로 샌드박스 실행 (Linux 전용) -
향상된 보안 및 리소스 제한: - 1GB RAM 제한 - 1MB 파일 크기 제한 - 10초
타임아웃 - 새 프로세스 생성 금지 - 시스템 명령 실행 방지 - 공개 배포 시
필수
환경 감지: 모듈은 다음을 통해 프로덕션 환경을 자동 감지합니다:
DEPLOYMENT_ENV 환경 변수 (production 또는
development).production 마커 파일배포 모드 설정:
로컬 개발용 (기본값):
프로덕션 배포용:
또는 마커 파일 생성:
Linux 서버 설정 (RAppArmor용):
# AppArmor 설치
sudo apt-get install apparmor apparmor-utils libapparmor-dev
# R 패키지 설치
R -e "install.packages('RAppArmor')"플랫폼 지원:
⚠️ 중요: API 키 처리 방식
API 키 사용 방법:
.Renviron) 또는 UI 입력에서
읽음httr 패키지를 사용하여 AI 제공자 API로
전달오픈소스입니다:
✅ 이 모듈이 API 키로 하지 않는 것:
✅ AI 제공자로 전송되는 것:
전송되지 않는 것:
개인/데스크톱 사용 (권장):
팀/공유 사용:
.Renviron에 자신의 API 키를 사용해야 함show_api_config = TRUE 설정공개 웹 애플리케이션:
show_api_config = TRUE로 공개 배포하지 마세요.Renviron 파일 (개인 사용 권장):
~/.Renviron (사용자 홈 디렉토리)api_key 인자 (고급 사용):
민감한 데이터로 작업하는 경우:
최대 보안을 위해:
# 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 패키지 라이선스와 동일합니다.