Skip to main content

ai_lib_rust/embeddings/
mod.rs

1//! 向量嵌入模块:提供文本嵌入生成和向量相似度计算功能。
2//!
3//! # Embeddings Module
4//!
5//! This module provides comprehensive embedding support for AI models, enabling
6//! semantic similarity comparisons and vector-based operations.
7//!
8//! ## Overview
9//!
10//! Embeddings are numerical vector representations of text that capture semantic
11//! meaning, enabling:
12//! - Semantic search and similarity matching
13//! - Document clustering and classification
14//! - Recommendation systems
15//! - Duplicate detection
16//!
17//! ## Key Features
18//!
19//! | Feature | Description |
20//! |---------|-------------|
21//! | **Embedding generation** | Generate embeddings via AI providers |
22//! | **Vector similarity** | Cosine, Euclidean, Manhattan, Dot product metrics |
23//! | **Vector operations** | Normalize, average, add, subtract, scale vectors |
24//! | **Similarity search** | Find most similar vectors in a collection |
25//!
26//! ## Components
27//!
28//! | Component | Description |
29//! |-----------|-------------|
30//! | [`EmbeddingClient`] | Client for generating embeddings from AI providers |
31//! | [`cosine_similarity`] | Cosine similarity between vectors (-1 to 1) |
32//! | [`euclidean_distance`] | Euclidean (L2) distance between vectors |
33//! | [`find_most_similar`] | Find top-k most similar vectors |
34//! | [`normalize_vector`] | Normalize vector to unit length |
35//!
36//! ## Example
37//!
38//! ```rust
39//! use ai_lib_rust::embeddings::{cosine_similarity, find_most_similar, SimilarityMetric};
40//!
41//! // Calculate similarity between two vectors
42//! let vec_a: Vec<f32> = vec![0.1, 0.2, 0.3];
43//! let vec_b: Vec<f32> = vec![0.15, 0.25, 0.35];
44//! let similarity = cosine_similarity(&vec_a, &vec_b).unwrap();
45//! println!("Similarity: {:.4}", similarity);
46//!
47//! // Find most similar vectors in a collection
48//! let query: Vec<f32> = vec![0.5, 0.5, 0.0];
49//! let candidates: Vec<Vec<f32>> = vec![
50//!     vec![0.5, 0.5, 0.0],
51//!     vec![0.0, 0.0, 1.0],
52//! ];
53//! let results = find_most_similar(&query, &candidates, 1, SimilarityMetric::Cosine).unwrap();
54//! ```
55//!
56//! ## Metrics Comparison
57//!
58//! | Metric | Range | Best For |
59//! |--------|-------|----------|
60//! | Cosine | -1 to 1 | Semantic similarity (direction) |
61//! | Euclidean | 0 to ∞ | Absolute positioning |
62//! | Dot Product | -∞ to ∞ | Magnitude-sensitive comparison |
63//! | Manhattan | 0 to ∞ | Sparse vectors, grid distances |
64
65mod client;
66mod types;
67mod vectors;
68
69pub use client::{EmbeddingClient, EmbeddingClientBuilder};
70pub use types::{
71    Embedding, EmbeddingInput, EmbeddingModel, EmbeddingRequest, EmbeddingResponse, EmbeddingUsage,
72};
73pub use vectors::{
74    add_vectors, average_vectors, cosine_similarity, dot_product, euclidean_distance,
75    find_most_similar, magnitude, manhattan_distance, normalize_vector, scale_vector,
76    subtract_vectors, weighted_average_vectors, SimilarityMetric, SimilarityResult, Vector,
77};