Embedding 入门一、Embedding 是什么把一段文字转成一个数字向量一长串浮点数例如今天天气很好 → [0.12, -0.34, 0.56, ..., 0.08] # 通常几百几千维 外面阳光明媚 → [0.11, -0.31, 0.58, ..., 0.09] # 意思相近向量也接近 Python 怎么读文件 → [-0.45, 0.22, -0.11, ..., 0.33] # 完全不同的话题要点概念说明向量一串有序数字可理解为文字在「语义空间」里的坐标维度向量长度如 768、1024、1536由模型决定语义相近意思越像向量越接近与 Chat 的区别Chat 输出文字Embedding 输出数字不做对话二、为什么 Agent 需要 Embedding Embedding 是「在海量文本里按语义找最相关片段」Agent 需要它Agent 要在大量外部资料里找上下文离不开它。RAG检索增强生成 的大致流程你的文档切成小段每段转成向量存入向量库用户提问问题也转成向量找最相似的文档段把文档段塞进 Prompt模型基于真实资料回答和 RAG 的关系Embedding → 文本变向量能算语义相似度 ↓ 向量检索 → 从大量文档中找出 Top-K 最相关片段 ↓ RAG → 检索到的片段 用户问题 → 交给 LLM 生成答案 ↓ Agent → 把 RAG 当作一种能力嵌入 ReAct 工具循环里所以Agent 要做知识检索 → 检索靠语义相似度 → 相似度靠 Embedding三、怎么衡量语义相似度—— 余弦相似度两个向量越接近余弦相似度越高相似度含义接近 1.0非常相似接近 0几乎无关负数语义相反较少见公式本课用纯 Python 实现不装 numpycosine_similarity(A, B) (A·B) / (|A| × |B|) dot sum(a * b for a, b in zip(vec_a, vec_b)) # 点积 norm_a math.sqrt(sum(a * a for a in vec_a)) # vec_a 每个元素平方再求和再开根号 → 向量长度 norm_b math.sqrt(sum(b * b for b in vec_b)) # vec_b 的长度zip 把两个列表按位置配对vec_a [1, 2, 3] vec_b [4, 5, 6] list(zip(vec_a, vec_b)) # [(1, 4), (2, 5), (3, 6)]即点积 ÷ 两个向量长度的乘积。四、Embedding API 怎么调和 Chat API 同属 OpenAI SDK但走的是 embeddings 接口clientOpenAI(api_keyembedding_api_key,base_urlembedding_base_url)responseclient.embeddings.create(model你的-embedding-模型名,input今天天气很好,# 也可以传 list一次嵌入多句)vectorresponse.data[0].embedding# list[float]这就是向量print(len(vector))# 打印维度如 1024响应结构response ├── data[0] │ ├── embedding ← 你要的向量 [0.12, -0.34, ...] │ └── index ← 在 input 列表中的位置 ├── model ← 实际使用的模型 └── usage └── total_tokens五、重要Embedding 和 Chat 往往是两套服务# Chat 配置 LLM_API_KEY你的密钥 LLM_BASE_URLhttps://api.deepseek.com LLM_MODELdeepseek-chat # Embedding 配置 EMBEDDING_API_KEY你的embedding密钥 EMBEDDING_BASE_URLhttps://api.siliconflow.cn/v1 EMBEDDING_MODELBAAI/bge-large-zh-v1.5