From 46be5e8097a4e18fd9ab05e630b784658e7da2a6 Mon Sep 17 00:00:00 2001 From: Archkon <180910180+Archkon@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:53:55 +0800 Subject: [PATCH 1/3] fix:typo error (#1732) * Update crew_agent_executor.py typo error * Update en.json typo error --- src/crewai/agents/crew_agent_executor.py | 2 +- src/crewai/translations/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index 00545e760..649360e30 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -299,7 +299,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self._i18n.slice("summarizer_system_message"), role="system" ), self._format_msg( - self._i18n.slice("sumamrize_instruction").format(group=group), + self._i18n.slice("summarize_instruction").format(group=group), ), ], callbacks=self.callbacks, diff --git a/src/crewai/translations/en.json b/src/crewai/translations/en.json index d30606dc0..7353cfc33 100644 --- a/src/crewai/translations/en.json +++ b/src/crewai/translations/en.json @@ -19,7 +19,7 @@ "human_feedback": "You got human feedback on your work, re-evaluate it and give a new Final Answer when ready.\n {human_feedback}", "getting_input": "This is the agent's final answer: {final_answer}\n\n", "summarizer_system_message": "You are a helpful assistant that summarizes text.", - "sumamrize_instruction": "Summarize the following text, make sure to include all the important information: {group}", + "summarize_instruction": "Summarize the following text, make sure to include all the important information: {group}", "summary": "This is a summary of our conversation so far:\n{merged_summary}", "manager_request": "Your best answer to your coworker asking you this, accounting for the context shared.", "formatted_task_instructions": "Ensure your final answer contains only the content in the following format: {output_format}\n\nEnsure the final output does not include any code block markers like ```json or ```python.", From 5a7a323f3a450fb9df986a4b5bec1c6b93b97978 Mon Sep 17 00:00:00 2001 From: Rok Benko Date: Mon, 9 Dec 2024 16:41:29 +0100 Subject: [PATCH 2/3] Fix Knowledge docs Spaceflight News API dead link --- docs/concepts/knowledge.mdx | 65 +++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/docs/concepts/knowledge.mdx b/docs/concepts/knowledge.mdx index 96200b356..16ac586d6 100644 --- a/docs/concepts/knowledge.mdx +++ b/docs/concepts/knowledge.mdx @@ -8,15 +8,13 @@ icon: book ## What is Knowledge? -Knowledge in CrewAI is a powerful system that allows AI agents to access and utilize external information sources during their tasks. -Think of it as giving your agents a reference library they can consult while working. +Knowledge in CrewAI is a powerful system that allows AI agents to access and utilize external information sources during their tasks. +Think of it as giving your agents a reference library they can consult while working. - Key benefits of using Knowledge: - - Enhance agents with domain-specific information - - Support decisions with real-world data - - Maintain context across conversations - - Ground responses in factual information + Key benefits of using Knowledge: - Enhance agents with domain-specific + information - Support decisions with real-world data - Maintain context across + conversations - Ground responses in factual information ## Supported Knowledge Sources @@ -25,14 +23,10 @@ CrewAI supports various types of knowledge sources out of the box: - - Raw strings - - Text files (.txt) - - PDF documents + - Raw strings - Text files (.txt) - PDF documents - - CSV files - - Excel spreadsheets - - JSON documents + - CSV files - Excel spreadsheets - JSON documents @@ -47,7 +41,7 @@ from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSourc # Create a knowledge source content = "Users name is John. He is 30 years old and lives in San Francisco." string_source = StringKnowledgeSource( - content=content, + content=content, ) # Create an LLM with a temperature of 0 to ensure deterministic outputs @@ -122,7 +116,6 @@ crewai reset-memories --knowledge This is useful when you've updated your knowledge sources and want to ensure that the agents are using the most recent information. - ## Custom Knowledge Sources CrewAI allows you to create custom knowledge sources for any type of data by extending the `BaseKnowledgeSource` class. Let's create a practical example that fetches and processes space news articles. @@ -141,10 +134,10 @@ from pydantic import BaseModel, Field class SpaceNewsKnowledgeSource(BaseKnowledgeSource): """Knowledge source that fetches data from Space News API.""" - + api_endpoint: str = Field(description="API endpoint URL") limit: int = Field(default=10, description="Number of articles to fetch") - + def load_content(self) -> Dict[Any, str]: """Fetch and format space news articles.""" try: @@ -152,15 +145,15 @@ class SpaceNewsKnowledgeSource(BaseKnowledgeSource): f"{self.api_endpoint}?limit={self.limit}" ) response.raise_for_status() - + data = response.json() articles = data.get('results', []) - + formatted_data = self._format_articles(articles) return {self.api_endpoint: formatted_data} except Exception as e: raise ValueError(f"Failed to fetch space news: {str(e)}") - + def _format_articles(self, articles: list) -> str: """Format articles into readable text.""" formatted = "Space News Articles:\n\n" @@ -180,7 +173,7 @@ class SpaceNewsKnowledgeSource(BaseKnowledgeSource): for _, text in content.items(): chunks = self._chunk_text(text) self.chunks.extend(chunks) - + self._save_documents() # Create knowledge source @@ -193,7 +186,7 @@ recent_news = SpaceNewsKnowledgeSource( space_analyst = Agent( role="Space News Analyst", goal="Answer questions about space news accurately and comprehensively", - backstory="""You are a space industry analyst with expertise in space exploration, + backstory="""You are a space industry analyst with expertise in space exploration, satellite technology, and space industry trends. You excel at answering questions about space news and providing detailed, accurate information.""", knowledge_sources=[recent_news], @@ -220,13 +213,14 @@ result = crew.kickoff( inputs={"user_question": "What are the latest developments in space exploration?"} ) ``` + ```output Output # Agent: Space News Analyst ## Task: Answer this question about space news: What are the latest developments in space exploration? # Agent: Space News Analyst -## Final Answer: +## Final Answer: The latest developments in space exploration, based on recent space news articles, include the following: 1. SpaceX has received the final regulatory approvals to proceed with the second integrated Starship/Super Heavy launch, scheduled for as soon as the morning of Nov. 17, 2023. This is a significant step in SpaceX's ambitious plans for space exploration and colonization. [Source: SpaceNews](https://spacenews.com/starship-cleared-for-nov-17-launch/) @@ -242,11 +236,13 @@ The latest developments in space exploration, based on recent space news article 6. The National Natural Science Foundation of China has outlined a five-year project for researchers to study the assembly of ultra-large spacecraft. This could lead to significant advancements in spacecraft technology and space exploration capabilities. [Source: SpaceNews](https://spacenews.com/china-researching-challenges-of-kilometer-scale-ultra-large-spacecraft/) 7. The Center for AEroSpace Autonomy Research (CAESAR) at Stanford University is focusing on spacecraft autonomy. The center held a kickoff event on May 22, 2024, to highlight the industry, academia, and government collaboration it seeks to foster. This could lead to significant advancements in autonomous spacecraft technology. [Source: SpaceNews](https://spacenews.com/stanford-center-focuses-on-spacecraft-autonomy/) -``` +``` + #### Key Components Explained 1. **Custom Knowledge Source (`SpaceNewsKnowledgeSource`)**: + - Extends `BaseKnowledgeSource` for integration with CrewAI - Configurable API endpoint and article limit - Implements three key methods: @@ -255,10 +251,12 @@ The latest developments in space exploration, based on recent space news article - `add()`: Processes and stores the content 2. **Agent Configuration**: + - Specialized role as a Space News Analyst - Uses the knowledge source to access space news 3. **Task Setup**: + - Takes a user question as input through `{user_question}` - Designed to provide detailed answers based on the knowledge source @@ -267,6 +265,7 @@ The latest developments in space exploration, based on recent space news article - Handles input/output through the kickoff method This example demonstrates how to: + - Create a custom knowledge source that fetches real-time data - Process and format external data for AI consumption - Use the knowledge source to answer specific user questions @@ -274,13 +273,15 @@ This example demonstrates how to: #### About the Spaceflight News API -The example uses the [Spaceflight News API](https://api.spaceflightnewsapi.net/v4/documentation), which: +The example uses the [Spaceflight News API](https://api.spaceflightnewsapi.net/v4/docs/), which: + - Provides free access to space-related news articles - Requires no authentication - Returns structured data about space news - Supports pagination and filtering You can customize the API query by modifying the endpoint URL: + ```python # Fetch more articles recent_news = SpaceNewsKnowledgeSource( @@ -299,14 +300,14 @@ recent_news = SpaceNewsKnowledgeSource( - - Keep chunk sizes appropriate for your content type - - Consider content overlap for context preservation - - Organize related information into separate knowledge sources + - Keep chunk sizes appropriate for your content type - Consider content + overlap for context preservation - Organize related information into + separate knowledge sources - + - - Adjust chunk sizes based on content complexity - - Configure appropriate embedding models - - Consider using local embedding providers for faster processing + - Adjust chunk sizes based on content complexity - Configure appropriate + embedding models - Consider using local embedding providers for faster + processing From e01c0a0f4cc2990c5a772040917fad8014414a71 Mon Sep 17 00:00:00 2001 From: Aviral Jain Date: Mon, 9 Dec 2024 21:37:52 +0530 Subject: [PATCH 3/3] call storage.search in user context search instead of memory.search (#1692) Co-authored-by: Eduardo Chiarotti --- src/crewai/memory/user/user_memory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crewai/memory/user/user_memory.py b/src/crewai/memory/user/user_memory.py index 25e36617c..24e5fe035 100644 --- a/src/crewai/memory/user/user_memory.py +++ b/src/crewai/memory/user/user_memory.py @@ -37,7 +37,7 @@ class UserMemory(Memory): limit: int = 3, score_threshold: float = 0.35, ): - results = super().search( + results = self.storage.search( query=query, limit=limit, score_threshold=score_threshold,