为何无法捕获Python guidance库的HTTP请求?求解决方案
问题分析与解决方案
核心原因
- 异步请求未继承系统代理:OpenAI库的同步请求(基于
requests)会自动读取http_proxy/https_proxy环境变量,但guidance默认使用OpenAI的异步客户端(基于aiohttp),而aiohttp不会自动加载系统代理配置,导致请求绕过mitmproxy。 - 缓存机制拦截请求:guidance依赖的
gptcache可能缓存了请求结果,实际未发起新的HTTP请求,因此无法被捕获。 - 客户端配置覆盖代理:部分guidance版本在初始化OpenAI客户端时,可能显式清空了代理参数,忽略了系统环境变量的设置。
解决办法
1. 强制使用同步请求
修改guidance的OpenAI客户端初始化代码,禁用异步模式,让其使用requests同步客户端以继承系统代理:
import guidance # 初始化时关闭异步模式 guidance.llm = guidance.llms.OpenAI("text-davinci-003", async_mode=False)
2. 手动配置aiohttp代理
若需保留异步模式,直接为guidance的OpenAI客户端设置代理连接器:
import guidance from aiohttp import TCPConnector # 创建带mitmproxy地址的连接器 proxy_connector = TCPConnector(proxy="http://127.0.0.1:8080") # 初始化客户端时传入连接器 guidance.llm = guidance.llms.OpenAI( "text-davinci-003", client_kwargs={"connector": proxy_connector} )
3. 禁用缓存验证请求
检查是否因缓存导致无实际请求,临时禁用缓存:
import guidance # 初始化时关闭缓存 guidance.llm = guidance.llms.OpenAI("text-davinci-003", cache=False)
4. 全局设置aiohttp代理
通过环境变量为aiohttp单独配置代理(部分版本生效):
export AIOHTTP_PROXY=http://127.0.0.1:8080
内容的提问来源于stack exchange,提问作者washingweb
相关产品推荐
相关产品推荐

