knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE, eval = FALSE )
jsmodule 패키지를 위한 AI 기반 통계 분석 코드 생성 모듈입니다.
AI Assistant 모듈은 통계 분석을 위한 R 코드를 생성하는 대화형 채팅 인터페이스를 제공합니다. jsmodule의 gadget들과 완벽하게 통합되며 여러 AI 제공자(Anthropic Claude, OpenAI GPT, Google Gemini)를 지원합니다.
.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 세션 재시작
library(jsmodule) # AI Assistant가 포함된 gadget 실행 jsBasicGadget() # "AI Assistant" 탭으로 이동
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 파일보다 우선# 개발 모드 - 사용자가 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_key 인자만 사용# 프로덕션 모드 - .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 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 마커 파일배포 모드 설정:
로컬 개발용 (기본값):
# 별도 설정 불필요 - 기본값이 개발 모드 # 또는 .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 키 사용 방법:
.Renviron) 또는 UI 입력에서 읽음httr 패키지를 사용하여 AI 제공자 API로 전달오픈소스입니다:
✅ 이 모듈이 API 키로 하지 않는 것:
✅ AI 제공자로 전송되는 것:
전송되지 않는 것:
개인/데스크톱 사용 (권장):
# .Renviron에 API 키 저장 (사용자 홈 디렉토리) # 사용자 계정에만 비공개로 유지됩니다 # ANTHROPIC_API_KEY=your_key_here
팀/공유 사용:
.Renviron에 자신의 API 키를 사용해야 함show_api_config = TRUE 설정공개 웹 애플리케이션:
show_api_config = TRUE로 공개 배포하지 마세요.Renviron 파일 (개인 사용 권장):~/.Renviron (사용자 홈 디렉토리)지속성: R 세션 재시작 후에도 유지
UI 입력 (개발용만):
지속성: 없음 - 매 세션마다 재입력 필요
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 패키지 라이선스와 동일합니다.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.