llama_index [Bug]:ReAct Agent提前结束并将想法作为响应返回给用户

bfhwhh0e  于 2个月前  发布在  React
关注(0)|答案(1)|浏览(39)

Bug描述

你好,
我注意到当LLM使用严格的响应格式(包括反引号)回应ReAct Agent时,代理会将想法返回给用户,而不是继续执行已识别的操作。我发现问题出在以下代码片段中的_infer_stream_chunk_is_final函数(这是0.10.53版本的代码,但我相信最新版本也有同样的问题)

if len(latest_content) > len("Thought") and not latest_content.startswith(
                "Thought"
            )

问题在于反引号(```
)是第一个字符,所以它永远找不到LLM响应开头的Thought。通过在代码中添加一个额外的保护措施来修改代码,如下所示,可以解决这个问题。

if len(latest_content) > len("Thought") and not latest_content.startswith(
                "Thought"
            ) and not "Though" in latest_content:

如果你需要更多信息,请告诉我。感谢这个伟大的框架!

版本

0.10.53

重现步骤

使用gpt3-5作为LLM和ReactAgent。使用gpt4时也会出现这种情况,但发生的频率较低。

相关日志/回溯

  • 无响应*
gab6jxml

gab6jxml1#

要解决_infer_stream_chunk_is_final函数中的问题,即由于响应开头的反引号导致代理将想法返回给用户,而不是继续执行已识别的操作,您需要修改该函数以正确处理反引号。具体来说,您应该在检查其内容之前从latest_content中删除任何前导反引号。
以下是更新后的_infer_stream_chunk_is_final函数:

def `_infer_stream_chunk_is_final`(user_input):
    # 移除前导反引号
    content = user_input.lstrip('`')

    # 检查内容是否为最终响应的开始
    if content == '```':
        return True
    else:
        return False

这个修改确保在检查内容之前删除任何前导反引号,使函数能够正确判断块是否为最终响应的开始。要继续与Dosu交谈,请提及@dosu。

相关问题