How to secure LLM applications
Quick answer
To secure LLM applications, implement strict API key management, validate and sanitize user inputs, and enforce rate limiting to prevent abuse. Additionally, monitor usage logs and apply content filtering to detect and mitigate harmful outputs or data leaks.
PREREQUISITES
Python 3.8+OpenAI API key (free tier works)pip install openai>=1.0
Setup environment and dependencies
Install the openai Python package and set your API key as an environment variable to securely authenticate requests. Avoid hardcoding keys in your codebase.
pip install openai>=1.0
# In your shell environment
export OPENAI_API_KEY="your_api_key_here" output
Requirement already satisfied: openai in /usr/local/lib/python3.10/site-packages (x.y.z) # No output for export command
Step by step secure LLM usage
This example demonstrates secure usage of the gpt-4o-mini model with input validation, API key usage from environment variables, and basic error handling.
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def validate_input(user_input: str) -> bool:
# Basic input validation to prevent injection or harmful content
if not user_input or len(user_input) > 500:
return False
# Add more validation rules as needed
return True
user_prompt = "Explain the importance of AI ethics."
if validate_input(user_prompt):
try:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": user_prompt}]
)
print("Response:", response.choices[0].message.content)
except Exception as e:
print("Error during API call:", e)
else:
print("Invalid input detected.") output
Response: AI ethics is crucial to ensure responsible development and deployment of AI systems, preventing harm and promoting fairness.
Common variations and enhancements
- Use
asynccalls for scalable applications. - Implement
rate limitingto prevent abuse and denial-of-service. - Apply content filtering on outputs to block harmful or biased responses.
- Use environment-specific API keys with limited scopes.
import asyncio
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"] )
async def async_chat(prompt: str):
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
async def main():
result = await async_chat("What is responsible AI?")
print("Async response:", result)
asyncio.run(main()) output
Async response: Responsible AI involves designing systems that are transparent, fair, and respect user privacy.
Troubleshooting common issues
- Invalid API key: Ensure
OPENAI_API_KEYis set correctly in your environment. - Rate limit exceeded: Implement exponential backoff and monitor usage.
- Unexpected outputs: Use prompt engineering and output filters to reduce hallucinations or harmful content.
Key Takeaways
- Always secure API keys using environment variables and avoid hardcoding them.
- Validate and sanitize all user inputs before sending to the LLM to prevent injection attacks.
- Implement rate limiting and monitor usage logs to detect and prevent abuse.
- Apply content filtering on outputs to mitigate harmful or biased responses.
- Use asynchronous calls and scoped API keys for scalable and secure deployments.