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

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文件路径。

解决步骤:

  1. 指定.env文件的绝对路径
    修改load_dotenv()为带路径的调用,确保脚本能找到配置文件:

    load_dotenv(dotenv_path="/Users/spinokiem/Documents/Spino_DS_prj/building_a_chatbot/.env")
    

    替换为你实际的.env文件路径。

  2. 验证环境变量加载状态
    在初始化Pinecone和OpenAIEmbeddings前,添加打印语句确认变量是否有效:

    print("PINECONE_API_KEY:", os.getenv("PINECONE_API_KEY"))
    print("OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY"))
    

    如果输出为None,检查.env文件中是否正确设置了这两个变量,且无拼写错误。

  3. 修改后的示例代码

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:38:13