OpenAI Embedding API 教程

OpenAI Embedding API 将文本转换为高维向量,是实现语义搜索、推荐系统和 RAG 检索增强生成的基础。本文介绍 Embedding 的原理、API 调用方法和实战应用。

什么是 Embedding?

Embedding(嵌入向量)将文本映射为固定维度的浮点数数组。语义相似的文本在向量空间中距离更近,可以用于:

可用模型

基本调用

Python

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key",
    base_url="https://claude4u.com/v1"
)

# 单文本嵌入
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="人工智能正在改变我们的生活方式"
)

embedding = response.data[0].embedding
print(f"向量维度: {len(embedding)}")
print(f"前5个值: {embedding[:5]}")

# 批量嵌入
texts = [
    "机器学习是人工智能的一个分支",
    "深度学习使用神经网络处理数据",
    "今天的天气很好,适合出门散步"
]

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=texts
)

for i, data in enumerate(response.data):
    print(f"文本 {i}: 向量维度 {len(data.embedding)}")

Node.js

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'your-api-key',
  baseURL: 'https://claude4u.com/v1'
});

const response = await client.embeddings.create({
  model: 'text-embedding-3-small',
  input: ['第一段文本', '第二段文本']
});

console.log(`共 ${response.data.length} 个向量`);
console.log(`维度: ${response.data[0].embedding.length}`);

计算文本相似度

import numpy as np
from openai import OpenAI

client = OpenAI(
    api_key="your-api-key",
    base_url="https://claude4u.com/v1"
)

def get_embedding(text):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

def cosine_similarity(a, b):
    a, b = np.array(a), np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 计算相似度
texts = {
    "query": "如何学习编程",
    "doc1": "Python 是入门编程的最佳语言",
    "doc2": "今天的股市行情如何",
    "doc3": "编程入门教程推荐"
}

query_emb = get_embedding(texts["query"])
for key in ["doc1", "doc2", "doc3"]:
    doc_emb = get_embedding(texts[key])
    sim = cosine_similarity(query_emb, doc_emb)
    print(f"{key}: {texts[key]} => 相似度: {sim:.4f}")

构建 RAG 检索系统

class SimpleRAG:
    def __init__(self, client):
        self.client = client
        self.documents = []
        self.embeddings = []

    def add_documents(self, docs):
        """添加文档到知识库"""
        response = self.client.embeddings.create(
            model="text-embedding-3-small",
            input=docs
        )
        self.documents.extend(docs)
        self.embeddings.extend([d.embedding for d in response.data])

    def search(self, query, top_k=3):
        """搜索最相关的文档"""
        query_emb = self.client.embeddings.create(
            model="text-embedding-3-small",
            input=query
        ).data[0].embedding

        similarities = [
            cosine_similarity(query_emb, doc_emb)
            for doc_emb in self.embeddings
        ]

        top_indices = np.argsort(similarities)[-top_k:][::-1]
        return [(self.documents[i], similarities[i]) for i in top_indices]

    def ask(self, question):
        """RAG 问答"""
        results = self.search(question)
        context = "\n".join([doc for doc, _ in results])

        response = self.client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": f"根据以下知识库内容回答问题:\n\n{context}"},
                {"role": "user", "content": question}
            ]
        )
        return response.choices[0].message.content

# 使用示例
rag = SimpleRAG(client)
rag.add_documents([
    "轻舟 AI 支持 OpenAI、Claude、Gemini 等多个模型的 API 中转",
    "API Key 以 cr_ 为前缀,在管理后台创建",
    "支持流式输出和 Function Calling"
])
answer = rag.ask("如何获取 API Key?")
print(answer)
提示:通过 claude4u.com 轻舟 AI 中转服务调用 Embedding API,与 Chat API 使用同一个 Key,无需额外配置。对于大规模 Embedding 任务,中转服务的多账户机制可以有效提升吞吐量。

优化建议

注意:Embedding 模型有输入长度限制(约 8191 token)。对于长文档,建议先分段切割(如按 500 字一段),分别生成向量后进行检索。

Start Using 轻舟 AI

Stable, fast AI API relay — supports Claude, OpenAI, Gemini and more

Sign Up Now