1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//! Embedding(向量嵌入)抽象模块
//!
//! # 概述
//!
//! Embedding 用于将文本转换为向量表示,支持:
//! - 单条文本嵌入(embed)
//! - 批量文本嵌入(embed_batch)
//! - 维度查询(embedding_dim)
//!
//! 在 core 层,我们只定义抽象接口,不绑定具体实现。
//!
//! # 核心类型
//!
//! ## EmbeddingProvider trait
//!
//! [`EmbeddingProvider`] trait 定义了向量嵌入的接口:
//!
//! ```rust,no_run
//! use rucora_core::embed::EmbeddingProvider;
//! use rucora_core::error::ProviderError;
//! use async_trait::async_trait;
//!
//! # async fn example(provider: &dyn EmbeddingProvider) -> Result<(), ProviderError> {
//! // 单条嵌入
//! let vector = provider.embed("Hello, world!").await?;
//!
//! // 批量嵌入
//! let vectors = provider.embed_batch(&[
//! "Hello".to_string(),
//! "World".to_string(),
//! ]).await?;
//!
//! // 查询维度
//! if let Some(dim) = provider.embedding_dim() {
//! println!("向量维度:{}", dim);
//! }
//! # Ok(())
//! # }
//! ```
//!
//! # 使用示例
//!
//! ## 实现简单 Embedding Provider
//!
//! ```rust,no_run
//! use rucora_core::embed::EmbeddingProvider;
//! use rucora_core::error::ProviderError;
//! use async_trait::async_trait;
//!
//! struct SimpleEmbeddingProvider;
//!
//! #[async_trait]
//! impl EmbeddingProvider for SimpleEmbeddingProvider {
//! async fn embed(&self, text: &str) -> Result<Vec<f32>, ProviderError> {
//! // 实现嵌入逻辑(这里返回伪向量)
//! Ok(vec![0.1; 128])
//! }
//!
//! async fn embed_batch(&self, texts: &[String]) -> Result<Vec<Vec<f32>>, ProviderError> {
//! let mut vectors = Vec::with_capacity(texts.len());
//! for _ in texts {
//! vectors.push(self.embed("dummy").await?);
//! }
//! Ok(vectors)
//! }
//!
//! fn embedding_dim(&self) -> Option<usize> {
//! Some(128)
//! }
//! }
//! ```
//!
//! # 常见 Embedding Provider
//!
//! - OpenAI Embedding API
//! - Ollama Embedding
//! - Sentence Transformers(本地)
//! - 其他第三方服务
/// 重新导出 embed 相关 trait
pub use r#trait::*;