You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RAG LLM检索调用中捕获Prompt、响应及上下文数据?

RAG调用时捕获Prompt、响应及上下文数据的实现方案

实现思路

要实现调用检索端点时的全数据捕获,只需在原函数基础上扩展返回内容,把需要的prompt、响应、上下文文档以及传入的参数都包含进去,同时可按需添加持久化逻辑(比如保存到本地文件)。

修改后的完整代码示例

def response_llm(prompt, text1, text2, int1, int2):
    # 保存原始prompt并拼接最终请求prompt
    original_prompt = prompt
    if len(text1) > 1:
        prompt += "\n text1: " + text1
    if len(text2) > 1:
        prompt += "\n text2: " + text2
    
    # 获取检索到的上下文文档,并转换为可序列化格式
    retrieved_docs = retriever.get_relevant_documents(prompt)
    context_docs = [{"page_content": doc.page_content, "metadata": doc.metadata} for doc in retrieved_docs]

    # 初始化QA链
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=retriever,
        return_source_documents=True
    )

    # 获取LLM响应
    llm_response = qa_chain(prompt)

    # 构造包含所有捕获数据的返回结果
    return {
        "original_prompt": original_prompt,
        "final_prompt": prompt,
        "response": llm_response["result"],
        "retrieved_context": context_docs,
        "qa_source_documents": [{"page_content": doc.page_content, "metadata": doc.metadata} for doc in llm_response["source_documents"]],
        "text1": text1,
        "text2": text2,
        "int1": int1,
        "int2": int2
    }

关键说明

  • Prompt捕获:同时保留原始输入prompt和拼接后的最终prompt,便于后续追溯请求内容的变化。
  • 上下文数据捕获:
    1. 直接通过retriever.get_relevant_documents获取检索结果,转换为字典格式保留文档内容与元数据。
    2. 同步保留QA链返回的source_documents,确保上下文数据的完整性(若QA链内部有二次检索逻辑,两者可能存在差异)。
  • 参数留存:将传入的text1、text2、int1、int2一并返回,方便关联调用时的输入参数。
  • 可选持久化:如果需要长期存储捕获数据,可在函数末尾添加写入逻辑,比如保存到JSON文件:
    import json
    with open("rag_call_records.json", "a", encoding="utf-8") as f:
        json.dump(return_data, f, ensure_ascii=False)
        f.write("\n")
    

调用示例

# 调用函数获取全量捕获数据
rag_record = response_llm(
    prompt="解释RAG的核心作用",
    text1="面向AI入门用户",
    text2="需要简洁易懂的表述",
    int1=1,
    int2=2
)

# 查看捕获的关键数据
print("最终请求Prompt:\n", rag_record["final_prompt"])
print("\nLLM响应内容:\n", rag_record["response"])
print("\n检索到的上下文文档数量:", len(rag_record["retrieved_context"]))
print("\n第一个上下文文档内容:\n", rag_record["retrieved_context"][0]["page_content"])

内容的提问来源于stack exchange,提问作者Vallalar_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:35:03