【NLP】33. Pinecone + OpenAI :构建自定义语义搜索系统

Pinecone + OpenAI 中文教学教程:构建自定义语义搜索系统

一、背景介绍

当下 AI 问答系统、矩阵检索、短文本分类等场景中,都需要很好地实现 “根据输入进行相似给点搜索”。这种算法基础称为 “向量搜索”,它的核心是将文本转换为向量后,在向量空间里搜索最相似的项目。

Pinecone 是一种专业的向量数据库服务,支持高效的向量存储、检索和更新。


二、实验目标

体验 Pinecone 的基础操作:

  1. 建立一个向量索引
  2. 将自定义的文本输入转换为向量并 upsert 到 Pinecone
  3. 输入自然语言问题,搜索最相似文档

示例场景:“动物百科问答” 搜索系统


三、环境准备

pip install -qU \
  openai==0.27.7 \
  pinecone==3.0.0 \
  sentence-transformers==3.4.1 \
  tqdm

四、设置 API Key

在 Pinecone 和 OpenAI 帐号中获取 API Key,并填入如下代码:

pinecone_api_key = 'your-pinecone-key'
openai_api_key = 'your-openai-key'

五、初始化 Pinecone 并创建索引

import pinecone
pinecone.init(api_key=pinecone_api_key, environment='gcp-starter')

index_name = 'custom-animal-db'
if index_name not in pinecone.list_indexes():
    pinecone.create_index(index_name, dimension=1536)
index = pinecone.Index(index_name)

六、定义自定义文档

documents = [
    {"id": "doc1", "text": "老虎是一种主要生活在亚洲的肉食动物"},
    {"id": "doc2", "text": "大象是陆地上最大的动物,有长鼻和大耳朵"},
    {"id": "doc3", "text": "保龄羊是生活在欧洲高原的羊类动物"},
    {"id": "doc4", "text": "老鼠是一种常见小型动物,有很强的生存力"}
]

七、使用 OpenAI 生成向量

import openai
openai.api_key = openai_api_key

def get_embedding(text):
    resp = openai.Embedding.create(
        input=text,
        model="text-embedding-ada-002"
    )
    return resp['data'][0]['embedding']

八、将文档向量化并 upsert 到 Pinecone

for doc in documents:
    vec = get_embedding(doc['text'])
    index.upsert([(doc['id'], vec, {"text": doc['text']})])

九、进行搜索:按問题返回相似给点

query = "哪些动物有长鼻或低温生存力强?"
query_vec = get_embedding(query)

result = index.query(vector=query_vec, top_k=2, include_metadata=True)

for match in result["matches"]:
    print(f"Score: {match['score']:.2f}, Text: {match['metadata']['text']}")

### 关于 LangChain 的开发教程、示例和项目 LangChain 是一种用于构建基于大型语言模型的应用程序的框架,它提供了一系列工具来简化复杂任务的实现过程。以下是有关 LangChain 开发的内容总结: #### 1. **LangChain 中文文档** LangChain 的中文文档由社区维护,旨在为国内开发者提供更多便利的学习资源[^1]。该文档涵盖了从基础概念到高级功能的各种主题,并提供了详细的安装指南以及核心模块说明。 访问地址如下: ```plaintext https://gitcode.com/gh_mirrors/la/langchainzh ``` #### 2. **智能文档问答系统构建** 通过 LangChain 构建智能文档问答系统是一项常见的应用场景。这种系统可以解析并理解指定文档内容,进而回答与之相关的问题[^2]。具体流程包括以下几个方面: - 使用 `Document Loaders` 加载不同类型的文件(PDF、TXT 等)。 - 应用文本分割器 (`Text Splitter`) 将长篇幅内容划分为更易于管理的小片段。 - 利用嵌入模型 (Embedding Model) 和向量存储库(如 Chroma 或 Pinecone),创建语义索引以便快速检索相似内容。 下面展示了一个简单的 Python 实现案例: ```python from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chains.question_answering import load_qa_chain from langchain.llms import OpenAI # 步骤一:加载数据源 loader = TextLoader('./data/sample.txt') documents = loader.load() # 步骤二:切割文本 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0) texts = text_splitter.split_documents(documents) # 步骤三:生成嵌入并向量化 embeddings = OpenAIEmbeddings() docsearch = Chroma.from_texts([t.page_content for t in texts], embeddings).as_retriever() # 步骤四:加载 QA 链接 llm = OpenAI(temperature=0) qa_chain = load_qa_chain(llm, chain_type="stuff") query = "请解释一下本文的核心观点是什么?" docs = docsearch.search(query) response = qa_chain.run(input_documents=docs, question=query) print(response) ``` 上述脚本演示了如何利用 LangChain 完成基本的 Q&A 功能。 #### 3. **RAG 方法论下的文档处理技术** 在自然语言处理领域中,“Retrieval-Augmented Generation”(简称 RAG)是一种结合信息检索与生成式方法的技术路线[^3]。为了支持这一模式,LangChain 提供了一些实用组件,比如多种格式的支持(HTML、Markdown)、自定义化预处理器等。 例如,在实际操作过程中可能涉及以下环节: - 转换原始 HTML 页面至纯文本形式; - 对超大规模文章实施分段策略以优化性能表现。 这些特性使得开发者能够更加灵活地应对各种业务需求场景。 #### 4. **全面的大规模模型应用指导材料** 除了官方提供的详尽手册外,还有许多第三方整理出来的优质学习素材可供参考[^4]。其中包括但不限于: - 思维导图梳理知识点结构; - 推荐书单深入探讨理论背景; - 录制好的教学录像直观呈现实践技巧; 它们共同构成了一个完整的知识体系架构,有助于初学者迅速上手同时也能满足资深工程师进一步探索的需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值