在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文件
- 在本地Python环境中运行一次GoogleDocsReader的授权流程,完成后会自动生成
token.json文件 - 将
token.json上传到Colab的/content目录下 - 初始化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
相关产品推荐
相关产品推荐

