TradingAgents/docs/LLM_PROVIDER_GUIDE.md

396 lines
8.4 KiB
Markdown

# LLM Provider Configuration Guide
This project now supports multiple AI/LLM providers through a unified interface. You can easily switch between providers by modifying the configuration.
## Supported Providers
The following providers are currently supported:
1. **OpenAI** - GPT-4, GPT-4o, GPT-3.5-turbo, etc.
2. **Ollama** - Local models (Llama 3, Mistral, etc.)
3. **Anthropic** - Claude models (Opus, Sonnet, Haiku)
4. **Google** - Gemini models
5. **Azure OpenAI** - Microsoft's Azure-hosted OpenAI models
6. **OpenRouter** - Access to multiple models through one API
7. **Groq** - Fast inference for open-source models
8. **Together AI** - Open-source models
9. **HuggingFace** - Models from HuggingFace Hub
## Configuration
### Basic Configuration
Edit `tradingagents/default_config.py` or pass a custom config dictionary:
```python
config = {
"llm_provider": "openai", # Provider name
"deep_think_llm": "gpt-4o", # Model for complex reasoning
"quick_think_llm": "gpt-4o-mini", # Model for quick tasks
"backend_url": "https://api.openai.com/v1", # API endpoint (optional)
"temperature": 0.7, # Sampling temperature
"llm_kwargs": {}, # Additional provider-specific parameters
}
```
## Provider-Specific Examples
### OpenAI (Default)
```python
config = {
"llm_provider": "openai",
"deep_think_llm": "gpt-4o",
"quick_think_llm": "gpt-4o-mini",
"backend_url": "https://api.openai.com/v1",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export OPENAI_API_KEY=sk-your-api-key-here
```
**Required Packages:**
```bash
pip install langchain-openai
```
---
### Ollama (Local Models)
```python
config = {
"llm_provider": "ollama",
"deep_think_llm": "llama3:70b", # Or llama3, mistral, etc.
"quick_think_llm": "llama3:8b",
"backend_url": "http://localhost:11434", # Default Ollama endpoint
"temperature": 0.7,
}
```
**Setup:**
1. Install Ollama from https://ollama.ai
2. Pull models: `ollama pull llama3`
3. Verify: `ollama list`
**Required Environment Variables:**
- None (uses local Ollama instance)
**Required Packages:**
```bash
pip install langchain-community
```
---
### Anthropic (Claude)
```python
config = {
"llm_provider": "anthropic",
"deep_think_llm": "claude-3-opus-20240229",
"quick_think_llm": "claude-3-haiku-20240307",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export ANTHROPIC_API_KEY=sk-ant-your-api-key-here
```
**Required Packages:**
```bash
pip install langchain-anthropic
```
---
### Google (Gemini)
```python
config = {
"llm_provider": "google",
"deep_think_llm": "gemini-1.5-pro",
"quick_think_llm": "gemini-1.5-flash",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export GOOGLE_API_KEY=your-google-api-key-here
```
**Required Packages:**
```bash
pip install langchain-google-genai
```
---
### OpenRouter (Multi-Provider)
```python
config = {
"llm_provider": "openrouter",
"deep_think_llm": "anthropic/claude-3-opus",
"quick_think_llm": "anthropic/claude-3-haiku",
"backend_url": "https://openrouter.ai/api/v1",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export OPENAI_API_KEY=sk-or-your-openrouter-key
```
**Required Packages:**
```bash
pip install langchain-openai
```
---
### Groq (Fast Inference)
```python
config = {
"llm_provider": "groq",
"deep_think_llm": "mixtral-8x7b-32768",
"quick_think_llm": "llama3-8b-8192",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export GROQ_API_KEY=gsk-your-groq-api-key
```
**Required Packages:**
```bash
pip install langchain-groq
```
---
### Azure OpenAI
```python
config = {
"llm_provider": "azure",
"deep_think_llm": "gpt-4-deployment-name",
"quick_think_llm": "gpt-35-turbo-deployment-name",
"backend_url": "https://your-resource.openai.azure.com/",
"temperature": 0.7,
"llm_kwargs": {
"api_version": "2024-02-01",
}
}
```
**Required Environment Variables:**
```bash
export AZURE_OPENAI_API_KEY=your-azure-key
export AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
```
**Required Packages:**
```bash
pip install langchain-openai
```
---
### Together AI
```python
config = {
"llm_provider": "together",
"deep_think_llm": "meta-llama/Llama-3-70b-chat-hf",
"quick_think_llm": "meta-llama/Llama-3-8b-chat-hf",
"temperature": 0.7,
}
```
**Required Environment Variables:**
```bash
export TOGETHER_API_KEY=your-together-api-key
```
**Required Packages:**
```bash
pip install langchain-together
```
---
## Usage in Code
### Using Default Configuration
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
# Uses default config from tradingagents/default_config.py
graph = TradingAgentsGraph()
```
### Using Custom Configuration
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
# Custom config for Ollama
custom_config = {
"llm_provider": "ollama",
"deep_think_llm": "llama3:70b",
"quick_think_llm": "llama3:8b",
"backend_url": "http://localhost:11434",
"temperature": 0.7,
# ... other config options
}
graph = TradingAgentsGraph(config=custom_config)
```
### Programmatically Creating LLM Instances
```python
from tradingagents.llm_factory import LLMFactory, get_llm_instance
# Method 1: Direct factory usage
llm = LLMFactory.create_llm(
provider="ollama",
model="llama3",
base_url="http://localhost:11434",
temperature=0.7
)
# Method 2: Using config dictionary
config = {
"llm_provider": "anthropic",
"quick_think_llm": "claude-3-haiku-20240307",
"temperature": 0.7,
}
llm = get_llm_instance(config, model_type="quick_think")
```
## Advanced Configuration
### Additional LLM Parameters
You can pass additional provider-specific parameters via `llm_kwargs`:
```python
config = {
"llm_provider": "openai",
"deep_think_llm": "gpt-4o",
"quick_think_llm": "gpt-4o-mini",
"temperature": 0.7,
"llm_kwargs": {
"max_tokens": 4096,
"top_p": 0.9,
"frequency_penalty": 0.0,
"presence_penalty": 0.0,
}
}
```
### Model Recommendations by Use Case
#### Best for Cost Efficiency
- **Deep Think:** Ollama Llama 3 70B (local, free)
- **Quick Think:** Ollama Llama 3 8B (local, free)
#### Best for Quality
- **Deep Think:** GPT-4o or Claude 3 Opus
- **Quick Think:** GPT-4o-mini or Claude 3 Haiku
#### Best for Speed
- **Deep Think:** Groq Mixtral 8x7B
- **Quick Think:** Groq Llama 3 8B
#### Best for Privacy
- **Deep Think:** Ollama Llama 3 70B (local)
- **Quick Think:** Ollama Llama 3 8B (local)
## Troubleshooting
### Import Errors
If you get import errors for a specific provider:
```bash
pip install langchain-[provider]
```
For example:
```bash
pip install langchain-anthropic # For Anthropic
pip install langchain-community # For Ollama
pip install langchain-groq # For Groq
```
### API Key Issues
Make sure your environment variables are set correctly:
```bash
# Check if set
echo $OPENAI_API_KEY
# Set temporarily
export OPENAI_API_KEY=your-key
# Set permanently (add to ~/.bashrc or ~/.zshrc)
echo 'export OPENAI_API_KEY=your-key' >> ~/.bashrc
```
### Ollama Connection Issues
If Ollama fails to connect:
1. Check if Ollama is running: `ollama list`
2. Verify the endpoint: Default is `http://localhost:11434`
3. Try pulling the model: `ollama pull llama3`
### Model Not Found
Make sure you're using the correct model identifier for each provider:
- OpenAI: `gpt-4o`, `gpt-4o-mini`, `gpt-3.5-turbo`
- Anthropic: `claude-3-opus-20240229`, `claude-3-sonnet-20240229`, `claude-3-haiku-20240307`
- Google: `gemini-1.5-pro`, `gemini-1.5-flash`
- Ollama: `llama3`, `llama3:70b`, `mistral`, etc.
## Migration from OpenAI-Only Version
If you're upgrading from an older version that only supported OpenAI:
1. The default configuration still uses OpenAI, so existing code will work
2. To switch providers, update your config:
```python
config["llm_provider"] = "ollama" # or "anthropic", "google", etc.
config["deep_think_llm"] = "llama3:70b"
config["quick_think_llm"] = "llama3:8b"
config["backend_url"] = "http://localhost:11434"
```
3. Install required packages for your chosen provider
4. Set appropriate environment variables
## Contributing
To add support for a new provider:
1. Edit `tradingagents/llm_factory.py`
2. Add a new `_create_[provider]_llm()` method
3. Update the `create_llm()` method to handle the new provider
4. Update this documentation
5. Submit a pull request