<claudexml/>
Classification · intermediate

Multi-label content tagging

Apply zero-to-many tags from a controlled vocabulary to an article.

You're building a CMS that needs consistent tag suggestions from a fixed taxonomy — strict subset, no hallucinated labels.

The prompt

Copy this verbatim. Replace the {{ … }} placeholders with your values.

<instructions>
Read the article inside <article>. Apply any number of tags from the list inside
<allowed_tags> that genuinely apply. Do not invent tags. Do not use synonyms.
If no tag applies, return an empty array.

Return JSON inside <result> tags, in this exact shape:
{ "tags": ["tag1", "tag2", ...] }
</instructions>

<allowed_tags>
- machine-learning
- ai-safety
- distributed-systems
- databases
- programming-languages
- web-performance
- security
- privacy
- developer-experience
- open-source
</allowed_tags>

<article>{{ article_text }}</article>

Return inside <result> tags.

Sample input

A post about using Rust to build a high-throughput, memory-safe alternative to Redis for caching, with discussion of LRU eviction and zero-copy serialization.

Expected output

<result>
{ "tags": ["databases", "programming-languages", "open-source", "web-performance"] }
</result>

Notes & tuning tips

  • The controlled vocabulary inside is load-bearing — without it Claude invents "caching" and "rust".
  • Phrase "do not invent" + "do not use synonyms" explicitly; one is not enough.
  • Validate the result against the vocabulary in code; drop any unknown labels as a safety net.

What this example uses

Tags: <instructions> <format>

Patterns: structured output

Cite this page
Multi-label content tagging. claudexml.com. https://claudexml.com/examples/multi-label-tagging/