> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-docs-zh.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Pinecone rerank 集成

> 使用 LangChain Python 集成 Pinecone rerank 检索器。

> 该笔记本展示了如何使用 **PineconeRerank** 进行两阶段向量检索重排名，具体实现方式参考 `langchain_pinecone/libs/pinecone/rerank.py` 中的演示。

## 设置

安装 `langchain-pinecone` 包。

```python theme={null}
pip install -qU "langchain-pinecone"
```

## 凭据

设置您的Pinecone API密钥以使用重排名API。

```python theme={null}
import os
from getpass import getpass

os.environ["PINECONE_API_KEY"] = os.getenv("PINECONE_API_KEY") or getpass(
    "Enter your Pinecone API key: "
)
```

## 实例化

使用 `PineconeRerank` 对文档列表按相关性对查询进行重排名。

```python theme={null}
from langchain_core.documents import Document
from langchain_pinecone import PineconeRerank

# Initialize reranker
reranker = PineconeRerank(model="bge-reranker-v2-m3")

# Sample documents
documents = [
    Document(page_content="Paris is the capital of France."),
    Document(page_content="Berlin is the capital of Germany."),
    Document(page_content="The Eiffel Tower is in Paris."),
]

# Rerank documents
query = "What is the capital of France?"
reranked_docs = reranker.compress_documents(documents, query)

# Print results
for doc in reranked_docs:
    score = doc.metadata.get("relevance_score")
    print(f"Score: {score:.4f} | Content: {doc.page_content}")
```

```text theme={null}
/Users/jakit/customers/aurelio/langchain-pinecone/libs/pinecone/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
```

```text theme={null}
Score: 0.9998 | Content: Paris is the capital of France.
Score: 0.1950 | Content: The Eiffel Tower is in Paris.
Score: 0.0042 | Content: Berlin is the capital of Germany.
```

## 用法

### 使用Top-N进行重排名

指定 `top_n` 来限制返回的文档数量。

```python theme={null}
# Return only top-1 result
reranker_top1 = PineconeRerank(model="bge-reranker-v2-m3", top_n=1)
top1_docs = reranker_top1.compress_documents(documents, query)
print("Top-1 Result:")
for doc in top1_docs:
    print(f"Score: {doc.metadata['relevance_score']:.4f} | Content: {doc.page_content}")
```

```text theme={null}
Top-1 Result:
Score: 0.9998 | Content: Paris is the capital of France.
```

## 使用自定义排名字段进行重排名

如果您的文档是字典类型或包含自定义字段，使用 `rank_fields` 指定要排名的字段。

```python theme={null}
# Sample dictionary documents with 'text' field
docs_dict = [
    {
        "id": "doc1",
        "text": "Article about renewable energy.",
        "title": "Renewable Energy",
    },
    {"id": "doc2", "text": "Report on economic growth.", "title": "Economic Growth"},
    {
        "id": "doc3",
        "text": "News on climate policy changes.",
        "title": "Climate Policy",
    },
]

# Initialize reranker with rank_fields
reranker_text = PineconeRerank(model="bge-reranker-v2-m3", rank_fields=["text"])
climate_docs = reranker_text.rerank(docs_dict, "Latest news on climate change.")

# Show IDs and scores
for res in climate_docs:
    print(f"ID: {res['id']} | Score: {res['score']:.4f}")
```

```text theme={null}
ID: doc3 | Score: 0.9892
ID: doc1 | Score: 0.0006
ID: doc2 | Score: 0.0000
```

我们可以基于标题字段进行重排名

```python theme={null}
economic_docs = reranker_text.rerank(docs_dict, "Economic forecast.")

# Show IDs and scores
for res in economic_docs:
    print(
        f"ID: {res['id']} | Score: {res['score']:.4f} | Title: {res['document']['title']}"
    )
```

```text theme={null}
ID: doc2 | Score: 0.8918 | Title: Economic Growth
ID: doc3 | Score: 0.0002 | Title: Climate Policy
ID: doc1 | Score: 0.0000 | Title: Renewable Energy
```

## 使用额外参数进行重排名

您可以直接将 `truncate` 等模型特定参数传递给 `.rerank()`。

如何处理超出模型支持长度的输入。接受值：END 或 NONE。
END将输入序列截断至输入令牌限制处。NONE在输入超过令牌限制时返回错误。

```python theme={null}
# Rerank with custom truncate parameter
docs_simple = [
    {"id": "docA", "text": "Quantum entanglement is a physical phenomenon..."},
    {"id": "docB", "text": "Classical mechanics describes motion..."},
]

reranked = reranker.rerank(
        documents=docs_simple,
        query="Explain the concept of quantum entanglement.",
        truncate="END",
)
# Print reranked IDs and scores
for res in reranked:
    print(f"ID: {res['id']} | Score: {res['score']:.4f}")
```

```text theme={null}
ID: docA | Score: 0.6950
ID: docB | Score: 0.0001
```

***

## API参考

* `PineconeRerank(model, top_n, rank_fields, return_documents)`
* `.rerank(documents, query, rank_fields=None, model=None, top_n=None, truncate="END")`
* `.compress_documents(documents, query)` (返回包含 `Document` 元素的 `relevance_score` 元数据对象)

***

> 官方原文：[src/oss/python/integrations/retrievers/pinecone\_rerank.mdx](https://github.com/langchain-ai/docs/blob/main/src/oss/python/integrations/retrievers/pinecone_rerank.mdx) · 非官方翻译，译文由 AI 生成，以英文原文为准。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.