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

在Google Colab中使用Llama Index加载Google Docs时遇端口占用错误

Google Colab中llama-index连接Google Docs报Address already in use错误的解决方法

问题背景

在Google Colab环境中使用llama-index的GoogleDocsReader连接Google Docs,已完成依赖安装、credentials.json上传(路径/content/credentials.json,结构符合要求),但执行加载文档代码时触发错误:OSError: [Errno 98] Address already in use。

相关代码

from llama_index import GPTSimpleVectorIndex, download_loader
OPENAI_API_KEY = "abc"

GoogleDocsReader = download_loader('GoogleDocsReader')

gdoc_ids = ['abc']
loader = GoogleDocsReader()
documents = loader.load_data(document_ids=gdoc_ids)

credentials.json结构

{"installed":{"client_id":"xyz.apps.googleusercontent.com","project_id":"myprojctId","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"abc","redirect_uris":["http://localhost"]}}

错误栈

---------------------------------------------------------------------------
OSError Traceback (most recent call last)
in
17 gdoc_ids = ['abc']
18 loader = GoogleDocsReader()
---> 19 documents = loader.load_data(document_ids=gdoc_ids)
20 index = GPTSimpleVectorIndex(documents)

8 frames
/usr/lib/python3.9/socketserver.py in server_bind(self)
464 if self.allow_reuse_address:
465 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
---> 466 self.socket.bind(self.server_address)
467 self.server_address = self.socket.getsockname()
468

OSError: [Errno 98] Address already in use

错误原因

GoogleDocsReader默认使用本地localhost的默认端口启动HTTP服务器,用于OAuth授权回调。但Colab环境中该端口可能被其他进程占用,或者Colab无法直接使用本地端口完成回调流程,导致端口绑定失败。

解决方案

方案1:指定未被占用的端口

初始化GoogleDocsReader时指定一个未被占用的端口(比如8080、5000等),执行代码后复制弹出的授权链接到浏览器完成授权,将授权码粘贴回Colab即可:

from llama_index import GPTSimpleVectorIndex, download_loader
import os

# 设置OpenAI密钥
os.environ["OPENAI_API_KEY"] = "你的OpenAI密钥"

GoogleDocsReader = download_loader('GoogleDocsReader')

# 指定未占用的端口,比如8080
loader = GoogleDocsReader(port=8080)
gdoc_ids = ['你的Google文档ID']
documents = loader.load_data(document_ids=gdoc_ids)

方案2:使用离线token文件

  1. 在本地Python环境中运行一次GoogleDocsReader的授权流程,完成后会自动生成token.json文件
  2. 将token.json上传到Colab的/content目录下
  3. 初始化loader时指定token文件路径:
from llama_index import GPTSimpleVectorIndex, download_loader
import os

os.environ["OPENAI_API_KEY"] = "你的OpenAI密钥"

GoogleDocsReader = download_loader('GoogleDocsReader')

# 指定已上传的token.json路径
loader = GoogleDocsReader(token_path='/content/token.json')
gdoc_ids = ['你的Google文档ID']
documents = loader.load_data(document_ids=gdoc_ids)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:52:04