解决 Gemini API 连接卡住问题的方案

本文档详细记录了在 py-github-agent 项目中,调用 Google Gemini API 时程序卡住(Hang)问题的诊断过程和解决方案。


问题现象

在通过 langchain-google-genai 库调用 Gemini 模型时,程序执行到调用 API 的代码行后便卡住,长时间没有响应,既不返回结果,也不抛出超时或网络错误。

测试代码片段如下:

python 复制代码
# test/test_gemini.py
...
response = client.generate_response(prompt) # 程序在此处卡住
...

同时,通过日志确认,程序运行时已加载并设置了 HTTP_PROXYHTTPS_PROXY 环境变量,指向一个本地代理服务器。

诊断过程与根本原因

  1. 初步分析 :程序卡住通常与网络连接问题有关。既然已经设置了代理,直接的网络不通应该不是原因。问题很可能出在 客户端使用的网络协议代理服务器 的兼容性上。

  2. 协议推测 :Google 的现代 API(包括 Gemini)及其客户端库(SDK)为了追求高性能,会优先使用 gRPC 作为底层通信协议。gRPC 是一种基于 HTTP/2 的高性能远程过程调用(RPC)框架。

  3. 定位根因:虽然 gRPC 性能优越,但它对网络中间件(如代理服务器)的要求比传统的 HTTP/1.1 更高。许多标准的 HTTP 代理服务器无法正确处理 gRPC 的长连接和二进制帧,或者需要特殊配置。当 gRPC 连接尝试穿透一个不完全兼容的 HTTP 代理时,可能会导致连接握手失败或协议协商陷入僵局,从而使客户端表现为无限等待(即"卡住")。

解决方案

解决方案是强制客户端库放弃使用 gRPC,转而使用兼容性更好的标准 REST (HTTP/1.1) API 进行通信。

具体操作如下:

  1. 编辑文件
    src/llm/gemini_client.py

  2. 修改代码

    在初始化 ChatGoogleGenerativeAI 类时,添加 transport="rest" 参数。

    修改前:

    python 复制代码
    self.llm = ChatGoogleGenerativeAI(
        model=model_name,
        google_api_key=self.api_key,
        temperature=temperature
    )

    修改后:

    python 复制代码
    self.llm = ChatGoogleGenerativeAI(
        model=model_name,
        google_api_key=self.api_key,
        temperature=temperature,
        transport="rest"  # <--- 强制使用 REST API
    )
  3. 验证结果

    修改后重新运行测试脚本,程序不再卡住,能够正常通过代理与 Gemini API 通信并返回结果。这证明切换到 REST API 成功解决了与代理的兼容性问题。

相关推荐
m0_550024631 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
B站_计算机毕业设计之家32 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏40 分钟前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity1 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道1 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子1 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q1 小时前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手2 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv