chatGPT2:如何构建一个可以回答有关您网站问题的 AI 嵌入(embeddings)

感觉这个目前没有什么用,因为客户可以直接问通用chatGPT,实时了解你网站内的信息,除非你的网站chatGPT无法访问。

不过自动预订、买票等用嵌入还是挺有用的。

什么是嵌入?

OpenAI的嵌入(embeddings)是一种技术,它能够将文本、代码或者其他类型的数据转换成数值向量。这些数值向量捕捉了原始数据的关键特征和含义,使得计算机和算法能更有效地处理和分析数据。

将数据传递给模型的过程通常涉及以下几个步骤:

  1. 数据准备:首先,您需要准备您想要分析或处理的数据。这可能是文本、图片、音频或其他类型的数据。

  2. 格式转换:将数据转换成模型能够理解的格式。对于文本数据,这通常意味着将其转换为字符串形式。

  3. 使用API:如果您使用OpenAI的API,您需要按照API的要求格式化您的数据,并通过HTTP请求将其发送给API。这通常涉及到编写一些代码,使用像Python这样的编程语言。

  4. 处理响应:模型会处理您的数据,并以某种形式返回结果。这个结果通常也是一个数值向量,或者是其他类型的数据,例如生成的文本、图片等。

  5. 后处理:根据您的需求,您可能需要对模型的输出进行进一步的处理或分析。

对于不同类型的数据和不同的应用场景,这个过程可能会有所不同,但基本的原则是相似的。如果您具体想知道如何使用某个特定的OpenAI模型或API,通常最好的做法是查阅该模型或API的官方文档,那里会有详细的说明和示例代码。

构建一个可以回答有关您网站问题的 AI步骤:

1抓取网站

从根 URL 开始,访问每个页面,查找其他链接,并访问这些页面。

爬网程序遍历所有可访问的链接并将这些页面转换为文本文件(去掉html的tag)。

(内容如果太长,需分解成更小的块)

转为csv结构。

2使用 Embeddings API 将抓取的页面转换为嵌入

第一步是将嵌入转换为 NumPy 数组(基它形式的也可以)

python 复制代码
import numpy as np
from openai.embeddings_utils import distances_from_embeddings

df=pd.read_csv('processed/embeddings.csv', index_col=0)
df['embeddings'] = df['embeddings'].apply(eval).apply(np.array)

df.head()

关于NumPy 数组 Certainly! Here's a simple example using NumPy, a powerful

library for numerical processing in Python. This example will

demonstrate how to create a NumPy array and perform some basic

operations:

python 复制代码
# Creating a simple NumPy array array = np.array([1, 2, 3, 4, 5]) print("Original Array:", array)

# Performing basic operations
# Adding a constant to each element added_array = array + 10 print("Array after adding 10 to each element:", added_array)

# Multiplying each element by 2 multiplied_array = array * 2 print("Array after multiplying each element by 2:", multiplied_array)

# Computing the mean of the array mean_value = np.mean(array) print("Mean of the array:", mean_value)

# Reshaping the array into a 2x3 matrix
# Note: The total number of elements must remain the same. reshaped_array = np.reshape(array, (2, 2))  # Only possible with an
array of 4 elements print("Reshaped array into a 2x2 matrix:\n",
reshaped_array) ```

In this example, we first import the NumPy library. Then, we create a
basic array and perform operations like addition, multiplication, and
calculating the mean. Finally, we reshape the array into a 2x2 matrix.
Keep in mind that the reshape function requires the total number of
elements to remain the same, so in this example, you would need to
modify the original array or the shape to ensure they match.

3创建一个基本的搜索功能,允许用户询问有关嵌入信息的问题

现在数据已经准备好了,根据检索到的文本生成一个自然的答案。

python 复制代码
def create_context(
    question, df, max_len=1800, size="ada"
):
    """
    Create a context for a question by finding the most similar context from the dataframe
    """

    # Get the embeddings for the question
    q_embeddings = client.embeddings.create(input=question, engine='text-embedding-ada-002')['data'][0]['embedding']

    # Get the distances from the embeddings
    df['distances'] = distances_from_embeddings(q_embeddings, df['embeddings'].values, distance_metric='cosine')


    returns = []
    cur_len = 0

    # Sort by distance and add the text to the context until the context is too long
    for i, row in df.sort_values('distances', ascending=True).iterrows():

        # Add the length of the text to the current length
        cur_len += row['n_tokens'] + 4

        # If the context is too long, break
        if cur_len > max_len:
            break

        # Else add it to the text that is being returned
        returns.append(row["text"])

    # Return the context
    return "\n\n###\n\n".join(returns)

回答提示将尝试从检索到的上下文中提取相关事实,以制定连贯的答案。如果没有相关答案,提示将返回"我不知道"。

python 复制代码
def answer_question(
    df,
    model="gpt-3.5-turbo",
    question="Am I allowed to publish model outputs to Twitter, without a human review?",
    max_len=1800,
    size="ada",
    debug=False,
    max_tokens=150,
    stop_sequence=None
):
    """
    Answer a question based on the most similar context from the dataframe texts
    """
    context = create_context(
        question,
        df,
        max_len=max_len,
        size=size,
    )
    # If debug, print the raw model response
    if debug:
        print("Context:\n" + context)
        print("\n\n")

    try:
        # Create a chat completion using the question and context
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Answer the question based on the context below, and if the question can't be answered based on the context, say \"I don't know\"\n\n"},
                {"role": "user", f"content": "Context: {context}\n\n---\n\nQuestion: {question}\nAnswer:"}
            ],
            temperature=0,
            max_tokens=max_tokens,
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0,
            stop=stop_sequence,
        )
        return response.choices[0].message.strip()
    except Exception as e:
        print(e)
        return ""

测试问答系统

测试来查看输出的质量。

如果系统无法回答预期的问题,则值得搜索原始文本文件,以查看预期已知的信息是否实际上最终被嵌入。

相关推荐
goTsHgo1 天前
在 Spark 上实现 Graph Embedding
大数据·spark·embedding
写编程的木木4 天前
可能是最强文生图工具:Stable Diffusion 3 超详细测试
人工智能·ai作画·stable diffusion·aigc·embedding
Jacob_AI11 天前
为什么 Bert 的三个 Embedding 可以进行相加?
人工智能·bert·embedding
Damon小智12 天前
从数据提取到管理:TextIn平台的全面解析与产品体验
大模型·embedding·知识库·textin·markdown_tester
YangJZ_ByteMaster19 天前
PETR:Position Embedding Transformation forMulti-View 3D Object Detection
人工智能·深度学习·目标检测·机器学习·3d·transformer·embedding
曼城周杰伦21 天前
自然语言处理:第七十章 Langchain的长文本总结处理方案
人工智能·自然语言处理·chatgpt·langchain·nlp·embedding
奔跑草-23 天前
【拥抱AI】如何查看Milvus的使用情况?
人工智能·embedding·milvus
奔跑草-1 个月前
【拥抱AI】RAG如何通过分析反馈、识别问题来提高命中率
大数据·数据库·人工智能·embedding·milvus
文柏AI共享1 个月前
Word Embedding
人工智能·自然语言处理·word·embedding
dundunmm1 个月前
论文阅读:SIMBA: single-cell embedding along with features
论文阅读·人工智能·数据挖掘·embedding·生物信息·多组学细胞数据·单组学