Mistral AI嵌入技术 | AI生成和翻译

Home 2025.02

要使用 Mistral AI 提供嵌入示例,您可以利用其嵌入 API 生成能捕捉语义的文本数值表示(嵌入)。这些嵌入可用于相似性检测、聚类、分类或搜索等任务。下面我将演示如何为一组句子生成嵌入,并使用 Mistral AI 嵌入端点计算它们的相似度。本示例基于所提供代码的结构,但根据文档专门针对嵌入功能进行了调整:Mistral AI 嵌入

准备工作

运行示例前请确保:

  1. API 密钥:有效的 Mistral AI API 密钥已存储在 MISTRAL_API_KEY 环境变量中
  2. 依赖项:已安装所需的 Python 包。可通过以下命令安装:
    pip install requests numpy
    

示例代码

以下是完整的 Python 脚本,可为三个句子生成嵌入并计算它们的成对相似度:

import os
import requests
import numpy as np

def call_mistral_embeddings_api(texts, model="mistral-embed"):
    """
    调用 Mistral AI 嵌入 API 为文本列表生成嵌入向量
    
    参数:
        texts (list): 要嵌入的字符串列表
        model (str): 使用的嵌入模型(默认为 "mistral-embed")
    
    返回:
        list: 嵌入向量列表,如果请求失败则返回 None
    """
    api_key = os.environ.get("MISTRAL_API_KEY")
    if not api_key:
        print("错误:未设置 MISTRAL_API_KEY 环境变量")
        return None
    
    url = "https://api.mistral.ai/v1/embeddings"
    headers = {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    data = {
        "model": model,
        "input": texts
    }
    
    try:
        response = requests.post(url, headers=headers, json=data)
        response.raise_for_status()
        response_json = response.json()
        if response_json and "data" in response_json:
            embeddings = [item["embedding"] for item in response_json["data"]]
            return embeddings
        else:
            print(f"Mistral 嵌入 API 错误:无效的响应格式:{response_json}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"Mistral 嵌入 API 错误:{e}")
        if e.response:
            print(f"响应状态码:{e.response.status_code}")
            print(f"响应内容:{e.response.text}")
        return None

def calculate_similarity(emb1, emb2):
    """
    使用点积计算两个嵌入向量之间的相似度
    
    参数:
        emb1 (list): 第一个嵌入向量
        emb2 (list): 第二个嵌入向量
    
    返回:
        float: 相似度得分(点积,对于归一化向量等同于余弦相似度)
    """
    return np.dot(emb1, emb2)

if __name__ == "__main__":
    # 要嵌入的示例文本
    texts = [
        "I love programming in Python.",
        "Python is a great programming language.",
        "The weather is sunny today."
    ]
    
    # 生成嵌入向量
    embeddings = call_mistral_embeddings_api(texts)
    if embeddings:
        # 打印嵌入维度
        print(f"嵌入维度:{len(embeddings[0])}")
        
        # 计算成对相似度
        sim_12 = calculate_similarity(embeddings[0], embeddings[1])
        sim_13 = calculate_similarity(embeddings[0], embeddings[2])
        sim_23 = calculate_similarity(embeddings[1], embeddings[2])
        
        # 显示结果
        print(f"\n相似度结果:")
        print(f"文本 1:'{texts[0]}'")
        print(f"文本 2:'{texts[1]}'")
        print(f"文本 3:'{texts[2]}'")
        print(f"\n文本 1 与文本 2 的相似度:{sim_12:.4f}")
        print(f"文本 1 与文本 3 的相似度:{sim_13:.4f}")
        print(f"文本 2 与文本 3 的相似度:{sim_23:.4f}")

运行方法

  1. 设置 API 密钥
    export MISTRAL_API_KEY="your_api_key_here"
    
  2. 保存并执行: 将脚本保存(如保存为 embedding_example.py)并运行:
    python embedding_example.py
    

预期输出

假设 API 调用成功,您将看到类似以下的输出(具体值取决于返回的嵌入向量):

嵌入维度:1024

相似度结果:
文本 1:'I love programming in Python.'
文本 2:'Python is a great programming language.'
文本 3:'The weather is sunny today.'

文本 1 与文本 2 的相似度:0.9200
文本 1 与文本 3 的相似度:0.6500
文本 2 与文本 3 的相似度:0.6700

说明

其他应用场景

Mistral AI 的嵌入向量除了相似度检测外,还可应用于:

注意事项

本示例提供了使用 Mistral AI 嵌入向量的实用介绍,通过更改端点和数据格式,可适应所提供的聊天补全代码结构。


Back Donate