Criar uma API REST com Pinecone: Passo a Passo
Estamos construindo uma API REST com Pinecone que permite interagir facilmente com dados vetoriais. Essa abordagem é crucial para aqueles que buscam implementar modelos de aprendizado de máquina e dados indexados sem se perder nos detalhes.
Pré-requisitos
- Python 3.11+
- pip install pinecone-io
- Compreensão básica de APIs RESTful
Passo 1: Configurar seu Ambiente
Primeiramente, precisamos configurar o Python e instalar o cliente Pinecone. Certifique-se de ter a versão correta do Python. O cliente Python mais recente do Pinecone pode ser encontrado no GitHub:
pip install pinecone-client
Instale-o e verifique a instalação com o seguinte comando:
pip show pinecone-client
Se você vê um erro indicando que o pacote não foi encontrado, é provável que você esteja em um ambiente virtual que falta a biblioteca correta ou que a sua versão do Python seja incompatível. Instale a versão correta ou ative o ambiente certo.
Passo 2: Inicializar Pinecone
Para usar o Pinecone, precisamos inicializá-lo. Você precisará de uma chave API que pode ser encontrada no seu painel Pinecone. Veja como se conectar:
import pinecone
pinecone.init(api_key="YOUR_API_KEY", environment="us-west1-gcp")
Não se esqueça de substituir YOUR_API_KEY pela sua chave API Pinecone real. Se esta linha gerar uma exceção, verifique se a sua chave API está correta ou se você configurou acidentalmente seu ambiente na região errada.
Passo 3: Criar um Índice
Agora precisamos criar um índice. Um índice é o local onde nossos vetores serão armazenados. Especifique o nome do índice e a dimensão dos vetores:
index_name = "example-index"
pinecone.create_index(index_name=index_name, dimension=128)
Certifique-se de escolher uma dimensão que corresponda ao comprimento dos seus embeddings vetoriais. Se você tentar criar um índice com as dimensões erradas, verá um erro dizendo “Incompatibilidade de dimensão”.
Passo 4: Inserir Dados no Índice
Depois que nosso índice estiver configurado, vamos inserir alguns dados. Para a demonstração, vamos inserir três vetores:
index = pinecone.Index(index_name)
# Dados de exemplo: (id, vetor)
data = [
("vec1", [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]),
("vec2", [0.2, 0.3, 0.1, 0.5, 0.6, 0.8, 0.9, 0.7, 0.1, 0.4, 0.2, 0.3, 0.5, 0.2, 0.1, 0.5, 0.3, 0.2, 0.1, 0.4, 0.6, 0.3, 0.5, 0.1, 0.8, 0.5, 0.4, 0.3, 0.2, 0.1, 0.5, 0.9, 0.6, 0.7, 0.3, 0.9, 0.5, 0.2],
("vec3", [0.3, 0.4, 0.1, 0.2, 0.5, 0.6, 0.1, 0.7, 0.8, 0.9, 0.4, 0.2, 0.6, 0.7, 0.8, 0.5, 0.3, 0.2, 0.3, 0.1, 0.9, 0.8, 0.5, 0.4, 0.7, 0.1, 0.3, 0.2, 0.4, 0.1, 0.5, 0.6, 0.9, 0.2, 0.3, 0.5, 0.8, 0.7)
]
index.upsert(items=data)
Se você tentar inserir dados com vetores que não estão no comprimento correto, verá um erro reclamando do tamanho do vetor. Sempre verifique suas dimensões.
Passo 5: Criar os Endpoints da API
Por fim, precisamos de um aplicativo Flask para expor nossas operações Pinecone como endpoints de API REST. Veja como configurar uma API simples:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/vectors', methods=['POST'])
def add_vectors():
vectors = request.json.get('vectors')
index.upsert(items=vectors)
return jsonify({"status": "success", "message": "Vetores adicionados"}), 201
@app.route('/vectors/', methods=['GET'])
def get_vector(id):
vector = index.fetch(ids=[id])
return jsonify({"vector": vector}), 200
if __name__ == "__main__":
app.run(debug=True)
Com estas rotas, você pode adicionar vetores via uma requisição POST e recuperá-los com uma requisição GET. Certifique-se de incluir cabeçalhos de tipo de conteúdo ao testar com ferramentas como o Postman. Se você esquecer disso, sua aplicação retornará um erro por dados ausentes, então não negligencie isso.
Dicas
“`html
- Exposição da chave API: É fácil acidentalmente enviar seu código para um repositório público com sua chave API. Use variáveis de ambiente para armazenar dados sensíveis de forma segura.
- Limites de Índice do Pinecone: Diferentes níveis de assinatura do Pinecone têm limites sobre o número de índices que você pode criar. Fique atento!
- Gerenciamento de Erros: Gerencie corretamente os erros em sua aplicação Flask. Se você não fizer isso, sua interface de usuário pode quebrar sem qualquer indicação do que deu errado.
- Dimensão dos Vetores: Sempre certifique-se de que as dimensões dos seus vetores correspondem às do seu índice. Isso pode economizar horas de depuração.
Código Completo
import pinecone
from flask import Flask, request, jsonify
# Etapa 1: Inicializar o Pinecone
pinecone.init(api_key="YOUR_API_KEY", environment="us-west1-gcp")
index_name = "example-index"
pinecone.create_index(index_name=index_name, dimension=128)
# Etapa 2: Criar a aplicação Flask
app = Flask(__name__)
index = pinecone.Index(index_name)
@app.route('/vectors', methods=['POST'])
def add_vectors():
vectors = request.json.get('vectors')
index.upsert(items=vectors)
return jsonify({"status": "success", "message": "Vetores adicionados"}), 201
@app.route('/vectors/', methods=['GET'])
def get_vector(id):
vector = index.fetch(ids=[id])
return jsonify({"vector": vector}), 200
if __name__ == "__main__":
app.run(debug=True)
E Agora?
Agora que você tem uma API REST funcional, o próximo passo lógico é integrar um frontend para chamar essa API e visualizar os dados. Considere usar uma simples aplicação React ou qualquer outro framework de frontend moderno que permita fazer chamadas API.
FAQ
- O que fazer se meus vetores não aparecerem no índice?
Certifique-se de que a solicitação de inserção esteja formatada corretamente e verifique os logs do servidor para erros. - Posso armazenar dimensões de vetores diferentes?
Não, todos os vetores em um índice Pinecone devem ter a mesma dimensão. - Como excluir vetores?
Use o método de exclusão do índice com o ID do vetor para remover entradas específicas.
Fontes de Dados
Consulte a documentação oficial do Pinecone no GitHub para mais detalhes: pinecone-io/pinecone-python-client. Para especificidades sobre a API, visite o fórum da comunidade Pinecone.
| Repositório | Estrelas | Forks | Problemas Abertos | Licença | Última Atualização |
|---|---|---|---|---|---|
| pinecone-io/pinecone-python-client | 422 | 117 | 43 | Apache-2.0 | 2026-03-17 |
Última atualização em 26 de março de 2026. Dados provenientes de documentos oficiais e benchmarks da comunidade.
“`
🕒 Published: