mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-26 00:28:13 +00:00
Compare commits
6 Commits
devin/1768
...
devin/1741
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
142ae7ed59 | ||
|
|
daa40ed630 | ||
|
|
be4b8cfac2 | ||
|
|
07639dff30 | ||
|
|
121c3717b9 | ||
|
|
978d3a19c6 |
@@ -210,7 +210,13 @@ class Agent(BaseAgent):
|
|||||||
task_prompt += self.i18n.slice("memory").format(memory=memory)
|
task_prompt += self.i18n.slice("memory").format(memory=memory)
|
||||||
|
|
||||||
if self.knowledge:
|
if self.knowledge:
|
||||||
agent_knowledge_snippets = self.knowledge.query([task.prompt()])
|
query_context = [
|
||||||
|
task.prompt(),
|
||||||
|
f"Role: {self.role}",
|
||||||
|
f"Goal: {self.goal}",
|
||||||
|
f"Backstory: {self.backstory}"
|
||||||
|
]
|
||||||
|
agent_knowledge_snippets = self.knowledge.query(query_context)
|
||||||
if agent_knowledge_snippets:
|
if agent_knowledge_snippets:
|
||||||
agent_knowledge_context = extract_knowledge_context(
|
agent_knowledge_context = extract_knowledge_context(
|
||||||
agent_knowledge_snippets
|
agent_knowledge_snippets
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class KnowledgeStorage(BaseKnowledgeStorage):
|
|||||||
query: List[str],
|
query: List[str],
|
||||||
limit: int = 3,
|
limit: int = 3,
|
||||||
filter: Optional[dict] = None,
|
filter: Optional[dict] = None,
|
||||||
score_threshold: float = 0.35,
|
score_threshold: float = 0.25,
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
with suppress_logging():
|
with suppress_logging():
|
||||||
if self.collection:
|
if self.collection:
|
||||||
|
|||||||
@@ -2,11 +2,19 @@ from typing import Any, Dict, List
|
|||||||
|
|
||||||
|
|
||||||
def extract_knowledge_context(knowledge_snippets: List[Dict[str, Any]]) -> str:
|
def extract_knowledge_context(knowledge_snippets: List[Dict[str, Any]]) -> str:
|
||||||
"""Extract knowledge from the task prompt."""
|
"""Extract knowledge from the task prompt and format it for effective LLM usage."""
|
||||||
valid_snippets = [
|
valid_snippets = [
|
||||||
result["context"]
|
result["context"]
|
||||||
for result in knowledge_snippets
|
for result in knowledge_snippets
|
||||||
if result and result.get("context")
|
if result and result.get("context")
|
||||||
]
|
]
|
||||||
|
if not valid_snippets:
|
||||||
|
return ""
|
||||||
|
|
||||||
snippet = "\n".join(valid_snippets)
|
snippet = "\n".join(valid_snippets)
|
||||||
return f"Additional Information: {snippet}" if valid_snippets else ""
|
return (
|
||||||
|
"Important Context (You MUST use this information to complete your task "
|
||||||
|
"accurately and effectively):\n"
|
||||||
|
f"{snippet}\n\n"
|
||||||
|
"Make sure to incorporate the above context into your response."
|
||||||
|
)
|
||||||
|
|||||||
65
tests/knowledge/test_knowledge_utils.py
Normal file
65
tests/knowledge/test_knowledge_utils.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
"""Test knowledge utils functionality."""
|
||||||
|
|
||||||
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context
|
||||||
|
|
||||||
|
|
||||||
|
def test_extract_knowledge_context_with_valid_snippets():
|
||||||
|
"""Test extracting knowledge context with valid snippets."""
|
||||||
|
snippets = [
|
||||||
|
{"context": "Fact 1: The sky is blue", "score": 0.9},
|
||||||
|
{"context": "Fact 2: Water is wet", "score": 0.8},
|
||||||
|
]
|
||||||
|
result = extract_knowledge_context(snippets)
|
||||||
|
expected = "Important Context (You MUST use this information to complete your task accurately and effectively):\nFact 1: The sky is blue\nFact 2: Water is wet\n\nMake sure to incorporate the above context into your response."
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_extract_knowledge_context_with_empty_snippets():
|
||||||
|
"""Test extracting knowledge context with empty snippets."""
|
||||||
|
snippets: List[Dict[str, Any]] = []
|
||||||
|
result = extract_knowledge_context(snippets)
|
||||||
|
assert result == ""
|
||||||
|
|
||||||
|
|
||||||
|
def test_extract_knowledge_context_with_none_snippets():
|
||||||
|
"""Test extracting knowledge context with None snippets."""
|
||||||
|
snippets = [None, {"context": "Valid context"}] # type: ignore
|
||||||
|
result = extract_knowledge_context(snippets)
|
||||||
|
assert result == "Important Context (You MUST use this information to complete your task accurately and effectively):\nValid context\n\nMake sure to incorporate the above context into your response."
|
||||||
|
|
||||||
|
|
||||||
|
def test_extract_knowledge_context_with_missing_context():
|
||||||
|
"""Test extracting knowledge context with missing context."""
|
||||||
|
snippets = [{"score": 0.9}, {"context": "Valid context"}]
|
||||||
|
result = extract_knowledge_context(snippets)
|
||||||
|
assert result == "Important Context (You MUST use this information to complete your task accurately and effectively):\nValid context\n\nMake sure to incorporate the above context into your response."
|
||||||
|
|
||||||
|
|
||||||
|
def test_knowledge_effectiveness():
|
||||||
|
"""Test that knowledge is effectively used in agent execution."""
|
||||||
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context
|
||||||
|
|
||||||
|
# Create mock knowledge snippets
|
||||||
|
knowledge_snippets = [
|
||||||
|
{"context": "The capital of France is Paris. The Eiffel Tower is located in Paris.", "score": 0.9}
|
||||||
|
]
|
||||||
|
|
||||||
|
# Test that the extract_knowledge_context function formats the knowledge correctly
|
||||||
|
knowledge_context = extract_knowledge_context(knowledge_snippets)
|
||||||
|
|
||||||
|
# Verify the knowledge context contains the expected information
|
||||||
|
assert "paris" in knowledge_context.lower()
|
||||||
|
assert "capital" in knowledge_context.lower()
|
||||||
|
assert "france" in knowledge_context.lower()
|
||||||
|
|
||||||
|
# Verify the format is correct
|
||||||
|
assert knowledge_context.startswith("Important Context")
|
||||||
|
assert "Make sure to incorporate the above context" in knowledge_context
|
||||||
Reference in New Issue
Block a user