오픈액세스(Open-access) 대형 언어 모델은 가중치와 아키텍처의 완전한 투명성을 제공하지만, 학습 데이터 컷오프 시점 이후의 최신 학술 연구나 세부 기술 문서에 대해서는 사실 왜곡(환각 현상)을 일으키기 쉽습니다. Hugging Face가 오픈소스로 공개한 대화형 플랫폼 HuggingChat(내부 엔진: chat-ui)은 모델의 답변을 검증 가능한 최신 웹 정보에 결합(그라운딩)할 수 있는 두 가지 핵심 기능을 기본 제공합니다. 바로 내장 웹 검색(Web Search)과 커뮤니티 도구(Community Tools)입니다.
이 가이드에서는 연구자와 개발자가 HuggingChat 웹 인터페이스와 자체 호스팅 환경에서 실시간 검색을 구성하고, Gradio 기반 도구 Space를 연동하며, Command R+, Llama 3.1, Qwen 2.5 등의 오픈 모델을 활용해 신뢰할 수 있는 분석 어시스턴트를 구축하는 구체적인 절차를 살펴봅니다.
1. 간편한 사실 검증: HuggingChat 내장 웹 검색 활용하기
일상적인 문헌 조사나 최신 팩트 체크를 위해 HuggingChat에는 완전한 검색 증강 생성(RAG) 파이프라인이 내장되어 있습니다.
사용자 인터페이스에서의 활성화 단계
- HuggingChat 웹사이트(
https://huggingface.co/chat)에 접속합니다. - 추론 및 지시 이행 능력이 뛰어난 베이스 모델(예: Meta Llama 3.1 70B, Cohere Command R+, Qwen 2.5 72B 등)을 선택합니다.
- 하단 프롬프트 입력창에 있는 지구본 모양의 Search web 스위치를 켭니다.
- 질문을 입력합니다(예: "이번 주 발표된 DeepSeek-V3 기술 보고서의 주요 벤치마크 결과는 무엇인가요?").
내장 RAG 파이프라인의 내부 작동 원리
HuggingChat은 단순히 검색 엔진의 스니펫을 모델 입력에 붙여넣는 방식을 사용하지 않습니다. 백엔드인 chat-ui가 자동으로 6단계 RAG 파이프라인을 실행합니다:
- 검색 쿼리 최적화: 내부 태스크 모델이 사용자의 대화형 질문에서 의도를 파악하고, 검색 엔진에 최적화된 핵심 키워드로 변환합니다.
- 웹 검색 수행: 외부 검색 공급자(Serper 또는 SearXNG)를 호출하여 관련성 높은 공신력 있는 URL 목록을 수집합니다.
- 헤드리스 스크래핑: 헤드리스 브라우저인 Playwright를 통해 대상 웹페이지를 방문하고, 원시 HTML을 깔끔한 Markdown 텍스트로 파싱합니다.
- 텍스트 청킹 및 임베딩: 추출된 텍스트를 의미 단위로 분할한 뒤, 경량 임베딩 모델(예:
gte-small)을 사용하여 벡터로 변환합니다. - 유사도 재순위화: 사용자의 질문과 코사인 또는 내적 유사도를 계산하여 가장 연관성이 높은 텍스트 조각(일반적으로 약 8,000자 이내)을 선별해 모델 컨텍스트에 주입합니다.
- 답변 생성 및 출처 인용: 모델이 주입된 최신 정보를 기반으로 답변을 작성하고, 참조한 원본 웹페이지로 바로 이동할 수 있는 클릭 가능한 인용 칩을 함께 표시합니다.
2. 심층 활용: 커스텀 커뮤니티 도구(Community Tools) 제작 및 등록
일반 웹 검색으로는 ArXiv 논문 저장소나 사내 지식 베이스와 같은 특화된 데이터 구조를 정밀하게 질의하기 어렵습니다. HuggingChat의 Community Tools 시스템을 활용하면 공개된 모든 Hugging Face Space(Gradio 앱)를 오픈 모델이 호출할 수 있는 외부 도구로 손쉽게 등록할 수 있습니다.
1단계: Gradio 도구 Space 준비하기
표준 입출력 인터페이스가 정의된 공개 Gradio Space라면 무엇이든 도구로 활용할 수 있습니다.
- 공식 템플릿 활용: Hugging Face에서 제공하는
nsarrazin/rag-tool-template을 복제(Duplicate)한 뒤,sources/폴더에 연구용 PDF나 Markdown 문서를 넣으면 자체 문서 RAG 도구가 즉시 완성됩니다. - Python 스크립트 작성: 무료 CPU Basic 사양의 Space에서
app.py를 작성합니다. 다음은 ArXiv 사전 인쇄본 논문을 검색하는 도구의 예시입니다:
import gradio as gr
import urllib.request
import xml.etree.ElementTree as ET
def search_arxiv(query: str, max_results: int = 3) -> str:
url = f"http://export.arxiv.org/api/query?search_query=all:{urllib.parse.quote(query)}&max_results={max_results}"
response = urllib.request.urlopen(url).read().decode("utf-8")
root = ET.fromstring(response)
results = []
for entry in root.findall("{http://www.w3.org/2005/Atom}entry"):
title = entry.find("{http://www.w3.org/2005/Atom}title").text.strip()
summary = entry.find("{http://www.w3.org/2005/Atom}summary").text.strip()
results.append(f"Title: {title}\nSummary: {summary}\n")
return "\n---\n".join(results) if results else "No papers found."
demo = gr.Interface(
fn=search_arxiv,
inputs=[gr.Textbox(label="Query"), gr.Number(label="Max Results", value=3)],
outputs="text",
title="ArXiv Search Tool"
)
demo.launch()
2단계: HuggingChat에 도구 등록하기
- 도구 관리 페이지
https://huggingface.co/chat/tools로 이동하여 Create New Tool을 클릭합니다(또는https://huggingface.co/chat/tools/new로 바로 이동). - Hugging Face Space URL 입력창에 배포한 Space의 주소(예:
https://huggingface.co/spaces/your-username/arxiv-search)를 붙여넣습니다. - HuggingChat이 Gradio 스키마를 자동으로 분석하여 함수와 인자 구성을 불러옵니다.
- 주요 항목을 입력합니다:
- Tool Description: 도구의 역할과 실행 타이밍을 영어로 간결하게 설명합니다(예: "Searches ArXiv for the latest AI and computer science preprints based on query keywords"). 언어 모델은 이 설명을 바탕으로 함수 호출 여부를 결정합니다.
- AI Function Name: 고유한 스네이크 케이스 식별자를 지정합니다(예:
search_arxiv_preprints). - 인자 설정(Arguments):
- Required(필수): 모델이 도구를 호출할 때 반드시 값을 전달해야 하는 인자.
- Optional(선택): 기본값이 지정되어 있으며, 모델이 필요에 따라 재정의할 수 있는 인자.
- Fixed(고정): 도구 생성 시 고정되어 모델에게 노출되지 않는 인자(내부 API 키나 필터 설정에 유용).
- 저장을 완료하면 개인 도구 라이브러리에서 즉시 활성화할 수 있습니다.
3. 맞춤형 연구 어시스턴트(Assistant)로 워크플로우 통합하기
매번 대화창을 열 때마다 설정을 반복할 필요 없이, HuggingChat Assistants 기능을 통해 연구 환경을 영구적으로 저장할 수 있습니다:
- Settings > Assistants 메뉴를 선택하거나
https://huggingface.co/chat/settings/assistants/new페이지로 이동합니다. - 기본 정보 입력: 어시스턴트 이름(예: "AI 학술 리서치 분석기")과 프로필 이미지를 설정합니다.
- 모델 선택: 네이티브 도구 호출에 특화된 모델을 선택합니다. **Cohere Command R+**와 Llama 3.1 70B는 복잡한 함수 호출과 정확한 인용 생성에서 탁월한 안정성을 보여줍니다.
- 시스템 지침(System Instructions) 작성: 철저한 사실 확인과 도구 호출 기준을 명시합니다:
당신은 엄격한 학술 연구 어시스턴트입니다. 최신 연구 논문, 벤치마크 점수 또는 공식 출시 일정에 관한 질문에는 반드시 답변하기 전에 웹 검색 또는 연동된 도구를 호출하여 사실을 확인하십시오. 검색된 문서에 명시되지 않은 내용을 자의적으로 추측하거나 확장하지 마십시오. 답변에는 항상 참조한 출처의 제목과 URL을 명확히 표기하십시오. - 기능 및 도구 연결:
- Web search를 활성화하여 상시 인터넷 검색 능력을 부여합니다.
- Community Tools에서 생성한 도구나 커뮤니티 공개 도구를 최대 3개까지 선택하여 등록합니다.
- Create를 눌러 저장합니다. 완성된 Assistant는 고유 URL을 통해 외부에 공유하거나 팀 내부 평가용으로 비공개 운영할 수 있습니다.
4. 프라이빗 연구실 및 사내 배포를 위한 자체 호스팅(chat-ui)
데이터 기밀성과 엄격한 보안 규정을 준수해야 하는 기업이나 연구실을 위해 Hugging Face는 전체 플랫폼을 huggingface/chat-ui 오픈소스 리포지토리로 제공합니다.
.env.local 환경 변수 설정
자체 서버에서 실행할 때 로컬 모델과 검색 엔진을 다음과 같이 연동합니다:
# MongoDB 데이터베이스
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB_NAME=chat-ui
# OpenAI 호환 추론 엔드포인트(vLLM, Ollama, llama.cpp 또는 Hugging Face 라우터)
OPENAI_BASE_URL=https://router.huggingface.co/v1
OPENAI_API_KEY=hf_your_huggingface_access_token
# 웹 검색 공급자 설정
SERPER_API_KEY=your_serper_api_dev_key
# 자체 구축한 SearXNG 인스턴스를 사용할 경우:
# SEARXNG_QUERY_URL=http://localhost:8080/search?q=<query>&format=json
# 스크래핑 및 보안 제어
USE_LOCAL_WEBSEARCH=false
WEBSEARCH_ALLOWLIST=[]
WEBSEARCH_BLOCKLIST=[]
이 구성을 완료하고 npm install 및 npm run dev를 실행하면, 외부 클라우드 종속성 없이 자체 인프라에서 웹 검색과 오픈 모델 RAG가 완벽히 구동됩니다.
실무 권장 사항 및 고려할 절충점
- 모델 체급과 도구 호출 신뢰도: 8B 이하의 소형 모델은 인자 형식을 누락하거나 검색 결과가 없을 때 가짜 URL을 생성하는 경향이 있습니다. 학술적 정확도가 요구되는 작업에는 70B 급 모델이나 Command R+ 같은 에이전트 특화 모델을 권장합니다.
- 응답 지연 시간과 최신성의 균형: 순수 텍스트 생성은 1~3초가 소요되지만, Playwright 웹 크롤링과 벡터 유사도 분석이 포함된 RAG 파이프라인은 약 3~6초의 추가 지연이 발생합니다. 자주 참조하는 고정 문헌 자료는 매번 웹 검색을 돌리기보다 전용 RAG Space에 미리 벡터 인덱싱해 두는 것이 훨씬 효율적입니다.
- 원문 인용 검증: 오픈소스 RAG의 가장 큰 장점은 검증 가능성에 있습니다. 모델이 정리한 요약문을 맹신하지 말고 생성된 인용 칩을 클릭하여 원문의 실제 맥락과 일치하는지 확인해야 합니다.
HuggingChat의 내장 웹 검색과 Community Tools를 적절히 결합하면, 정적인 상태에 머물러 있던 오픈액세스 모델을 살아있는 웹 데이터를 스스로 탐색하고 검증하는 고도화된 연구 분석 도구로 전환할 수 있습니다.