OpenAI 实战进阶教程 - 第十节 : 结合第三方工具的向量数据库Pinecone
面向读者群体
本节课程主要面向有一定编程基础和数据处理经验的计算机从业人员,如后端开发工程师、数据工程师以及对 AI 应用有浓厚兴趣的技术人员。即使你之前没使用过向量数据库,也可以通过本节的实操内容快速上手,为企业或个人项目构建强大的智能问答或信息检索系统。
为什么要采用向量数据库技术?解决了什么问题?
在上一节我们已经介绍了 Embedding(嵌入向量)的概念:将文本、图片等信息转化成向量形式,以便进行相似度计算。当数据量较小或问题单一时,直接将嵌入向量存成文件,再在内存中进行搜索就够用了。但一旦数据量庞大(如上万、几十万条文档),仅靠内存检索就会遇到以下问题:
- 检索速度变慢:当数据量巨大时,简单的线性搜索耗时较长,且占用大量内存。
- 难以维护和扩展:手动管理嵌入向量文件不便于多用户并发访问、更新或删除数据。
- 缺少高可用、高并发支持:需要可扩展的分布式服务来支撑海量数据与高频访问。
向量数据库(如 Pinecone、Weaviate 等)为此提供了解决方案:
- 支持大规模数据存储,可处理数百万甚至更多的向量。
- 高效相似度检索,内置优化索引结构。
- API 级别的读写操作,方便集成到各种应用场景中。
原理与概念简明说明
- Embedding 向量:将文本(或图片等)转化为高维向量表示。
- 向量数据库:将海量嵌入向量存储在分布式、高可用的系统中,并提供搜索与管理 API。
- 检索过程:当用户查询一个问题时,先将查询问题转成向量,然后在向量数据库中检索最相似的向量条目,找到可能的上下文或答案。
在此基础上,再结合 GPT 等大语言模型,就可以构建检索增强生成 (RAG) 系统,通过先检索、再生成的方式,得到更加精准的回答。
实操:将嵌入向量存储在 Pinecone 中,并结合 GPT 生成响应
以下以 Pinecone 为例演示整个流程。你也可以选择 Weaviate 或其他向量数据库,核心步骤类似。
1. 注册并配置 Pinecone
- 在 Pinecone 官网 注册账户,获取 API Key。
- 创建一个 Index(索引),配置相应维度(与 Embedding 模型输出的维度一致,如
text-embedding-ada-002模型输出 1536 维)。
2. 准备待存储的数据
以 FAQ 为例,假设我们有如下几条问答:
Q: 贵公司支持退货吗?
A: 我们支持30天内无理由退货,请保留好购买凭证。Q: 标准配送需要多久?
A: 标准配送一般需要5到7个工作日。Q: 如何联系客户服务?
A: 您可以拨打400-xxxx-xxxx或发送邮件至support@example.com。
3. 生成并上传嵌入向量到 Pinecone
import openai
from pinecone import Pinecone, Index, ServerlessSpec# 设置 OpenAI 的 API Key,用于生成 Embedding
openai.api_key = "Your_API_Key"# 1. 实例化 Pinecone 对象
# environment 对应你在 Pinecone 控制台上设置的区域,如 "us-east1-gcp"
pc = Pinecone(api_key="Your_API_Key",environment="us-east-1"
)# 2. 如果还没有索引,就创建一个;如果已有,可以直接获取。
index_name = "my-faq-index"# 列出已存在的索引
index_list = pc.list_indexes().names()
print("当前已有索引:", index_list)if index_name not in index_list:print(f"索引 {index_name} 不存在,即将创建...")# dimension = 1536 与 text-embedding-ada-002 模型输出保持一致pc.create_index(name=index_name,dimension=1536,metric='cosine',spec=ServerlessSpec(cloud='aws',region='us-east-1'))
else:print(f"索引 {index_name} 已存在。")# 3. 获取索引对象
# To get the unique host for an index,
# see https://docs.pinecone.io/guides/data/target-an-index
index = pc.Index(host="INDEX_HOST")# 4. 构造 FAQ 数据
faq_data = [{"id": "1", "question": "贵公司支持退货吗?", "answer": "我们支持30天内无理由退货,请保留好购买凭证。"},{"id": "2", "question": "标准配送需要多久?", "answer": "标准配送一般需要5到7个工作日。"},{"id": "3", "question": "如何联系客户服务?", "answer": "您可以拨打400-xxxx-xxxx或发送邮件至support@example.com。"}
]# 5. 生成 Embedding 并批量 upsert 到 Pinecone
upserts = []
for item in faq_data:response = openai.embeddings.create(model="text-embedding-ada-002",input=item["question"])vector = response.data[0].embeddingupserts.append((item["id"], vector, {"question": item["question"], "answer": item["answer"]}))# 6. 批量 upsert 向量
index.upsert(vectors=upserts)
print("FAQ 数据已成功上传至 Pinecone!")
Pinecone控制台示例:

4. 通过 Pinecone API 检索数据并结合 GPT 生成响应
当用户输入问题时,可以先将问题向量化,然后在 Pinecone 中检索相似问题,再由 GPT 根据检索到的结果生成更准确的回答。
def get_answer_from_faq(user_question: str) -> str:"""根据用户输入,在 Pinecone 中检索最相关 FAQ,并使用 GPT 生成回答。"""# 1. 将用户问题转化为向量embedding_result = openai.embeddings.create(model="text-embedding-ada-002",input=user_question)user_vector = embedding_result.data[0].embedding# 2. 在 Pinecone 中检索相似 FAQquery_result = index.query(vector=user_vector,top_k=1,include_metadata=True)if query_result and query_result.matches:faq_match = query_result.matches[0].metadata# 3. 使用 GPT 生成自然语言回答prompt = f"用户的问题:{user_question}\n参考回答:{faq_match['answer']}\n请给出简明回复:"completion = openai.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}])return completion.choices[0].message.content.strip()else:return "抱歉,目前无法找到相关信息。"# 测试检索和回答
user_q = "请问怎么退货?"
response_text = get_answer_from_faq(user_q)
print("AI 回答:", response_text)
示例输出:
AI 回答: 您可以在30天内无理由退货,需要保留购买凭证。
工作原理
- 将用户问题转化为向量。
- 在 Pinecone 中检索最相似的 FAQ 数据。
- 使用 GPT(如
gpt-3.5-turbo)基于检索结果进行加工和回答。
小结与练习
通过向量数据库(Pinecone、Weaviate 等),我们能更高效地管理大规模嵌入向量,并快速检索最匹配的内容。再结合 GPT 模型生成自然语言回答,实现近乎“专业客服级”的问答体验。
练习:
-
扩展 FAQ 数据
- 添加更多常见问题,如退货流程、发票问题、会员折扣等。
- 上传并检索,观察在 Pinecone 中的查询效果。
-
结合更多业务场景
- 不是只有 FAQ,可以是产品文档、新闻文章、客户评价等内容。
- 将其嵌入向量化后,在检索到的上下文基础上让 GPT 生成总结或答案。
-
尝试 Weaviate
- 如果想对比不同向量数据库,可以尝试 Weaviate,查看其相似度搜索与 API 集成方式。
通过本节的学习,你将能搭建一个功能强大的问答或信息检索系统,适用于客服、知识管理、技术文档查阅等实际业务场景。
相关文章:
OpenAI 实战进阶教程 - 第十节 : 结合第三方工具的向量数据库Pinecone
面向读者群体 本节课程主要面向有一定编程基础和数据处理经验的计算机从业人员,如后端开发工程师、数据工程师以及对 AI 应用有浓厚兴趣的技术人员。即使你之前没使用过向量数据库,也可以通过本节的实操内容快速上手,为企业或个人项目构建强…...
深入Linux系列之进程地址空间
深入Linux系列之进程地址空间 1.引入 那么在之前的学习中,我们知道我们创建一个子进程的话,我们可以在代码层面调用fork函数来创建我们的子进程,那么fork函数的返回值根据我们当前所处进程的上下文是返回不同的值,它在父进程中返…...
AWK系统学习指南:从文本处理到数据分析的终极武器 介绍
目录 一、AWK核心设计哲学解析 1.1 记录与字段的原子模型 1.2 模式-动作范式 二、AWK编程语言深度解析 2.1 控制结构 说明: 2.2 关联数组 代码说明: 示例输入和输出: 注意事项: 2.3 内置函数库 三、高级应用技巧 3.1…...
250207-MacOS修改Ollama模型下载及运行的路径
在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…...
1、http介绍
一、HTTP 和 HTTPS 简介 HTTP(HyperText Transfer Protocol) 用途:用于网页数据传输(不加密)。协议特性:以明文形式传输数据,默认端口 80,无身份验证和完整性保护。典型场景…...
半导体行业跨网文件交换系统
在当今这个数字化转型的时代,半导体行业作为技术密集型产业,正面临着前所未有的信息安全挑战。随着企业内外网隔离措施的加强,如何实现既安全又高效的跨网文件交换,成为了众多半导体企业的一大难题。 特别是在研发和生产过程中产生…...
使用GD32F470的硬件SPI读写W25Q64
代码简单改下引脚定义便可以使用! 使用的单片机具体型号:GD32F470ZGT6 简单介绍下W25Q64: /* W25Q64 性能参数 */ /* 容量:8MByte 64Mbit */ /* 有128个块,每个块有64KByte */ /* 每个块有16个扇区,每个…...
02为什么 OD门和 OC门输出必须加上拉电阻?
为什么 OD(开漏)门和 OC(开集)门输出必须加上拉电阻? 1、首先一点,知道OD是说的MOS管,OC是说的三极管,二者的区别与联系大家应该都懂。 2、以OC门举例,芯片的OC门内部结…...
保姆级教程--DeepSeek部署
以DeepSeek-R1或其他类似模型为例,涵盖环境配置、代码部署和运行测试的全流程: 准备工作 1. 注册 Cloud Studio - 访问 [Cloud Studio 官网](https://cloudstudio.net/),使用腾讯云账号登录。 - 完成实名认证(如需长期使用…...
AI方案调研与实践 (不定期补充)
目录 说明 1. AI云主机准备 1.1 Ollama配置 设置模型保存路径 配置模型驻留内存时间 查看GPU状况命令: nvidia-smi 2. Deepseek 2.1 安装与使用 3. LobeChat配置 参考 说明 调研并实例化各种AI方案,探索训练/使用方式的最佳实践。 1. AI云主机准备 可以去一…...
人工智能大模型之模型蒸馏与知识蒸馏
一、背景介绍 随着人工智能技术的不断发展,大模型在各个领域的应用也越来越广泛。模型蒸馏(Model Distillation)和知识蒸馏(Knowledge Distillation)是两种非常重要的模型压缩技术,它们可以帮助我们将大型…...
[手机Linux] onepluse6T 系统重新分区
一,刷入TWRP 1. 电脑下载 Fastboot 工具(解压备用)和对应机型 TWRP(.img 后缀文件,将其放入前面解压的文件夹里) 或者直接这里下载:TWRP 2. 将手机关机,长按音量上和下键 开机键 进入 fastbo…...
k8s部署elasticsearch
前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式,参考我之前的文章:k8s部署rab…...
知识图谱智能应用系统:数据分析与挖掘技术文档
一、概述 在知识图谱智能应用系统中,数据分析与挖掘模块是实现知识发现和智能应用的核心环节。该模块负责处理和分析来自数据采集与预处理模块的结构化和半结构化数据,提取有价值的知识,并将其转化为可用于知识图谱构建和应用的三元组数据。本技术文档详细介绍了数据分析与…...
YAML中的`---`:文档分隔符
前言 YAML(YAML Ain’t Markup Language)是一种简洁且易于人类阅读的数据序列化标准,广泛用于配置文件、数据存储以及应用程序之间的数据交换。然而,对于许多初学者来说,YAML的一些特性可能不太直观,比如-…...
本地部署DeepSeek
下载Docker Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载安装ollama Download Ollama on macOS 下载完成后解压运行 终端输入 Ollama --version 输出对应版本号即为下载成功 如果没有弹出上述图片,浏览器输入http://localhos…...
21.[前端开发]Day21-HTML5新增内容-CSS函数-BFC-媒体查询
王者荣耀-网页缩小的问题处理 为什么会产生这个问题?怎么去解决 可以给body设置最小宽度 1 HTML5新增元素 HTML5语义化元素 HTML5其他新增元素 2 Video、Audio元素 HTML5新增元素 - video video支持的视频格式 video的兼容性写法 HTML5新增元素 - audio audio…...
nbmade-boot调用deepseek的api过程与显示
希望大家一起能参与我的新开源项目nbmade-boot: 宁波智能制造低代码实训平台 下面简单介绍调用最近大红的AI :deepseek的api过程与显示,包括前后端代码与效果图 一、后端代码 1、几个基础的java类 DeepSeekRequest .java package com.nbcio.demo.do…...
Linux:安装 node 及 nvm node 版本管理工具(ubuntu )
目录 方法一:手动下载安装文件安装方法二:curl安装 方法一:手动下载安装文件安装 git clone 远程镜像 git clone https://gitee.com/mirrors/nvm安装 nvm bash install.sh刷新配置,使配置在终端生效 // 方法 1 source /root/.…...
微服务日志查询难解决方案-EFK
前言 在微服务项目中,日志查询难是一个常见问题,主要原因包括:日志分散:微服务实例分布在多个节点或容器中,日志存储位置分散。格式不统一:不同服务可能使用不同的日志格式,难以统一查询。调用…...
【多线程-第三天-NSOperation和GCD的区别 Objective-C语言】
一、我们来看NSOperation和GCD的区别 1.我们来对比一下,NSOperation和GCD, 那这个代码,我们都写过了, 我们来看一下它们的特点啊,首先来看GCD, 1)GCD是C语言的框架,是iOS4.0之后推出的,并且它的特点是,针对多核做了优化,可以充分利用CPU的多核,OK,这是GCD, 2…...
【医院运营统计专题】2.运营统计:医院管理的“智慧大脑”
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 引言 在当今医疗行业快速发展的背景下,医院运营管理的科学性和有效性成为了决定医院竞争力和可持续发展能力的关键因素。运营统计作为医院管理的重要工具,通过对医院各类数据的收集、整理、分析和解读,为医…...
Ollama 部署 DeepSeek-R1 及Open-WebUI
Ollama 部署 DeepSeek-R1 及Open-WebUI 文章目录 Ollama 部署 DeepSeek-R1 及Open-WebUI〇、说明为什么使用本方案 一、 安装Ollama1、主要特点:2、安装3、验证 二、Ollama 部署 DeepSeek1、部署2、模型选用3、Ollama 常用命令4、Ollama模型默认存储路径 安装open-w…...
Docker 容器 Elasticsearch 启动失败完整排查记录
背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...
离线安装Appium Server
1、问题概述? 安装Appium通常有两种方式: 第一种:下载exe安装包,这种是Appium Server GUI安装方式,缺点是通过命令启动不方便。 第二种:通过cmd安装appium server,可以通过命令方式启动,比较方便。 问题:在没有外网的情况下,无法通过命令在cmd中安装appium server…...
Vite 打包原理
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
目前推荐的优秀编程学习网站与资源平台,涵盖不同学习方式和受众需求
一、综合教程与互动学习平台 菜鸟教程 特点:适合零基础新手,提供免费编程语言教程(Python、Java、C/C++、前端等),页面简洁且包含大量代码示例,支持快速上手。适用人群:编程入门者、需要快速查阅语法基础的学习者。W3Schools 特点:专注于Web开发技术(HTML、CSS、JavaS…...
【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
1 ollama 的安装与设置 ollama官网链接:https://ollama.com/ 在左上角的【Models】中展示了ollama支持的模型在正中间的【Download】中课可以下载支持平台中的安装包。 其安装和模型路径配置操作流程如下: ollama的安装 这里选择命令安装curl -fsSL …...
蓝桥杯---力扣题库第38题目解析
文章目录 1.题目重述2.外观数列举例说明3.思路分析(双指针模拟)4.代码说明 1.题目重述 外观数列实际上就是给你一串数字,我们需要对于这个数据进行一个简单的描述罢了; 2.外观数列举例说明 外观数列都是从1开始的,也…...
oCam:免费且强大的录屏软件
今天给大家推荐一个非常好的录屏软件。几乎可以满足你日常工作的需求。而且软件完全免费,没有任何的广告。 oCam:免费且强大的录屏软件 oCam是一款功能强大的免费录屏软件,支持屏幕录制、游戏录制和音频录制等多种模式,能够满足不…...
