langchain 认识embeddings (用于生成向量) 及阿里云deepseek如何embedding

 1. OpenAIEmbeddings vs. ChatOpenAI

组件 作用 输入 输出 主要用途
OpenAIEmbeddings 生成文本的向量表示(embedding) 文本字符串 数字向量(list of floats) 用于向量搜索、RAG、语义搜索
ChatOpenAI / init_chat_model 基于 OpenAI LLM 进行文本生成 问题或 Prompt 生成的文本(字符串) 问答、聊天机器人、文本摘要、代码生成
from langchain_openai import OpenAIEmbeddings  

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")  

这里的 text-embedding-3-large 是 OpenAI 最新的嵌入模型,生成高维度的文本向量

以下例子把文本转成1536个维度的向量

text = "LangChain is a powerful framework f
<think> 我们使用LangChain和Redis构建一个文档向量存储系统。步骤如下: 1. 加载文档(这里假设使用文本文件) 2. 分割文档(使用文本分割器) 3. 使用嵌入模型生成向量(比如OpenAI的embedding) 4. 将向量和文档存储到Redis中 注意:需要安装必要的库,如langchain, redis, openai等。 我们将按照以下步骤编写代码: - 设置环境变量(例如OPENAI_API_KEY) - 创建文档加载器(这里使用TextLoader作为示例) - 使用文本分割器(如RecursiveCharacterTextSplitter) - 初始化嵌入模型(如OpenAIEmbeddings) - 初始化Redis向量数据库(使用Redis作为向量存储) 代码示例: """ 注意:以下代码需要根据实际情况调整,比如Redis的连接信息、文档路径等。 """ import os from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Redis # 设置环境变量,例如OpenAI的API密钥 os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # 1. 加载文档 loader = TextLoader("your_document.txt") # 替换为你的文档路径 documents = loader.load() # 2. 分割文档 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents) # 3. 初始化嵌入模型 embeddings = OpenAIEmbeddings() # 4. 将文档和向量存储到Redis # 注意:需要提前启动Redis服务器,并确保redis-py库已安装 # 连接Redis的参数:例如redis_url="redis://localhost:6379" # 索引名称(index_name)可以自定义 redis_url = "redis://localhost:6379" index_name = "my_index" # 将分割后的文档和对应的向量添加到Redis db = Redis.from_documents( docs, embeddings, redis_url=redis_url, index_name=index_name ) # 这样,向量就已经存储到Redis中了 # 如果需要后续使用,可以这样初始化一个Redis向量数据库对象 # db = Redis.from_existing_index(embeddings, redis_url=redis_url, index_name=index_name) print("向量已成功存储到Redis数据库中。") """ 请注意: 1. 确保Redis服务器正在运行。 2. 替换`your_document.txt`为你的文档路径。 3. 替换`your-openai-api-key`为你的OpenAI API密钥。 以上代码完成了将文档分割、生成向量并存储到Redis的过程。 §§相关问题§§ 1. 如何处理多种格式的文档(如PDF、Word)而不只是文本文件? 2. 如何调整文本分割的参数(如块大小和重叠大小)以优化向量表示? 3. 除了OpenAI的嵌入模型,LangChain还支持哪些嵌入模型? 4. 如何从Redis中检索相似文档? 5. 在Redis中存储向量时,索引的配置参数有哪些需要注意的地方? </think> 以下是使用Python + LangChain + Redis实现文档分割、向量生成与存储的完整代码: ```python import os from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Redis from langchain.schema import Document # 环境配置(需替换为实际值) os.environ["OPENAI_API_KEY"] = "sk-your-openai-key" REDIS_URL = "redis://localhost:6379" INDEX_NAME = "docs_index" def process_document(file_path: str): """文档处理与向量存储流水线""" # 1. 加载文档 loader = TextLoader(file_path, encoding='utf-8') raw_document = loader.load()[0] # 获取第一个文档对象 # 2. 文档分割 text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, # 每个分块最大字符数 chunk_overlap=50, # 分块间重叠字符 separators=["\n\n", "\n", "。", "!", "?"] # 中文分割符 ) chunks = text_splitter.split_documents([raw_document]) # 3. 生成嵌入向量 embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") # 4. 存储到Redis Redis.from_documents( documents=chunks, embedding=embeddings, index_name=INDEX_NAME, redis_url=REDIS_URL ) print(f"✅ 成功存储 {len(chunks)} 个分块到Redis索引 {INDEX_NAME}") # 使用示例 if __name__ == "__main__": process_document("path/to/your_document.txt") # 替换为实际文件路径 ``` ### 关键组件说明: 1. **文档加载器**:`TextLoader` 支持.txt文件(其他格式需使用`PyPDFLoader`/`Docx2txtLoader`) 2. **中文分割器**:通过`separators`参数优化中文文本分割 3. **向量模型**:使用OpenAI的text-embedding-ada-002生成嵌入向量 4. **Redis配置**: - 需提前安装Redis服务(`docker run -p 6379:6379 redis/redis-stack-server:latest`) - 索引自动创建在RedisSearch中 ### 依赖安装: ```bash pip install langchain openai redis tiktoken ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值