【RAG】使用llamaindex进行RAG开发
RAG基本步骤
- parse:将pdf,doc,ppt等file解析成文本,如markdown。有基本的metadata。
- chunk:将markdown文本进行分块,比如按大小分,语义分等。可以为每个块添加更丰富的metadata。
- index:将每个分块使用embedding model转换为向量,存储到vector db中,方便后续检索。
- retrieve:将user query也用embedding model转换为向量,连接vector db进行相似度搜索,rerank等找到和query最相关的top k个块。
- generate:根据上一步返回的最相关块和user query结合,调用llm进行生成。一般会有些后处理。
123步会在user上传知识库文件后执行,45步会在user对知识库进行问答时执行。
我们使用llamaindex完成rag整个过程,此外还需要:
- minio: object store,存储文件
- pgvector: vector db,存储embedding向量
- docker env(非必须)
llamaindex提供了high level的RAG实现,但是我们需要更好的灵活性,所以会用更低层的API来做
- 需要设计五个base类,覆盖5个步骤的基础功能
- 每个base类有具体实现,能够实现对应功能
- 实现类按顺序串联,即可形成pipeline执行QA。其中index和retrieve通过db config保持一致
- 每个步骤可作为一个service
代码等忙完再整理