-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into intergrate-mem0
- Loading branch information
Showing
124 changed files
with
35,905 additions
and
13,658 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
# Large Language Models (LLMs) in crewAI | ||
|
||
## Introduction | ||
Large Language Models (LLMs) are the backbone of intelligent agents in the crewAI framework. This guide will help you understand, configure, and optimize LLM usage for your crewAI projects. | ||
|
||
## Table of Contents | ||
- [Key Concepts](#key-concepts) | ||
- [Configuring LLMs for Agents](#configuring-llms-for-agents) | ||
- [1. Default Configuration](#1-default-configuration) | ||
- [2. String Identifier](#2-string-identifier) | ||
- [3. LLM Instance](#3-llm-instance) | ||
- [4. Custom LLM Objects](#4-custom-llm-objects) | ||
- [Connecting to OpenAI-Compatible LLMs](#connecting-to-openai-compatible-llms) | ||
- [LLM Configuration Options](#llm-configuration-options) | ||
- [Using Ollama (Local LLMs)](#using-ollama-local-llms) | ||
- [Changing the Base API URL](#changing-the-base-api-url) | ||
- [Best Practices](#best-practices) | ||
- [Troubleshooting](#troubleshooting) | ||
|
||
## Key Concepts | ||
- **LLM**: Large Language Model, the AI powering agent intelligence | ||
- **Agent**: A crewAI entity that uses an LLM to perform tasks | ||
- **Provider**: A service that offers LLM capabilities (e.g., OpenAI, Anthropic, Ollama, [more providers](https://docs.litellm.ai/docs/providers)) | ||
|
||
## Configuring LLMs for Agents | ||
|
||
crewAI offers flexible options for setting up LLMs: | ||
|
||
### 1. Default Configuration | ||
By default, crewAI uses the `gpt-4o-mini` model. It uses environment variables if no LLM is specified: | ||
- `OPENAI_MODEL_NAME` (defaults to "gpt-4o-mini" if not set) | ||
- `OPENAI_API_BASE` | ||
- `OPENAI_API_KEY` | ||
|
||
### 2. String Identifier | ||
```python | ||
agent = Agent(llm="gpt-4o", ...) | ||
``` | ||
|
||
### 3. LLM Instance | ||
List of [more providers](https://docs.litellm.ai/docs/providers). | ||
```python | ||
from crewai import LLM | ||
|
||
llm = LLM(model="gpt-4", temperature=0.7) | ||
agent = Agent(llm=llm, ...) | ||
``` | ||
|
||
### 4. Custom LLM Objects | ||
Pass a custom LLM implementation or object from another library. | ||
|
||
## Connecting to OpenAI-Compatible LLMs | ||
|
||
You can connect to OpenAI-compatible LLMs using either environment variables or by setting specific attributes on the LLM class: | ||
|
||
1. Using environment variables: | ||
```python | ||
import os | ||
|
||
os.environ["OPENAI_API_KEY"] = "your-api-key" | ||
os.environ["OPENAI_API_BASE"] = "https://api.your-provider.com/v1" | ||
``` | ||
|
||
2. Using LLM class attributes: | ||
```python | ||
llm = LLM( | ||
model="custom-model-name", | ||
api_key="your-api-key", | ||
base_url="https://api.your-provider.com/v1" | ||
) | ||
agent = Agent(llm=llm, ...) | ||
``` | ||
|
||
## LLM Configuration Options | ||
|
||
When configuring an LLM for your agent, you have access to a wide range of parameters: | ||
|
||
| Parameter | Type | Description | | ||
|-----------|------|-------------| | ||
| `model` | str | The name of the model to use (e.g., "gpt-4", "gpt-3.5-turbo", "ollama/llama3.1", [more providers](https://docs.litellm.ai/docs/providers)) | | ||
| `timeout` | float, int | Maximum time (in seconds) to wait for a response | | ||
| `temperature` | float | Controls randomness in output (0.0 to 1.0) | | ||
| `top_p` | float | Controls diversity of output (0.0 to 1.0) | | ||
| `n` | int | Number of completions to generate | | ||
| `stop` | str, List[str] | Sequence(s) to stop generation | | ||
| `max_tokens` | int | Maximum number of tokens to generate | | ||
| `presence_penalty` | float | Penalizes new tokens based on their presence in the text so far | | ||
| `frequency_penalty` | float | Penalizes new tokens based on their frequency in the text so far | | ||
| `logit_bias` | Dict[int, float] | Modifies likelihood of specified tokens appearing in the completion | | ||
| `response_format` | Dict[str, Any] | Specifies the format of the response (e.g., {"type": "json_object"}) | | ||
| `seed` | int | Sets a random seed for deterministic results | | ||
| `logprobs` | bool | Whether to return log probabilities of the output tokens | | ||
| `top_logprobs` | int | Number of most likely tokens to return the log probabilities for | | ||
| `base_url` | str | The base URL for the API endpoint | | ||
| `api_version` | str | The version of the API to use | | ||
| `api_key` | str | Your API key for authentication | | ||
|
||
Example: | ||
```python | ||
llm = LLM( | ||
model="gpt-4", | ||
temperature=0.8, | ||
max_tokens=150, | ||
top_p=0.9, | ||
frequency_penalty=0.1, | ||
presence_penalty=0.1, | ||
stop=["END"], | ||
seed=42, | ||
base_url="https://api.openai.com/v1", | ||
api_key="your-api-key-here" | ||
) | ||
agent = Agent(llm=llm, ...) | ||
``` | ||
|
||
## Using Ollama (Local LLMs) | ||
|
||
crewAI supports using Ollama for running open-source models locally: | ||
|
||
1. Install Ollama: [ollama.ai](https://ollama.ai/) | ||
2. Run a model: `ollama run llama2` | ||
3. Configure agent: | ||
```python | ||
agent = Agent( | ||
llm=LLM(model="ollama/llama3.1", base_url="http://localhost:11434"), | ||
... | ||
) | ||
``` | ||
|
||
## Changing the Base API URL | ||
|
||
You can change the base API URL for any LLM provider by setting the `base_url` parameter: | ||
|
||
```python | ||
llm = LLM( | ||
model="custom-model-name", | ||
base_url="https://api.your-provider.com/v1", | ||
api_key="your-api-key" | ||
) | ||
agent = Agent(llm=llm, ...) | ||
``` | ||
|
||
This is particularly useful when working with OpenAI-compatible APIs or when you need to specify a different endpoint for your chosen provider. | ||
|
||
## Best Practices | ||
1. **Choose the right model**: Balance capability and cost. | ||
2. **Optimize prompts**: Clear, concise instructions improve output. | ||
3. **Manage tokens**: Monitor and limit token usage for efficiency. | ||
4. **Use appropriate temperature**: Lower for factual tasks, higher for creative ones. | ||
5. **Implement error handling**: Gracefully manage API errors and rate limits. | ||
|
||
## Troubleshooting | ||
- **API Errors**: Check your API key, network connection, and rate limits. | ||
- **Unexpected Outputs**: Refine your prompts and adjust temperature or top_p. | ||
- **Performance Issues**: Consider using a more powerful model or optimizing your queries. | ||
- **Timeout Errors**: Increase the `timeout` parameter or optimize your input. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.