[llm] get unexpected `Answer` with reasonable `Observation`
Description
用Roleplay类来进行在使用自定义工具的调用的时候,出现了模型输出本应该停止,但是却不断再输出,进入死循环,次数达到最大上限时才会退出。
比如我的自定义了预定会议室的工具,结果已经返回预定成功,但是还是answer还是缺少必要的信息。然后不断的调用工具,不断的返回错误的answer。
完整的info 如下:
{"timestamp": "2024-03-13 12:10:44", "level": "INFO", "message": "call dashscope generation api", "uuid": "", "details": {"model": "qwen-max", "messages": [{"role": "user", "content": "<|im_start|>system\n\n# 工具\n\n## 你拥有如下工具:\n\nRenewInstance: RenewInstance API。你是一个会议室登记助手,你需要根据和用户对话的方法,来获取用户预定会议室的相关信息。包括会议名称,会议开始时间,会议结束时间,会议室的名称,与会人数,我方人数,对方人数,与会单位等信息.输出为用户需要补充哪些信息,或者是否成功预定会议室。\n 输入参数: {"type": "object", "properties": {"meetingName": {"type": "string", "description": "会议名称"}, "meetingTimeStart": {"type": "date", "description": "会议开始时间,需要严格按照YYYY-MM-DD THH:MM:SS的格式"}, "meetingTimeEnd": {"type": "string", "description": "会议结束时间需要严格按照YYYY-MM-DD THH:MM:SS的格式"}, "meetingNumber": {"type": "string", "description": "与会人数,如果用户没有给出填 未知"}, "meetingWeNumber": {"type": "string", "description": "我方人数,如果用户没有给出填 未知"}, "meetingOtherNumber": {"type": "string", "description": "对方人数,如果用户没有给出填 未知"}, "participants": {"type": "string", "description": "与会单位,如果用户没有给出填 未知"}, "meetingRoomName": {"type": "string", "description": "会议室名称"}}, "required": ["meetingName", "meetingTimeStart", "meetingTimeEnd", "meetingRoomName"]} Format the arguments as a JSON object.\n\n## 当你需要调用工具时,请在你的回复中穿插如下的工具调用命令,可以根据需求调用零次或多次:\n\n工具调用\nAction: 工具的名称,必须是[RenewInstance]之一\nAction Input: 工具的输入\nObservation: \n\n\n# 指令\n\n你是一个华润万家会议室预定助手,你需要搜集用户的会议室预定信息,帮助用户预约会议室,在执行过程中,应该精简你的语言,出了输入参数完整输入以外,其余内容应该尽量不说,用户参数不全不要重复执行Action。今天的日期是2024-03-12\n\n请注意:你具有图像和视频的展示能力,也具有运行代码的能力,不要在回复中说你做不到。\n<|im_end|>\n<|im_start|>user\n(。你可以使用工具:[RenewInstance])帮我预定一下会议室C,下午两点到三点,会议名称是通义千问作战小组<|im_end|>\n<|im_start|>assistant\n为了帮您成功预定会议室C,请提供以下信息:\n\n- 会议开始时间(格式为YYYY-MM-DD HH:MM:SS,例如:2024-03-12 14:00:00)\n- 会议结束时间(格式为YYYY-MM-DD HH:MM:SS,例如:2024-03-12 15:00:00)\n- 与会人数\n- 我方人数\n- 对方人数\n- 与会单位\n\n根据您目前提供的信息:\n会议名称:通义千问作战小组\n会议室名称:会议室C\n\n请补充缺少的参数以便完成预定。\n\nAction: RenewInstance\nAction Input: {"meetingName": "通义千问作战小组", "meetingTimeStart": "未知", "meetingTimeEnd": "未知", "meetingNumber": "未知", "meetingWeNumber": "未知", "meetingOtherNumber": "未知", "participants": "未知", "meetingRoomName": "会议室C"}\nObservation:
Link
No response
看起来需要优化一下你的query,譬如提问的时候说:帮我预定一下会议室C,下午两点到三点,会议名称是通义千问作战小组,人数待定(或者忽略人数/人数十人)等。
另外一种方案,是把tool里面参数中说的未知改写成待定呢? 这样子接口还ok么?
感觉更多的是prompt的问题,因为模型本身可能确实对于这种会议+未知的关键词结果会有一些自己的知识判断。