Hermes AI와 MedGemma 활용하기

# [Hermes + MedGemma] 논문 브리핑 자동화부터 의료 AI 모델 로컬 세팅까지 

## 📝 한줄 요약

Hermes AI 에이전트의 Slack 연동 오류를 수정하고, 논문 자동 브리핑과 로컬 MedGemma 27B 환경을 구축했다.

**바쁘시면 이것만 읽어도 돼요:**
- Hermes + Slack + OpenRouter free 모델 조합으로 매일 아침 AI 논문 TOP 5 자동 수신
- free 모델은 수시로 없어지므로 OpenRouter API로 실시간 조회해서 살아있는 모델만 써야 함
- 브리핑용 / 의료용 모델을 프로파일로 분리하면 서로 영향 없이 독립적으로 운용 가능
- MedGemma 27B를 Ollama로 로컬에 올리면 인터넷 없이 의료 문서 처리 가능 

---

## 🎯 이런 분들께 도움돼요

- Hermes나 로컬 LLM(Ollama) 세팅을 처음 해보려는 개발자
- OpenRouter free 모델이 자꾸 죽어서 골치인 분
- 용도별로 AI 모델을 다르게 쓰고 싶은데 어떻게 구조화할지 모르는 분
- 의료 특화 모델을 로컬로 돌리고 싶은 연구자/개발자

---

## 😫 문제 상황 (Before)

분명히 Hermes에 Slack 연동을 해두고 뉴스 브리핑도 세팅해뒀는데, 아무것도 오지 않았다.
Slack home channel이 지정이 안 됐고, 모델이 요청하는 토큰이 남은 크레딧보다 많아서 완전히 막힌 상태였다. 여기에 더해 의료 데이터 작업도 새로 시작해야 했는데, 일반 LLM으로 의료 문서를 처리하기엔 부족함을 느끼던 참이었다.

---

## 🛠️ 사용한 도구

- **AI 에이전트**: Hermes (로컬 실행)
- **AI 어시스턴트**: Claude Sonnet 4.6
- **LLM 브리핑용**: google/gemma-4-31b-it:free via OpenRouter
- **LLM 의료용**: MedGemma 27B via Ollama (로컬)

---

## 🔧 작업 과정

### 오류 3개 한 번에 해결하기 — 원인부터 찾아야 했다

Slack에 아무것도 안 온다는 건 알겠는데, 어디서부터 손대야 할지 몰랐다. 오류 메시지를 그대로 붙여넣고 물어봤다. 두 가지 문제가 동시에 있었다. Slack home channel 미설정, 그리고 OpenRouter 크레딧 부족. Claude Code가 `config.yaml`을 직접 열어 문제를 진단하고, 즉시 무료 모델로 교체할 것을 제안했다.

그런데 여기서 함정이 있었다. 처음 교체한 `deepseek/deepseek-chat-v3-0324:free`는 이미 무료 서비스가 종료된 상태였다.

그 다음 시도한 `meta-llama/llama-3.1-8b-instruct:free`도 OpenRouter에서 이미 내려간 상태. 결국 OpenRouter API를 직접 조회해서 **지금 이 순간 실제로 살아있는 free 모델 목록**을 가져오는 방식으로 해결했다. 현재 유효한 모델로 교체하고, rate limit이 걸렸을 때를 대비한 fallback도 2개 추가했다.

---

### 매일 아침 논문 브리핑 자동화

오류를 잡고 나서, 매일 논문을 직접 찾아보는 수고를 없애고 싶었다. 매일 업데이트되는 AI 논문 큐레이션 사이트에서 원하는 기준의 논문 TOP 5를 추려 Slack으로 받는 자동화를 요청했다. 이걸 매일 오전 8시에 Slack으로 자동 전송하도록 cron job으로 등록했다.

---

### "브리핑이 모델 바뀌면 안 되는 거 아니야?"

여기서 생각지 못한 문제를 발견했다. 의료 AI 모델로 작업하려면 `config.yaml`의 기본 모델을 바꿔야 하는데, 그러면 매일 돌아가는 브리핑 cron job도 같은 모델을 쓰게 된다. Claude Code에게 물어보니 바로 **Hermes 프로파일 분리**를 제안했다.

Hermes는 프로파일별로 독립적인 config를 가질 수 있다. 브리핑 전용 `briefing` 프로파일을 만들어 cron job에 고정시키고, 의료 작업용 `medical` 프로파일을 따로 구성하면 서로 영향을 주지 않는다.

최종 구조:

| 프로파일 | 모델 | 용도 |
|---------|------|------|
| `default` | gemma-4-31b:free | 일반 작업 |
| `briefing` | gemma-4-31b:free (고정) | 매일 8시 논문 브리핑 |
| `medical` | MedGemma 27B (로컬) | 의료 문서 전처리 |

이 구조 덕분에 이후 `default`나 `medical` 모델을 어떻게 바꿔도 브리핑은 영향받지 않는다.

---

### MedGemma 로컬 세팅

의료 문서 작업을 위해 Google의 의료 특화 모델 MedGemma를 로컬에 설치했다.

M2 Max 64GB라면 27B 모델도 여유롭게 돌아간다는 걸 먼저 확인하고, Ollama로 17GB 모델을 받았다. `medical` 프로파일의 config를 로컬 Ollama 엔드포인트로 연결하고, SOUL.md(시스템 프롬프트)를 의료 전용으로 작성했다.


---

## ✅ 결과 (After)

### Before vs After

| 항목 | Before | After |
|------|--------|-------|
| 논문 브리핑 | 매일 직접 사이트 방문 | 매일 오전 8시 Slack 자동 수신 |
| 의료 문서 처리 | 일반 LLM | 로컬 MedGemma 27B |
| 모델 관리 | 단일 config, 작업 간 충돌 우려 | 프로파일별 독립 운용 |


### 결과물

- `briefing` 프로파일: 매일 8시 cron job 자동 실행 중
- `medical` 프로파일: `medical chat`으로 즉시 MedGemma 27B 사용 가능
- 논문 브리핑 스크립트: 4가지 기준 자동 분류

---

## 💬 이 과정에서 배운 AI 활용 팁

### 이렇게 하면 안 돼요

1. **free 모델 이름을 고정으로 쓰기** — OpenRouter free 모델은 예고 없이 종료된다. 적어도 fallback 2개는 설정해두고, 주기적으로 목록을 확인해야 한다
2. **모든 작업에 같은 config 쓰기** — 용도가 다른 작업(자동화 cron, 수동 의료 작업)은 처음부터 프로파일로 분리하는 게 낫다. 나중에 분리하려면 cron job을 재생성해야 한다

---

## 🌍 다른 업무에 적용한다면?

- **뉴스/트렌드 모니터링**: 논문 대신 기술 블로그, 채용 공고, 경쟁사 업데이트 등을 같은 구조로 자동 브리핑 가능
- **문서 품질 검증**: 의료 판독문 외에도 법률 문서, 계약서 요약본의 hallucination 검출에 동일한 방식 적용 가능
- **도메인 특화 로컬 모델**: MedGemma 외에도 법률, 금융, 코드 특화 모델을 Ollama로 프로파일별로 세팅하면 업무 유형별 최적 모델 환경 구성 가능
1
1개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.