메뉴
HN
Hacker News • 24일 전

Keenable SELECT: SQL로 웹을 검색하는 AI 에이전트

IMP
7/10
핵심 요약

Keenable SELECT는 웹 데이터를 SQL 쿼리로 직접 조회하는 MCP 서버 기반 에이전트입니다. WEB_SEARCH, SEM_MATCH, SEM_EXTRACT 같은 시맨틱 연산자를 DuckDB SELECT 문에 결합해, 1,000페이지 이상을 한 번의 호출로 검색·필터링·필드 추출까지 수행합니다. LLM 토큰 비용을 크게 줄이면서 재현 가능한 리서치 리포트를 생성하는 것이 핵심 가치입니다.

번역된 본문

Keenable SELECT가 생성한 리서치 리포트 모음입니다. Keenable SELECT는 SQL로 웹을 검색하는 에이전트입니다. 각 카드는 완성된 리포트와 그 뒤에 있는 전체 작업 궤적(각 쿼리, 도구 결과, 결과 집합)을 연결합니다.

작동 방식

"2025년 이후 프론티어 AI 연구소 사이에서 이동한 연구자는 누구인가? 각 이동에 대해 연구자, 떠난 연구소, 이동한 곳, 이동한 달을 나열하라"고 질문하면:

→ Keenable SELECT가 웹에서 SQL을 실행합니다:

SELECT SEM_EXTRACT(content, '연구자'), SEM_EXTRACT(content, '떠난 연구소'), SEM_EXTRACT(content, '합류한 연구소'), SEM_EXTRACT(content, '이동 시기(월)') FROM WEB_SEARCH(다양한 8개 쿼리) WHERE SEM_MATCH(content, '2025년 이후 프론티어 연구소 간 이동한 실명 연구자')

→ 리포트를 받게 됩니다.

갤러리

  • YC 스타트업 이름 형태론의 20년사 (2026-09-01 · 메시지 36개 · 쿼리 18개)
  • 살아있는 검색엔진 역사 (1982–2026) (2026-08-31 · 18개 · 10개)
  • 미국 기가와트급 AI 데이터센터 건설 붐 (2026-08-31 · 20개 · 10개)
  • 기록된 동물원 동물 탈출 지도 (2026-08-31 · 20개 · 12개)
  • 베이 지역 신규 캐주얼 동남아시아 레스토랑 베스트 (2026-08-31 · 18개 · 9개)
  • 표절·차용으로 지목된 볼리우드 노래 (2026-08-31 · 19개 · 10개)
  • GPS가 부른 죽음: 기록된 물·사막·절벽 사고 (2026-08-31 · 15개 · 9개)
  • 2025년 이후 프론티어 AI 연구자 이동 (2026-08-31 · 16개 · 9개)
  • 세계의 위대한 새 이동 경로 (2026-08-31 · 17개 · 10개)
  • 인도 유명 망고 원산지 지도 (2026-08-31 · 31개 · 16개)
  • 주요 오픈·오픈웨이트 LLM 출시 — 2026 타임라인 (2026-08-31 · 14개 · 9개)
  • 마블 영화 세계관, 2005–2026 — 라이트 에디션 (2026-08-31 · 24개 · 12개)
  • 메카니컬 키보드 출시 — 10년 타임라인 (2026-08-31 · 20개 · 10개)
  • 미국 최근 동물원 보로노이 지도 (2026-08-31 · 29개 · 16개)
  • 궤도 발사 지도, 1957–2026 (2026-08-31 · 16개 · 9개)
  • 인기 오픈소스 AI 에이전트 및 에이전틱 프레임워크 (2026-08-31 · 17개 · 9개)
  • 시애틀 & 벨뷰 커피 애호가 투어 (2026-08-31 · 18개 · 9개)
  • AI 연구소 창업자 패밀리 트리 (2026-08-31 · 20개 · 10개)
  • 위대한 셰프들의 주방 계보 (2026-08-31 · 16개 · 9개)
  • 미국 스페셜티 커피 로스터 지도 (2026-08-31 · 13개 · 9개)
  • 일반적인 EDC(일상 휴대품) 팩에는 무엇이 들어가나? (2026-08-31 · 16개 · 9개)
  • 호주의 '빅 띵스' — 지도와 경로 (2026-08-27)
  • 베이 지역 첫 데이트 플레이북 (2026-08-27)
  • Braintrust (braintrust.dev) — 공개 자료 기반 조직도 (2026-08-27)

리포트 뒤의 시스템

Keenable SELECT는 select라는 단 하나의 주요 도구를 가진 MCP 서버입니다. 이 도구는 실시간 웹 데이터에 대해 읽기 전용 DuckDB SELECT 문 하나를 실행합니다. 서버는 웹 및 시맨틱 연산자를 DuckDB 외부에서 실행하고, 그 결과를 다시 행 집합에 넣은 뒤 DuckDB에서 최종 SQL을 실행합니다.

전통적인 웹 검색은 에이전트에게 링크 10개를 줍니다. 그러면 에이전트는 각 페이지를 읽고 비싼 토큰 비용을 들여 답을 만들어야 합니다. SELECT는 이 작업을 쿼리 안으로 옮깁니다. 한 번의 호출로 1,000페이지 이상을 검색하고, LLM 비용 없이 정확한 WHERE 절로 필터링하며, 행마다 작은 LLM 호출 한 번으로 필드를 추출하고, 행들을 그룹화할 수 있습니다.

MCP 도구

select는 DuckDB SELECT 쿼리를 받아 행을 반환합니다. 서버는 모든 쿼리 결과를 ID가 있는 결과 집합으로 저장합니다.

원문 보기
원문 보기 (영어)
Research reports built by Keenable SELECT , an agent that searches the web in SQL. Every card links the finished report and the full trajectory behind it: each query, tool result, and result set. How it works You ask “Which AI researchers moved between frontier labs since 2025 ? For each move list the researcher , the lab they left , where they went and the month .” → Keenable SELECT runs SQL on the web SELECT SEM_EXTRACT(content, 'researcher' ), SEM_EXTRACT(content, 'left lab' ), SEM_EXTRACT(content, 'joined lab' ), SEM_EXTRACT(content, 'move month' ) FROM WEB_SEARCH(8 diverse queries) WHERE SEM_MATCH(content, 'named researcher moving between frontier labs , 2025+ ') → You get a report Gallery Twenty Years of YC Startup-Name Morphology 2026-09-01 · 36 messages · 18 queries Trajectory → A Living History of Search Engines (1982–2026) 2026-08-31 · 18 messages · 10 queries Trajectory → America’s Gigawatt AI Data-Center Buildout 2026-08-31 · 20 messages · 10 queries Trajectory → Atlas of Documented Zoo Animal Escapes 2026-08-31 · 20 messages · 12 queries Trajectory → Best New Casual Southeast Asian Restaurants in the Bay Area 2026-08-31 · 18 messages · 9 queries Trajectory → Bollywood Songs Reported as Copied or Inspired 2026-08-31 · 19 messages · 10 queries Trajectory → Death by GPS: Documented Water, Desert & Cliff Incidents 2026-08-31 · 15 messages · 9 queries Trajectory → Frontier AI Researcher Moves Since 2025 2026-08-31 · 16 messages · 9 queries Trajectory → Great Bird Migrations of the World 2026-08-31 · 17 messages · 10 queries Trajectory → India’s Famous Mango Origins Map 2026-08-31 · 31 messages · 16 queries Trajectory → Major Open & Open-Weight LLM Releases — 2026 Timeline 2026-08-31 · 14 messages · 9 queries Trajectory → Marvel Screen Continuities, 2005–2026 — Light Edition 2026-08-31 · 24 messages · 12 queries Trajectory → Mechanical Keyboard Releases — 10-Year Timeline 2026-08-31 · 20 messages · 10 queries Trajectory → Nearest Zoo Voronoi Atlas — United States 2026-08-31 · 29 messages · 16 queries Trajectory → Orbital Launch Atlas, 1957–2026 2026-08-31 · 16 messages · 9 queries Trajectory → Popular Open-Source AI Agents & Agentic Frameworks 2026-08-31 · 17 messages · 9 queries Trajectory → Seattle & Bellevue Coffee Enthusiast Tour 2026-08-31 · 18 messages · 9 queries Trajectory → The AI Lab Founder Family Tree 2026-08-31 · 20 messages · 10 queries Trajectory → The Great-Chef Kitchen Lineage 2026-08-31 · 16 messages · 9 queries Trajectory → U.S. Specialty Coffee Roaster Atlas 2026-08-31 · 13 messages · 9 queries Trajectory → What Goes in Common EDC Packs? 2026-08-31 · 16 messages · 9 queries Trajectory → Australia’s Big Things — Map and Route 2026-08-27 Bay Area First-Date Playbook 2026-08-27 Braintrust (braintrust.dev) — Public-Source Org Chart 2026-08-27 The system behind the reports Keenable SELECT is an MCP server with one main tool: select . The tool runs one read-only DuckDB SELECT statement on live web data. The server runs the web and semantic operators outside DuckDB, puts their output back into the row set, and then runs the final SQL in DuckDB. A traditional web search gives an agent ten links. The agent must then read each page and build the answer from expensive tokens. SELECT moves this work into the query. One call can search more than 1,000 pages, filter them with an exact WHERE clause at no LLM cost, extract fields with one small LLM call per row, and group the rows. MCP tools select takes DuckDB SELECT queries and returns the rows. The server saves every query result as a result set with an id, and a later query can read from that id. generate_html_report takes a brief and result set ids. A report model on the server writes an HTML report from the rows and returns a shareable link. Semantic operators The operators live inside normal SQL. The server finds them in the parsed statement, runs them, and replaces them with plain columns. Exact SQL filters run first, so only the surviving rows go to the LLM operators. Operator What it does WEB_SEARCH('q1', 'q2', ...) Searches all queries at the same time, merges ranked results, and removes repeated URLs. WEB_FETCH('https://a.com', ...) Gets the given URLs as Markdown, one row per page. SEM_EXTRACT(column, 'field description') One LLM call per row. It returns one field, or null when the text does not give the value. SEM_EXTRACT_ALL(column, 'what one value is') Like SEM_EXTRACT , but returns all matching values in a list. SEM_MATCH(column, 'predicate') An LLM test per row. Use it as a meaning-based WHERE filter. SEM_SCORE(column, 'query') A low-cost embedding score per row. Use ORDER BY ... DESC LIMIT k . SEM_NORM(column) Gives the same key to values with the same meaning. Use it in GROUP BY . WEB_SEARCH and WEB_FETCH can also run per row. Their arguments can use row columns, for example WEB_SEARCH(name || ' founding year') . Main agent Every report in this gallery comes from two agents: a research agent that uses the MCP server to gather the data, and a report agent that runs inside generate_html_report on the server and writes the page. The research agent is a plain tool loop: an LLM with the select tool. It writes and runs its own queries until it can answer, and streams its tool calls, results, and answer as events. A follow-up question continues the conversation on top of the stored transcript. Every run in this showcase asks for an HTML report, so the agent ends each answer with the report link. Report agent A second agent writes each report on the server. It gets the brief, the rows of the result sets, and an authoring guide. It builds the page in a sandboxed Python session that holds the result sets as dataframes, so the data reaches the page without the model retyping it. After each publish, the server renders the draft and returns screenshots and the page's JavaScript error count; the agent fixes the document and publishes again, under a fixed budget. Only the final draft stays live, published as a link.