-
Notifications
You must be signed in to change notification settings - Fork 86
AI FAQ Generator
In the ever-evolving landscape of content creation and SEO, automation tools have become indispensable. One such tool, our AI FAQ Generator, harnesses the power of AI to streamline FAQ creation, ensuring that your content remains relevant, engaging, and optimized for search engines. This blog will take a deep dive into the technical aspects of the AI FAQ Generator code, focusing on its components, workflows, and best practices for integration and enhancement.
The AI FAQ Generator is a Python-based tool built with Streamlit, leveraging advanced APIs for search and AI-driven text generation. The core functionality revolves around extracting relevant questions from search engine results, generating optimized FAQs, and providing an intuitive interface for users.
- Streamlit Interface
- Serper API Integration
- Google Generative AI Integration
- Error Handling and Retries
Streamlit is utilized to create a user-friendly interface for the AI FAQ Generator. The application sets up the page configuration and styling with Streamlit's st.set_page_config
and custom HTML/CSS.
st.set_page_config(page_title="Alwrity - AI Writer")
st.markdown("""
<style>
[class="st-emotion-cache-7ym5gk ef3psqc12"]{
display: inline-block;
padding: 5px 20px;
background-color: #4681f4;
color: #FBFFFF;
width: 300px;
height: 35px;
text-align: center;
text-decoration: none;
font-size: 16px;
border-radius: 8px;
}
</style>
""", unsafe_allow_html=True)
The st.text_input
and st.selectbox
components gather user input for blog keywords, blog type, and search intent. This input drives the FAQ generation process.
The Serper API is used to fetch search engine results and “People Also Ask” (PAA) questions, which serve as the foundation for generating relevant FAQs.
def perform_serperdev_google_search(query):
serper_api_key = os.getenv('SERPER_API_KEY')
if not serper_api_key:
st.error("SERPER_API_KEY is missing. Set it in the .env file.")
url = "https://google.serper.dev/search"
payload = json.dumps({
"q": query,
"gl": "in",
"hl": "en",
"num": 10,
"autocorrect": True,
"page": 1,
"type": "search",
"engine": "google"
})
headers = {'X-API-KEY': serper_api_key, 'Content-Type': 'application/json'}
with st.spinner("Searching Google..."):
response = requests.post(url, headers=headers, data=payload, stream=True)
if response.status_code == 200:
return response.json()
else:
st.error(f"Error: {response.status_code}, {response.text}")
The function perform_serperdev_google_search
sends a POST request to the Serper API and retrieves search results. It checks for API key availability and handles response errors gracefully.
The core of the FAQ generation relies on Google’s Generative AI (Gemini). We configure the API, send the prompt, and handle responses, including retry mechanisms for robustness.
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
def generate_text_with_exception_handling(prompt):
try:
genai.configure(api_key=os.getenv('GEMINI_API_KEY'))
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 0,
"max_output_tokens": 8192,
}
safety_settings = [
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
{"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
]
model = genai.GenerativeModel(
model_name="gemini-1.5-flash-latest",
generation_config=generation_config,
safety_settings=safety_settings
)
convo = model.start_chat(history=[])
convo.send_message(prompt)
return convo.last.text
except Exception as e:
st.exception(f"GEMINI: An unexpected error occurred: {e}")
return None
The function generate_text_with_exception_handling
utilizes exponential backoff to handle failures gracefully. It configures the AI model with safety settings to prevent the generation of harmful content.
Error handling is implemented using the tenacity
library, which provides a robust mechanism for retrying failed operations. This ensures that the FAQ generation process is resilient to transient errors.
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
def generate_text_with_exception_handling(prompt):
# Function implementation
By retrying failed API calls and handling exceptions effectively, the application maintains reliability and improves user experience.
The AI FAQ Generator demonstrates a sophisticated integration of Streamlit, external APIs, and AI models to automate and optimize FAQ creation. For developers, understanding the nuances of API interactions, error handling, and AI configurations is crucial for building robust and scalable tools.
Whether you're building similar tools or integrating AI into your projects, the techniques discussed here offer valuable insights into crafting high-quality, resilient applications. Feel free to explore the code, adapt it for your needs, and contribute to enhancing AI-driven content solutions.