Eino组件Embedding详解[代码]

Eino组件Embedding详解[代码]package main import context fmt log github com cloudwego eino ext components embedding openai github

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。

package main

import (

"context" "fmt" "log" "github.com/cloudwego/eino-ext/components/embedding/openai" "github.com/cloudwego/eino/components/embedding" 

)

func main() {

ctx := context.Background() // 配置参数 defaultDim := 3072 accessKey := "your-api-key" // 替换为你的 API Key // 1. 创建 embedder embedder, err := openai.NewEmbedder(ctx, &openai.EmbeddingConfig{ APIKey: accessKey, Model: "text-embedding-3-large", Dimensions: &defaultDim, Timeout: 0, }) if err != nil { log.Fatal("创建 embedder 失败:", err) } // 2. 准备测试文本 texts := []string{ "退款怎么申请", "如何退钱操作", "今天天气不错", "修改收货地址的方法", "订单下完以后地址还能改吗", } // 3. 调用 EmbedStrings 生成向量 vectors, err := embedder.EmbedStrings(ctx, texts) if err != nil { log.Fatal("生成向量失败:", err) } // 4. 输出结果 fmt.Println("=== Embedding 演示结果 ===") fmt.Printf("生成了 %d 个向量 

", len(vectors))

fmt.Printf("每个向量维度:%d 

", len(vectors[0]))

// 显示前两个向量的前 10 个值(完整向量太长) for i, vector := range vectors { fmt.Printf("文本 %d: "%s" 

", i+1, texts[i])

 fmt.Printf("向量前 10 个值:%.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f... 

",

 vector[0], vector[1], vector[2], vector[3], vector[4], vector[5], vector[6], vector[7], vector[8], vector[9]) fmt.Println() } // 5. 演示相似度计算(余弦相似度) fmt.Println("=== 文本相似度计算 ===") calculateSimilarity(texts, vectors) 

}

// calculateSimilarity 计算文本之间的余弦相似度 func calculateSimilarity(texts []string, vectors [][]float64) {

pairs := []struct { i, j int }{ {0, 1}, // "退款怎么申请" vs "如何退钱操作" {0, 2}, // "退款怎么申请" vs "今天天气不错" {3, 4}, // "修改收货地址的方法" vs "订单下完以后地址还能改吗" } for _, pair := range pairs { similarity := cosineSimilarity(vectors[pair.i], vectors[pair.j]) fmt.Printf(""%s" vs "%s" 

", texts[pair.i], texts[pair.j])

 fmt.Printf("相似度:%.4f (越接近 1 表示越相似) 

", similarity)

} 

}

// cosineSimilarity 计算两个向量的余弦相似度 func cosineSimilarity(a, b []float64) float64 {

var dotProduct, normA, normB float64 for i := range a { dotProduct += a[i] * b[i] normA += a[i] * a[i] normB += b[i] * b[i] } normA = sqrt(normA) normB = sqrt(normB) if normA == 0 || normB == 0 { return 0 } return dotProduct / (normA * normB) 

}

func sqrt(x float64) float64

z := x for i := 0; i < 10; i++ { z = (z + x/z) / 2 } return z 

}

小讯
上一篇 2026-03-28 14:22
下一篇 2026-03-28 14:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/249785.html