用langchain 通过text-embedding-3-small生成embedding

OpenAIEmbedding介绍

OpenAIEmbedding提供了两个主要方法:

  • embed_query: 用于生成单个查询文本的向量(通常用于搜索时的查询端)。
  • embed_documents: 用于批量生成多个文档文本的向量(通常用于构建知识库时的文档端)。

实现步骤

    1. 申请openai的key
    1. 安装langchain
    1. 构建生成embedding的json格式的文档
    1. 调用模型生成embedding

具体代码

批量生成向量

python 复制代码
from langchain_openai import OpenAIEmbeddings
from app.config import EnvConfig
from common.Logger import getLogger
logger = getLogger("embedding_generator.py")

def bulk_generate_user_embedding(documents:list[str]):
    """
    :param documents: 生成用于生成embeddings的结构化文档
    :return: 返回批量生成的向量列表
    """
    api_key = EnvConfig.OPENAI_API_KEY
    openai_api_base = EnvConfig.OPENAI_API_BASE
    if not api_key or not openai_api_base:
        logger.error("未找到 OPENAI_API_KEY 环境变量。")
        return None

    # 2. 初始化模型
    # model: 指定模型名称,如 'text-embedding-3-small'
    # temperature: 控制输出的随机性,0 为最确定,1 为最随机
    embeddings = OpenAIEmbeddings(
        model="text-embedding-3-small",
        api_key=api_key,
        openai_api_base = openai_api_base
    )

    # 4. 批量生成文档向量
    doc_vectors = embeddings.embed_documents(documents)
    print(f"\n生成了 {len(doc_vectors)} 个文档向量")

    if len(doc_vectors)>0:
        print(f"每个向量维度: {len(doc_vectors[0])}")

    return doc_vectors

生成单个向量

python 复制代码
def generate_user_embedding(query_text:str):
    """
    :param query_text: 准备的格式化JSON文件
    :return:
    """
    api_key = EnvConfig.OPENAI_API_KEY
    openai_api_base = EnvConfig.OPENAI_API_BASE
    if not api_key or not openai_api_base:
        logger.error("未找到 OPENAI_API_KEY 环境变量。")
        return None


    # 2. 初始化模型
    # model: 指定模型名称,这里用 'text-embedding-3-small'
    # temperature: 控制输出的随机性,0 为最确定,1 为最随机
    embeddings = OpenAIEmbeddings(
        model="text-embedding-3-small",
        api_key=api_key,
        openai_api_base = openai_api_base
    )


    # 3. Embedding查询
    query_vector = embeddings.embed_query(query_text)
    logger.debug(f"查询向量维度: {len(query_vector)}")
    logger.debug(f"查询向量前5个值: {query_vector[:5]}")
    return query_vector

生成的构建化文档方法如下

python 复制代码
def build_profile_text(profile) -> str:
    """构建用于向量化的结构化文本"""
    parts = [
        f"角色: {profile.role}",
        f"岗位: {profile.title}",
        f"介绍: {profile.bio}",
        f"行业: {profile.industry_tags}",
        f"城市: {profile.city}",
        f"技能: {profile.skill_tags}"
    ]
    return " | ".join(parts)
相关推荐
VidDown2 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
slacker-kian3 小时前
[实践]-用LLM对文本结构化:把多段文本描述变成规范的 JSON 知识库
人工智能·llm·prompt·结构化·pydantic·one-shot 提示
死磕音视频3 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook5 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺6 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
用户21296835261686 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
程序员大狐狸6 小时前
Ultra X7 358H 笔记本电脑,本地三个大模型编程能力、速度、上下文全面对比与选型报告
llm·ai编程
Skylar__6 小时前
从 Beam 到 Muse:一个开发者视角的 AI 模型选型决策地图
llm