Pinecone连接异常:Jupyter可运行Python脚本报错TypeError
连接Pinecone向量数据库时Python脚本运行报错问题
代码在Jupyter Notebook中可正常连接Pinecone并检索信息,但作为独立Python脚本运行时出现错误。已排查代码顺序、API密钥有效性,甚至新建Python环境测试,问题仍存在。
原代码
import os import pinecone from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Pinecone from dotenv import load_dotenv load_dotenv() pinecone.init( api_key=os.getenv("PINECONE_API_KEY"), environment='gcp-starter'# this thing can be found at your acc at https://app.pinecone.io/ ) # load pinecone index_name = "itl-knl-base" embeddings = OpenAIEmbeddings() # if index_name is not None: # print(pinecone.describe_index(index_name)) docsearch = Pinecone.from_existing_index(index_name, embeddings) docsearch.similarity_search("số ngày nghỉ có tăng theo thâm niên làm việc không?", k=3)
报错信息
(chatbot) sPyno features $ /Users/spinokiem/miniconda3/envs/inno23/bin/python /Users/spinokiem/Documents/Spino_DS_prj/building_a_chatbot/src/features/app.py 11:56 Traceback (most recent call last): File "/Users/spinokiem/Documents/Spino_DS_prj/building_a_chatbot/src/features/app.py", line 24, in <module> docsearch = Pinecone.from_existing_index(index_name, embeddings) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/langchain/vectorstores/pinecone.py", line 437, in from_existing_index pinecone_index = cls.get_pinecone_index(index_name, pool_threads) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/langchain/vectorstores/pinecone.py", line 354, in get_pinecone_index indexes = pinecone.list_indexes() # checks if provided index exists ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/manage.py", line 185, in list_indexes response = api_instance.list_indexes() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api_client.py", line 776, in __call__ return self.callable(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api/index_operations_api.py", line 1130, in __list_indexes return self.call_with_http_info(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api_client.py", line 838, in call_with_http_info return self.api_client.call_api( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api_client.py", line 413, in call_api return self.__call_api(resource_path, method, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api_client.py", line 200, in __call_api response_data = self.request( ^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/api_client.py", line 439, in request return self.rest_client.GET(url, ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/rest.py", line 236, in GET return self.request("GET", url, ^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/pinecone/core/client/rest.py", line 202, in request r = self.pool_manager.request(method, url, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/_request_methods.py", line 110, in request return self.request_encode_url( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/_request_methods.py", line 143, in request_encode_url return self.urlopen(method, url, **extra_kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/poolmanager.py", line 443, in urlopen response = conn.urlopen(method, u.request_uri, **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/connectionpool.py", line 790, in urlopen response = self._make_request( ^^^^^^^^^^^^^^^^^^^ File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/connectionpool.py", line 496, in _make_request conn.request( File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/connection.py", line 394, in request self.putheader(header, value) File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/site-packages/urllib3/connection.py", line 308, in putheader super().putheader(header, *values) File "/Users/spinokiem/miniconda3/envs/inno23/lib/python3.11/http/client.py", line 1263, in putheader if _is_illegal_header_value(values[i]): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: expected string or bytes-like object, got 'NoneType'
问题分析与解决方案
报错核心原因是环境变量未正确加载,导致PINECONE_API_KEY或OPENAI_API_KEY为None,在HTTP请求头中传递None值引发类型错误。Jupyter环境中可能已自动加载环境变量,但独立脚本运行时load_dotenv()可能找不到.env文件路径。
解决步骤:
指定
.env文件的绝对路径
修改load_dotenv()为带路径的调用,确保脚本能找到配置文件:load_dotenv(dotenv_path="/Users/spinokiem/Documents/Spino_DS_prj/building_a_chatbot/.env")替换为你实际的
.env文件路径。验证环境变量加载状态
在初始化Pinecone和OpenAIEmbeddings前,添加打印语句确认变量是否有效:print("PINECONE_API_KEY:", os.getenv("PINECONE_API_KEY")) print("OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY"))如果输出为
None,检查.env文件中是否正确设置了这两个变量,且无拼写错误。修改后的示例代码
import os import pinecone from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Pinecone from dotenv import load_dotenv # 指定.env文件绝对路径 load_dotenv(dotenv_path="/Users/spinokiem/Documents/Spino_DS_prj/building_a_chatbot/.env") # 验证环境变量 print("PINECONE_API_KEY:", os.getenv("PINECONE_API_KEY")) print("OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY")) pinecone.init( api_key=os.getenv("PINECONE_API_KEY"), environment='gcp-starter' ) index_name = "itl-knl-base" embeddings = OpenAIEmbeddings() docsearch = Pinecone.from_existing_index(index_name, embeddings) results = docsearch.similarity_search("số ngày nghỉ có tăng theo thâm niên làm việc không?", k=3) print(results)
内容的提问来源于stack exchange,提问作者Spino.Kiem
相关产品推荐
相关产品推荐

