用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)
相关推荐
belldeep2 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
benchmark_cc3 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
我真会写代码5 小时前
LangChain 从0入门:模型、消息、Prompt、Tools、记忆、Agent与LangSmith实战
langchain·prompt
别问!问就是全会6 小时前
Jupyter Notebook 安装包下载|单元格分块运行,图表直接内嵌
ide·python·其他·jupyter
深蓝AI7 小时前
Python 缓存击穿实测:16 个并发请求如何只回源 1 次
python
benchmark_cc7 小时前
用 00700.HK 做港股行情清洗:字段核对、校验与个人量化开发实践
python·数据分析·pandas·量化交易·股票数据·quantdash