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

使用LlamaIndex的RelevancyEvaluator评估OpenAI响应时二次请求超时

问题排查方向与解决方案

1. 缓存RelevancyEvaluator实例,避免重复初始化

每次请求都创建新的RelevancyEvaluator实例会产生不必要的资源开销,第二次请求时可能因资源累积触发超时。将Evaluator加入缓存:

@st.cache_resource(show_spinner=False)
def get_evaluator(service_context):
    return RelevancyEvaluator(service_context=service_context)

# 使用时替换原创建逻辑
evaluator = get_evaluator(service_context)

2. 优化评估调用逻辑,减少串行API调用

当前循环每个source_node单独调用evaluate(),串行多次API调用会累积耗时,容易触发超时。可通过两种方式优化:

  • 限制待评估源节点数量:创建查询引擎时减少返回的相关节点数,降低评估次数:
    chat_engine = index.as_query_engine(similarity_top_k=3)  # 按需调整节点数量
    
  • 并行处理评估请求:用异步方式并行调用评估接口,缩短总耗时(注意OpenAI并发限制):
    import asyncio
    
    async def evaluate_single_node(evaluator, prompt, response_str, context):
        return await evaluator.aevaluate(query=prompt, response=response_str, contexts=[context])
    
    # 替换原循环逻辑
    tasks = [
        evaluate_single_node(evaluator, prompt, response_str, node.get_content()) 
        for node in response.source_nodes
    ]
    eval_results = await asyncio.gather(*tasks)
    for result in eval_results:
        print("RESULT")
        print(str(result.passing))
        print(result.feedback)
    
    注:Streamlit中使用异步需配合st.async_runner,或封装为异步函数后用asyncio.run()执行。

3. 调整LLM超时配置

默认OpenAI客户端超时时间较短,第二次请求可能因评估逻辑复杂触发超时。初始化LLM时延长超时时间:

service_context = ServiceContext.from_defaults(
    llm=OpenAI(
        model="gpt-3.5-turbo",
        temperature=0.5,
        system_prompt="....",
        timeout=30  # 按需调整超时秒数
    )
)

4. 检查Streamlit会话状态与资源泄漏

第二次请求时,会话状态可能残留未清理资源或response.source_nodes出现异常数据:

  • 打印response.source_nodes的长度和内容,确认节点数量是否异常增加;
  • 检查st.session_state.messages更新逻辑,避免重复添加消息或角色判断错误导致重复执行评估。

5. 自定义评估提示词,简化判断逻辑

默认RelevancyEvaluator提示词可能过于复杂,导致处理时间长且易产生幻觉。自定义简洁提示词聚焦核心判断:

from llama_index.prompts import PromptTemplate

RELEVANCY_PROMPT = PromptTemplate(
    "判断以下回答是否使用了给定上下文,仅返回'是'或'否',并简要说明理由:\n"
    "问题:{query}\n"
    "回答:{response}\n"
    "上下文:{contexts}\n"
)

evaluator = RelevancyEvaluator(
    service_context=service_context,
    relevancy_prompt=RELEVANCY_PROMPT
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:13:26