You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gradio ChatInterface集成Gemini API时用户输入重复的UI问题

问题分析与解决方案
  • 核心错误原因:chat_history.append((prompt, output)) 方法是原地修改列表,返回值为None。Gradio的ChatInterface期望函数返回更新后的完整聊天历史列表,返回None会导致界面渲染逻辑异常,进而出现用户输入重复显示的问题。

  • 其他潜在问题:

    • 每次调用generate函数都重新实例化GenerativeModel,会重复创建资源,降低性能。
    • 未处理prompt为空的情况,会导致response变量未定义引发报错。
    • 初始判断chat_history = chat_history or []属于冗余逻辑,Gradio会默认传入空列表。
  • 修正后的代码:

from google.cloud import aiplatform
import vertexai
from vertexai.preview.generative_models import GenerativeModel, Part
import gradio as gr

# 提前实例化模型,避免重复创建资源
vertexai.init(project="your-project-id", location="your-region")  # 需补充你的项目ID和区域
model = GenerativeModel("gemini-pro")

def generate(prompt, chat_history):
    if not prompt:
        return chat_history  # 空输入直接返回原历史
    
    response = model.generate_content(
        prompt,
        generation_config={
            "max_output_tokens": 2048,
            "temperature": 0.9,
            "top_p": 1
        },
        stream=False,
    )
    output = response.candidates[0].content.parts[0].text
    
    # 先更新聊天历史,再返回完整列表
    chat_history.append((prompt, output))
    return chat_history

iface = gr.ChatInterface(generate)

if __name__ == "__main__":
    iface.launch()
  • 关键修改说明:
    • 将GenerativeModel实例化移到函数外部,仅初始化一次,提升运行效率。
    • 增加空prompt判断,避免无意义请求和代码报错。
    • 先执行chat_history.append((prompt, output))修改列表,再直接返回chat_history(完整的更新后列表),完全符合Gradio的返回要求。
    • 移除冗余的chat_history = chat_history or []逻辑。

内容的提问来源于stack exchange,提问作者Soumya Kanti Naskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:00:15