mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-02 22:02:13 +08:00
222 lines
5.8 KiB
Markdown
222 lines
5.8 KiB
Markdown
|
|
# Configuration Guide
|
||
|
|
|
||
|
|
This guide explains how to configure DeerFlow for your environment.
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
1. **Copy the example configuration** (from project root):
|
||
|
|
```bash
|
||
|
|
# From project root directory (deer-flow/)
|
||
|
|
cp config.example.yaml config.yaml
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Set your API keys**:
|
||
|
|
|
||
|
|
Option A: Use environment variables (recommended):
|
||
|
|
```bash
|
||
|
|
export OPENAI_API_KEY="your-api-key-here"
|
||
|
|
export ANTHROPIC_API_KEY="your-api-key-here"
|
||
|
|
# Add other keys as needed
|
||
|
|
```
|
||
|
|
|
||
|
|
Option B: Edit `config.yaml` directly (not recommended for production):
|
||
|
|
```yaml
|
||
|
|
models:
|
||
|
|
- name: gpt-4
|
||
|
|
api_key: your-actual-api-key-here # Replace placeholder
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Start the application**:
|
||
|
|
```bash
|
||
|
|
make dev
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration Sections
|
||
|
|
|
||
|
|
### Models
|
||
|
|
|
||
|
|
Configure the LLM models available to the agent:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
models:
|
||
|
|
- name: gpt-4 # Internal identifier
|
||
|
|
display_name: GPT-4 # Human-readable name
|
||
|
|
use: langchain_openai:ChatOpenAI # LangChain class path
|
||
|
|
model: gpt-4 # Model identifier for API
|
||
|
|
api_key: $OPENAI_API_KEY # API key (use env var)
|
||
|
|
max_tokens: 4096 # Max tokens per request
|
||
|
|
temperature: 0.7 # Sampling temperature
|
||
|
|
```
|
||
|
|
|
||
|
|
**Supported Providers**:
|
||
|
|
- OpenAI (`langchain_openai:ChatOpenAI`)
|
||
|
|
- Anthropic (`langchain_anthropic:ChatAnthropic`)
|
||
|
|
- DeepSeek (`langchain_deepseek:ChatDeepSeek`)
|
||
|
|
- Any LangChain-compatible provider
|
||
|
|
|
||
|
|
**Thinking Models**:
|
||
|
|
Some models support "thinking" mode for complex reasoning:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
models:
|
||
|
|
- name: deepseek-v3
|
||
|
|
supports_thinking: true
|
||
|
|
when_thinking_enabled:
|
||
|
|
extra_body:
|
||
|
|
thinking:
|
||
|
|
type: enabled
|
||
|
|
```
|
||
|
|
|
||
|
|
### Tool Groups
|
||
|
|
|
||
|
|
Organize tools into logical groups:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
tool_groups:
|
||
|
|
- name: web # Web browsing and search
|
||
|
|
- name: file:read # Read-only file operations
|
||
|
|
- name: file:write # Write file operations
|
||
|
|
- name: bash # Shell command execution
|
||
|
|
```
|
||
|
|
|
||
|
|
### Tools
|
||
|
|
|
||
|
|
Configure specific tools available to the agent:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
tools:
|
||
|
|
- name: web_search
|
||
|
|
group: web
|
||
|
|
use: src.community.tavily.tools:web_search_tool
|
||
|
|
max_results: 5
|
||
|
|
# api_key: $TAVILY_API_KEY # Optional
|
||
|
|
```
|
||
|
|
|
||
|
|
**Built-in Tools**:
|
||
|
|
- `web_search` - Search the web (Tavily)
|
||
|
|
- `web_fetch` - Fetch web pages (Jina AI)
|
||
|
|
- `ls` - List directory contents
|
||
|
|
- `read_file` - Read file contents
|
||
|
|
- `write_file` - Write file contents
|
||
|
|
- `str_replace` - String replacement in files
|
||
|
|
- `bash` - Execute bash commands
|
||
|
|
|
||
|
|
### Sandbox
|
||
|
|
|
||
|
|
Choose between local execution or Docker-based isolation:
|
||
|
|
|
||
|
|
**Option 1: Local Sandbox** (default, simpler setup):
|
||
|
|
```yaml
|
||
|
|
sandbox:
|
||
|
|
use: src.sandbox.local:LocalSandboxProvider
|
||
|
|
```
|
||
|
|
|
||
|
|
**Option 2: Docker Sandbox** (isolated, more secure):
|
||
|
|
```yaml
|
||
|
|
sandbox:
|
||
|
|
use: src.community.aio_sandbox:AioSandboxProvider
|
||
|
|
port: 8080
|
||
|
|
auto_start: true
|
||
|
|
container_prefix: deer-flow-sandbox
|
||
|
|
|
||
|
|
# Optional: Additional mounts
|
||
|
|
mounts:
|
||
|
|
- host_path: /path/on/host
|
||
|
|
container_path: /path/in/container
|
||
|
|
read_only: false
|
||
|
|
```
|
||
|
|
|
||
|
|
### Skills
|
||
|
|
|
||
|
|
Configure the skills directory for specialized workflows:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
skills:
|
||
|
|
# Host path (optional, default: ../skills)
|
||
|
|
path: /custom/path/to/skills
|
||
|
|
|
||
|
|
# Container mount path (default: /mnt/skills)
|
||
|
|
container_path: /mnt/skills
|
||
|
|
```
|
||
|
|
|
||
|
|
**How Skills Work**:
|
||
|
|
- Skills are stored in `deer-flow/skills/{public,custom}/`
|
||
|
|
- Each skill has a `SKILL.md` file with metadata
|
||
|
|
- Skills are automatically discovered and loaded
|
||
|
|
- Available in both local and Docker sandbox via path mapping
|
||
|
|
|
||
|
|
### Title Generation
|
||
|
|
|
||
|
|
Automatic conversation title generation:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
title:
|
||
|
|
enabled: true
|
||
|
|
max_words: 6
|
||
|
|
max_chars: 60
|
||
|
|
model_name: null # Use first model in list
|
||
|
|
```
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
DeerFlow supports environment variable substitution using the `$` prefix:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
models:
|
||
|
|
- api_key: $OPENAI_API_KEY # Reads from environment
|
||
|
|
```
|
||
|
|
|
||
|
|
**Common Environment Variables**:
|
||
|
|
- `OPENAI_API_KEY` - OpenAI API key
|
||
|
|
- `ANTHROPIC_API_KEY` - Anthropic API key
|
||
|
|
- `DEEPSEEK_API_KEY` - DeepSeek API key
|
||
|
|
- `TAVILY_API_KEY` - Tavily search API key
|
||
|
|
- `DEER_FLOW_CONFIG_PATH` - Custom config file path
|
||
|
|
|
||
|
|
## Configuration Location
|
||
|
|
|
||
|
|
The configuration file should be placed in the **project root directory** (`deer-flow/config.yaml`), not in the backend directory.
|
||
|
|
|
||
|
|
## Configuration Priority
|
||
|
|
|
||
|
|
DeerFlow searches for configuration in this order:
|
||
|
|
|
||
|
|
1. Path specified in code via `config_path` argument
|
||
|
|
2. Path from `DEER_FLOW_CONFIG_PATH` environment variable
|
||
|
|
3. `config.yaml` in current working directory (typically `backend/` when running)
|
||
|
|
4. `config.yaml` in parent directory (project root: `deer-flow/`)
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
1. **Place `config.yaml` in project root** - Not in `backend/` directory
|
||
|
|
2. **Never commit `config.yaml`** - It's already in `.gitignore`
|
||
|
|
3. **Use environment variables for secrets** - Don't hardcode API keys
|
||
|
|
4. **Keep `config.example.yaml` updated** - Document all new options
|
||
|
|
5. **Test configuration changes locally** - Before deploying
|
||
|
|
6. **Use Docker sandbox for production** - Better isolation and security
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### "Config file not found"
|
||
|
|
- Ensure `config.yaml` exists in the **project root** directory (`deer-flow/config.yaml`)
|
||
|
|
- The backend searches parent directory by default, so root location is preferred
|
||
|
|
- Alternatively, set `DEER_FLOW_CONFIG_PATH` environment variable to custom location
|
||
|
|
|
||
|
|
### "Invalid API key"
|
||
|
|
- Verify environment variables are set correctly
|
||
|
|
- Check that `$` prefix is used for env var references
|
||
|
|
|
||
|
|
### "Skills not loading"
|
||
|
|
- Check that `deer-flow/skills/` directory exists
|
||
|
|
- Verify skills have valid `SKILL.md` files
|
||
|
|
- Check `skills.path` configuration if using custom path
|
||
|
|
|
||
|
|
### "Docker sandbox fails to start"
|
||
|
|
- Ensure Docker is running
|
||
|
|
- Check port 8080 (or configured port) is available
|
||
|
|
- Verify Docker image is accessible
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
See `config.example.yaml` for complete examples of all configuration options.
|