问题验证
- 我已经在文档和Discord上寻找答案。
问题
我正在尝试通过提供上下文来创建一个聊天引擎,但我得到了超出上下文范围的答案。我尝试使用查询引擎做同样的事情,似乎运行得很好,问题只出现在聊天引擎上。当我问关于亚马逊或谷歌的问题时,我从LLM得到的答案是,但我期望的是一条消息,说明上下文没有信息。这种行为在查询引擎中观察到。
storage_context = StorageContext.from_defaults(persist_dir="storage")
index=load_index_from_storage(storage_context,service_context=service_context)
chat_engine = index.as_chat_engine(
chat_mode="context",
memory=memory,
verbose=True,
)
提前感谢您的帮助。
8条答案
按热度按时间wgxvkvu91#
要确保聊天引擎仅从给定的上下文中提供答案,并在上下文不包含相关信息时返回一条消息指示信息不可用,您可以创建一个自定义聊天引擎类,该类覆盖
_generate_context
和_agenerate_context
方法。以下是一个示例:这个自定义类确保如果检索到的上下文为空,响应将指示信息不可用。这样,聊天引擎将仅从给定的上下文中提供答案,并在上下文不包含相关信息时返回一条消息指示信息不可用。
kqqjbcuj2#
@logan-markewich,请问您能帮我解决这个问题吗?
d8tt03nd3#
编辑后:在下面的帖子中,我分析了源代码,并添加了实际原因,解释了为什么会出现这种情况。
@Varshan2003 您遇到的问题可能是由于幻觉引起的,即LLM生成的响应并非基于提供的上下文。这可能是因为LLM已经在大量数据上进行了预训练,即使在指示仅使用给定上下文的情况下,它也可能从其训练数据中获取信息。
为了解决这个问题,您应该使用诸如TruthfulQA之类的基准来评估不同LLM模型的真实性和忠实度。这些基准衡量了LLM如何遵循提供的上下文并避免产生与给定信息无关的幻觉或响应。通过选择具有高TruthfulQA得分或其他相关真实性指标的LLM模型,您可以增加聊天引擎仅根据提供的上下文回应或明确表示当上下文缺乏相关信息时的概率。
2uluyalo4#
@shivamklr 它与查询引擎一起工作,但不与聊天引擎一起工作。
hivapdat5#
两件事
默认上下文模板 = (
"以下是上下文信息。"
"
"
"{context_str}"
"
"
)
然而,当你在一个继承BaseIndex类的类上使用
as_query_engine
方法时,它使用的是RetrieverQueryEngine,它使用这个提示模板默认文本QA提示模板 = (
"以下是上下文信息。
"
"---------------------
"
"{context_str}
"
"---------------------
"
"根据给定的上下文信息和先验知识,回答问题。
"
"问题:{query_str}
"
"答案:"
)
这是目前默认的行为。你可以在已经实现的类周围创建 Package 类来修改行为。我希望这能解释清楚。
cgyqldqp6#
经过思考,你不需要 Package 类,你可以在
as_chat_engine
方法中传递额外的参数,如下所示。你可以查阅文档以获取有关提示的更多信息。
643ylb087#
谢谢,我会查阅文档。
snz8szmq8#
shivamklr是正确的,Varshan2003,你可以修改上下文模板,或者指定一个系统提示符,它将被附加到上下文模板中。