Press "Enter" to skip to content

“AI驱动的见解:利用LangChain和Pinecone与GPT-4”

赋能下一代产品经理 —— 卷 1

“AI驱动的见解:利用LangChain和Pinecone与GPT-4” 四海 第1张

高效处理定性数据是产品经理最重要的技能之一;通过收集数据、分析数据并以高效的方式进行沟通,提供可操作和有价值的见解。

你可以从很多地方获得定性数据 —— 用户访谈、竞争对手的反馈或者使用你的产品的人们的评论。根据你的目标,你可以立即分析这些数据,或者将其保存以备以后使用。有时,你可能只需要几次用户访谈来确认一个假设。而其他时候,你可能需要来自上千名用户的反馈来发现趋势或者测试想法。因此,你对于分析这些数据的方法可能会因情况而异。

有了像 GPT-4 这样的大型语言模型以及 LangChain 和 Pinecone 等 AI 工具,我们可以更有效地处理各种情况和大量的数据。在本指南中,我将分享我使用这些工具的经验。我的目标是向产品经理和其他处理定性数据的人展示如何使用这些 AI 工具从数据中获得更有用的见解。

在这篇指南式的文章中,你将会找到以下内容:

  1. 首先,我会向你介绍这些 AI 工具以及大型语言模型(LLMs)的一些当前限制。
  2. 我会讨论你可以如何充分利用这些工具应对现实中的使用场景。
  3. 以用户反馈分析为例,我将提供代码片段和示例,向你展示这些工具在实践中的工作方式。

请注意:要使用像 GPT-4、LangChain 和 Pinecone 这样的工具,你需要熟悉数据并具备一些基本的编码能力。了解你的客户并能够将数据见解转化为实际行动也非常重要。对于人工智能和机器学习的知识是一个加分项,但并非必需。

了解 AI 工具:为什么你可能需要 LangChain 和 Pinecone

假设你已经熟悉了 GPT-4,我们在讨论与 LLMs 一起工作的工具时,理解一些概念是很重要的。目前,GPT-4 有两个版本。标准版具有 8k 个标记的上下文窗口,而扩展版具有 32k 个上下文窗口。让你有个概念,32k 个标记大约相当于 24,000 个词,大致相当于 48 页的文本。但请记住,即使你可以访问 GPT-4,32k 版本也并不适用于所有人。

另外,OpenAI 最近宣布了一个名为 gpt-3.5-turbo-16k 的新 ChatGPT 模型,它提供了 gpt-3.5-turbo 上下文长度的 4 倍。在进行见解分析时,我建议使用 gpt-4,因为它的推理能力比 GPT-3.5 更强。但你可以尝试不同的方式,看看对你的用例有什么效果。

我为什么提到这个?

在处理见解分析时,如果你有大量的数据,或者你对不止一个提示感兴趣,就会遇到一个重大挑战。假设你有一个用户访谈。你想深入挖掘并从中获得更多见解,可以使用 GPT-4。在这种情况下,你只需要将访谈记录传给 ChatGPT,选择 GPT-4。你可能需要将文本分割一次,但就是这样。对于这个情况,你不需要任何其他花哨的工具。因此,只有在处理大量定性数据时,你才需要这些新奇的工具。现在让我们了解一下这些工具是什么,然后我们将转向一些具体的用例和示例。

那么,LangChain 是什么?

LangChain 是围绕 LLMs 的一个框架,提供了聊天机器人、生成式问答(GQA)和摘要等各种功能。它的灵活性在于能够连接不同的组件,包括提示模板、LLMs、代理和记忆系统。

提示模板是预先制作的用于不同情况的提示,而LLMs则处理和生成回复。代理根据LLM的输出做出决策,而记忆系统则存储信息以供以后使用。

在本文中,我将在我的示例中分享一些它的功能。

LangChain模块的高级概述

什么是Pinecone?

Pinecone.ai是一个强大的工具,旨在简化高维数据表示(称为向量)的管理。

当处理大量文本数据时,向量特别有用,例如当您尝试从中提取信息时。想象一种情况,您正在分析反馈并希望找出关于产品的各种细节。仅仅通过关键词搜索(如“great”,“improve”或“i suggest”)可能无法获得这种深度洞察,因为您可能会错过很多上下文。

现在,我不会深入探讨文本向量化的技术细节(可以基于单词或句子等)。您需要理解的关键是,通过机器学习模型,单词会被转换为数字,并将这些数字存储在数组中。

让我们举个例子:

单词“海鲜”可能会被转换为以下一系列数字:[1.2, -0.2, 7.0, 19.9, 3.1, …, 10.2]。

当我搜索另一个单词时,该单词也会被转换为一系列数字(或向量)。如果我们的机器学习模型工作正常,与“海鲜”具有类似上下文的单词应该具有与“海鲜”接近的数字系列。这里是一个例子:

“虾”可能被翻译为:[1.1, -0.3, 7.1, 19.8, 3.0, …, 10.5],其中这些数字接近“海鲜”的数字。

借助Pinecone.ai,您可以高效地存储和搜索这些向量,从而实现快速准确的相似性比较。

通过使用其功能,您可以组织和索引从LLM模型派生的向量,打开深入洞察和在大型数据集中发现有意义模式的大门。

简单来说,Pinecone.ai允许您以方便的方式存储您的定性数据的向量表示。您可以轻松搜索这些向量并应用LLM模型从中提取有价值的见解。它简化了您的数据管理过程并从中提取有意义的信息。

向量数据库的表示

什么时候您实际上需要像LangChain和Pinecone这样的工具?

简短回答:当您处理大量定性数据时。

让我分享一些我在工作中的用例,以帮助您了解:

  • 假设您从产品渠道获得了数千条书面反馈。您希望识别数据中的模式并跟踪反馈随时间的演变。
  • 假设您有不同语言的评论,并且您希望将它们翻译成您偏好的语言,然后提取见解。
  • 您希望通过分析客户对竞争对手产品的评论、反馈和情感来进行竞争分析。
  • 您的公司进行调查或用户研究,生成大量定性响应。您的目标是提取有意义的见解,揭示趋势,并改进产品或服务。

这些只是一些使用LangChain和Pinecone等工具的情况的示例,这些工具对于处理定性数据的产品经理非常有价值。

示例项目:反馈分析

作为产品经理,我的工作涉及改进我们的会议记录和转录功能。为此,我们倾听用户对它们的评价。

对于我们的会议记录功能,用户为其质量给出1到5的评分,告诉我们使用了哪个模板,并向我们发送他们的评论。以下是工作流程:

“AI驱动的见解:利用LangChain和Pinecone与GPT-4” 四海 第4张

在这个项目中,我密切关注了两件事:用户对我们的功能的评价和他们使用的模板。最终,我处理了大量的数据——超过20,000个单词,当我使用一个特殊工具将其分解时,这些数据变成了超过38,000个“令牌”(或数据片段)。这是如此庞大的数据,以至于有些先进的模型一次无法处理这么多数据!

为了帮助我分析这些大量的数据,我借助了两个先进的工具:LangChain 和 Pinecone,还有 GPT-4 的补充。有了这些工具,让我们深入项目,看看这些高科技工具使我们能够做到了什么。

这个项目的主要目标是从收集到的数据中提取见解,这需要:

  1. 能够创建与我们的数据集相关的特定查询。
  2. 使用LLMs处理大量信息。

首先,我将给您一个关于我如何进行这个项目的概述。然后,我将分享一些我使用的代码示例。

我们从一系列文本文件开始。每个文件都包含用户反馈和他们使用的模板的名称。您可以根据自己的需求处理这些数据,我在项目中也进行了一些后处理。请记住,您的文件和数据可能不同,所以可以随意调整信息以适应您自己的项目。

例如,您想了解用户对会议记录结构的反馈:

query =  "请以markdown格式在表格中列出所有关于句子结构的反馈,并为每一个反馈提供一个总结。"

下面是一个展示使用LLM和Pinecone时的流程图:

“AI驱动的见解:利用LangChain和Pinecone与GPT-4” 四海 第5张

下面是一个更简化的版本的流程图:

“AI驱动的见解:利用LangChain和Pinecone与GPT-4” 四海 第6张

让我们开始吧!在这个脚本中,我们建立了一个使用OpenAI的GPT-4、Pinecone和LangChain来分析用户反馈数据的管道。它主要是导入必要的库,设置反馈数据的路径,并建立用于处理这些数据的OpenAI API密钥。

import osimport openaiimport pineconeimport certifiimport nltkfrom tqdm.autonotebook import tqdmfrom langchain.document_loaders import DirectoryLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.vectorstores import Pineconefrom langchain.llms import OpenAIfrom langchain.chains.question_answering import load_qa_chaindirectory = '您的包含反馈的文本文件目录的路径'OPENAI_API_KEY = "您的密钥"

然后,我们定义并调用一个名为load_docs()的函数,该函数使用LangChain的DirectoryLoader从指定的目录加载用户反馈文档。然后,它计算并显示加载的文档总数。

def load_docs(directory):  loader = DirectoryLoader(directory)  documents = loader.load()  return documentsdocuments = load_docs(directory)len(documents)

接下来,定义并执行split_docs()函数,该函数使用LangChain的RecursiveCharacterTextSplitter将加载的文档分割成指定大小和重叠的较小块。然后,它计算并打印结果块的总数。

def split_docs(documents, chunk_size=500, chunk_overlap=20):  text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)  docs = text_splitter.split_documents(documents)  return docsdocs = split_docs(documents)print(len(docs))

为了使用Pinecone,我们需要从我们的文档中获取嵌入向量,因此我们需要引入一个执行此操作的函数。有很多方法可以做到这一点,但我们选择使用OpenAI的嵌入函数:

# 假设已导入 OpenAIEmbeddings 类
embeddings = OpenAIEmbeddings()

# 定义一个函数来为给定的查询生成嵌入
def generate_embedding(query):
    query_result = embeddings.embed_query(query)
    print(f"查询的嵌入长度为:{len(query_result)}")
    return query_result

要将这些向量存储到 Pinecone 中,您需要在 Pinecone 上创建一个帐户并创建一个索引。这很简单。然后您将从那里获得一个 API 密钥、环境名称和索引名称。

MY_API_KEY_p = "the_key"
MY_ENV_p = "the_environment"
pinecone.init(
    api_key=MY_API_KEY_p,
    environment=MY_ENV_p
)
index_name = "your_index_name"
index = Pinecone.from_documents(docs, embeddings, index_name=index_name)

下一步是能够找到答案。就像在可能的答案领域中找到与您的问题最接近的点,为我们提供最相关的结果。

def get_similiar_docs(query, k=40, score=False):
    if score:
        similar_docs = index.similarity_search_with_score(query, k=k)
    else:
        similar_docs = index.similarity_search(query, k=k)
    return similar_docs

在这段代码中,我们使用 OpenAI 的 GPT-4 模型和 LangChain 设置了一个问答系统。get_answer() 函数以问题作为输入,找到相似的文档,并使用问答链生成一个答案。

from langchain.chat_models import ChatOpenAImodel_name = "gpt-4"llm = OpenAI(model_name=model_name, temperature=0)chain = load_qa_chain(llm, chain_type="stuff")def get_answer(query):  similar_docs = get_similiar_docs(query)  answer = chain.run(input_documents=similar_docs, question=query)  return answer

我们来到了问题!或者说问题们。您可以提出任意多的问题。

query = "请以 markdown 形式在表格中列出所有有关句子结构的反馈,并为每个反馈提供一个单一的见解,并对所有反馈进行一个总结。"answer = get_answer(query)print(answer)

实施检索问答链:

要实现检索问答系统,我们使用 LangChain 中的 RetrievalQA 类。它使用 OpenAI LLM 来回答问题,并依赖于“stuff”链类型。检索器与先前创建的索引连接,并存储在“qa”变量中。为了更好地理解,您可以了解更多关于检索技术的内容。

from langchain.chains import RetrievalQAretriever = index.as_retriever()qa_stuff = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    verbose=True
)response = qa_stuff.run(query)

我们获得了响应,现在让我们使用 Markdown 文本以视觉上吸引人的格式呈现存储在响应变量中的内容。这使得显示的文本更有组织性,更易于阅读。

from IPython.display import display, Markdowndisplay(Markdown(response))
示例输出

继续使用输入文件和查询进行实验,以充分利用这个方法和工具。

结论

简而言之,GPT-4、LangChain 和 Pinecone 使处理大量定性数据变得容易。它们帮助我们挖掘数据并找到有价值的洞察,指导更好的决策。本文对它们的使用进行了一瞥,但它们还能做更多。

随着这些工具的不断发展和普及,现在学会使用它们将为您在未来带来重大优势。因此,继续探索和学习这些工具,因为它们正在塑造数据分析的现在和未来。

敬请期待未来探索这些实用工具的更多方法!

除非另有说明,所有图片均为作者提供

参考资料

LangChain 文档

Pinecone 文档

LangChain 适用于 LLM 应用开发短期课程

Leave a Reply

Your email address will not be published. Required fields are marked *