mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 08:08:32 +00:00
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Any, Optional
|
|
from crewai.utilities import I18N
|
|
|
|
|
|
class Prompts(BaseModel):
|
|
"""Manages and generates prompts for a generic agent."""
|
|
|
|
i18n: I18N = Field(default=I18N())
|
|
tools: list[Any] = Field(default=[])
|
|
system_template: Optional[str] = None
|
|
prompt_template: Optional[str] = None
|
|
response_template: Optional[str] = None
|
|
agent: Any
|
|
|
|
def task_execution(self) -> str:
|
|
"""Generate a standard prompt for task execution."""
|
|
slices = ["role_playing"]
|
|
if len(self.tools) > 0:
|
|
slices.append("tools")
|
|
else:
|
|
slices.append("no_tools")
|
|
system = self._build_prompt(slices)
|
|
slices.append("task")
|
|
|
|
if not self.system_template and not self.prompt_template:
|
|
return {
|
|
"system": system,
|
|
"user": self._build_prompt(["task"]),
|
|
"prompt": self._build_prompt(slices),
|
|
}
|
|
else:
|
|
return {
|
|
"prompt": self._build_prompt(
|
|
slices,
|
|
self.system_template,
|
|
self.prompt_template,
|
|
self.response_template,
|
|
)
|
|
}
|
|
|
|
def _build_prompt(
|
|
self,
|
|
components: list[str],
|
|
system_template=None,
|
|
prompt_template=None,
|
|
response_template=None,
|
|
) -> str:
|
|
"""Constructs a prompt string from specified components."""
|
|
if not system_template and not prompt_template:
|
|
prompt_parts = [self.i18n.slice(component) for component in components]
|
|
prompt = "".join(prompt_parts)
|
|
else:
|
|
prompt_parts = [
|
|
self.i18n.slice(component)
|
|
for component in components
|
|
if component != "task"
|
|
]
|
|
system = system_template.replace("{{ .System }}", "".join(prompt_parts))
|
|
prompt = prompt_template.replace(
|
|
"{{ .Prompt }}", "".join(self.i18n.slice("task"))
|
|
)
|
|
response = response_template.split("{{ .Response }}")[0]
|
|
prompt = f"{system}\n{prompt}\n{response}"
|
|
|
|
prompt = (
|
|
prompt.replace("{goal}", self.agent.goal)
|
|
.replace("{role}", self.agent.role)
|
|
.replace("{backstory}", self.agent.backstory)
|
|
)
|
|
return prompt
|