mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 08:08:32 +00:00
small refractoring for new version
This commit is contained in:
@@ -123,7 +123,7 @@ result = my_crew.kickoff()
|
|||||||
print(result)
|
print(result)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Kicking Off a Crew
|
### Different wayt to Kicking Off a Crew
|
||||||
|
|
||||||
Once your crew is assembled, initiate the workflow with the appropriate kickoff method. CrewAI provides several methods for better control over the kickoff process: `kickoff()`, `kickoff_for_each()`, `kickoff_async()`, and `kickoff_for_each_async()`.
|
Once your crew is assembled, initiate the workflow with the appropriate kickoff method. CrewAI provides several methods for better control over the kickoff process: `kickoff()`, `kickoff_for_each()`, `kickoff_async()`, and `kickoff_for_each_async()`.
|
||||||
|
|
||||||
|
|||||||
42
docs/core-concepts/Training-Crew.md
Normal file
42
docs/core-concepts/Training-Crew.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
title: crewAI Train
|
||||||
|
description: Learn how to train your crewAI agents by giving them feedback early on and get consistent results.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
The training feature in CrewAI allows you to train your AI agents using the command-line interface (CLI). By running the command `crewai train -n <n_iterations>`, you can specify the number of iterations for the training process.
|
||||||
|
|
||||||
|
During training, CrewAI utilizes techniques to optimize the performance of your agents along with human feedback. This helps the agents improve their understanding, decision-making, and problem-solving abilities.
|
||||||
|
|
||||||
|
To use the training feature, follow these steps:
|
||||||
|
|
||||||
|
1. Open your terminal or command prompt.
|
||||||
|
2. Navigate to the directory where your CrewAI project is located.
|
||||||
|
3. Run the following command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
crewai train -n <n_iterations>
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace `<n_iterations>` with the desired number of training iterations. This determines how many times the agents will go through the training process.
|
||||||
|
|
||||||
|
Remember to also replace the placeholder inputs with the actual values you want to use on the main.py file in the `train` function.
|
||||||
|
|
||||||
|
```python
|
||||||
|
def train():
|
||||||
|
"""
|
||||||
|
Train the crew for a given number of iterations.
|
||||||
|
"""
|
||||||
|
inputs = {"topic": "AI LLMs"}
|
||||||
|
try:
|
||||||
|
ProjectCreationCrew().crew().train(n_iterations=int(sys.argv[1]), inputs=inputs)
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
It is important to note that the training process may take some time, depending on the complexity of your agents and will also require your feedback on each iteration.
|
||||||
|
|
||||||
|
Once the training is complete, your agents will be equipped with enhanced capabilities and knowledge, ready to tackle complex tasks and provide more consistent and valuable insights.
|
||||||
|
|
||||||
|
Remember to regularly update and retrain your agents to ensure they stay up-to-date with the latest information and advancements in the field.
|
||||||
|
|
||||||
|
Happy training with CrewAI!
|
||||||
17
docs/how-to/Coding-Agents.md
Normal file
17
docs/how-to/Coding-Agents.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
title: Coding Agents
|
||||||
|
description: Learn how to enable your crewAI Agents to write code and execute it.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
TLDR: strongly recommended to use bigger models like gpt-4 and such
|
||||||
|
|
||||||
|
EXAMPLE:
|
||||||
|
```python
|
||||||
|
Agent(
|
||||||
|
role="Senior Python Developer",
|
||||||
|
goal="Craft well design and thought out code",
|
||||||
|
backstory="You are a senior python…”,
|
||||||
|
allow_code_execution=True,
|
||||||
|
)
|
||||||
|
```
|
||||||
0
docs/how-to/Kickoff-async.md
Normal file
0
docs/how-to/Kickoff-async.md
Normal file
0
docs/how-to/Kickoff-for-each.md
Normal file
0
docs/how-to/Kickoff-for-each.md
Normal file
@@ -33,6 +33,11 @@ Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By
|
|||||||
Crews
|
Crews
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="./core-concepts/Training-Crew">
|
||||||
|
Training
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./core-concepts/Memory">
|
<a href="./core-concepts/Memory">
|
||||||
Memory
|
Memory
|
||||||
@@ -78,16 +83,36 @@ Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By
|
|||||||
Customizing Agents
|
Customizing Agents
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="./how-to/Coding-Agents">
|
||||||
|
Coding Agents
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./how-to/Human-Input-on-Execution">
|
<a href="./how-to/Human-Input-on-Execution">
|
||||||
Human Input on Execution
|
Human Input on Execution
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="./how-to/Kickoff-async">
|
||||||
|
Kickoff a Crew Asynchronously
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="./how-to/Kickoff-for-each">
|
||||||
|
Kickoff a Crew for a List
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./how-to/AgentOps-Observability">
|
<a href="./how-to/AgentOps-Observability">
|
||||||
Agent Monitoring with AgentOps
|
Agent Monitoring with AgentOps
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="./how-to/Langtrace-Observability">
|
||||||
|
Agent Monitoring with LangTrace
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div style="width:30%">
|
<div style="width:30%">
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ nav:
|
|||||||
- Processes: 'core-concepts/Processes.md'
|
- Processes: 'core-concepts/Processes.md'
|
||||||
- Crews: 'core-concepts/Crews.md'
|
- Crews: 'core-concepts/Crews.md'
|
||||||
- Collaboration: 'core-concepts/Collaboration.md'
|
- Collaboration: 'core-concepts/Collaboration.md'
|
||||||
|
- Training: 'core-concepts/Training-Crew.md'
|
||||||
- Memory: 'core-concepts/Memory.md'
|
- Memory: 'core-concepts/Memory.md'
|
||||||
- Using LangChain Tools: 'core-concepts/Using-LangChain-Tools.md'
|
- Using LangChain Tools: 'core-concepts/Using-LangChain-Tools.md'
|
||||||
- Using LlamaIndex Tools: 'core-concepts/Using-LlamaIndex-Tools.md'
|
- Using LlamaIndex Tools: 'core-concepts/Using-LlamaIndex-Tools.md'
|
||||||
@@ -138,7 +139,10 @@ nav:
|
|||||||
- Create your own Manager Agent: 'how-to/Your-Own-Manager-Agent.md'
|
- Create your own Manager Agent: 'how-to/Your-Own-Manager-Agent.md'
|
||||||
- Connecting to any LLM: 'how-to/LLM-Connections.md'
|
- Connecting to any LLM: 'how-to/LLM-Connections.md'
|
||||||
- Customizing Agents: 'how-to/Customizing-Agents.md'
|
- Customizing Agents: 'how-to/Customizing-Agents.md'
|
||||||
|
- Coding Agents: 'how-to/Coding-Agents.md'
|
||||||
- Human Input on Execution: 'how-to/Human-Input-on-Execution.md'
|
- Human Input on Execution: 'how-to/Human-Input-on-Execution.md'
|
||||||
|
- Kickoff a Crew Asynchronously: 'how-to/Kickoff-async.md'
|
||||||
|
- Kickoff a Crew for a List: 'how-to/Kickoff-for-each.md'
|
||||||
- Agent Monitoring with AgentOps: 'how-to/AgentOps-Observability.md'
|
- Agent Monitoring with AgentOps: 'how-to/AgentOps-Observability.md'
|
||||||
- Agent Monitoring with LangTrace: 'how-to/Langtrace-Observability.md'
|
- Agent Monitoring with LangTrace: 'how-to/Langtrace-Observability.md'
|
||||||
- Tools Docs:
|
- Tools Docs:
|
||||||
|
|||||||
1127
poetry.lock
generated
1127
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "crewai"
|
name = "crewai"
|
||||||
version = "0.35.0"
|
version = "0.35.3"
|
||||||
description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks."
|
description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks."
|
||||||
authors = ["Joao Moura <joao@crewai.com>"]
|
authors = ["Joao Moura <joao@crewai.com>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -14,17 +14,17 @@ Repository = "https://github.com/joaomdmoura/crewai"
|
|||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = ">=3.10,<=3.13"
|
python = ">=3.10,<=3.13"
|
||||||
pydantic = "^2.4.2"
|
pydantic = "^2.4.2"
|
||||||
langchain = "^0.1.10"
|
langchain = ">=0.2,<=0.3"
|
||||||
openai = "^1.13.3"
|
openai = "^1.13.3"
|
||||||
opentelemetry-api = "^1.22.0"
|
opentelemetry-api = "^1.22.0"
|
||||||
opentelemetry-sdk = "^1.22.0"
|
opentelemetry-sdk = "^1.22.0"
|
||||||
opentelemetry-exporter-otlp-proto-http = "^1.22.0"
|
opentelemetry-exporter-otlp-proto-http = "^1.22.0"
|
||||||
instructor = "1.3.3"
|
instructor = "1.3.3"
|
||||||
regex = "^2023.12.25"
|
regex = "^2023.12.25"
|
||||||
crewai-tools = { version = "^0.4.0", optional = true }
|
crewai-tools = { version = "^0.4.1", optional = true }
|
||||||
click = "^8.1.7"
|
click = "^8.1.7"
|
||||||
python-dotenv = "^1.0.0"
|
python-dotenv = "^1.0.0"
|
||||||
embedchain = "0.1.109"
|
embedchain = { git = "https://github.com/joaomdmoura/embedchain.git", branch = "main" }
|
||||||
appdirs = "^1.4.4"
|
appdirs = "^1.4.4"
|
||||||
jsonref = "^1.1.0"
|
jsonref = "^1.1.0"
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ mkdocs-material = { extras = ["imaging"], version = "^9.5.7" }
|
|||||||
mkdocs-material-extensions = "^1.3.1"
|
mkdocs-material-extensions = "^1.3.1"
|
||||||
pillow = "^10.2.0"
|
pillow = "^10.2.0"
|
||||||
cairosvg = "^2.7.1"
|
cairosvg = "^2.7.1"
|
||||||
crewai-tools = "^0.4.0"
|
crewai-tools = "^0.4.1"
|
||||||
|
|
||||||
[tool.poetry.group.test.dependencies]
|
[tool.poetry.group.test.dependencies]
|
||||||
pytest = "^8.0.0"
|
pytest = "^8.0.0"
|
||||||
|
|||||||
@@ -255,6 +255,16 @@ class Agent(BaseAgent):
|
|||||||
tools = agent_tools.tools()
|
tools = agent_tools.tools()
|
||||||
return tools
|
return tools
|
||||||
|
|
||||||
|
def get_code_execution_tools(self):
|
||||||
|
try:
|
||||||
|
from crewai_tools import CodeInterpreterTool
|
||||||
|
|
||||||
|
return [CodeInterpreterTool()]
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
self._logger.log(
|
||||||
|
"info", "Coding tools not available. Install crewai_tools. "
|
||||||
|
)
|
||||||
|
|
||||||
def get_output_converter(self, llm, text, model, instructions):
|
def get_output_converter(self, llm, text, model, instructions):
|
||||||
return Converter(llm=llm, text=text, model=model, instructions=instructions)
|
return Converter(llm=llm, text=text, model=model, instructions=instructions)
|
||||||
|
|
||||||
@@ -270,13 +280,8 @@ class Agent(BaseAgent):
|
|||||||
tools_list.append(tool.to_langchain())
|
tools_list.append(tool.to_langchain())
|
||||||
else:
|
else:
|
||||||
tools_list.append(tool)
|
tools_list.append(tool)
|
||||||
|
|
||||||
if self.allow_code_execution:
|
|
||||||
from crewai_tools.code_interpreter_tool import CodeInterpreterTool
|
|
||||||
|
|
||||||
tools_list.append(CodeInterpreterTool)
|
|
||||||
|
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
|
tools_list = []
|
||||||
for tool in tools:
|
for tool in tools:
|
||||||
tools_list.append(tool)
|
tools_list.append(tool)
|
||||||
return tools_list
|
return tools_list
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
self.create_agent_executor()
|
self.create_agent_executor()
|
||||||
|
|
||||||
def increment_formatting_errors(self) -> None:
|
def increment_formatting_errors(self) -> None:
|
||||||
print("Formatting errors incremented")
|
self.formatting_errors += 1
|
||||||
|
|
||||||
def copy(self):
|
def copy(self):
|
||||||
exclude = {
|
exclude = {
|
||||||
|
|||||||
@@ -299,6 +299,8 @@ class Crew(BaseModel):
|
|||||||
and not agent.function_calling_llm
|
and not agent.function_calling_llm
|
||||||
):
|
):
|
||||||
agent.function_calling_llm = self.function_calling_llm
|
agent.function_calling_llm = self.function_calling_llm
|
||||||
|
if hasattr(agent, "allow_code_execution") and agent.allow_code_execution:
|
||||||
|
agent.tools += agent.get_code_execution_tools()
|
||||||
if hasattr(agent, "step_callback") and not agent.step_callback:
|
if hasattr(agent, "step_callback") and not agent.step_callback:
|
||||||
agent.step_callback = self.step_callback
|
agent.step_callback = self.step_callback
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -600,6 +600,30 @@ def test_task_with_no_arguments():
|
|||||||
assert result == "75"
|
assert result == "75"
|
||||||
|
|
||||||
|
|
||||||
|
def test_code_execution_flag_adds_code_tool_upon_kickoff():
|
||||||
|
from crewai_tools import CodeInterpreterTool
|
||||||
|
|
||||||
|
programmer = Agent(
|
||||||
|
role="Programmer",
|
||||||
|
goal="Write code to solve problems.",
|
||||||
|
backstory="You're a programmer who loves to solve problems with code.",
|
||||||
|
allow_delegation=False,
|
||||||
|
allow_code_execution=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
task = Task(
|
||||||
|
description="How much is 2 + 2?",
|
||||||
|
expected_output="The result of the sum as an integer.",
|
||||||
|
agent=programmer,
|
||||||
|
)
|
||||||
|
|
||||||
|
crew = Crew(agents=[programmer], tasks=[task])
|
||||||
|
crew.kickoff()
|
||||||
|
assert len(programmer.tools) == 1
|
||||||
|
assert programmer.tools[0].__class__ == CodeInterpreterTool
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.vcr(filter_headers=["authorization"])
|
||||||
def test_delegation_is_not_enabled_if_there_are_only_one_agent():
|
def test_delegation_is_not_enabled_if_there_are_only_one_agent():
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
@@ -691,8 +715,8 @@ def test_agent_usage_metrics_are_captured_for_hierarchical_process():
|
|||||||
assert result == '"Howdy!"'
|
assert result == '"Howdy!"'
|
||||||
|
|
||||||
assert crew.usage_metrics == {
|
assert crew.usage_metrics == {
|
||||||
"total_tokens": 1640,
|
"total_tokens": 1616,
|
||||||
"prompt_tokens": 1357,
|
"prompt_tokens": 1333,
|
||||||
"completion_tokens": 283,
|
"completion_tokens": 283,
|
||||||
"successful_requests": 3,
|
"successful_requests": 3,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user