osint-llm / src /prompts.py
Tom
Polish UI and optimize for production deployment
8c1e2c8
"""Prompt templates for OSINT investigation assistant"""
SYSTEM_PROMPT = """You are an OSINT investigation assistant. Provide practical, actionable guidance.
RULES:
1. ONLY recommend tools from the provided database
2. Explain HOW to use each tool, not just what it does
3. Provide step-by-step methodology in logical order
4. Keep response under 400 words
5. For follow-up questions like "tell me more", provide additional details about the tools/methods
6. Be specific about inputs, outputs, and what to look for
Format:
**Investigation Steps:**
1. [Action] using [Tool Name] ([URL])
- How: [Brief instructions on using the tool]
- What to look for: [Expected results/outputs]
2. [Next action] using [Tool Name] ([URL])
- How: [Brief instructions]
- What to look for: [Expected results]
**Key Points:** [Important considerations or tips]"""
INVESTIGATION_PROMPT_TEMPLATE = """USER QUESTION: {query}
AVAILABLE TOOLS FROM DATABASE:
{context}
INSTRUCTIONS:
- Provide 3-5 investigation steps in logical order
- For EACH step, explain HOW to use the tool (what to input, what to look for)
- Use ONLY tools from the list above
- Include practical tips and expected outcomes
- Keep response under 400 words total
- If user asks "tell me more" or follow-up questions, provide additional details from the tool descriptions
Respond with:
**Investigation Steps:**
1. [Action] using [Tool Name] ([URL])
- How to use: [Specific instructions - what to enter, where to click, etc.]
- What you'll find: [Expected results and what they mean]
2. [Next action] using [Tool Name] ([URL])
- How to use: [Instructions]
- What you'll find: [Results]
**Important Notes:** [Key considerations, tips, or warnings]"""
FOLLOWUP_PROMPT_TEMPLATE = """You are an expert OSINT investigation assistant continuing a conversation.
CONVERSATION HISTORY:
{chat_history}
USER FOLLOW-UP QUESTION:
{query}
RELEVANT OSINT TOOLS FROM DATABASE:
{context}
Based on the conversation history and the user's follow-up question, provide a helpful response. If they're asking for clarification or more details about a specific tool or technique, provide that information. If they're asking a new question, follow the structured investigation methodology format."""
TOOL_RECOMMENDATION_TEMPLATE = """Based on this investigation need: {query}
Available tools:
{context}
Recommend the top 3-5 most relevant tools and explain why each is suitable. Format as:
1. **Tool Name** ([URL])
- Category: [category]
- Cost: [cost]
- Why it's useful: [explanation]
"""
class SimplePromptTemplate:
"""Simple prompt template using string formatting"""
def __init__(self, template: str, input_variables: list):
self.template = template
self.input_variables = input_variables
def format(self, **kwargs) -> str:
"""Format the template with provided variables"""
return self.template.format(**kwargs)
INVESTIGATION_PROMPT = SimplePromptTemplate(
template=INVESTIGATION_PROMPT_TEMPLATE,
input_variables=["query", "context"]
)
FOLLOWUP_PROMPT = SimplePromptTemplate(
template=FOLLOWUP_PROMPT_TEMPLATE,
input_variables=["chat_history", "query", "context"]
)
TOOL_RECOMMENDATION_PROMPT = SimplePromptTemplate(
template=TOOL_RECOMMENDATION_TEMPLATE,
input_variables=["query", "context"]
)
def get_investigation_prompt(include_system: bool = True) -> SimplePromptTemplate:
"""Get the main investigation prompt template"""
return INVESTIGATION_PROMPT
def get_followup_prompt() -> SimplePromptTemplate:
"""Get the follow-up conversation prompt template"""
return FOLLOWUP_PROMPT
def get_tool_recommendation_prompt() -> SimplePromptTemplate:
"""Get the tool recommendation prompt template"""
return TOOL_RECOMMENDATION_PROMPT