티스토리 뷰

에이전트 교육 미션으로 중국처럼 구글맵이 잘 안 되는 곳에서도 현지 맛집·카페·관광지를 내 언어로 찾아 주는 멀티 에이전트 서비스를 만들어봤습니다.

 

왜 만들었나

여행지에서 가장 먼저 막히는 건 "어디로 가지?"입니다. 평소처럼 구글맵 리뷰를 보면 되지만, 중국처럼 구글맵과 구글 리뷰가 잘 안 되는 곳에서는 이 방법이 통하지 않습니다. 현지 사람들은 대중점평, 샤오홍슈 같은 현지 앱을 쓰고, 일본은 타베로그, 한국은 네이버를 봅니다.

문제는 두 가지였습니다.

  • 어디를 봐야 할지 모른다: 나라마다 믿을 만한 정보원이 다르고, 최신 화제는 YouTube·SNS에 먼저 올라옵니다.
  • 읽어도 쓸 수가 없다: 현지어로 된 가게 이름을 택시 기사에게 보여 주거나 현지 지도 앱에 검색하기 어렵습니다.

그래서 "현지 정보원을 대신 읽고, 내 언어로 정리하고, 현지어 표기까지 챙겨 주는 여행 메이트"를 목표로 잡았습니다.

 

무엇을 해 주나

1. 구글맵이 약한 곳에서도 대중점평·샤오홍슈·네이버·타베로그 같은 현지 앱·웹과 YouTube·SNS의 최신 정보를 대신 읽어 줍니다.

2. 언어가 달라도 바로 사용 영어·한국어·일본어·중국어로 번역하고, 택시 기사나 현지 지도 앱에 그대로 보여 줄 수 있는 '현지 표기 박스'와 지도 검색 링크를 함께 줍니다.

3. 일반 지도·검색과 다른 점 에이전트 5개가 수집 → 점수화 → 폐업 검증 → 번역을 나눠 맡아 '지금 뜨는 곳'만 추립니다. 출처를 밝히고, 로그인 우회나 개인정보 수집은 하지 않습니다.

 

구조: 에이전트 5개가 나눠 맡는 파이프라인

에이전트 5개가 수집 → 점수화 → 폐업 검증 → 번역을 나눠 맡고, 로그인 우회와 개인정보 수집은 하지 않도록 설계했습니다.

 

흐름은 Travel Mate → Scouts(병렬) → Curator → Localizer입니다. 웹 UI에서는 코드가 에이전트를 순서대로 불러 진행 단계를 보여 주고, 챗봇에서는 travel_mate가 LLM으로 직접 오케스트레이션합니다.

 

에이전트
맡은 일 지키는 규칙
① travel_mate (총괄) 언어·목적지·카테고리를 먼저 확정하고, 장소 Scout(카테고리별)와 Social Scout를 병렬로 위임. 모두 끝나면 Curator → Localizer 순서로 넘김 최종 답은 사용자 언어 + 현지 표기
② place_scout (현지 웹 수집) 현지어 검색어·우선 소스·규칙을 먼저 계획한 뒤 수집 10개마다 검증 저장해 차단돼도 진행분 보존. 로그인·CAPTCHA 우회 금지, 리뷰어 개인정보·리뷰 전문 미수집
③ social_scout (YouTube·SNS) YouTube는 공식 API로 최근 영상·조회수, 키가 없으면 검색 스니펫 + oEmbed로 검증 Instagram·TikTok·샤오홍슈는 직접 접속 없이 공개 스니펫만. 계정명·댓글 미저장, 최근 90일 콘텐츠 우선
④ place_curator (병합·점수·검증) 중복을 합치고 트렌드 점수화(품질 30·인기 15·교차 확인 25·최신성 30). SNS에 언급되면 'SNS 화제' 배지 상위 항목의 폐업·이전을 현지어로 웹 검증하고, 근거가 있을 때만 제외
⑤ travel_localizer (번역·가이드) 번역 대기 항목을 다 끝날 때까지 가져와 번역하고, HTML·MD 가이드 생성 원문에 있는 내용만 번역. 새 사실·환율·영업시간을 만들어 내지 않음

 

설계하며 지킨 원칙

  • 수집은 공개된 범위 안에서만 로그인이나 CAPTCHA를 우회하지 않고, 접속이 막힌 SNS는 공개 검색 스니펫만 씁니다. 리뷰어 개인정보, 리뷰 전문, 계정명, 댓글은 저장하지 않습니다. 정보를 많이 모으는 것보다 "가져와도 되는 것만 가져온다"를 먼저 정했습니다.
  • 만들어 내지 않는다 번역 에이전트는 원문에 있는 내용만 옮기고, 영업시간·환율 같은 사실을 새로 지어내지 않습니다. 폐업 여부도 근거를 찾았을 때만 목록에서 뺍니다.
  • 에이전트 사이의 약속은 파일로 에이전트끼리는 artifacts/travel/<도시>/ 아래 파일과 검증 저장 도구로 주고받습니다. 중간 결과가 파일로 남아서, 한 단계가 실패해도 처음부터 다시 하지 않아도 됩니다.
  • 공개 서비스의 비용 보호 로그인 없이 누구나 쓰는 데모라, IP별·일일 생성 한도를 두고 최근 결과는 재사용해 LLM·검색 호출 비용이 새지 않게 했습니다.

 

도구와 스킬

 

묶음 도구 하는 일
오케스트레이션 (Travel Mate) enter_plan / exit_plan, task_create·list·update, list_sub_agents, invoke_sub_agent(백그라운드), get_sub_agent_job_status, detect_user_language, resolve_destination 계획을 세우고 서브 에이전트를 병렬로 맡긴 뒤 진행 상태 확인. 서브 에이전트는 서버 레지스트리에서 동적으로 찾음
수집·브라우징 (Place Scout) web_search, web_fetch, extract_dom_skeleton, get_page_section, verify_selectors, interact_page, take_screenshot, plan_place_search, save_places 정적 페이지와 지도·SPA 같은 동적 페이지 모두 대응, 스키마 검증 후 저장
SNS·영상 (Social Scout) youtube_search(YouTube Data API v3), verify_youtube_url(oEmbed), plan_social_search, save_social_posts 공식 API 우선, 키가 없으면 스니펫으로 대체

서비스 전용 도구 12종은 LangChain에 의존하지 않는 핵심 로직(app/travel/) 위에 얹었고, 단위 테스트 40개로 확인했습니다. 스킬은 두 가지를 만들었습니다.

  • local-source-playbook: 소스 유형별 수집 순서, 차단됐을 때 대체 전략, 스니펫 폴백
  • trend-signal-extraction: 최근 리뷰 일수, 핫플, 신규 오픈 같은 최신성 신호를 뽑는 규칙

 

결과물과 데모

 

쓰는 법은 간단합니다. 웹 화면에 가고 싶은 나라 이름만 입력하면, 나머지는 에이전트들이 알아서 찾고 고르고 번역해 가이드를 만들어 줍니다. 칭다오로 돌려 본 결과는 아래 파일로 나옵니다.

  • guide_ko.html, guide_ko.md: 현지 표기 박스, 지도 링크, 출처, SNS 영상 섹션이 들어간 한국어 가이드
  • curated.json, social.json: 점수와 검증을 거친 장소 목록, SNS 소식

데모는 Google Cloud Run(서울 리전)에 올려 두었습니다. 직접 써 보세요: Global Travel Mate 데모

 

Travel Mate

 

travel-mate-demo-366460357951.asia-northeast3.run.app

(비용 문제로 익일 12시까지만 운영하고 리소스를 삭제할 예정입니다)

서비스 메인화면

 

요청한 나라 가이드 만드는 중

 

가이드 화면 - 맛집 추천 목록

 

가이드 화면 - 카페 추천 목록
가이드 화면 - 관광지 추천 목록
가이드 화면 - SNS/영상/관련 게시물 추천 목록

 

돌아보며

 

배운 점 

  • 에이전트를 역할별로 나누니, 어느 단계에서 틀렸는지가 보였습니다. 수집이 부족한지, 점수가 이상한지, 번역이 틀렸는지를 따로 고칠 수 있었습니다.
  • "무엇을 하지 않을지"를 먼저 정하는 게 중요했습니다. 로그인 우회 금지, 개인정보 미수집, 사실 창작 금지 같은 규칙이 있어야 결과를 믿고 쓸 수 있습니다.
  • 공개 데모는 기능보다 비용과 남용을 먼저 생각해야 했습니다. 한도와 결과 재사용이 없으면 호출 비용이 그대로 새어 나갑니다.

다음에 해 볼 것

  • 도시를 늘려 같은 파이프라인이 다른 나라 소스에서도 버티는지 확인
  • 점수 가중치(품질·인기·교차 확인·최신성)가 실제 만족도와 맞는지 평가
  • 호출 비용·지연을 측정하는 관측 대시보드 붙이기

 

아이디어를 언젠간 글로벌 서비스화 하는걸 목표로~~KEEP GOING!!!

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함