rewriting

edangx100's avatarfrom edangx100

Enhances vague queries for better retrieval with context-aware improvements. Use during adaptive retry when no relevant documents found, when queries are unclear, or when the user mentions query enhancement or rewriting.

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 22, 2025⬇️2downloads

When & Why to Use This Skill

The Query Rewriting skill for Claude agents optimizes information retrieval by transforming vague or underspecified user prompts into high-precision search queries. By leveraging context-aware improvements and adaptive retry logic, it ensures AI agents can overcome retrieval failures and find relevant documentation even when initial searches yield no results, significantly boosting the reliability of RAG (Retrieval-Augmented Generation) systems.

Use Cases

  • Adaptive Retry Logic: Automatically reformulating search terms when initial retrieval returns zero documents to uncover relevant information in a second pass.
  • Contextual Clarification: Incorporating previous conversation history into follow-up questions (e.g., 'What about warranty?') to create explicit, standalone queries that include the specific product or topic context.
  • Vague Query Expansion: Translating ambiguous user complaints like 'it won't work' into detailed troubleshooting search terms based on the current system state.
  • Terminology Standardization: Expanding technical abbreviations and adding synonyms to queries to ensure compatibility with diverse knowledge base indexing styles.
namerewriting
descriptionEnhances vague queries for better retrieval with context-aware improvements. Use during adaptive retry when no relevant documents found, when queries are unclear, or when the user mentions query enhancement or rewriting.

Query Rewriting

Instructions

Rewrite queries using rewrite_query() in components/rewriter.py. Typically triggered when len(relevant_docs) == 0 during adaptive retry.

Default usage:

# During retry after no relevant docs found
previous_context = f"Previous query '{current_query}' found {len(docs)} documents but none were relevant."

rewrite_result = rewrite_query(current_query, previous_context=previous_context)
current_query = rewrite_result['rewritten_query']

Rewriting strategies:

  • Expand abbreviations: "fast computer" → "high performance laptop processor"
  • Clarify vague terms: "won't work" → "troubleshooting device not powering on"
  • Incorporate context: "What about warranty" + product context → "warranty coverage for [product]"
  • Add synonyms: "cheap" → "affordable budget inexpensive"

Returns:

  • rewritten_query: Enhanced query string
  • reasoning: Explanation of changes

Critical for adaptive retry: Call only when len(relevant_docs) == 0 and num_retries < RETRY_LIMIT. Pass context from previous failed attempt.

Implementation: components/rewriter.py, uses REWRITE_MODEL from config.py (default: Haiku 4.5), temperature 0.3.

Examples

Example 1: Basic rewriting (no context)

# Input
result = rewrite_query("fast computer")

# Output
{
    "rewritten_query": "high performance laptop with fast processor and SSD storage",
    "reasoning": "Expanded 'fast' to specific performance characteristics"
}

Example 2: Context-aware rewriting

# Input
result = rewrite_query(
    "What about warranty",
    previous_context="User interested in ZenithBook 13 Evo laptop"
)

# Output
{
    "rewritten_query": "What is the warranty coverage and terms for ZenithBook 13 Evo laptop",
    "reasoning": "Incorporated product context and made question explicit"
}

Example 3: Adaptive retry integration

# After grading finds no relevant docs
if len(relevant_documents) == 0 and num_retries < RETRY_LIMIT:
    # Build context
    previous_context = f"Previous query '{current_query}' found {len(retrieved_documents)} documents but none were relevant."

    # Rewrite
    rewrite_result = rewrite_query(current_query, previous_context)
    current_query = rewrite_result['rewritten_query']

    print(f"Retry {num_retries + 1}: {current_query}")
    num_retries += 1
    # Loop back to retrieval

Example 4: Vague troubleshooting

# Input
result = rewrite_query("won't work")

# Output
{
    "rewritten_query": "troubleshooting device not functioning properly or not turning on",
    "reasoning": "Clarified vague complaint into specific troubleshooting query"
}