Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reformat and improve RAG module and agents #184

Open
wants to merge 88 commits into
base: main
Choose a base branch
from

Conversation

ZiTao-Li
Copy link
Collaborator

@ZiTao-Li ZiTao-Li commented Apr 28, 2024

Description

Updates

Changes on code structure

  • migrate and reformat RAG/knowledge module(s) and RAG agent(s) from examples to a module in src
  • add llama-index as rag_requires in setup.py

Changes on the RAG agent module

  • be compatible with the new KnowledgeBank feature
  • the configurations for the RAG-related functionalities are relocated back to knowledge modules
  • the retrieve method merges the retrievers from the KnowledgeBank members

Changes on the RAG/knowledge module

  • Rename the RAG modules to Knowledge (e.g., LlamaIndexRAG -> LlamaIndexKnowledge)
  • store and persist processed embeddings/indices/documents
  • support loading multiple doc types and dirs for one index
  • support docs management in the obtained (persisted) index
  • add a refresh function to update the index when needed
  • enable agents to reset or add new retrievers

Improving utility of knowledge module

  • reformat easy-to-use knowledge module config: the new format only configure the KnowledgeBank
  • introduce KnowledgeBank:
    • KnowledgeBank provides an easier way to initialize a knowledge object, just call add_data_as_knowledge with knowledge_id (a string as the identifier for this knowledge object), emb_model_name (the name of the embedding model config) and data_dirs_and_types (a dictionary of data directories and the wanted file extensions). As shown in the rag_example.py
       knowledge_bank.add_data_as_knowledge(
          knowledge_id="agentscope_tutorial_rag",
          emb_model_name="qwen_emb_config",
          data_dirs_and_types={
              "../../docs/sphinx_doc/en/source/tutorial": [".md"],
          },
      )
      
    • Knowledge objects in KnowledgeBank can be shared and duplicated by multiple agents, which can avoid embedding duplicated documents.
    • RAG agents can load multiple Knowledge objects (based on the "knowledge_id" in knowledge_config.json) with associated retrievers to perform multi-source information retrieval. Just need to pass the agent into KnowledgeBank.equip function.

Toturial

Both English and Chinese tutorial are added as 209-rag.md .


Checklist

Please check the following items before code is ready to be reviewed.

  • Code has passed all tests
  • Docstrings have been added/updated in Google Style
  • Documentation has been updated
  • Code is ready for review

Copy link
Collaborator

@DavdGao DavdGao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's hard to follow the tutorial to use the RAG module. Some important guidances are missing as follows. More details please refer to inline comments.

  1. how to use the knowledge objects here, what methods does it provide?
  2. how to set the configuration, and what's the meaning and candidate values of each parameter?

src/agentscope/agents/rag_agents.py Outdated Show resolved Hide resolved
examples/conversation_with_RAG_agents/rag_example.py Outdated Show resolved Hide resolved
src/agentscope/rag/knowledge_bank.py Outdated Show resolved Hide resolved
docs/sphinx_doc/en/source/tutorial/209-rag.md Show resolved Hide resolved
docs/sphinx_doc/en/source/tutorial/209-rag.md Outdated Show resolved Hide resolved
docs/sphinx_doc/en/source/tutorial/209-rag.md Outdated Show resolved Hide resolved
Copy link
Collaborator

@garyzhang99 garyzhang99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please see the inline comments.

docs/sphinx_doc/zh_CN/source/tutorial/209-rag.md Outdated Show resolved Hide resolved
src/agentscope/rag/llama_index_knowledge.py Outdated Show resolved Hide resolved
src/agentscope/rag/llama_index_knowledge.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@pan-x-c pan-x-c left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please see the inline comments.

The current version of rag is not compatible with distributed mode. We can add support in future PRs

src/agentscope/rag/knowledge.py Outdated Show resolved Hide resolved
src/agentscope/agents/rag_agents.py Outdated Show resolved Hide resolved
src/agentscope/agents/rag_agents.py Outdated Show resolved Hide resolved
src/agentscope/rag/knowledge_bank.py Show resolved Hide resolved
ZiTao-Li and others added 4 commits May 22, 2024 19:05
…s used in previous versions, but no longer needed.
# Conflicts:
#	examples/conversation_with_RAG_agents/README.md
Copy link
Collaborator

@DavdGao DavdGao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please see inline comments

### Knowledge Bank
知识库将一组Knowledge模块(例如,来自不同数据集的知识)作为知识的集合进行维护。因此,不同的智能体可以在没有不必要的重新初始化的情况下重复使用知识模块。考虑到配置Knowledge模块可能对大多数用户来说过于复杂,知识库还提供了一个简单的函数调用来创建Knowledge模块。

* `KnowledgeBank.add_data_as_knowledge`: 创建Knowledge模块。一种简单的方式只需要提供knowledge_id、emb_model_name和data_dirs_and_types。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What types do we support here? And for unsupported file types, what should the users do?

* `KnowledgeBank.add_data_as_knowledge`: 创建Knowledge模块。一种简单的方式只需要提供knowledge_id、emb_model_name和data_dirs_and_types。
```python
knowledge_bank.add_data_as_knowledge(
knowledge_id="agentscope_tutorial_rag",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's more like a knowledge name rather than ID here

@@ -23,35 +22,28 @@ capability can be used to build easily.
**Note:** This example has been tested with `dashscope_chat` and `dashscope_text_embedding` model wrapper, with `qwen-max` and `text-embedding-v2` models.
However, you are welcome to replace the Dashscope language and embedding model wrappers or models with other models you like to test.

## Start AgentScope Consultants
## Start AgentScope Copilots
* **Terminal:** The most simple way to execute the AgentScope Consultants is running in terminal.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

copilot or copilots

@@ -23,35 +22,28 @@ capability can be used to build easily.
**Note:** This example has been tested with `dashscope_chat` and `dashscope_text_embedding` model wrapper, with `qwen-max` and `text-embedding-v2` models.
However, you are welcome to replace the Dashscope language and embedding model wrappers or models with other models you like to test.

## Start AgentScope Consultants
## Start AgentScope Copilots
* **Terminal:** The most simple way to execute the AgentScope Consultants is running in terminal.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consultants or copilot


### RAG 智能体
RAG 智能体是可以基于检索到的知识生成答案的智能体。
* 让智能体使用RAG: RAG agent在其配置中需要`rag_config`,其中有一个`knowledge_id`的列表
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What parameters should be contained in this rag_config? It remains unknown for users in this tutorial.

```json
[
{
"knowledge_id": "{your_knowledge_id}",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use a config to setup the rag module, do we consider to add a config file to explain what's the usage of each parameters? Just like this file in FederatedScope
https://github.com/alibaba/FederatedScope/blob/master/federatedscope/core/configs/config.py#L258

"description": "Code-Search-Assistant is an agent that can provide answer based on AgentScope code base. It can answer questions about specific modules in AgentScope.",
"sys_prompt": "You're a coding assistant of AgentScope. The answer starts with appreciation for the question, then provide details regarding the functionality and features of the modules mentioned in the question. The language should be in a professional and simple style. The answer is limited to be less than 100 words.",
"model_config_name": "qwen_config",
"rag_config": {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we do this pre-processing outside the agent? For example (taking get as example):

knowledge_bank = KnowledgeBank(...)

knowledges = knowledge_bank.get(knowledge_ids=["kb1", "kb2"], similarity_top_k=5, log_retrieval=5, recent_n_mem=1)

AgentClass(name="assistant", knowledges=knowledges, ...)

or user can setup their own knowledge within the agent object's constructor by themselves.

There are two advantages:

  1. No need to know what parameters should be written in a rag config. All parameters are in the declaration of this get() function, which can be accessed easily.
  2. The agent is not required to have a rag config attribute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants