用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)
相关推荐
毋语天4 小时前
FastAPI 网络编程入门到实战:从 HTTP 协议到异步 API 开发
python·网络编程·fastapi·rest api·异步编程
编程牛马姐4 小时前
2026年Reddit养号指南:养号四个阶段实操
python·spring·intellij-idea
星浩AI4 小时前
(四)Hugging Face 与魔搭实战:模型下载、API 调用与本地推理
人工智能·深度学习·llm
不懒不懒4 小时前
Python+AI 大模型实现课堂教学质量智能分析|加权评分 + 自动诊断 + 改进建议
人工智能·python·深度学习·ai大模型·智慧教育·nlp算法
小新同学^O^4 小时前
OpenClaw 数据采集工具新手入门指南
python·学习·openclaw·纯ai文
爱喝水的木子5 小时前
提取html到markdown
人工智能·python
weelinking5 小时前
【claude】15_Claude使用经验与最佳实践
前端·人工智能·python·sql·数据挖掘·前端框架·github
徐安安ye5 小时前
FlashAttention 算子深度解析:让大模型在昇腾NPU上跑得更快
python·transformer
山屿落星辰5 小时前
cann-tools - 昇腾CANN 工具集使用指南
人工智能·pytorch·python