paper-qa icon indicating copy to clipboard operation
paper-qa copied to clipboard

PaperQA doesn't finds evidences from index whith agentic query

Open Snikch63200 opened this issue 9 months ago • 7 comments

Hi,

I provided a set of documents to perform an agentic query. I know there are elements in document set that can be used in answer but it seems paper-qa don't use them and provides an answer based on LLM knowledge although anwer.anser_filter_extra_background is set on True.

Using query method from Doc() object, build with same document set, works.

Here is the verbose return :

No changes to index.
           Beginning agent 'ToolSelector' run with question 'Rédigez une synthèse des exemples connus de sépultures
           mérovingiennes ou carolingiennes bien datées. Répondez en Français.' and full settings {'llm':
           'ollama/dolphin-mixtral:8x7b', 'llm_config': {'model_list': [{'model_name': 'ollama/dolphin-mixtral:8x7b',
           'litellm_params': {'model': 'ollama/dolphin-mixtral:8x7b', 'api_type': 'ollama', 'api_base':
           'http://localhost:11434', 'stream': True, 'caching': True, 'cache': True, 'mirostat': 0, 'mirostat_eta':
           0.1, 'mirostat_tau': 5.0, 'num_ctx': 128000, 'repeat_last_n': 64, 'repeat_penalty': 1.1, 'temperature': 0.2,
           'seed': 0, 'tfs_z': 1, 'num_predict': 100000, 'max_tokens': 100000, 'top_k': 20, 'top_p': 0.9, 'min_p':
           0.0}}], 'router_kwargs': {'retry_after': 5, 'num_retries': 3, 'timeout': 60.0}}, 'summary_llm':
           'ollama/dolphin-mixtral:8x7b', 'summary_llm_config': {'model_list': [{'model_name':
           'ollama/dolphin-mixtral:8x7b', 'litellm_params': {'model': 'ollama/dolphin-mixtral:8x7b', 'api_type':
           'ollama', 'api_base': 'http://localhost:11434', 'stream': True, 'caching': True, 'cache': True, 'mirostat':
           0, 'mirostat_eta': 0.1, 'mirostat_tau': 5.0, 'num_ctx': 128000, 'repeat_last_n': 64, 'repeat_penalty': 1.1,
           'temperature': 0.2, 'seed': 0, 'tfs_z': 1, 'num_predict': 100000, 'max_tokens': 100000, 'top_k': 20,
           'top_p': 0.9, 'min_p': 0.0}}]}, 'embedding': 'ollama/mxbai-embed-large', 'embedding_config': None,
           'temperature': 0.0, 'batch_size': 1, 'texts_index_mmr_lambda': 1.0, 'verbosity': 2, 'answer': {'evidence_k':
           5, 'evidence_detailed_citations': True, 'evidence_retrieval': True, 'evidence_summary_length': 'Environs 100
           mots.', 'evidence_skip_summary': False, 'answer_max_sources': 3, 'max_answer_attempts': None,
           'answer_length': 'Environs 500 mots, mais peut être plus longue si nécessaire.', 'max_concurrent_requests':
           1, 'answer_filter_extra_background': True, 'get_evidence_if_no_contexts': True}, 'parsing': {'chunk_size':
           7000, 'page_size_limit': 1280000, 'use_doc_details': False, 'overlap': 750, 'citation_prompt': "Fournissez
           la citation du texte suivant au format MLA.Ne pas écrire de phrase d'introduction. Si la date de reporting
           est consultée, l'année en cours est 2024.{text}Citation:", 'structured_citation_prompt': "Extrayez le titre,
           les auteurs et le doi au format JSON de cette citation MLA.Si un champ est introuvable, renvoyez-le comme
           null.Utilisez le titre, les auteurs et le doi comme clés, la valeur de l'auteur doit être une liste
           d'auteurs.{citation}\n\nCitation JSON:", 'disable_doc_valid_check': True, 'defer_embedding': False,
           'chunking_algorithm': <ChunkingOptions.SIMPLE_OVERLAP: 'simple_overlap'>, 'doc_filters': None,
           'use_human_readable_clinical_trials': False}, 'prompts': {'summary': " Résumez l’extrait ci-dessous pour
           vous aider à répondre à une question.\n\nExtrait de {citation}\n\n----\n\n{text}\n\n----\n\nQuestion:
           {question}\n\nNe pas répondre directement à la question, résumez plutôt afin de fournir des éléments aidant
           à répondre à la question. Restez précis; rapporter des nombres, des équations ou des citations directes
           spécifiques (marquées par des guillemets). Répondez « Non pertinent » si l'extrait n'est pas pertinent. A la
           fin de la réponse, fournir un score entier entre 1 et 10  sur une nouvelle ligne indiquant la pertinence par
           rapport à la question. Ne pas expliquer le score.\n\nRelevant Résumé des informations ({summary_length}):",
           'qa': 'Répondez à la question ci-dessous,en français, avec le contexte.\n\nContexte (with relevance
           scores):\n\n{context}\n\n----\n\nQuestion: {question}\n\nEcrire une réponse basée sur le contexte. Si le
           contexte ne fournit pas suffisamment d\'informations répondre : "Je ne peux pas répondre."Pour chaque partie
           de votre réponse, indiquez par quelles sources elle est justifiée via des citations clé à la fin des
           phrases, comme {example_citation}. Ne citez que le contexte ci-dessous et utilisez uniquement les clés
           valides. Ecrivez dans le style d\'un article Wikipedia, avec des phrases concises et des paragraphes
           cohérents. Le contexte provient de diverses sources et n\'est qu\'un résumé, il peut donc y avoir des
           inexactitudes ou des ambiguïtés. Si des guillemets sont présents et pertinents, utilisez les dans la
           réponse. Cette réponse ira directement surWikipedia, alors n\'ajoutez aucune information
           superflue.\n\nRéponse ({answer_length}):', 'select': "Sélectionnez des documents qui peuvent aider à
           répondre à la question ci-dessous. Les articles et documents sont listés comme suit $KEY: $PAPER_INFO.
           Retournez une liste de clés, séparées par des virgules. Retournez 'None', si aucun document n'est
           utilisable. Choisissez les documents pertinents, provenant de sources fiables, et récentes (si la question
           requiert des informations récentes).\n\nQuestion: {question}\n\nDocuments: {papers}\n\nClés séléctionées:",
           'pre': None, 'post': None, 'system': "Répondez en Français avec un style direct et concis. Votre public est
           expert, alors soyez très précis. S'il existe des termes ou des acronymes ambigus, définissez-les d'abord.",
           'use_json': True, 'summary_json': 'Extrait de {citation}\n\n----\n\n{text}\n\n----\n\nQuestion:
           {question}\n\n', 'summary_json_system': 'Provide a summary of the relevant information that could help
           answer the question based on the excerpt. Respond with the following JSON format:\n\n{{\n  "summary":
           "...",\n  "relevance_score": "..."\n}}\n\nwhere `summary` is relevant information from the text -
           {summary_length} words. `relevance_score` is an integer 1-10 for the relevance of `summary` to the
           question.\n', 'context_outer': '{context_str}\n\nValid Keys: {valid_keys}', 'context_inner': '{name}:
           {text}\nFrom {citation}'}, 'agent': {'agent_llm': 'ollama/dolphin-mixtral:8x7b', 'agent_llm_config':
           {'model_list': [{'model_name': 'ollama/dolphin-mixtral:8x7b', 'litellm_params': {'model':
           'ollama/dolphin-mixtral:8x7b', 'api_type': 'ollama', 'api_base': 'http://localhost:11434', 'stream': True,
           'caching': True, 'cache': True, 'mirostat': 0, 'mirostat_eta': 0.1, 'mirostat_tau': 5.0, 'num_ctx': 128000,
           'repeat_last_n': 64, 'repeat_penalty': 1.1, 'temperature': 0.2, 'seed': 0, 'tfs_z': 1, 'num_predict':
           100000, 'max_tokens': 100000, 'top_k': 20, 'top_p': 0.9, 'min_p': 0.0}}]}, 'agent_type': 'ToolSelector',
           'agent_config': None, 'agent_system_prompt': 'You are a helpful AI assistant.', 'agent_prompt': 'Use the
           tools to answer the question: {question}\n\nWhen the answer looks sufficient, you can terminate by calling
           the {complete_tool_name} tool. If the answer does not look sufficient, and you have already tried to answer
           several times with different evidence, terminate by calling the {complete_tool_name} tool. The current
           status of evidence/papers/cost is {status}', 'return_paper_metadata': False, 'search_count': 8,
           'wipe_context_on_answer_failure': True, 'agent_evidence_n': 1, 'timeout': 500.0, 'should_pre_search': True,
           'tool_names': None, 'max_timesteps': None, 'index': {'name': 'index2', 'paper_directory': './Papers/ToAdd',
           'manifest_file': './Manifest.csv', 'index_directory': './indexes', 'use_absolute_paper_directory': False,
           'recurse_subdirectories': True, 'concurrency': 1, 'sync_with_paper_directory': True}}, 'md5':
           '2378ad36539c45224df50b1c1ca1413c'}.
[13:36:20] Found manifest file at Manifest.csv, read 7 records from it, which maps to 7 locations.
           No changes to index.
[13:36:27] Resetting 'Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien
           datées. Répondez en Français.'.
[13:36:33] Resetting 'Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien
           datées. Répondez en Français.'.
[13:36:39] Resetting 'Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien
           datées. Répondez en Français.'.
[13:36:45] Resetting 'Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien
           datées. Répondez en Français.'.
[13:44:40] Agent timeout after 500.0-sec, just answering.
           Generating answer for 'Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou
           carolingiennes bien datées. Répondez en Français.'.
[13:46:44] Status: Paper Count=0 | Relevant Papers=0 | Current Evidence=0 | Current Cost=$0.0000
           Finished agent 'ToolSelector' run with question 'Rédigez une synthèse des exemples connus de sépultures
           mérovingiennes ou carolingiennes bien datées. Répondez en Français.' and status truncated.
           agent_response: session=PQASession(id=UUID('9e2f4825-0a2b-4dd6-91ff-07e90196d55a'), question='Rédigez une
           synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien datées. Répondez en
           Français.', answer=" Les sépultures mérovingiennes et carolingiennes bien datées offrent un aperçu précieux
           de la vie et des coutumes funéraires de ces périodes historiques. Parmi les exemples notables, on trouve le
           cimetière de Sainte-Colombe-sur-Loire , le site de Charnay (Example2015Example page 7) et la nécropole de
           Goudelancourt-lès-Pierrepont (Example2018Example page 5).\n\nLe cimetière de Sainte-Colombe-sur-Loire, situé
           dans le département du Jura en France, est un exemple remarquable de sépulture mérovingienne. Les tombes
           présentes sur ce site ont été datées grâce à des objets funéraires tels que des fibules et des boucles
           d'oreilles en or (Example2012Example page 4). Ces artefacts, associés aux techniques archéologiques
           modernes, ont permis de dater les sépultures avec une grande précision.\n\nLe site de Charnay, situé dans le
           département de Saône-et-Loire en France, est un autre exemple notable de sépulture mérovingienne. Les tombes
           présentes sur ce site ont été datées grâce à des objets funéraires tels que des fibules et des boucles
           d'oreilles en or (Example2015Example page 7). Ces artefacts, associés aux techniques archéologiques
           modernes, ont permis de dater les sépultures avec une grande précision.\n\nLa nécropole de
           Goudelancourt-lès-Pierrepont, située dans le département de l'Aisne en France, est un exemple notable de
           sépulture carolingienne. Les tombes présentes sur ce site ont été datées grâce à des objets funéraires tels
           que des fibules et des boucles d'oreilles en or (Example2018Example page 5). Ces artefacts, associés aux
           techniques archéologiques modernes, ont permis de dater les sépultures avec une grande précision.\n\nEn
           résumé, les exemples de sépultures mérovingiennes et carolingiennes bien datées incluent le cimetière de
           Sainte-Colombe-sur-Loire, le site de Charnay et la nécropole de Goudelancourt-lès-Pierrepont. Ces sites ont
           été datés grâce à des objets funéraires tels que des fibules et des boucles d'oreilles en or, ainsi qu'à
           l'utilisation de techniques archéologiques modernes.", has_successful_answer=None, context='\n\nValid Keys:
           ', contexts=[], references='', formatted_answer="Question: Rédigez une synthèse des exemples connus de
           sépultures mérovingiennes ou carolingiennes bien datées. Répondez en Français.\n\n Les sépultures
           mérovingiennes et carolingiennes bien datées offrent un aperçu précieux de la vie et des coutumes funéraires
           de ces périodes historiques. Parmi les exemples notables, on trouve le cimetière de Sainte-Colombe-sur-Loire
           , le site de Charnay (Example2015Example page 7) et la nécropole de Goudelancourt-lès-Pierrepont
           (Example2018Example page 5).\n\nLe cimetière de Sainte-Colombe-sur-Loire, situé dans le département du Jura
           en France, est un exemple remarquable de sépulture mérovingienne. Les tombes présentes sur ce site ont été
           datées grâce à des objets funéraires tels que des fibules et des boucles d'oreilles en or
           (Example2012Example page 4). Ces artefacts, associés aux techniques archéologiques modernes, ont permis de
           dater les sépultures avec une grande précision.\n\nLe site de Charnay, situé dans le département de
           Saône-et-Loire en France, est un autre exemple notable de sépulture mérovingienne. Les tombes présentes sur
           ce site ont été datées grâce à des objets funéraires tels que des fibules et des boucles d'oreilles en or
           (Example2015Example page 7). Ces artefacts, associés aux techniques archéologiques modernes, ont permis de
           dater les sépultures avec une grande précision.\n\nLa nécropole de Goudelancourt-lès-Pierrepont, située dans
           le département de l'Aisne en France, est un exemple notable de sépulture carolingienne. Les tombes présentes
           sur ce site ont été datées grâce à des objets funéraires tels que des fibules et des boucles d'oreilles en
           or (Example2018Example page 5). Ces artefacts, associés aux techniques archéologiques modernes, ont permis
           de dater les sépultures avec une grande précision.\n\nEn résumé, les exemples de sépultures mérovingiennes
           et carolingiennes bien datées incluent le cimetière de Sainte-Colombe-sur-Loire, le site de Charnay et la
           nécropole de Goudelancourt-lès-Pierrepont. Ces sites ont été datés grâce à des objets funéraires tels que
           des fibules et des boucles d'oreilles en or, ainsi qu'à l'utilisation de techniques archéologiques
           modernes.\n", graded_answer=None, cost=0.0, token_counts={'ollama/dolphin-mixtral:8x7b': [4583, 639]},
           config_md5='6fba9178baa575eeb37c32ed6a1a3fbd', tool_history=[['reset'], ['reset'], ['reset'], ['reset'],
           ['gen_answer']], used_contexts={'Example2018Example page 5', 'Example2015Example page 7',
           'Example2012Example page 4'}) bibtex=None status=<AgentStatus.TRUNCATED: 'truncated'> timing_info=None
           duration=0.0 stats=None
           Answer:  Les sépultures mérovingiennes et carolingiennes bien datées offrent un aperçu précieux de la vie et
           des coutumes funéraires de ces périodes historiques. Parmi les exemples notables, on trouve le cimetière de
           Sainte-Colombe-sur-Loire , le site de Charnay (Example2015Example page 7) et la nécropole de
           Goudelancourt-lès-Pierrepont (Example2018Example page 5).

           Le cimetière de Sainte-Colombe-sur-Loire, situé dans le département du Jura en France, est un exemple
           remarquable de sépulture mérovingienne. Les tombes présentes sur ce site ont été datées grâce à des objets
           funéraires tels que des fibules et des boucles d'oreilles en or (Example2012Example page 4). Ces artefacts,
           associés aux techniques archéologiques modernes, ont permis de dater les sépultures avec une grande
           précision.

           Le site de Charnay, situé dans le département de Saône-et-Loire en France, est un autre exemple notable de
           sépulture mérovingienne. Les tombes présentes sur ce site ont été datées grâce à des objets funéraires tels
           que des fibules et des boucles d'oreilles en or (Example2015Example page 7). Ces artefacts, associés aux
           techniques archéologiques modernes, ont permis de dater les sépultures avec une grande précision.

           La nécropole de Goudelancourt-lès-Pierrepont, située dans le département de l'Aisne en France, est un
           exemple notable de sépulture carolingienne. Les tombes présentes sur ce site ont été datées grâce à des
           objets funéraires tels que des fibules et des boucles d'oreilles en or (Example2018Example page 5). Ces
           artefacts, associés aux techniques archéologiques modernes, ont permis de dater les sépultures avec une
           grande précision.

           En résumé, les exemples de sépultures mérovingiennes et carolingiennes bien datées incluent le cimetière de
           Sainte-Colombe-sur-Loire, le site de Charnay et la nécropole de Goudelancourt-lès-Pierrepont. Ces sites ont
           été datés grâce à des objets funéraires tels que des fibules et des boucles d'oreilles en or, ainsi qu'à
           l'utilisation de techniques archéologiques modernes.

Any solution ?

Best regards

Snikch63200 avatar Feb 14 '25 13:02 Snikch63200

It seems like the paper-qa system is not retrieving evidence from the indexed documents and is instead relying on LLM knowledge. Here are a few things you might want to check or try:

  1. Evidence Retrieval Setting: Ensure that the evidence_retrieval setting is set to True, which it seems to be from your configuration. This setting allows the system to use retrieval methods instead of processing all documents [1].

  2. Index Status: The log mentions "No changes to index." Make sure that the documents are correctly indexed and that the index is up-to-date. You might want to re-index the documents to ensure they are available for retrieval.

  3. Document Relevance: Check if the documents in the index are relevant to the query. The system might not find them relevant enough to use as evidence. You can adjust the texts_index_mmr_lambda or other relevance settings to see if it affects the retrieval.

  4. Verbose Logs: Increase the verbosity of the logs to get more detailed information about why the documents are not being used. This might provide insights into any issues with the document selection process.

  5. Agent Configuration: Review the ToolSelector agent configuration to ensure it is set up correctly to select and use the indexed documents. There might be specific settings or conditions that need adjustment.

  6. Timeouts and Resets: The logs show multiple resets and a timeout. This might indicate an issue with the query processing or document retrieval. Check if there are any constraints or limits that might be causing these resets.

By addressing these areas, you might be able to resolve the issue and ensure that the system uses the indexed documents for evidence retrieval.

To continue talking to Dosu, mention @dosu.


Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other

dosubot[bot] avatar Feb 14 '25 13:02 dosubot[bot]

How setting up a ToolsSelector agent correctly ?

@Dosu.

Snikch63200 avatar Feb 14 '25 13:02 Snikch63200

To set up a ToolSelector agent correctly in the paper-qa system, you need to configure several key settings within the AgentSettings class. Here are the main configuration options you should consider:

  1. Agent Type: Ensure that the agent_type is set to "ToolSelector".

  2. Agent LLM: Specify the language model to use with agent_llm. For example, "gpt-4o-2024-08-06".

  3. Agent LLM Configuration: Use agent_llm_config to provide additional configuration for the language model, such as a list of models and router settings.

  4. Prompts: Customize the agent_system_prompt and agent_prompt to guide the agent's behavior and responses.

  5. Evidence and Search Settings:

    • return_paper_metadata: Set to True if you want to include paper metadata in search results.
    • search_count: Adjust the number of search results to return, default is 8.
    • agent_evidence_n: Set the number of top-ranked evidences to show to the agent, default is 1.
  6. Timeout and Context Management:

    • timeout: Set the maximum execution time for the agent, default is 500.0 seconds.
    • wipe_context_on_answer_failure: Ensure this is True to reset context if answer generation fails.
  7. Index and Concurrency:

    • index_concurrency: Set the number of concurrent filesystem reads for indexing, default is 5.
    • rebuild_index: Set to True to rebuild the index at the start of agent runners.
  8. Callbacks: Define any necessary callbacks in the callbacks setting to handle specific stages of the agent's operation.

By configuring these settings, you can tailor the ToolSelector agent to effectively interact with your document index and retrieve relevant information for your queries [1].

To continue talking to Dosu, mention @dosu.


Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other

dosubot[bot] avatar Feb 14 '25 13:02 dosubot[bot]

What are default tools for ToolSelector ?

What is the difference between ToolSelector anbd Fake agents ?

@dosu.

Snikch63200 avatar Feb 14 '25 13:02 Snikch63200

I couldn't find specific information about the default tools configured for the ToolSelector agent in the paper-qa system [1]. However, the ToolSelector agent is designed to manage the process of answering questions by searching for papers, gathering evidence, and collecting papers cited in the evidence [1].

Regarding the differences between the ToolSelector and Fake agents:

  1. ToolSelector Agent: This agent is designed to intelligently manage the process of answering questions by searching for relevant papers, gathering evidence, and ensuring that sufficient evidence is collected to generate a good answer. It uses a language model to guide its operations and can perform multiple search attempts to gather evidence from various sources [1].

  2. Fake Agent: The Fake agent is a deterministic agent that invokes tools in a specific, predefined order without any decision-making logic. It is primarily used for testing or baseline comparison purposes, as it does not involve complex decision-making or learning processes. The Fake agent executes a series of steps using available tools and ignores settings like max_timesteps [2][3].

These differences highlight the ToolSelector agent's focus on dynamic evidence gathering and decision-making, while the Fake agent provides a straightforward, deterministic sequence of actions.

To continue talking to Dosu, mention @dosu.


Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other

dosubot[bot] avatar Feb 14 '25 13:02 dosubot[bot]

Seems working with 'fake' agent :

async def ask_question(settings) -> None:

    answer_response = await agent_query(
                                           query="Rédigez une synthèse des exemples connus de sépultures mérovingiennes ou carolingiennes bien datées. Répondez en Français.",
                                           settings=settings,
                                           agent_type='fake',
                                        )
                                            
    print(answer_response.session)

but fails with 'ToolSelector' agent that is supposed better...

How can I fix this ?

@Dosu.

Snikch63200 avatar Feb 14 '25 14:02 Snikch63200

The issue you're experiencing with the ToolSelector agent not performing as expected, while the Fake agent works, could be due to several factors related to the configuration and operation of the ToolSelector. Here are some steps to help resolve the issue:

  1. Configuration Review: Double-check the configuration settings for the ToolSelector agent. Ensure that all necessary parameters are correctly set, especially those related to evidence retrieval and indexing. The ToolSelector agent relies on these settings to function optimally.

  2. Indexing and Document Relevance: Make sure that the documents are properly indexed and that the index is up-to-date. The ToolSelector agent might not be finding relevant documents if the index is not correctly configured or if the documents are not deemed relevant enough. You might need to adjust relevance settings or re-index the documents.

  3. Timeout and Resets: The logs indicate multiple resets and a timeout. This could suggest issues with query processing or document retrieval. Check if there are any constraints or limits causing these resets, and consider increasing the timeout if necessary.

  4. Verbose Logging: Increase the verbosity of the logs to gain more insights into the agent's decision-making process. This can help identify why the ToolSelector agent is not using the indexed documents effectively.

  5. Agent-Specific Settings: Ensure that the ToolSelector agent's specific settings, such as agent_evidence_n, search_count, and wipe_context_on_answer_failure, are configured to support effective evidence retrieval and context management.

By addressing these areas, you should be able to improve the performance of the ToolSelector agent and ensure it utilizes the indexed documents effectively for evidence retrieval.

To continue talking to Dosu, mention @dosu.


Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other

dosubot[bot] avatar Feb 14 '25 14:02 dosubot[bot]