Search_knowledge_base Error with Ollama and Agent_rag

Hi, I try to use Agentic_rag exemple with ollama, I Changed DB to qdrant and working find, but when I try to resume, I get this error:

Pouvez-vous résumer ce qui se trouve actuellement dans la base de connaissances (utilisez l’outil search_knowledge_base)?

Désolé, j’ai rencontré une erreur: 1 validation error for Tool function.parameters.properties.num_chats.type Input should be a valid string [type=string_type, input_value=[‘number’, ‘null’], input_type=list] For further information visit Redirecting...

Code used :

Définir la base de connaissances

knowledge_base = AgentKnowledge(
    vector_db = Qdrant(
        collection="testagno",
        url="http://localhost:6333",
        api_key="s",
        embedder=OllamaEmbedder(id="llama3.1:8b-instruct-q8_0", dimensions=4096),
    ),
    num_documents=3,  # Récupérer les 3 documents les plus pertinents
)

# Créer l'Agent
agentic_rag_agent: Agent = Agent(
    name="agent_rag_agentique",
    session_id=session_id,  # Suivre l'ID de session pour les conversations persistantes
    user_id=user_id,
    model=Ollama(id="llama3.1:8b-instruct-q8_0"),
    storage=PostgresAgentStorage(
        table_name="agentic_rag_agent_sessions", db_url=db_url
    ),  # Persister les données de session
    memory=memory,  # Ajouter la mémoire à l'agent
    knowledge=knowledge_base,  # Ajouter la base de connaissances
    description="Vous êtes un Agent utile appelé 'RAG Agentique' et votre objectif est d'aider l'utilisateur de la meilleure façon possible.",
    instructions=[
        "1. Recherche dans la Base de Connaissances:",
        "   - TOUJOURS commencer par chercher dans la base de connaissances en utilisant l'outil search_knowledge_base",
        "   - Analyser TOUS les documents retournés en profondeur avant de répondre",
        "   - Si plusieurs documents sont retournés, synthétiser l'information de manière cohérente",
        "2. Recherche Externe:",
        "   - Si la recherche dans la base de connaissances donne des résultats insuffisants, utiliser duckduckgo_search",
        "   - Se concentrer sur des sources réputées et des informations récentes",
        "   - Recouper l'information de plusieurs sources lorsque c'est possible",
        "3. Gestion du Contexte:",
        "   - Utiliser l'outil get_chat_history pour maintenir la continuité de la conversation",
        "   - Faire référence aux interactions précédentes lorsque c'est pertinent",
        "   - Garder trace des préférences utilisateur et des clarifications antérieures",
        "4. Qualité des Réponses:",
        "   - Fournir des citations spécifiques et des sources pour les affirmations",
        "   - Structurer les réponses avec des sections claires et des puces lorsque c'est approprié",
        "   - Inclure des citations pertinentes des documents sources",
        "   - Éviter les phrases de couverture comme 'selon mes connaissances' ou 'en fonction des informations'",
        "5. Interaction Utilisateur:",
        "   - Demander des clarifications si la requête est ambiguë",
        "   - Décomposer les questions complexes en parties gérables",
        "   - Suggérer de manière proactive des sujets liés ou des questions de suivi",
        "6. Gestion des Erreurs:",
        "   - Si aucune information pertinente n'est trouvée, le déclarer clairement",
        "   - Suggérer des approches ou questions alternatives",
        "   - Être transparent sur les limites des informations disponibles",
    ],
    search_knowledge=True,  # Ce paramètre donne au modèle un outil pour rechercher dans la base de connaissances
    read_chat_history=True,  # Ce paramètre donne au modèle un outil pour obtenir l'historique du chat
    tools=[DuckDuckGoTools()],
    markdown=True,  # Ce paramètre indique au modèle de formater les messages en markdown
    # add_chat_history_to_messages=True,
    show_tool_calls=True,
    add_history_to_messages=True,  # Ajoute l'historique du chat aux messages
    add_datetime_to_instructions=True,
    debug_mode=debug_mode,
    read_tool_call_history=True,
    num_history_responses=3,
)

Any idea ?

Hi @ilanBps
thanks for reaching out and supporting Agno. I’ve shared this with the team, we’re working through all requests one by one and will get back to you soon.
If it’s urgent, please let us know. We appreciate your patience!

Any advice ? is realy frustrating to need OpenAI to work with Agno…

Hey @ilanBps,
I’m really sorry for the delay in getting back to you — we’ve been a bit swamped with support requests lately, and this slipped through the cracks.

Tagging @WillemdeJongh1 our engineer, who’ll be able to help you out with your question. Thanks so much for your patience!

Hey @ilanBps

Apologies for the delay in getting back to you. From your code snippet, it was difficult to accurately recreate your error without all of the other info you are adding to the agent. Mind sharing a more enhanced code snippet that contains exactly how you are setting up memory etc?

You mentioned that it works with OpenAI. Is this when using OpenAI for the embedder or for the agent models?

Thanks for reply,

For both OpenAi embedder and agent working, with Ollama only search_knowledge=True make error

Code is very simple :

from typing import Optional

from agno.agent import Agent, AgentMemory
from agno.knowledge import AgentKnowledge
from agno.memory.db.postgres import PgMemoryDb
from agno.models.ollama import Ollama
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.vectordb.qdrant import Qdrant
from agno.embedder.ollama import OllamaEmbedder


db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"


def get_agentic_rag_agent(
    model_id: str = "llama3.1:8b-instruct-q8_0",
    user_id: Optional[str] = None,
    session_id: Optional[str] = None,
    debug_mode: bool = True,
) -> Agent:
    """Obtenir un Agent RAG Agentique avec Mémoire."""
    # Analyser le fournisseur et le nom du modèle
    model_name = model_id
    model = Ollama(id=model_name)
  
    # Définir la mémoire persistante pour l'historique de chat
    memory = AgentMemory(
        db=PgMemoryDb(
            table_name="agent_memory", db_url=db_url
        ),  # Persister la mémoire dans Postgres
        create_user_memories=True,  # Stocker les préférences utilisateur
        create_session_summary=True,  # Stocker les résumés de conversation
    )

    # Définir la base de connaissances
    knowledge_base = AgentKnowledge(
        vector_db = Qdrant(
            collection="testagno",
            url="http://localhost:6333",
            api_key="s",
            embedder=OllamaEmbedder(id="llama3.1:8b-instruct-q8_0", dimensions=4096),
        ),
        num_documents=3,  # Récupérer les 3 documents les plus pertinents
    )

    # Créer l'Agent
    agentic_rag_agent: Agent = Agent(
        name="agent_rag_agentique",
        session_id=session_id,  # Suivre l'ID de session pour les conversations persistantes
        user_id=user_id,
        model=Ollama(id="llama3.1:8b-instruct-q8_0"),
        storage=PostgresAgentStorage(
            table_name="agentic_rag_agent_sessions", db_url=db_url
        ),  # Persister les données de session
        memory=memory,  # Ajouter la mémoire à l'agent
        knowledge=knowledge_base,  # Ajouter la base de connaissances
        description="Vous êtes un Agent utile appelé 'RAG Agentique' et votre objectif est d'aider l'utilisateur de la meilleure façon possible.",
        instructions=[
            "1. Recherche dans la Base de Connaissances:",
            "   - TOUJOURS commencer par chercher dans la base de connaissances en utilisant l'outil search_knowledge_base",
            "   - Analyser TOUS les documents retournés en profondeur avant de répondre",
            "   - Si plusieurs documents sont retournés, synthétiser l'information de manière cohérente",
            "2. Recherche Externe:",
            "   - Si la recherche dans la base de connaissances donne des résultats insuffisants, utiliser duckduckgo_search",
            "   - Se concentrer sur des sources réputées et des informations récentes",
            "   - Recouper l'information de plusieurs sources lorsque c'est possible",
            "3. Gestion du Contexte:",
            "   - Utiliser l'outil get_chat_history pour maintenir la continuité de la conversation",
            "   - Faire référence aux interactions précédentes lorsque c'est pertinent",
            "   - Garder trace des préférences utilisateur et des clarifications antérieures",
            "4. Qualité des Réponses:",
            "   - Fournir des citations spécifiques et des sources pour les affirmations",
            "   - Structurer les réponses avec des sections claires et des puces lorsque c'est approprié",
            "   - Inclure des citations pertinentes des documents sources",
            "   - Éviter les phrases de couverture comme 'selon mes connaissances' ou 'en fonction des informations'",
            "5. Interaction Utilisateur:",
            "   - Demander des clarifications si la requête est ambiguë",
            "   - Décomposer les questions complexes en parties gérables",
            "   - Suggérer de manière proactive des sujets liés ou des questions de suivi",
            "6. Gestion des Erreurs:",
            "   - Si aucune information pertinente n'est trouvée, le déclarer clairement",
            "   - Suggérer des approches ou questions alternatives",
            "   - Être transparent sur les limites des informations disponibles",
        ],
        search_knowledge=True,  # Ce paramètre donne au modèle un outil pour rechercher dans la base de connaissances
        read_chat_history=True,  # Ce paramètre donne au modèle un outil pour obtenir l'historique du chat
        tools=[DuckDuckGoTools()],
        markdown=True,  # Ce paramètre indique au modèle de formater les messages en markdown
        # add_chat_history_to_messages=True,
        show_tool_calls=True,
        add_history_to_messages=True,  # Ajoute l'historique du chat aux messages
        add_datetime_to_instructions=True,
        debug_mode=debug_mode,
        read_tool_call_history=True,
        num_history_responses=3,
    )

    return agentic_rag_agent

Thank you

Hi @ilanBps

If the only difference is the model you are using, then it is probably the 8b model you are using. The smaller llama models is sometimes not capable of doing proper search or in fact, reliable tool calling. Are you self hosting the model?

Yes self hosting, problem this happen to other model like gemma3:27b or tested with Llama3.3 70b on MAC M3 ultra with 128go …