我想使用GPT模型来分析我的数据。数据是一套记录(例如1000条记录),每条记录有10个或更多的属性。我想对GPT(或其他模型)说:
“请分析这些数据,找出异常、极值等。任何与常规不同的东西。”
我使用了Azure.AI.OpenAI
NuGet包 https://github.com/Azure/azure-sdk-for-net/blob/Azure.AI.OpenAI_1.0.0-beta.12/sdk/openai/Azure.AI.OpenAI/README.md
当我尝试使用"gpt-35-turbo
模型并使用以下代码时:
var chatCompletionsOptions = new ChatCompletionsOptions() { DeploymentName = "gpt-35-turbo", // Use DeploymentName for "model" with non-Azure clients Messages = { new ChatRequestSystemMessage("You are data specialist"), new ChatRequestUserMessage(@"Analyze this data and find exceptions"), new ChatRequestUserMessage(stringBuilder.ToString()) } }; Response<ChatCompletions> aiChatResponse = await _openAIClient.GetChatCompletionsAsync(chatCompletionsOptions); ChatResponseMessage responseChatMessage = aiChatResponse.Value.Choices[0].Message;
其中stringBuilder
包含了1000条记录和2列的JSONL模型
我得到了以下结果:
{ "error": { "message": "This model's maximum context length is 8192 tokens. However, your messages resulted in 17901 tokens. Please reduce the length of the messages.", "type": "invalid_request_error", "param": "messages", "code": "context_length_exceeded" }}
因此,我们可以看到,通过聊天分析数据的限制较小
当我尝试使用text-embedding-ada-002
模型时:
EmbeddingsOptions embeddingsOptions = new("text-embedding-ada-002", strings); Response<Embeddings> responseEmbeddings = await _openAIClient.GetEmbeddingsAsync(embeddingsOptions); EmbeddingItem eItem = responseEmbeddings.Value.Data[0]; ReadOnlyMemory<float> embedding = eItem.Embedding;
但执行时间很长,我因为成本增加而取消了它。使用10条记录时,它只返回了一个数字列表…
补充#1
例如,我有一份人员名单,他们都来自芝加哥,除了两个来自其他城市的人。或者他们大多数人的年薪约为10万美元,但有些人的年薪只有1万美元(远低于平均水平),有些人的年薪为100万美元(远高于平均水平)。或者其他任何不同的异常和偏差,我不知道具体是哪些,因为如果我知道的话,我可以直接开发它。我希望能够将所有数据作为模型进行分析,找出任何东西(可能不仅仅是基于一个参数,可能涉及多个关联参数)。并且,甚至可以发现数据内部的关系,一个参数与另一个参数之间的关系(例如,纽约的薪资远高于城市X)。这些只是例子,主要目标是——我不知道具体的关系和异常,AI应该指出这些
如何解决我的任务?
回答:
我将尝试回答您遇到的问题,希望这能给您一些继续前进的思路。
首先,关于text-embedding-ada-002
模型,您不能用它来进行聊天完成。它是用来创建数据的向量表示并输入到向量数据库中的。
关于您在使用GPT 3.5模型时遇到的令牌长度错误,这是预期中的,因为模型的最大令牌大小(也称为上下文大小,即可以发送到Azure OpenAI的数据量)是固定的,您不能超过它们。您可以采取以下几种方法来处理这个错误:
- 使用支持更大上下文长度的模型。例如,您可以使用
gpt-35-turbo-16k
,它支持16k的上下文大小(是您当前使用的模型的两倍),或者gpt-4-32k
(是您当前使用的模型的四倍)。这将允许您向模型传递更大的文本以进行理解。然而,请注意,GPT-4模型的成本显著高于GPT-3.5模型,所以请也考虑这一点。 - 使用提示模式。一种可能的解决方案是使用
Map-Reduce
类型的模式,您可以将数据分成较小的块,并将每个块与您的问题一起发送给LLM。一旦您获得了每个块的响应,再将这些响应发送回LLM以进行理解并得出最终答案(由于我不完全了解您试图解决的业务问题,所以我不确定这是否能解决您的问题,因此您可能需要尝试一下)。