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

在Pyscript页面集成OpenAI API时请求超时问题排查

问题分析与解决方案

核心问题1:异步函数中调用同步API请求

你的send函数标记为async,但调用client.chat.completions.create时使用的是同步客户端,未处理浏览器环境下的阻塞问题。Pyscript运行在浏览器Python沙箱中,同步网络请求会阻塞事件循环,被浏览器强制终止,直接导致超时。

核心问题2:代码中的未定义变量

代码里console.log(f"Data: {messages}")的messages、console.log(reply)的reply均未定义,会引发错误中断执行流程。

核心问题3:超时参数未生效

同步客户端的timeout参数在Pyscript环境中无法正确生效,需改用异步客户端配合合适的超时配置。

核心问题4:SSL兼容性冲突

Pyscript自带的SSL库与OpenAI API的证书验证存在兼容问题,可能导致请求无法建立连接。


修正后的代码示例

@when('click', '#summary-btn')
async def send(event=None):
    Element('summarybrief').write("Send function successfully called.")
    
    userElement = js.document.getElementById('brief')
    OPENAI_API_KEY = userElement.value.strip()
    
    # 使用异步客户端适配浏览器事件循环
    from openai import AsyncOpenAI
    client = AsyncOpenAI(api_key=OPENAI_API_KEY, timeout=60.0, max_retries=3)

    # 临时解决SSL证书兼容问题(调试用,生产环境建议配置合法CA证书)
    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context

    # 转换摘要列表为带换行标签的字符串
    global similar_items
    similar_items_str = ""
    for index, row in similar_items.iterrows():
        similar_items_str += f"Title: {row['Title']}<br>Summary: {row['Summary']}<br>Note: {row['Note']}<br><br>"

    payload = f"请生成一份500字左右的叙述性总览,使用<br>标签换行:{similar_items_str}"
    
    try:
        # 异步调用API必须加await
        chat_completion = await client.chat.completions.create(
            messages=[
                {
                    "role": "user",
                    "content": payload
                }
            ],
            model="gpt-4o",
        )
        
        # 正确提取回复内容
        reply_content = chat_completion.choices[0].message.content
        # 渲染到页面
        Element('summarybrief').element.innerHTML = reply_content

        # 调试日志
        console.log(f"Response: {reply_content}")
    except Exception as e:
        # 捕获并显示错误信息
        Element('summarybrief').write(f"请求失败:{str(e)}")
        console.log(f"错误详情:{str(e)}")

关键优化点说明

  • 改用AsyncOpenAI客户端:异步客户端适配浏览器事件循环,配合await关键字避免阻塞,从根源解决超时问题。
  • 修复变量错误:移除未定义变量的引用,确保代码执行流程完整。
  • SSL兼容处理:临时禁用证书验证(仅调试),生产环境可指定Pyscript环境中可用的CA证书路径。
  • Payload格式优化:直接在摘要拼接时使用<br>标签,减少Prompt处理复杂度。
  • 异常捕获机制:添加try-except块,精准定位API密钥错误、网络问题等具体故障。

额外建议

  1. 在Pyscript的<py-env>中明确指定依赖版本,避免版本兼容问题:
    <py-env>
      - openai>=1.30.0
    </py-env>
    
  2. 若仍存在超时,可尝试拆分大Payload为多个请求,或进一步提高max_retries参数值。

内容的提问来源于stack exchange,提问作者Mark Bailey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:24:51