|
|
""" |
|
|
Content Optimization Module |
|
|
Enhances content for better performance in AI/LLM systems and GEO scoring. |
|
|
""" |
|
|
|
|
|
import json |
|
|
import re |
|
|
from typing import Dict, Any, List, Optional |
|
|
from langchain.prompts import ChatPromptTemplate |
|
|
|
|
|
|
|
|
class ContentOptimizer: |
|
|
"""Main class for optimizing content for AI and GEO performance.""" |
|
|
|
|
|
def __init__(self, llm): |
|
|
self.llm = llm |
|
|
self.setup_prompts() |
|
|
|
|
|
def setup_prompts(self): |
|
|
"""Initialize system prompts for GEO evaluation and content optimization.""" |
|
|
self.geo_analysis_prompt = ChatPromptTemplate.from_template(""" |
|
|
You are a Generative Engine Optimization (GEO) specialist. Analyze the provided content for effectiveness in AI-powered search and LLM systems. |
|
|
|
|
|
Evaluate the content on a scale of 1–10 for each criterion: |
|
|
|
|
|
1. **AI Search Visibility**: How likely is this content to appear in AI-generated responses? |
|
|
2. **Query Intent Matching**: Does it clearly match common user queries? |
|
|
3. **Clarity**: Is the language clear, direct, and easy to understand? |
|
|
4. **Structuredness**: How logically organized and well-formatted is the content? |
|
|
5. **Completeness**: Does it fully answer potential questions? |
|
|
6. **Use of Keywords**: Are relevant keywords included naturally? |
|
|
7. **Trust & Factuality**: Is the content accurate, trustworthy, and verifiable? |
|
|
8. **Engagement**: Does the content encourage interaction or further exploration? |
|
|
9. **Readability**: Is the tone appropriate for the intended audience? |
|
|
10. **LLM Friendliness**: How well can LLMs use this content for QA or generation? |
|
|
|
|
|
Return scores, reasoning, and improvement suggestions. |
|
|
""") |
|
|
|
|
|
self.optimization_prompt = ChatPromptTemplate.from_template(""" |
|
|
You are an AI Content Enhancement Specialist. Improve the following content to maximize effectiveness in LLMs and AI search engines. Ensure clarity, keyword relevance, structured formatting, and natural language. |
|
|
|
|
|
Original Content: |
|
|
----------------- |
|
|
{content} |
|
|
|
|
|
Optimized Output (Clear, Structured, and LLM-Friendly): |
|
|
----------------- |
|
|
""") |
|
|
|
|
|
def analyze_geo(self, content: str) -> Dict[str, Any]: |
|
|
"""Analyze GEO performance of given content.""" |
|
|
prompt = self.geo_analysis_prompt.format_messages(content=content) |
|
|
response = self.llm(prompt) |
|
|
return self.parse_response(response) |
|
|
|
|
|
def optimize_content(self, content: str) -> str: |
|
|
"""Return optimized version of input content.""" |
|
|
prompt = self.optimization_prompt.format_messages(content=content) |
|
|
response = self.llm(prompt) |
|
|
return self.extract_optimized_content(response) |
|
|
|
|
|
@staticmethod |
|
|
def parse_response(response: Any) -> Dict[str, Any]: |
|
|
"""Parse structured response from LLM.""" |
|
|
try: |
|
|
if isinstance(response, str): |
|
|
return json.loads(response) |
|
|
return response |
|
|
except json.JSONDecodeError: |
|
|
return {"error": "Invalid JSON response from LLM", "raw": str(response)} |
|
|
|
|
|
@staticmethod |
|
|
def extract_optimized_content(response: Any) -> str: |
|
|
"""Extract optimized content from LLM response.""" |
|
|
if isinstance(response, str): |
|
|
return response.strip() |
|
|
return str(response) |
|
|
|