解决 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 成功解决了与代理的兼容性问题。

相关推荐
李剑一2 小时前
Python学习笔记2
python
晨非辰2 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
有梦想的西瓜2 小时前
如何优化电力系统潮流分布:最优潮流(OPF)问题
python·电力·opf
DanCheng-studio8 小时前
网安毕业设计简单的方向答疑
python·毕业设计·毕设
轻抚酸~8 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
独行soc10 小时前
2025年渗透测试面试题总结-264(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
汤姆yu10 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
如何原谅奋力过但无声11 小时前
TensorFlow 1.x常用函数总结(持续更新)
人工智能·python·tensorflow
翔云 OCR API11 小时前
人脸识别API开发者对接代码示例
开发语言·人工智能·python·计算机视觉·ocr