File size: 6,532 Bytes
9853396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# 重排序 API 参考

## 概述

AxonHub 通过 Jina AI 重排序 API 支持文档重排序,允许您根据与查询的相关性重新排列文档。这对于改善搜索结果、RAG(检索增强生成)管道以及其他需要按相关性对文档进行排序的应用程序非常有用。

## 核心优势

- **提升搜索质量**:重新排序搜索结果,使最相关的文档排在前面
- **增强 RAG**:优化检索增强生成的文档选择
- **灵活集成**:兼容 Jina AI 重排序格式

## 支持的端点

**端点:**
- `POST /v1/rerank` - Jina 兼容重排序 API(便捷端点)
- `POST /jina/v1/rerank` - Jina AI 特定重排序 API

> **注意**:OpenAI 不提供原生重排序 API。两个端点都使用 Jina 的重排序格式。

## 请求格式

```json

{

  "model": "jina-reranker-v1-base-en",

  "query": "什么是机器学习?",

  "documents": [

    "机器学习是人工智能的一个子集...",

    "深度学习使用神经网络...",

    "统计学涉及数据收集和分析..."

  ],

  "top_n": 2,

  "return_documents": true

}

```

**参数:**

| 参数 | 类型 | 必需 | 描述 |
|------|------|------|------|
| `model` | string | ✅ | 用于重排序的模型(例如 `jina-reranker-v1-base-en`)。 |
| `query` | string | ✅ | 用于比较文档的搜索查询。 |
| `documents` | string[] | ✅ | 要重排序的文档列表。最少 1 个文档。 |
| `top_n` | integer | ❌ | 返回最相关文档的数量。如果未指定,返回所有文档。 |
| `return_documents` | boolean | ❌ | 是否在响应中返回原始文档。默认:false。 |

## 响应格式

```json

{

  "model": "jina-reranker-v1-base-en",

  "object": "list",

  "results": [

    {

      "index": 0,

      "relevance_score": 0.95,

      "document": {

        "text": "机器学习是人工智能的一个子集..."

      }

    },

    {

      "index": 1,

      "relevance_score": 0.87,

      "document": {

        "text": "深度学习使用神经网络..."

      }

    }

  ],

  "usage": {

    "prompt_tokens": 45,

    "total_tokens": 45

  }

}

```

## 认证

重排序 API 使用 Bearer 令牌认证:

- **请求头**`Authorization: Bearer <your-api-key>`

## 示例

### Python 示例

```python

import requests



response = requests.post(

    "http://localhost:8090/v1/rerank",

    headers={

        "Authorization": "Bearer your-axonhub-api-key",

        "Content-Type": "application/json"

    },

    json={

        "model": "jina-reranker-v1-base-en",

        "query": "什么是机器学习?",

        "documents": [

            "机器学习是人工智能的一个子集,使计算机能够在没有明确编程的情况下学习。",

            "深度学习使用具有许多层的神经网络。",

            "统计学是数据收集和分析的研究。"

        ],

        "top_n": 2

    }

)



result = response.json()

for item in result["results"]:

    print(f"分数: {item['relevance_score']:.3f} - {item['document']['text'][:50]}...")

```

### Jina 端点 (Python)

```python

import requests



# Jina 特定的重排序请求

response = requests.post(

    "http://localhost:8090/jina/v1/rerank",

    headers={

        "Authorization": "Bearer your-axonhub-api-key",

        "Content-Type": "application/json"

    },

    json={

        "model": "jina-reranker-v1-base-en",

        "query": "可再生能源的好处是什么?",

        "documents": [

            "太阳能从阳光中产生电力。",

            "煤矿开采提供就业但损害环境。",

            "风力涡轮机将风能转化为电力。",

            "化石燃料是不可再生的并导致气候变化。"

        ],

        "top_n": 3,

        "return_documents": True

    }

)



result = response.json()

print("重排序文档:")

for i, item in enumerate(result["results"]):

    print(f"{i+1}. 分数: {item['relevance_score']:.3f}")

    print(f"   文本: {item['document']['text']}")

```

### Go 示例

```go

package main



import (

    "bytes"

    "context"

    "encoding/json"

    "fmt"

    "io"

    "net/http"

)



type RerankRequest struct {

    Model     string   `json:"model,omitempty"`

    Query     string   `json:"query"`

    Documents []string `json:"documents"`

    TopN      *int     `json:"top_n,omitempty"`

}



type RerankResponse struct {

    Model   string `json:"model"`

    Object  string `json:"object"`

    Results []struct {

        Index          int     `json:"index"`

        RelevanceScore float64 `json:"relevance_score"`

        Document       *struct {

            Text string `json:"text"`

        } `json:"document,omitempty"`

    } `json:"results"`

}



func main() {

    req := RerankRequest{

        Model: "jina-reranker-v1-base-en",

        Query: "什么是人工智能?",

        Documents: []string{

            "人工智能指的是机器执行通常需要人类智能的任务。",

            "机器学习是人工智能的一个子集。",

            "深度学习使用神经网络。",

        },

        TopN: &[]int{2}[0], // 指向 2 的指针

    }



    jsonData, _ := json.Marshal(req)



    httpReq, _ := http.NewRequestWithContext(

        context.TODO(),

        "POST",

        "http://localhost:8090/v1/rerank",

        bytes.NewBuffer(jsonData),

    )

    httpReq.Header.Set("Authorization", "Bearer your-axonhub-api-key")

    httpReq.Header.Set("Content-Type", "application/json")

    httpReq.Header.Set("AH-Trace-Id", "trace-example-123")

    httpReq.Header.Set("AH-Thread-Id", "thread-example-abc")



    client := &http.Client{}

    resp, err := client.Do(httpReq)

    if err != nil {

        panic(err)

    }

    defer resp.Body.Close()



    body, _ := io.ReadAll(resp.Body)

    var result RerankResponse

    json.Unmarshal(body, &result)



    for _, item := range result.Results {

        fmt.Printf("分数: %.3f, 文本: %s\n",

            item.RelevanceScore,

            item.Document.Text[:50]+"...")

    }

}

```

## 最佳实践

1. **使用追踪头**:添加 `AH-Trace-Id``AH-Thread-Id` 头以获得更好的可观测性
2. **限制结果数量**:使用 `top_n` 限制结果数量以提高性能
3. **返回文档**:仅在需要响应中包含文档文本时设置 `return_documents: true`
4. **模型选择**:根据您的用例和语言选择合适的重排序模型