OpenAI 兼容 Embeddings API 接入
Embeddings 与聊天不是同一条路由。把 OpenAI SDK 的 Base URL 设为 https://monkeytheme.com/v1,调用 POST /embeddings,先证明鉴权通过,再从你自己的 /v1/models 列表复制准确的 embedding 模型 id。
本页在生产环境测到了什么
2026-08-05,对 https://monkeytheme.com 做了无鉴权与无效 Key 探测。未使用客户 Key,也未获取成功向量响应。
API_KEY_REQUIREDINVALID_API_KEY404 page not foundPOST /v1/embeddings 能打到鉴权层。收到带 JSON code 的 401,说明路由存在;下一步应处理凭据和模型选择,而不是乱猜路径。请求字段(官方 OpenAPI)
OpenAI 公开 OpenAPI 里的 CreateEmbeddingRequest 定义了下列字段。网关按 OpenAI 兼容实现时,按这些字段构造请求。
| 字段 | 是否必填 | OpenAPI 说明 |
|---|---|---|
input | 是 | 字符串、字符串数组、token 数组,或 token 数组的数组。不能是空字符串。数组最多 2048 项。所列 embedding 模型单条上限 8192 tokens;单请求合计上限 300,000 tokens。 |
model | 是 | 模型 id。Schema 示例含 text-embedding-3-small、text-embedding-3-large、text-embedding-ada-002。 |
encoding_format | 否 | float(默认)或 base64。 |
dimensions | 否 | 仅 text-embedding-3 及之后模型支持,用于缩短返回向量维度。 |
user | 否 | 终端用户标识,供支持该字段的上游做滥用监控。 |
GET /v1/models 确认。可选字段如 dimensions 取决于上游模型;不支持时优先按模型/账户限制处理,不要先怀疑 Base URL。改应用代码前的 curl 检查
# 1) 先证明路由与鉴权层(期望 JSON 401,不是 HTML)
curl -sS -D- https://monkeytheme.com/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"model":"MODEL_ID_FROM_YOUR_LIST","input":"hello embeddings"}' | head -40
# 2) 换上你的 Key(分享前务必打码)
curl -sS https://monkeytheme.com/v1/embeddings \
-H "Authorization: Bearer $MONKEYAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"MODEL_ID_FROM_YOUR_LIST","input":"hello embeddings","encoding_format":"float"}'
# 3) 常见路径错误:漏掉 /v1(生产探测返回 nginx 404 HTML)
curl -sS -o /tmp/no-v1.txt -w "%{http_code}\n" https://monkeytheme.com/embeddings \
-H "Authorization: Bearer $MONKEYAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"MODEL_ID_FROM_YOUR_LIST","input":"hello"}'
保留 HTTP 状态、JSON code、x-request-id / x-client-request-id、模型 id 与时间戳。不要把真实 Bearer token 贴进工单或截图。
SDK Base URL 写法
# Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MONKEYAI_API_KEY"],
base_url="https://monkeytheme.com/v1",
)
# 先用 GET /v1/models 确认模型 id:
resp = client.embeddings.create(
model="MODEL_ID_FROM_YOUR_LIST",
input="The food was delicious and the waiter...",
encoding_format="float",
)
vector = resp.data[0].embedding
print(len(vector), resp.usage)
# Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MONKEYAI_API_KEY,
baseURL: "https://monkeytheme.com/v1",
});
const resp = await client.embeddings.create({
model: "MODEL_ID_FROM_YOUR_LIST",
input: "The food was delicious and the waiter...",
encoding_format: "float",
});
console.log(resp.data[0].embedding.length, resp.usage);
官方 SDK 示例通过已配置的 base URL 调用 embeddings.create。若 Base URL 已以 /v1 结尾,客户端路径设置里不要再叠一层 /v1。
如何读成功响应
OpenAPI 中 CreateEmbeddingResponse 含 object: "list"、model、data[]、usage。每个 data[] 项含 object: "embedding"、index 和 embedding(当 encoding_format=float 时为浮点数组)。
| 检查点 | 原因 |
|---|---|
data 数量与 input 条数一致 | 批量输入应按 index 顺序各返回一条向量。 |
| 同一模型下向量长度稳定 | 改 dimensions 或换模型会改变长度;同一索引库不要混用不同维度。 |
usage.prompt_tokens / total_tokens | 计费与批大小按 token,不只按字符数。 |
| 把模型 id 与向量一起存 | 换模型重新 embedding 后,旧向量的相似度比较会失效。 |
失败时的判断顺序
- 确认域名是
monkeytheme.com,Base URL 是https://monkeytheme.com/v1。 - 用同一把 Key 调
GET /v1/models。若已是 401,先修鉴权(见 401 排错)。 - 从列表复制完整 embedding 模型 id,不要凭记忆拼名字。
- 用短字符串 POST
/v1/embeddings。 - 若返回 HTML 404,路径通常错了(常见是漏
/v1或主机名不对)。 - 鉴权已通过但仍是 JSON 404/模型错误时,按模型目录或上游支持处理,不要直接下结论说“embeddings 全站坏了”。
- 鉴权通过后的 429 或 504,改走限流与超时专题,不要反复改 embeddings 路径。
本页不声称什么
本页不声称测到了成功向量、不给出 MonkeyAI 账户的固定维度,也不保证旧版 /v1/engines/.../embeddings 路径可用(生产探测该路径返回 404)。它也不能替代你的 RAG 评测:余弦相似度只在同一 embedding 模型空间内有意义。
来源与相关文档
FAQ
Base URL 要不要带 /v1?
Base URL 使用 https://monkeytheme.com/v1。SDK 路径是 /embeddings,完整地址是 https://monkeytheme.com/v1/embeddings。不要请求 https://monkeytheme.com/embeddings。
为什么 POST /v1/embeddings 返回 401?
说明请求在生成向量前就鉴权失败。缺少凭据返回 API_KEY_REQUIRED;带了无效 Key 返回 INVALID_API_KEY。先修好 Key,再查维度或模型名。
可以用 GET /v1/embeddings 吗?
不可以。OpenAI 创建 embeddings 的操作是 POST。本页生产探测中,GET /v1/embeddings 返回 404 page not found。
模型名可以写死吗?
不要写死。用同一把 Key 调用 GET /v1/models,复制账户可见的完整模型 id。官方 OpenAPI 示例包含 text-embedding-3-small、text-embedding-3-large、text-embedding-ada-002,但各账户目录可能不同。
Chat 成功是否代表 embeddings 可用?
不代表。聊天与 embeddings 是不同路由和模型族。鉴权通过后,仍需单独验证 POST /v1/embeddings。
本页是否生成了真实向量?
没有。本页只做了无鉴权与无效 Key 探测,不声称客户 Key 的成功响应,也不给出某把 Key 的具体向量维度。