1. 嵌入(Embeddings)
API接口文档
  • 更新日志
  • 介绍
  • 稳定性保障
  • 模型接口
    • 谷歌gemini
      • 聊天
        • 文本生成
        • 文本生成-流式
        • 文本生成-流式-思考
      • 图像
        • 图片生成-文生图
        • 图片生成-图生图-传入base64编码
        • 图片生成-图生图-控制长宽比
        • 图片生成-图生图-控制长宽比和分辨率
        • 图片生成-依托 Google 图片搜索生成图片
        • 图片编辑
        • 图片理解
      • 语音
        • Gemini-音频理解
        • 文字转语音-单人
        • 文字转语音-多人
      • 文档
        • 文档理解
      • 工具
        • 函数调用
        • 代码执行
        • Google Search
        • Google Maps
        • URL context
      • 视觉& Veo
        • 视频生成
        • 视频理解
      • 嵌入(Embeddings)
        • Embeddings
    • Claude
      • 聊天
        • 聊天对话
        • 思考
      • 图片
        • 图片理解-本地图片
        • 图片理解-URL图片
      • 文档
        • PDF文档识别-URL文档
        • PDF文档识别 -本地文档
      • 工具
        • 函数调用
    • OpenAI
      • 聊天
        • 聊天对话
      • 图片
        • 图片识别-传入url
        • 图片识别-本地图片
        • gpt-图像编辑
        • gpt-文本生图
      • 视频
        • Sora-视频生成官方格式
      • 语音
        • TTS-文本转语音
      • 使用工具
        • 网络搜索
    • 可灵
      • 图像生成
      • 文生视频
      • 图生视频
      • 查询任务
    • MJ图像
      • 快速教学
      • 切换不同的速度
      • 任务提交
        • 提交Imagine
        • 执行Action任务
        • 提交Describe任务
        • 提交Blend任务
      • 任务查询
        • 查询所有任务
        • 根据ID列表查询任务
        • 指定ID获取任务
        • 获取任务图片的seed
    • xAI
      • 聊天
        • 文本生成
        • 流式输出
        • 思维Reasoning
      • 图片
        • 图片理解
        • 图片生成
      • 视频
        • 视频生成
      • 语音
        • 文字生成语音
      • 工具
        • 函数调用
        • 网络搜索
    • minimax
      • MiniMax概述
    • 模型(Models)
      • 列出模型
    • 小米mimo
      • 模型超参
      • 对话
        • openai格式
        • Anthropic API格式
      • 图片
        • 图片理解
        • 图片传入方式
        • 图片限制
      • 视频
        • 视频理解
  • 常见错误
    • Unexpected role "tool". Allowed roles are "user" or "assistant". For instructions on how to use tools
    • This model is not supported by Responses API.
    • 403 Forbidden {"message":"用户额度不足, 剩余额度: $-1.74
    • The model is overloaded. Please try again later
    • No available channel for model
    • API接口返回HTTP 状态码及其含义
  1. 嵌入(Embeddings)

Embeddings

Gemini API 提供嵌入模型,用于为文本、图片、视频和其他内容生成嵌入。然后,这些生成的嵌入可用于语义搜索、分类和聚类等任务,与基于关键字的方法相比,可提供更准确、更贴合情境的结果。
最新模型 gemini-embedding-2-preview 是 Gemini API 中的首个多模态嵌入模型。它将文本、图片、视频、音频和文档映射到统一的嵌入空间中,从而能够以 100 多种语言进行跨模态搜索、分类和聚类。如需了解详情,请参阅多模态嵌入部分。对于纯文本用例,gemini-embedding-001 仍然可用。
构建检索增强生成 (RAG) 系统是 AI 产品的一种常见使用场景。嵌入在显著提升模型输出方面发挥着关键作用,可提高事实准确性、连贯性和上下文丰富度。如果您更喜欢使用托管式 RAG 解决方案,我们构建了文件搜索工具,可让 RAG 更易于管理且更具成本效益。

生成嵌入#

使用 embedContent 方法生成文本嵌入:
import requests
import json

BASE_URL = "https://"
API_KEY = "sk-"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

# ============================================================
# 使用 requests 调用 embedding 接口
# ============================================================

content = "What is the meaning of life?"

# 尝试多种端点和请求格式
endpoints_and_payloads = [
    # 格式1: OpenAI 兼容格式 /v1/embeddings
    (
        f"{BASE_URL}/v1/embeddings",
        {
            "model": "gemini-embedding-001",
            "input": content
        }
    ),
    # 格式2: 单字符串 input
    (
        f"{BASE_URL}/v1/embeddings",
        {
            "model": "gemini-embedding-001",
            "input": [content]
        }
    ),
    # 格式3: Google API 风格 embed_content
    (
        f"{BASE_URL}/v1/models/gemini-embedding-001:embedContent",
        {
            "content": {
                "parts": [{"text": content}]
            }
        }
    ),
]

result = None

for endpoint, payload in endpoints_and_payloads:
    print(f"尝试端点: {endpoint}")
    print(f"请求体: {json.dumps(payload, indent=2)}")

    try:
        resp = requests.post(endpoint, headers=headers, json=payload, timeout=30)
        print(f"  状态码: {resp.status_code}")
        print(f"  响应: {resp.text[:800]}")

        if resp.status_code == 200:
            result = resp.json()
            print(f"  ✓ 请求成功!")
            break
        else:
            print(f"  ✗ 失败,尝试下一个格式\n")
    except Exception as e:
        print(f"  异常: {e}\n")

if result is None:
    print("\n❌ 所有端点均失败")
    exit(1)

# ============================================================
# 提取 embedding 向量
# ============================================================
print("\n" + "=" * 60)
print("Embedding 结果:")
print("=" * 60)

embeddings = None

# OpenAI 格式: data[0].embedding
data_list = result.get("data", [])
if data_list and isinstance(data_list, list):
    item = data_list[0]
    if isinstance(item, dict) and "embedding" in item:
        embeddings = item["embedding"]

# Google 格式: embedding.values
if embeddings is None:
    emb_obj = result.get("embedding", {})
    if isinstance(emb_obj, dict) and "values" in emb_obj:
        embeddings = emb_obj["values"]

# Google 批量格式: embeddings[0].values
if embeddings is None:
    emb_list = result.get("embeddings", [])
    if isinstance(emb_list, list) and len(emb_list) > 0:
        item = emb_list[0]
        if isinstance(item, dict) and "values" in item:
            embeddings = item["values"]
        elif isinstance(item, list):
            embeddings = item

# 直接是列表
if embeddings is None and isinstance(result.get("embedding"), list):
    embeddings = result["embedding"]

if embeddings:
    print(f"向量维度: {len(embeddings)}")
    print(f"前10维: {embeddings[:10]}")
    print(f"完整向量: {embeddings}")
else:
    print("无法提取 embedding,完整响应:")
    print(json.dumps(result, indent=2))
修改于 2026-03-12 10:09:26
上一页
视频理解
下一页
聊天对话
Built with