AI HOT Skill
Agent가 가장 자연스러운 한국어 질문으로 aihot.virxact.com의 매일 AI HOT 데일리 리포트와 모든 AI 동향을 가져올 수 있게 해줍니다. 브라우저를 열 필요가 없습니다. SKILL.md 표준 형식으로, Claude Code / Codex CLI / Cursor / Gemini CLI / OpenCode / 모든 호환 플랫폼에서 사용 가능합니다.
온라인: https://aihot.virxact.com (공개 익명 접근 가능, 토큰 불필요)
전제 조건: 반드시 User-Agent 포함 (API 엔드포인트만 해당)
/api/public/* 경로는 nginx UA 블랙리스트를 통해 상업용 크롤러를 차단하며, 기본 curl/X.Y UA는 403 Forbidden이 반환됩니다. API 호출 시 모든 curl은 브라우저 UA를 포함해야 합니다:
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
# 이후 모든 API 호출 curl에 -H "User-Agent: $UA" 추가, 예:
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"
아래 '워크플로' 섹션의 curl 예제는 간결함을 위해 $UA가 설정되어 있다고 가정합니다. 실제 호출 시 반드시 -H "User-Agent: $UA"를 추가해야 합니다. 잊지 마세요. 이 단계를 빼먹으면 API가 다운된 것으로 오인할 수 있지만, 실제로는 403으로 차단된 것입니다.
범위 명확화: 이 UA 요구 사항은
/api/public/*API 엔드포인트에만 해당됩니다./aihot-skill/{install.sh,SKILL.md,README.md}설치 진입점은 nginx에서 UA 블랙리스트가 의도적으로 면제됩니다 (설계 상curl -fsSL ... | bash한 줄 설치를 위해). 기본 curl UA로 200 응답을 받습니다. '전제 조건'을 모든 aihot.virxact.com 경로로 확대 해석하지 마십시오.
언제 사용할까
라우팅 우선순위 (첫 번째 원칙): 기본값은 엄선된 항목
items?mode=selected입니다. AI HOT이 매일 엄선한 '메인 메뉴'로, 사용자가 관심을 가질 만한 일을 다루며 데이터도 신선합니다.
- 사용자가 '데일리 리포트'라고 명확히 말한 경우에만
daily를 사용합니다 (편집된 완성본, UTC 기준 하루 단위로 슬라이스됨, '지난 24시간/오늘' 등의 롤링 윈도우와 맞지 않음)- 사용자가 '전체/모든/완전한'이라고 명확히 말한 경우에만
mode=all을 사용합니다 (엄선되지 않은 2차 항목 포함, 양은 많지만 잡다함)- '오늘 AI 업계', '지난 24시간 주요 뉴스', '최근 AI 업계 소식' 등 넓은 질문 = **기본 엄선 + 시간 윈도우(since)**를 사용하며, 데일리 리포트나 전체를 기본값으로 사용하지 않습니다.
이는 사용자의 의미적 우선순위를 맞추기 위함입니다: 엄선 항목이 메인 메뉴이고, 데일리 리포트와 전체는 사용자가 특별히 요청할 때 선택하는 옵션으로, 기본값을 빼앗아서는 안 됩니다.
| 사용자 발화 | 호출할 API |
|---|---|
| 기본 (넓은 질문): '오늘 AI 업계 소식은?', '지난 24시간 주요 뉴스', '최근 AI 업계', 'AI 새로운 거 있어?' | GET /api/public/items?mode=selected&since=<의미적 시간 윈도우> (기본 엄선 + since로 범위 축소) |
| '데일리 리포트' 명시: 'AI 데일리 리포트', '오늘의 데일리 리포트', '데일리 리포트 보여줘' | GET /api/public/daily (최신 데일리 리포트) |
| '전체/모든/완전한' 명시: '오늘 AI 동향 전체', '전체 목록', '모든 AI 동향' | GET /api/public/items?mode=all (since는 사용자 문맥에 따라 선택) |
| '어제/그제 데일리 리포트', '5월 6일 데일리 리포트 봐줘' | GET /api/public/daily/{YYYY-MM-DD} |
| '최근 며칠 데일리 리포트 목록', '데일리 리포트 나열', '데일리 리포트 아카이브' | GET /api/public/dailies?take=N |
| '엄선된 항목 보기', 'AI HOT 엄선' | GET /api/public/items?mode=selected |
| '최근 모델 출시', 'AI 제품 출시', 'AI 업계 동향', 'AI 논문' | GET /api/public/items?mode=selected&category=...&since=<7일 전> (기본 엄선 + 카테고리) |
| '최근 1주일 AI 동향', '5일 전부터 현재까지 출시' | GET /api/public/items?mode=selected&since=ISO-8601 |
| 'OpenAI/Anthropic/Google이 최근에 발표한 것' (회사 차원) | GET /api/public/items?q=OpenAI (서버 측 키워드 검색, 2026-05-08 출시) |
| 'Sora 관련 / GPT-5 관련 / RAG 논문' | GET /api/public/items?q=<키워드> (제목 + 중국어 제목 + 중국어 요약 세 컬럼 매칭) |
일반적 지침: 사용자가 묻는 것은 '현재 AI 업계 사실'입니다. 훈련 데이터에 의존하여 추측하지 말고, 항상 API를 사용하세요. '답을 알고 있다'고 생각되더라도 다시 확인하십시오. AI HOT은 훈련 데이터보다 훨씬 최신이며, 한국어 사용자가 관심을 가질 만한 주제에 초점을 맞추고 있습니다.
엔드포인트 개요
| 엔드포인트 | 용도 | 주요 파라미터 |
|---|---|---|
/api/public/daily | 최신 데일리 리포트 | 없음 |
/api/public/daily/{YYYY-MM-DD} | 특정 날짜 데일리 리포트 | path: date |
/api/public/dailies | 데일리 리포트 아카이브 목록 | take (1-180, 기본 30) |
/api/public/items | 모든 AI 동향 | mode / category / since / take / cursor / q(키워드) |
규칙:
- Base URL:
https://aihot.virxact.com - 인증: 없음 (익명)
- 속도 제한: 600 req/min/IP (직렬 호출, 동시에 여러 번 요청하지 마십시오)
- items 엔드포인트
since는 최근 7일로 제한: 전달하지 않으면 since=now-7d와 동일 (서버 측 fallback). 7일 이전은 자동으로 7일 전으로 잘림. 미래 시간 → 400. 따라서 Skill이 어떻게 호출하든 items API는 항상 최근 7일의 콘텐츠만 반환합니다. 더 이전 데이터 →/api/public/daily/{YYYY-MM-DD}경로로 데일리 리포트 아카이브 참조 take상한 100. 더 필요하면 cursor로 페이지네이션- 전체 OpenAPI 3.1 스펙:
https://aihot.virxact.com/openapi.yaml
워크플로
기본 경로: 엄선 + 시간 윈도우 (넓은 질문에 최우선)
엄선 = AI HOT이 매일 엄선한 '메인 메뉴' — 사용자가 관심을 가질 만한 모든 AI 주요 이슈를 다루며, 발행 시간 역순으로 정렬됩니다. '오늘 AI 업계', '지난 24시간 주요 뉴스', '최근 AI 소식' 등 넓은 질문은 기본적으로 이 경로를 사용합니다 — 데일리 리포트와 비교하여: ① 시간 윈도우 자유로움 (24시간 / 3일 / 1주 등 사용자 의미에 맞춤) ② 데이터 신선함 (실시간 롤링, UTC 기준 하루 단위 슬라이스 아님) ③ 품질 높음 (aiSelected=true 풀, 2차 항목 미포함).
# 최근 24시간 엄선 항목 가져오기 (사용자가 '지난 24시간 주요 뉴스'라고 물을 때)
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=50"
# 최근 50개 엄선 항목 가져오기 (사용자가 '엄선 항목 보기' / 명시적 시간 윈도우 없이)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50" \
| jq '.items[] | {title, source, publishedAt, url}'
데일리 리포트 가져오기 (사용자가 '데일리 리포트'라고 명시할 때)
트리거 키워드: 문장에 '데일리 리포트'라는 단어가 포함됨 ('AI 데일리 리포트', '오늘의 데일리 리포트', '데일리 리포트 봐줘', '5월 6일 데일리 리포트'). '데일리 리포트'라는 단어가 없으면 이 경로를 사용하지 마십시오 — 데일리 리포트는 UTC 0시 기준으로 고정된 하루 완성본이며, '지난 24시간/오늘' 등의 롤링 시간 윈도우와 맞지 않습니다.
데일리 리포트는 AI HOT의 '헤드라인 레이어'입니다. 매일 한국 시간 08:00에 자동 생성되며, 주제별로 섹션으로 나뉩니다 (5개 고정 섹션). '편집장 리뷰' 도입부 단락이 포함된, 주제별로 패키징된 완성본입니다.
# 오늘 (또는 최신 가능) 데일리 리포트 가져오기
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily" \
| jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'
특정 날짜 데일리 리포트 가져오기
# YYYY-MM-DD, UTC 0시 기준
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily/2026-05-07"
데일리 리포트 아카이브 목록 보기 (검색)
조회 가능한 날짜를 모를 때 먼저 아카이브를 확인:
# 최근 N일 데일리 리포트 인덱스 (본문 없음, 날짜 + 헤드라인 제목만)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14" \
| jq '.items[] | {date, leadTitle}'
전체 가져오기 (사용자가 '전체/모든/완전한'이라고 명시할 때)
트리거 키워드: 문장에 '전체', '모든', '완전한', '전량', '옛날 것 포함'이 포함됨 — 사용자가 엄선되지 않은 2차 항목을 의도적으로 보고 싶어 함 (엄선에서 걸러졌지만 여전히 관련 있는 콘텐츠). 이러한 키워드가 없으면 mode=all을 사용하지 마십시오 — 엄선 항목이 이미 대부분 사용자가 관심을 가질 만한 일을 다루고 있으며, 전체 풀은 양이 많지만 잡다합니다.
# 최근 24시간 전체 AI 동향 가져오기 (사용자가 '오늘 전체 AI 동향 봐줘')
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&since=$since&take=100"
카테고리별 항목 가져오기
5개 카테고리 (items API는 영어 slug 사용, daily API에서 보는 section label은 한국어):
items?category= | daily.sections[].label |
|---|---|
ai-models | 모델 출시/업데이트 |
ai-products | 제품 출시/업데이트 |
industry | 업계 동향 |
paper | 논문 연구 |
tip | 팁과 의견 |
사용자가 '공식 계정 최근 게시물'을 묻는 경우: items API에는 공식 계정(mp_hot 소스)이 포함되어 있지 않습니다 (/mp 페이지에서 별도로 제공). Skill은 현재 이 질문에 답변할 수 없으므로, 사용자에게 https://aihot.virxact.com/mp에서 공식 계정 인기 게시물 페이지를 보도록 안내할 수 있습니다.
# 예: 최근 50개 AI 논문 (기본 엄선 + paper 카테고리)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=paper&take=50" \
| jq '.items[] | {title, source, publishedAt, url}'
# 예: 엄선 항목 중 모델 출시
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"
# 예외: 사용자가 '모든 논문 / 모든 모델 출시'라고 명확히 말할 때만 mode=all 사용
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"
시간 윈도우별 항목 가져오기 (최근 N일)
핵심 규칙: 사용자가 '최근 X' (최근 모델 출시 / 최근 AI 논문 / 최근 OpenAI 등)를 물을 때는
since파라미터를 사용하여 윈도우를 사용자의 실제 의도에 맞게 좁혀야 합니다 ('최근 3일'이면 3d, '어제'면 1d, '최근 1주일'이면 7d).서버 측 fallback: items API 서버는 기본적으로
since=now-7d(하드 상한, 서버 보호)를 사용하므로, Skill이 since를 전혀 지정하지 않아도 최근 7일의 콘텐츠만 반환되며 몇 달 전의 오래된 항목은 가져오지 않습니다. 하지만 명시적으로 since를 지정하는 것이 여전히 권장됩니다: ① 사용자가 '최근 3일'을 물을 때 명시적으로 3d를 지정하는 것이 서버 기본값 7d보다 정확함 ② 출력 메타 정보에 사람이 읽을 수 있는 시간 윈도우를 작성할 수 있음 ③ 공개적으로 홍보된 '최대 7일'과 의도를 명확히 정렬함.
# 최근 7일 엄선 모델 출시 (사용자가 '최근 모델 출시'를 물을 때)
since=$(date -u -v-7d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&since=$since&take=100"
# 최근 3일 엄선 동향 (사용자가 '최근 3일'이라고 명확히 말할 때)
since=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=100"
예외: 사용자가 '전체 / 모든 / 전체 목록 / 옛날 것 포함'을 명확히 말하면 → mode를 all로 전환, since는 생략 가능. 사용자가 '엄선 항목 보기' (시간 윈도우가 아닌 엄선 풀을 보는 것)를 물으면 mode는 selected를 유지하고 since도 생략 가능. 하지만 문장에 '최근 / 최신 / 요즘 / 이번 주'가 있으면 기본적으로 since + mode=selected를 사용합니다.
페이지네이션 (cursor)
/api/public/items 응답에 nextCursor (opaque token)가 포함되어 있습니다. 다음 요청 시 이 값을 그대로 cursor 파라미터에 넣으면 됩니다.
# 1페이지
resp1=$(curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100")
echo "$resp1" | jq '.items | length' # 100
# 2페이지
cursor=$(echo "$resp1" | jq -r '.nextCursor')
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100&cursor=$cursor"
hasNext = false 또는 nextCursor = null일 때 페이지네이션을 중단합니다. cursor는 opaque token이므로 블랙박스로 취급하고, 구문 분석하거나 증가시키거나 다른 엔드포인트에서 재사용하지 마십시오.
키워드 검색 ('OpenAI가 최근에 발표한 것' / 'Sora 관련' / 'RAG 논문')
API는 서버 측 키워드 검색을 직접 지원합니다. q 파라미터는 title + 중국어 title + 중국어 summary 세 컬럼에서 ILIKE 매칭을 수행하며, PostgreSQL pg_trgm GIN 인덱스를 사용합니다 (2-6ms). '목록 가져오기 + 클라이언트 jq grep' 방식을 사용하지 마십시오 — 이 방식은 처음 100개 풀 내의 히트만 볼 수 있으며, 키워드가 100개 밖에 있으면 전혀 찾을 수 없습니다.
# OpenAI가 최근에 발표한 것 찾기 (전체 풀에서 검색, 처음 100개뿐만 아니라)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"
# Sora 관련 모든 AI 동향 찾기 (Sora를 포함하는 모든 제목 또는 요약)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"
# RAG 논문 찾기 (카테고리 제한 + 키워드)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"
# 키워드 + 시간 윈도우 (Anthropic 최근 3일 엄선)
SINCE=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&q=Anthropic&since=$SINCE"
q 제약:
- 최소 2자 (1자는 GIN trigram이 전체 테이블 스캔으로 퇴화되어 서버에서 검색되지 않은 것으로 간주)
- 최대 200자 (초과 시 자동 잘림)
- 다른 파라미터 (mode/category/since/take/cursor)와 직교적으로 결합 가능, '엄선 + 논문 + 키워드 + 7일 이내' 조합 가능
- 다른 요청과 600r/m 속도 제한 공유
반환 데이터 형식
/api/public/daily 반환
{
"date": "2026-05-07",
"generatedAt": "2026-05-07T00:01:23.456Z",
"windowStart": "2026-05-06T00:00:00.000Z",
"windowEnd": "2026-05-07T00:00:00.000Z",
"lead": { "title": "...", "leadParagraph": "..." },
"sections": [
{
"label": "모델 출시/업데이트",
"items": [
{
"title": "...",
"summary": "...",
"sourceUrl": "https://...",
"sourceName": "OpenAI Blog"
}
]
}
],
"flashes": [
{ "title": "...", "sourceName": "...", "sourceUrl": "...", "publishedAt": "..." }
]
}
sections[].label은 5개로 고정: '모델 출시/업데이트' / '제품 출시/업데이트' / '업계 동향' / '논문 연구' / '팁과 의견'. lead는 극히 드물게 null일 수 있습니다.
/api/public/dailies 반환
{
"count": 14,
"items": [
{ "date": "2026-05-07", "generatedAt": "...", "leadTitle": "..." }
]
}
/api/public/items 반환
{
"count": 50,
"hasNext": true,
"nextCursor": "eyJhIjoxNzE0OTk1MjAwMDAwLCJpIjoiY205eHl6MTIzIn0",
"items": [
{
"id": "cm9abc456def789ghi012jkl3",
"title": "한국어 제목 (정규화됨)",
"title_en": "원본 영어 제목 (title과 다를 경우에만 존재, 그렇지 않으면 null)",
"url": "https://...",
"source": "OpenAI Blog",
"publishedAt": "2026-05-07T15:30:00.000Z",
"summary": "한국어 요약 (LLM 생성)",
"category": "ai-models"
}
]
}
필드 불변 조건:
- 필수:
id/title/url/source - nullable:
title_en/summary/publishedAt/category category값 집합:ai-models/ai-products/industry/paper/tip/nullpublishedAt: ISO 8601 UTC (Z포함)id: cuid 문자열 (25자), 숫자라고 가정하지 마십시오
사용자용 출력 형식
⚠️ 핵심 원칙: 이 섹션은 사용자에게 직접 표시되는 최종 콘텐츠입니다. 반드시 마크다운 형식으로 가독성 있게 정리되어야 하며, 일반인이 이해할 수 있는 평이한 언어여야 합니다. 사용자는 대부분 비기술적인 AI 창업자/디자이너/일반 독자이므로, 보고 이해해야 하는 것은 AI 정보 브리핑이어야 하며 API 디버그 로그가 아니어야 합니다.
'엔드포인트 경로 /
mode=selected같은 raw 파라미터 / 속도 제한 / nginx 캐시 / cursor / hasNext' 등의 모든 인프라 세부 사항은 사용자에게 표시되는 출력에 절대 나타나서는 안 됩니다. 사람이 읽을 수 있는 메타데이터 (시간 윈도우 / 항목 수 / '발행 시간 역순')는 유지 가능합니다. 판단 기준: 사용자가 바로 이해할 수 있는가? 예 → 유지, 아니오 → 삭제.
데일리 리포트 스타일 출력 (daily / daily/{date} 엔드포인트 사용 시)
**AI HOT 데일리 리포트 · 2026-05-07**
## 모델 출시/업데이트
1. **<제목>** — <출처>
<요약 50자 이내 간략 버전>
<url>
## 제품 출시/업데이트
2. ...
## 업계 동향
3. ...
## 논문 연구
4. ...
## 팁과 의견
5. ...
## 속보 (flashes에 내용이 있을 경우)
- <flash.title> — <flash.source> (<flash.publishedAt 사람이 읽을 수 있게 변환>)
번호는 전체에서 연속적으로 (1, 2, 3 ... N), 각 ## 내에서 다시 계산하지 않습니다. 사용자가 '오늘 27개'라고 한눈에 셀 수 있도록 합니다.
리스트 스타일 출력 (items 엔드포인트 사용 시)
기본적으로 category별 그룹화 + 전체 번호 매기기 (하나의 카테고리만 있는 경우를 제외하고) — 사용자는 '모델/제품/업계/논문/팁' 다섯 가지 섹션 구조에 이미 익숙합니다 (데일리 리포트에서). 카테고리가 혼합될 때 이 구조가 가장 자연스럽습니다:
**AI HOT — 최근 30개 엄선 항목**
## 모델 출시/업데이트
1. **<제목>** — <출처>
2시간 전
<요약>
<url>
## 제품 출시/업데이트
2. **<제목>** — <출처>
...
3. ...
## 업계 동향
4. ...
단일 카테고리일 때 (사용자가 'AI 논문'/'모델 출시' 등을 명확히 말한 경우), 평면 번호 매기기 리스트를 사용:
**AI HOT — 최근 1주일 AI 논문** (2026-05-01 ~ 2026-05-08)
1. **<제목>** — <출처>
<요약>
<url>
2. ...
부제목/메타 정보는 사람이 읽을 수 있게만 작성
OK (사용자가 바로 이해 가능):
- '시간 윈도우 2026-05-05 ~ 2026-05-07'
- '최근 3일 동안 OpenAI 키워드에 해당하는 전체 항목'
- '발행 시간 역순'
- '총 50개'
- '오늘 5/8 데일리 리포트는 한국 시간 08:00 이후에 생성되므로, 먼저 5/7 호를 확인하세요'
Not OK (인프라 세부 사항 누출, 절대 작성 금지):
- ❌
mode=selected/category=paper/take=30같은 raw 파라미터 이름 - ❌ 엔드포인트 경로
/api/public/items?since=2026-04-30T18:39:31Z&take=50 - ❌ '속도 제한 600 req/min' / 'nginx 캐시 60s' / 'x-nginx-cache: HIT'
- ❌ 'cursor' / 'hasNext=true' / 'cursor 페이지네이션 또는 since 윈도우 축소 필요'
- ❌ 모든 HTTP 상태 코드 / 캐시 상태 / 백엔드 메커니즘 설명
데이터 소스는 최대 한 줄: '데이터 출처: aihot.virxact.com', 또는 언급하지 않음 (사용자는 Skill을 사용할 때 이미 출처를 알고 있음).
시간을 사람이 읽을 수 있게 변환
publishedAt은 ISO 8601 UTC입니다. 표시 시 반드시 한국 시간으로 변환하고 사용자가 빠르게 읽을 수 있는 상대적/절대적 시간으로 표시:
| 내부 값 | 사용자에게 표시 |
|---|---|
2026-05-08T01:48:00.000Z | '오늘 오전 09:48' / '2시간 전' |
2026-05-07T18:08:17.000Z | '오늘 새벽 02:08' / '10시간 전' |
2026-05-06T16:43:00.000Z | '5/7 00:43' / '어제' |
2026-05-07T15:30:00.000Z 같은 ISO 문자열을 직접 표시하지 마십시오 — 사용자가 이해할 수 없습니다.
title vs title_en
기본적으로 title (한국어로 정규화됨)을 출력합니다. title_en은 다음 시나리오에서만 사용:
- 사용자가 명확히 영어 버전을 요청한 경우 ('영어로 보여줘')
title이 비어 있는 경우 (매우 드뭄)
둘 다 표시하지 마십시오.
일반적인 오류 처리
{"error":"No daily report available yet."}(HTTP 404): 해당 날짜의 데일리 리포트가 아직 생성되지 않음 (한국 시간 08:00 이전). 사용자에게 제안: 어제 데일리 리포트를 가져오려면curl /api/public/daily/{어제 날짜}{"error":"Invalid date format..."}(HTTP 400): date는 반드시YYYY-MM-DD형식이어야 함, UTC 기준- items 엔드포인트 일반적인 400 오류:
"invalid mode (must be 'selected' or 'all')""invalid category (must be one of: ai-models, ai-products, industry, paper, tip)""invalid since (must be ISO date, not in future)""invalid take (must be integer 1-100)"
- HTTP 429 (속도 제한): 단일 IP가 600 req/min 초과. 직렬 호출 + 페이지네이션 시 200ms 간격 추가
하지 말아야 할 것
- '오늘 AI 업계', '지난 24시간 주요 뉴스', '최근 AI 업계 소식' 등 넓은 질문을 daily로 라우팅하지 마십시오 — 이들은 롤링 시간 윈도우이며, daily는 UTC 0시 기준 (5/6-5/7 하루 전체)의 고정된 일일 완성본으로 시간 정밀도가 맞지 않습니다. 기본적으로
mode=selected + since=<의미적 윈도우>를 사용하십시오. 사용자가 문장에서 '데일리 리포트'라는 단어를 명확히 말한 경우에만daily를 사용하십시오 - 사용자가 '전체 / 모든 / 완전한 / 전량'을 말하지 않았는데 기본적으로
mode=all을 사용하지 마십시오 — 엄선 항목이 이미 대부분 사용자가 관심을 가질 만한 일을 다루고 있으며, 전체 풀은 양이 많지만 잡다하고 엄선되지 않은 2차 항목을 포함합니다. 기본값은mode=selected이며, 사용자가 '전체'를 요청한 경우에만mode=all로 전환하십시오 - 내용을 추측하거나 지어내지 마십시오 — 항상 API 응답을 기준으로 삼으십시오
- 요약 (
summary)을 원문 인용으로 사용하지 마십시오 — 요약은 LLM에 의해 생성되므로, 인용이 필요하면url/sourceUrl을 확인하십시오 - 높은 빈도로 폴링하지 마십시오 — 데일리 리포트는 매일 08:00에만 업데이트되며, items 엔드포인트는 5분 서버 측 캐시가 있습니다. 사용자가 같은 질문을 할 때 API를 다시 호출할 필요가 없습니다
- 페이지네이션을 동시에 여러 번 요청하지 마십시오 — 직렬 + 자연스러운 간격으로 처리하십시오
- cursor를 구문 분석하거나 증가시키거나 다른 엔드포인트에서 재사용하지 마십시오 — opaque token이며 내부 인코딩 형식이 불안정하여 변경 시 공지되지 않습니다
- 회사 차원 / 키워드 쿼리는 서버 측
?q=<단어>를 사용하고, '목록 가져오기 + 클라이언트 jq grep' 방식을 사용하지 마십시오 (처음 100개 풀만 볼 수 있어 누락될 수 있음) - 사용자가 '최근 N일 X'를 물을 때 명시적으로
since=<N일 전>을 포함하십시오 (의도가 명확하고 메타 정보에 사람이 읽을 수 있는 시간 윈도우를 작성할 수 있기 때문). since를 생략하면 서버 기본값 7d가 fallback으로 적용되어 오래된 항목을 가져오지는 않지만, 사용자가 '최근 3일'을 물을 때 서버 기본값 7d를 사용하면 4일 분량의 추가 콘텐츠를 가져오게 됩니다 - 사용자 출력에 엔드포인트 경로 / raw 파라미터 / 속도 제한 / 캐시 TTL / cursor / hasNext 등 인프라 세부 사항을 노출하지 마십시오 — 이러한 정보는 개발자를 위한 것이며, 사용자는 이해할 수 없습니다. 자세한 내용은 위의 '사용자용 출력 형식 → 부제목/메타 정보는 사람이 읽을 수 있게만 작성'을 참조하십시오
- 압축 / 날짜 간 / 섹션 간 출력을 병합할 때 항목 번호, 시간 정보, 카테고리 레이블을 놓치지 마십시오 — 항상 사용자가 이해할 수 있는 참조를 유지하십시오