python - 如何在 Python 中优化基于 OpenAI 的聊天机器人的 NLP 处理时间?

标签 python nlp chatbot openai-api langchain

我运行了以下基于 Langchain 和 Chroma 的代码,它应该在生产环境中运行,用户作为面向聊天机器人的客户端,所以我期望它,或者也许我应该说我希望它应该运行一两秒内,但我发现这部分运行大约需要半分钟,这对于我的用例来说太慢了,如果您有任何建议,我将非常感激,以使其更快,谢谢非常感谢您宝贵的时间和帮助!

def generate_chain():
    chain = load_qa_with_sources_chain(
        OpenAI(temperature=0, openai_api_key=openai.api_key),
        chain_type="map_reduce"
    )
    return chain

def ask_docs(relevant_documents, query):
    chain = generate_chain()
    sourced_answer_obj = chain(
        {"input_documents": [relevant_document[0] for relevant_document in relevant_documents],
         "question": query}, return_only_outputs=True)
    sourced_answer_str = sourced_answer_obj['output_text'].strip()
    return sourced_answer_str

我尝试了上面的代码,我预计它需要大约一秒或更短的时间,但最终花了半分钟

最佳答案

可以进行一些潜在的优化来提高代码的性能。以下是一些建议:

避免每次调用ask_docs函数时都重新生成链: 目前,每次调用ask_docs时都会调用generate_chain函数。生成链涉及加载 QA 模型及其相关资源,这可能是一项耗时的操作。为了提高性能,您可以生成一次链并在后续查询中重复使用它。

例如:

    # Define the chain outside of the ask_docs function
chain = generate_chain()

# Call ask_docs function multiple times, reusing the chain
answer1 = ask_docs(relevant_documents1, query1)
answer2 = ask_docs(relevant_documents2, query2)

在generate_chain函数外部加载OpenAI API key : 在generate_chain函数中,每次调用时都会加载OpenAI API key 。这可以通过在函数外部加载 API key 并将其作为参数传递来优化。这样,您只需加载 API key 一次,并在必要时重复使用它。

批量输入文档: 您可以考虑将文档批量处理在一起,而不是将每个相关文档单独传递到链中。批处理有助于减少 API 调用数量并有可能提高性能。修改ask_docs函数以接受相关文档列表而不是单个文档,然后将批量文档传递到链上。

这是应用了这些优化的代码的更新版本:

 # Load the OpenAI API key outside the function
openai_api_key = openai.api_key

def generate_chain():
    chain = load_qa_with_sources_chain(
        OpenAI(temperature=0, openai_api_key=openai_api_key),
        chain_type="map_reduce"
    )
    return chain

# Generate the chain once outside the function
chain = generate_chain()

def ask_docs(relevant_documents, query):
    sourced_answer_obj = chain(
        {"input_documents": [doc[0] for doc in relevant_documents],
         "question": query}, return_only_outputs=True)
    sourced_answer_str = sourced_answer_obj['output_text'].strip()
    return sourced_answer_str

通过应用这些优化,您应该会在运行代码时观察到性能的提高。请记住根据您的具体用例进行更改并相应地验证结果。

关于python - 如何在 Python 中优化基于 OpenAI 的聊天机器人的 NLP 处理时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76352127/

相关文章:

python - argparse:像帮助字符串一样处理版本字符串

python - 我可以将单词或句子与 Python 中预先向量化的句子语料库进行匹配以进行 NL 处理吗?

python - 使用 Python 进行 NLP 中的命名实体识别

python - 训练Dialogflow疑惑

java - 在 Android Studio 中安装并集成 Apache OpenNLP

c# - 如何避免图像 MS Bot 构建器框架的自动重新调用

python - 搜索随机 python 程序生成器

python - 如何识别并跟踪链接,然后使用 BeautifulSoup 从新网页打印数据

python - 为什么网络摄像机无法以python代码读取视频供稿?

machine-learning - Quora Question Pairs 挑战,使用二元交叉熵损失来预测两个问题是否问同一件事以评估预测