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

基于LlamaIndex+ChatGPT的网站知识库聊天机器人响应过慢求优化

LlamaIndex+ChatGPT知识库聊天机器人性能优化建议

针对你遇到的响应慢问题,结合你的代码和50份1-2页的文档场景,给出以下优化方案:

1. 更换高效索引类型

当前使用的GPTSimpleVectorIndex基于向量检索,在小文档集场景下,可改用关键词索引或轻量化向量索引提升速度:

  • 切换为SimpleKeywordTableIndex:基于关键词匹配检索,速度远快于向量检索,适配小规模文档库。
    代码修改示例:
    # 导入替换索引类
    from llama_index import SimpleKeywordTableIndex
    
    # 训练索引时替换
    index = SimpleKeywordTableIndex.from_documents(
        documents, service_context=service_context
    )
    
  • 若保留向量检索,升级为VectorStoreIndex(LlamaIndex推荐的新版向量索引,性能更优):
    from llama_index import VectorStoreIndex
    
    index = VectorStoreIndex.from_documents(
        documents, service_context=service_context
    )
    

2. 切换更快的LLM模型

你当前使用的text-davinci-003响应速度较慢,建议替换为gpt-3.5-turbo-instruct,它的响应速度是davinci的3-5倍,成本仅为其1/10,且知识库问答质量足够:

llm_predictor = LLMPredictor(llm=OpenAI(
    temperature=0, 
    model_name="gpt-3.5-turbo-instruct",  # 替换模型
    max_tokens=128
))

3. 优化检索与生成参数

减少检索的文档块数量

默认索引会返回多个相似文档块,通过similarity_top_k参数减少数量,降低LLM处理的上下文负载:

def ask_ai():
    # 设置仅返回最相关的2个块
    st.session_state.response = index.query(st.session_state.prompt, similarity_top_k=2)

调整文本分块策略

当前分块参数过大,可减小分块尺寸提升检索速度:

# 修改PromptHelper参数
num_output = 256
max_chunk_overlap = 10  # 减小重叠率
max_input_size = 2048  # 减小最大输入尺寸
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)

同时,加载文档时直接指定分块大小:

documents = SimpleDirectoryReader(doc_path).load_data(chunk_size=512, chunk_overlap=10)

4. 缓存重复查询结果

对用户重复查询进行缓存,避免重复调用LLM,直接返回历史结果:

# 初始化缓存字典
if 'query_cache' not in st.session_state:
    st.session_state.query_cache = {}

def ask_ai():
    prompt = st.session_state.prompt
    # 检查缓存
    if prompt in st.session_state.query_cache:
        st.session_state.response = st.session_state.query_cache[prompt]
    else:
        response = index.query(prompt, similarity_top_k=2)
        st.session_state.response = response
        st.session_state.query_cache[prompt] = response

5. 缓存索引加载

当前每次启动都重新加载索引,使用Streamlit的资源缓存机制避免重复加载:

@st.cache_resource
def load_index():
    if os.path.exists(index_file):
        return GPTSimpleVectorIndex.load_from_disk(index_file)
    return None

index = load_index()

6. 异步查询优化

使用LlamaIndex的异步查询接口aquery,结合Streamlit的异步支持,提升用户感知的响应速度:

import asyncio

async def async_ask_ai():
    st.session_state.response = await index.aquery(st.session_state.prompt, similarity_top_k=2)

def ask_ai():
    asyncio.run(async_ask_ai())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:35:18