实现网
dd-e6066b4e

昵称登录后显示

800/8小时
2年工作经验

上海近屿智能
ai工程师

0

被预约次数

0

被收藏次数

0

被评价次数

擅长技能

收到复合地基华发商都科技网依然上岛咖啡建行卡时间段阿法拉官方火狐玩儿提u代发年级三个大V吃个荣誉问题系粗许从哪看色卡老师VVC女房间号推文在哪吃送给大家方便v你们先,肯德基防护乳提高班你咋,大沙地哦吼吼拦截率经历了几个合格好几个号输出参数数量不匹配**:在`submit_button.click`事件中,`outputs`参数指定了三个输出组件:[chatbot, user_input, history_state]。但是`generate_response`函数返回了三个值:`new_history, ai_response, new_history`。这里`new_history`是对话历史(列表形式),而`ai_response`是字符串。而输出组件中:
- `chatbot`组件需要的是对话历史(格式为[(user_input1, bot_response1), (user_input2, bot_response2), ...])的列表,所以第一个输出应该是`new_history`(即更新后的对话历史

项目经验

历史记录格式**:在`generate_response`函数中,我们构建`messages`的方式是遍历`history`(历史记录),然后将每个元素按照(role, content)拆分成消息。但是,在Gradio的`gr.Chatbot`组件中,历史记录的格式是每个元素为[用户消息, 机器人消息]的列表。而我们在函数内部构建消息列表时,将历史记录中的每个元素视为一个二元组,第一个元素是角色("user"或"assistant"),第二个元素是内容。这没有问题,因为我们在存储历史记录时,也是以这种二元组形式存储的。但是注意,在`gr.Chatbot`中显示时,它需要的是[用户输入, 机器人回复]这样的二元组列表。而我们的`history_state`中存储的正是这种格式,所以没有问题。
3. **错误处理**:在异常情况下,返回的是`history, f"API Error: {str(e)}", history`。这里:
- 第一个`history`(旧的对话历史)会更新`chatbot`,但此时并没有新的对话,所以`chatbot`不会显示错误信息。
- 第二个返回值(错误信息字符串)会显示在`user_input`文本框中,这样用户可以看到错误。
- 第三个返回值(旧的`history`)会更新`history_state`,即保持不变。
这样处理是合理的。
4. **初始化问题**:在`gr.State`中,我们初始化为空列表`[]`。在第一次调用时,`history`为空列表,然后我们构建`messages`,并添加当前用户输入。之后将新的对话添加到历史记录中。逻辑正确。
5. **显示历史记录**:我们有一个`gr.JSON`组件`history_display`,但是在代码中,这个组件并没有被更新。因为我们只在`submit_button.click`事件中更新了`chatbot`、`user_input`和`history_state`,并没有更新`history_display`。所以,如果我们希望`history_display`显示当前的历史记录,我们需要将它也加入到输出中,并在函数返回时返回它。但是,注意`history_display`显示的是`history_state`的内容,而`history_state`已经存储了历史记录,我们可以通过让`history_display`绑定到`history_state`的值来实现自动更新?但是Gradio中,组件的值更新需要通过事件输出来更新。
或者,我们可以将`history_display`作为输出组件,然后返回更新后的历史记录给它。但是这样就需要在输出列表中增加一个输出,并且函数需要返回四个值。
但是,原代码中并没有要求更新`history_display`,所以如果不需要显示JSON格式的历史记录,可以删除这个组件。或者,如果我们希望显示,则需要修改。
根据代码,用户界面上有`history_display`组件,所以我们需要更新它。
因此,我们需要修改:
- 在`submit_button.click`的`outputs`中增加`history_display`
- 在`generate_response`函数返回时,除了原来的三个输出,还要返回一个用于更新`history_display`的值(即更新后的历史记录)
但是,注意我们已经在`outputs`中返回了`history_state`(它存储了历史记录),我们可以将`history_display`组件的值设置为`history_state`的值。然而,在事件中,我们可以返回多个输出,所以我们可以将更新后的历史记录同时输出给`history_display`。

0条评论 雇主评价

暂无评论~

可兼职时间

周日全天
工作日下班后
周日半天

可兼职地点

徐汇
漕河泾

被预约

0

被收藏

0

被评价

0

立即预约

可兼职时间

周日全天
工作日下班后
周日半天

可兼职地点

徐汇
漕河泾