RAG(1):管道Pipeline

基础的RAG Pipeline

# 设置RGA基本管道
from llama_index import SimpleDirectoryReader
from llama_index import Document
from llama_index import VectorStoreIndex
from llama_index import ServiceContext
from llama_index.llms import OpenAI
# 加载文档documents
documents = SimpleDirectoryReader(
    input_files=["./eBook-How-to-Build-a-Career-in-AI.pdf"]
).load_data()
# 分块chunk
document = Document(text="\n\n".join([doc.text for doc in documents]))
# 编码embedding
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1)
service_context = ServiceContext.from_defaults(
    llm=llm, embed_model="local:BAAI/bge-small-en-v1.5"
)
# 转为索引index
index = VectorStoreIndex.from_documents([document],
                                        service_context=service_context)
# 从索引中获取Query
query_engine = index.as_query_engine()
# 发送请求response
response = query_engine.query(
    "What are steps to take when finding projects to build your experience?"
)

通过答案相关性、上下文相关性和立足性进行评估

# 对RAG管道进行评估
# 创建进行评估的问题
eval_questions = []
with open('eval_questions.txt', 'r') as file:
    for line in file:
        # Remove newline character and convert to integer
        item = line.strip()
        print(item)
        eval_questions.append(item)
# You can try your own question:
new_question = "What is the right AI job for me?"
eval_questions.append(new_question)
# 初始化数据库和评估模块
from trulens_eval import Tru
tru = Tru()
tru.reset_database()
# recorder记录的三项评估要求
from utils import get_prebuilt_trulens_recorder
tru_recorder = get_prebuilt_trulens_recorder(query_engine,
                                             app_id="Direct Query Engine")
# 记录器进行评估
with tru_recorder as recording:
    for question in eval_questions:
        response = query_engine.query(question)
# 利用ID来实现跟踪、查看结果
records, feedback = tru.get_records_and_feedback(app_ids=[])

句窗检索Sentence Window retrieval

# 使用其他检索方式来提高匹配精度
# 1.句窗检索
from utils import build_sentence_window_index
from utils import get_sentence_window_query_engine
## 创建索引
sentence_index = build_sentence_window_index(
    document,
    llm,
    embed_model="local:BAAI/bge-small-en-v1.5",
    save_dir="sentence_index"
)
## 从索引中获取Query
sentence_window_engine = get_sentence_window_query_engine(sentence_index)
## 设置记录器进行评估,设置问答的例子
tru.reset_database()
tru_recorder_sentence_window = get_prebuilt_trulens_recorder(
    sentence_window_engine,
    app_id = "Sentence Window Query Engine"
)
## 运行句窗检索器
for question in eval_questions:
    with tru_recorder_sentence_window as recording:
        response = sentence_window_engine.query(question)
        print(question)
        print(str(response))
## 查看结果榜单
tru.get_leaderboard(app_ids=[])
## 通过仪表盘显示
tru.run_dashboard()

自动合并检索Auto-merging retrieval

from utils import build_automerging_index
# 2.自动更新检索
## 创建索引
automerging_index = build_automerging_index(
    documents,
    llm,
    embed_model="local:BAAI/bge-small-en-v1.5",
    save_dir="merging_index"
)
## 从索引中获取Query
automerging_query_engine = get_automerging_query_engine(
    automerging_index,
)
## 提问过程中进行merging
auto_merging_response = automerging_query_engine.query(
    "How do I build a portfolio of AI projects?"
)
## 设置记录器进行评估,设置问答的例子
tru.reset_database()
tru_recorder_automerging = get_prebuilt_trulens_recorder(automerging_query_engine,
                                                         app_id="Automerging Query Engine")
## 运行句窗检索器
for question in eval_questions:
    with tru_recorder_automerging as recording:
        response = automerging_query_engine.query(question)
        print(question)
        print(response)
        
## 查看结果榜单
tru.get_leaderboard(app_ids=[])
## 通过仪表盘显示
tru.run_dashboard()
posted on 2025-02-21 16:45  CharXL  阅读(89)  评论(0)    收藏  举报