rfp_contents
Validates procurement notice data, ensuring accuracy in budgets and formatting, while providing AI-generated summaries for cards.
Install
mkdir -p .claude/skills/rfp-contents && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16849" && unzip -o skill.zip -d .claude/skills/rfp-contents && rm skill.zipInstalls to .claude/skills/rfp-contents
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
공고 카드의 콘텐츠 품질 점검 + LLM 자동 요약. 예산·기간 정확성, 본문 가독성, 키워드 매칭 정확성, 상세보기 가독성 5축 점검 + 카드에 본문+첨부 종합 150자 요약을 ai_summary 컬럼에 저장.Key capabilities
- →Verify budget and period accuracy in announcements
- →Refine body readability by removing markers and noise
- →Improve detail view readability with visual separation classes
- →Ensure keyword matching accuracy in body and attachments
- →Generate 150-character AI summaries for announcement cards
How it works
This skill performs a 5-axis inspection of announcement content, checking budget accuracy, body readability, detail view readability, keyword matching, and generates an AI summary using Claude API.
Inputs & outputs
When to use rfp_contents
- →Validating tender budget and dates
- →Generating AI summaries for listings
- →Checking document readability
- →Verifying keyword matching
About this skill
rfp_contents — 공고 콘텐츠 품질 + LLM 카드 요약
목적
크롤링된 공고를 카드로 노출할 때 사용자가 곧장 판단할 수 있도록 콘텐츠 품질 보장:
- 예산·기간 정확성 — 본문에 명시된 값 vs DB 추출값 일치
- 본문 가독성 — 정부 공문 마커·표·잡음 정제 완료
- 상세보기 가독성 —
body-head·body-note·body-line클래스로 시각 분리 - 키워드 매칭 정확성 — 본문 + 첨부 본문 모두 매칭, boilerplate 거짓 양성 제거
- 카드 요약 150자 — 본문+첨부 종합해서 Claude API 로 생성,
ai_summary컬럼 저장
실행 방법
사용자: "콘텐츠 점검해줘" / "rfp_contents"
→ Claude 가 scripts/audit_contents.py 실행 + 결과 보고
자동 (GitHub Actions monitor_crawler.yml 후속 단계):
· 매시 크롤 후 신규 보안 공고에만 ai_summary 생성 (비용 최소화)
· 활성 보안 공고 중 ai_summary IS NULL 인 row 만 처리
5축 점검 절차
① 예산·기간 정확성
-- budget_mw IS NOT NULL 인 row 중 budget_excerpt 가 본문에 있는지
SELECT id, budget_mw, budget_excerpt
FROM announcement
WHERE is_security AND NOT is_dismissed
AND budget_mw IS NOT NULL
AND budget_excerpt IS NOT NULL
AND POSITION(budget_excerpt IN body) = 0 -- excerpt 가 본문에 없음
- 이상: budget_excerpt 가 본문에 없는데 budget_mw 채워짐 → hallucination 의심
- 조치:
python scripts/audit_contents.py --verify-budget으로 재추출
② 본문 가독성
# build_static.make_readable() 가 정부 공문 마커 토큰 (§§HEAD§§/§§NOTE§§) 부여했는지
SELECT COUNT(*) FROM announcement
WHERE is_security AND NOT is_dismissed
AND body LIKE '%§§HEAD§§%' -- 토큰 있으면 OK
마커 토큰 부여율 < 50% 면 가독성 처리 누락. build_static.make_readable() 강화 필요.
③ 상세보기 가독성
정적 사이트는 이미 처리됨 — body-head (border-bottom 2px), body-note (좌측 border + 회색 배경), body-line (line-height 1.85). 코드 변경 시에만 회귀 점검.
④ 키워드 매칭 정확성
-- 첨부 본문 통합 안 된 활성 보안 공고 (KISA/NIPA 어댑터 회귀 감지)
SELECT source, COUNT(*) AS untouched
FROM announcement
WHERE is_security AND NOT is_dismissed
AND source IN ('kisa','nipa')
AND body NOT LIKE '%[첨부 본문]%'
AND (deadline_at >= CURRENT_DATE::text
OR (deadline_at IS NULL AND posted_at >= (CURRENT_DATE - 60)::text))
GROUP BY source
- KISA/NIPA 통합률 < 60% 면 회귀.
base.enrich_body_with_attachments()동작 확인. - 평균 매칭 키워드 < 10개면 첨부 추출 실패 다수.
⑤ 카드 LLM 요약 (ai_summary)
생성 조건
is_security = TRUE AND is_dismissed = FALSEai_summary IS NULL- 활성 (마감 미래 OR 60일 내 등록)
- 본문 길이 ≥ 300자 (너무 짧으면 의미 있는 요약 X)
Claude API 호출
model = "claude-haiku-4-5" # 빠르고 저렴
system = (
"당신은 한국 정부 R&D 공고를 카드에 표시할 짧은 요약을 만드는 전문가다. "
"본문과 첨부 텍스트를 종합해 150자 이내 한국어로 요약. "
"사업 본질·대상·예산·핵심 활동만. 안내문구·자격요건 제외. "
"딱 한 문단, 마침표 포함."
)
user = f"제목: {title}\n발주: {agency}\n본문(첨부 포함):\n{body[:6000]}"
max_tokens = 200
결과 저장
UPDATE announcement SET ai_summary = ? WHERE id = ?
표시 위치 (정적 사이트)
build_static.py fetch_data()에서ai_summary가져옴app.js renderCard()— 카드 제목 아래, 점수 위에 회색 작은 글씨로 표시ai_summary가 NULL 이면 폴백:body_preview(첫 150자 plain text)
비용 가드
- 활성 보안 공고만 처리 (만료/비활성 제외)
ai_summary IS NULL만 처리 — 한 번 생성하면 재호출 X- claude-haiku-4-5 + 200 tokens = 호출당 약 0.5원 미만
- 350건 처리 ≈ 200원 1회성
회귀 회피
body가 변경되면 (예: KISA/NIPA 첨부 통합 백필)ai_summary재생성 필요--force옵션으로 NULL 무시하고 전체 재생성 가능- 평소엔 NULL 만 처리 (idempotent)
관련 파일
scripts/audit_contents.py— 5축 점검 + LLM 요약 생성scripts/static_templates/app.js— 카드 ai_summary 표시scripts/build_static.py— fetch_data 에 ai_summary 포함src/rfp_targeter/drafter/— Claude API 호출 패턴 참고
When not to use it
- →When the task is not related to content quality inspection of announcement cards
- →When LLM-generated summaries are not required for the `ai_summary` column
- →When the content is not a security announcement
Limitations
- →Limited to content quality inspection and LLM summary generation for announcement cards
- →Requires `scripts/audit_contents.py` for execution
- →AI summary generation is conditional on `is_security = TRUE`, `is_dismissed = FALSE`, `ai_summary IS NULL`, active status, and body length ≥ 300 characters
How it compares
This workflow provides a structured 5-axis quality inspection and automated LLM summary generation for announcement cards, ensuring content quality and user-friendly summaries, unlike manual content review.
Compared to similar skills
rfp_contents side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| rfp_contents (this skill) | 0 | 2mo | No flags | Intermediate |
| df-basic-stats | 0 | 6mo | Review | Beginner |
| add-vault-note | 1 | 5mo | No flags | Intermediate |
| Curated Book Section Management | 0 | 1mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
df-basic-stats
qmakescl
>
add-vault-note
tradingstrategy-ai
Add a note to specific vault
Curated Book Section Management
Hanna033333
A guide for adding and managing curated book sections (e.g., Caldecott, Winter Vacation), covering planning, data preparation, and implementation.
interactive-shell
Jonghakseo
dev server, TUI, REPL, DB shell, 로그처럼 사용자 제어나 장시간 실행이 필요한 터미널 작업에 사용한다. AI 작업 위임에는 subagent를 사용한다.
senior-data-engineer
davila7
World-class data engineering skill for building scalable data pipelines, ETL/ELT systems, and data infrastructure. Expertise in Python, SQL, Spark, Airflow, dbt, Kafka, and modern data stack. Includes data modeling, pipeline orchestration, data quality, and DataOps. Use when designing data architectures, building data pipelines, optimizing data workflows, or implementing data governance.
data-engineering-data-pipeline
sickn33
You are a data pipeline architecture expert specializing in scalable, reliable, and cost-effective data pipelines for batch and streaming data processing.