File size: 4,825 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
# Embedding API 参考文档

## 概述

AxonHub 通过 OpenAI 兼容和 Jina AI 专用 API 提供全面的文本和多模态嵌入生成支持。

## 主要优势

- **OpenAI 兼容性**:无需修改即可使用现有的 OpenAI SDK
- **Jina AI 支持**:原生支持 Jina 嵌入格式,适用于特殊用例
- **多种输入类型**:支持单文本、文本数组、Token 数组和多个 Token 数组
- **灵活的输出格式**:可选择浮点数组或 base64 编码的嵌入向量

## 支持的端点

**端点:**
- `POST /v1/embeddings` - OpenAI 兼容的嵌入 API
- `POST /jina/v1/embeddings` - Jina AI 专用的嵌入 API

## 请求格式

```json

{

  "input": "要嵌入的文本",

  "model": "text-embedding-3-small",

  "encoding_format": "float",

  "dimensions": 1536,

  "user": "用户ID"

}

```

**参数:**

| 参数 | 类型 | 必填 | 描述 |
|-----------|------|----------|-------------|
| `input` | string \| string[] \| number[] \| number[][] | ✅ | 要嵌入的文本。可以是单个字符串、字符串数组、Token 数组或多个 Token 数组。 |
| `model` | string | ✅ | 用于生成嵌入的模型。 |
| `encoding_format` | string | ❌ | 返回嵌入的格式。可选 `float``base64`。默认:`float`。 |
| `dimensions` | integer | ❌ | 输出嵌入的维度数。 |
| `user` | string | ❌ | 终端用户的唯一标识符。 |

**Jina 专用参数:**

| 参数 | 类型 | 必填 | 描述 |
|-----------|------|----------|-------------|
| `task` | string | ❌ | Jina 嵌入的任务类型。选项:`text-matching``retrieval.query``retrieval.passage``separation``classification``none`。 |

## 响应格式

```json

{

  "object": "list",

  "data": [

    {

      "object": "embedding",

      "embedding": [0.123, 0.456, ...],

      "index": 0

    }

  ],

  "model": "text-embedding-3-small",

  "usage": {

    "prompt_tokens": 4,

    "total_tokens": 4

  }

}

```

## 示例

### OpenAI SDK (Python)

```python

import openai



client = openai.OpenAI(

    api_key="your-axonhub-api-key",

    base_url="http://localhost:8090/v1"

)



response = client.embeddings.create(

    input="Hello, world!",

    model="text-embedding-3-small"

)



print(response.data[0].embedding[:5])  # 前 5 个维度

```

### OpenAI SDK (Go)

```go

package main



import (

    "context"

    "fmt"

    "log"



    "github.com/openai/openai-go"

    "github.com/openai/openai-go/option"

)



func main() {

    client := openai.NewClient(

        option.WithAPIKey("your-axonhub-api-key"),

        option.WithBaseURL("http://localhost:8090/v1"),

    )



    embedding, err := client.Embeddings.New(context.TODO(), openai.EmbeddingNewParams{

        Input: openai.Union[string](openai.String("Hello, world!")),

        Model: openai.String("text-embedding-3-small"),

        option.WithHeader("AH-Trace-Id", "trace-example-123"),

        option.WithHeader("AH-Thread-Id", "thread-example-abc"),

    })

    if err != nil {

        log.Fatal(err)

    }



    fmt.Printf("嵌入维度: %d\n", len(embedding.Data[0].Embedding))

    fmt.Printf("前 5 个值: %v\n", embedding.Data[0].Embedding[:5])

}

```

### 多个文本

```python

response = client.embeddings.create(

    input=["Hello, world!", "How are you?"],

    model="text-embedding-3-small"

)



for i, data in enumerate(response.data):

    print(f"文本 {i}: {data.embedding[:3]}...")

```

### Jina 专用任务

```python

import requests



response = requests.post(

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

    headers={

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

        "Content-Type": "application/json"

    },

    json={

        "input": "What is machine learning?",

        "model": "jina-embeddings-v2-base-en",

        "task": "retrieval.query"

    }

)



result = response.json()

print(result["data"][0]["embedding"][:5])

```

## 认证

Embedding API 使用 Bearer Token 认证:

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

API 密钥通过 AxonHub 的 API 密钥管理系统进行管理。

## 最佳实践

1. **使用追踪请求头**:包含 `AH-Trace-Id``AH-Thread-Id` 请求头以获得更好的可观测性
2. **批量请求**:嵌入多个文本时,在单个请求中发送以提高性能
3. **选择合适的维度**:如果不需要完整的维度,使用 `dimensions` 参数减少嵌入大小
4. **选择合适的编码**:如果需要在网络上传输嵌入,使用 `base64` 编码以减少负载大小
5. **Jina 任务类型**:使用 Jina 嵌入时,根据用例选择合适的 `task` 类型以优化检索质量

## 相关资源

- [OpenAI API](openai-api.md)
- [Rerank API](rerank-api.md)