# Streamlit으로 내부 AI 도구 구축하기

> Clean Markdown view of GeekNews topic #17118. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17118](https://news.hada.io/topic?id=17118)
- GeekNews Markdown: [https://news.hada.io/topic/17118.md](https://news.hada.io/topic/17118.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-10-07T10:18:02+09:00
- Updated: 2024-10-07T10:18:02+09:00
- Original source: [propelauth.com](https://www.propelauth.com/post/internal-ai-tools-with-streamlit)
- Points: 22
- Comments: 1

## Summary

데이터 애플리케이션을 빠르게 개발할 수 있는 Streamlit의 강력한 기능을 활용하여 내부 AI 도구를 쉽게 구축할 수 있는 방법을 소개합니다. 특히, 대규모 언어 모델(LLM)을 사용하여 데이터를 간단한 프롬프트로 처리하고, 이를 통해 유용한 통찰을 얻는 과정을 설명합니다. 데이터 로드 및 시각화, 인증 추가, 프롬프트 저장 등 단계별로 Streamlit을 활용한 실용적인 구현 방법을 제시하고 있으니 직접 실험하고 응용해볼 수 있습니다.

## Topic Body

- 대부분의 기업은 내부에 귀중한 데이터를 보유하고 있음  
  - 고객이 제품과 상호작용하는 분석 데이터  
  - 제품 내에서 이루어진 작업의 감사 로그(기능 활성화 시점 파악 가능)  
- 작은 스타트업일지라도 유용한 데이터를 보유하고 있음  
  - 지원 티켓을 통해 제품에서 가장 많은 주의가 필요한 부분 확인이 가능하며, 기능 요청도 포함되어 있음  
- LLM(대규모 언어 모델) 이전에는 데이터를 통해 통찰을 추출하는 것이 어려웠음  
  - 자체 모델을 훈련해야 했으며, 이는 기능 엔지니어링 및 NLP, 모델 선택, 가장 어려운 훈련 데이터 수집을 포함함  
- 이제는 간단한 프롬프트로 작업 가능  
  - 예시 프롬프트: "다음 티켓을 다음 카테고리로 분류하세요: Uptime, Security, Bug, Feature Request, Other"  
  - 결과적으로 간단한 분류기가 만들어지며, 약간의 수정만으로도 적절한 성능을 제공함  
- Streamlit을 사용하여 누구나 LLM을 데이터셋에 적용해 실험할 수 있는 내부 도구를 쉽게 구축 가능  
  
### 만들어 볼 것   
- 사용자는 다음과 같은 동작이 가능   
  - 로그인   
  - 프롬프트 작성 : 티켓 classification 시스템을 위한 것   
  - 몇 가지 샘플 데이터에서 프롬프트를 테스트하고 출력(오류 포함)을 확인  
  - 다른 사람이 사용할수 있게 프롬프트 저장   
  
### Streamlit 간단 소개  
- **Streamlit**은 데이터 애플리케이션을 빠르게 구축할 수 있는 훌륭한 도구임  
  - Streamlit에서는 간단한 코드로 애플리케이션을 작성할 수 있음  
  
```python  
import streamlit as st  
  
prompt = st.text_area(  
    "Prompt to test (use {text} to indicate where the text should be inserted):",  
    "This is an example prompt:\\n\\n{text}",  
)  
  
prompt_with_data = f"{prompt}".format(  
    text="`Example data to be placed into prompt`"  
)  
  
st.write(prompt_with_data)  
```  
- **코드 실행 결과**: Streamlit이 자동으로 인터랙티브 프런트엔드를 생성해줌  
- 사용자가 `text_area`의 프롬프트 텍스트를 업데이트하면, 나머지 Python 코드가 자동으로 다시 실행됨  
  
### Streamlit의 강력한 기능  
- Streamlit은 대시보드 같은 인터랙티브 도구를 만들기 매우 강력한 도구임  
  - **다양한 컴포넌트** 사용 가능: Pandas 데이터프레임을 테이블로 렌더링하거나 버튼을 통해 액션을 트리거할 수 있음  
  - **외부 데이터 로딩, 비밀 관리, 데이터 캐싱 유틸리티**가 함께 제공되며, 이를 통해 데이터와의 상호작용이 훨씬 강력해짐  
  
### 단계 1: 데이터 로드 및 시각화  
- Streamlit을 사용하여 하드 코딩된 데이터를 로드하고 테이블로 렌더링함  
- `.streamlit/secrets.toml` 파일을 통해 Streamlit에게 PostgreSQL 데이터베이스에 연결하는 방법을 알려줌  
- `psycopg2-binary`를 설치하고 `load_data_sample()` 함수를 업데이트하여 PostgreSQL에서 데이터를 로드함  
- Streamlit은 Snowflake 및 Google 시트와 같은 다양한 데이터 소스에 연결할 수 있음  
- 캐싱을 위해 `st.cache_resource`는 연결에, `st.cache_data`는 비용이 많이 드는 쿼리 결과에 일반적으로 사용됨  
  
### 단계 2: 프롬프트를 사용하여 데이터 실행  
- 사용자로부터 프롬프트를 받아 로드된 데이터에 적용함  
- 프롬프트는 `{"urgent": false, "categories": ["CategoryA", "CategoryB"]}` 형식의 유효한 JSON을 출력해야 함  
- 데이터프레임을 변환하여 `urgent`, `categories` 및 `error`(오류 발생 시) 열을 추가함  
- OpenAI 호출을 캐시하여 시간과 비용을 절약함  
- 프롬프트를 데이터에 다시 실행하려면 버튼을 추가함  
  
### 단계 3: 인증 추가  
- PropelAuth를 사용하여 Streamlit에 인증 추가  
- `propelauth.py` 파일을 만들어 `auth` 객체를 내보냄  
- 스크립트 상단에서 사용자를 로드하거나 스크립트 실행을 중지함  
- 데이터 쿼리에서 사용자 ID를 사용하여 액세스 권한이 있는 데이터만 확인할 수 있음  
  
### 단계 4: 프롬프트 저장  
- 사용자가 프롬프트를 저장할 수 있는 버튼 추가  
- 데이터베이스 연결을 로드하고 프롬프트를 `prompts` 테이블에 삽입함  
- 사용자 ID와 프롬프트를 매개변수로 전달하여 프롬프트를 저장함

## Comments



### Comment 29775

- Author: xguru
- Created: 2024-10-07T10:19:01+09:00
- Points: 1

제가 2020년도에 [Streamlit - 파이썬 코드를 커스텀ML도구로 쉽게 만들기](https://news.hada.io/topic?id=1498) 라고 간단히 소개했었는데, 2022년에 [Snowflake가 Streamlit을 $800M에 인수](https://news.hada.io/topic?id=6088) 했습니다.  
  
얼마전에는 Streamlit 을 이용해서 작성하신 도구가 Show GN에도 한번 올라왔었네요.  
[MP3 Tag Editor (Python Streamlit +FastAPI) on Docker](https://news.hada.io/topic?id=15016)
