释放OpenAI的ChatGPT API所提供的16k令牌的力量。
在文本生成领域,OpenAI的ChatGPT API已成为创建动态和交互式会话体验的强有力工具。然而,一个显著的限制仍然存在:最大令牌限制为4,097,这限制了生成响应的长度和复杂性。这个限制意味着更长的对话或输入文本必须被截断或拆分,可能会牺牲上下文和连贯性。
令人振奋的是,OpenAI最近发布了一个开创性的公告——ChatGPT API现在支持惊人的16,000个token!这种令人瞩目的token容量的显著提升带来了范式转移,为开发人员和研究人员开启了广泛的可能性。凭借这种扩展的能力,ChatGPT API赋予用户处理更长的输入、深入交谈以及产生更全面和上下文丰富的回应的能力。
为了测试新的功能,我们将按照以下步骤进行:
- 获得J.K.罗琳所著的著名小说《哈利·波特与魔法石》的副本。
- 我们将把这本书分成更小的块,每个块目标为15,000个令牌左右。在这个实验中,我们将仅关注第一个块,它包含大约15,000个令牌。这将使我们有机会探索书中这个特定部分的潜力和可能性。
- 为确保所生成的回答仅源自所提供块内包含的文本,而非模型的训练资料,我们将对块内的关键细节进行特定修改。通过引入这些改动,我们可以确信所获得的回答仅基于块本身所包含的信息。
- 利用ChatGPT API处理和分析整个文块,利用扩展的令牌限制。
为了确保每个块不含超过约15,000个标记,我们将首先创建一个标记计数函数。
import tiktoken
def num_tokens_from_string(string: str, encoding_name='cl100k_base') -> int:
"""Returns the number of tokens in a text string."""
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(string))
return num_tokens
然后,我们从书中提取文本并将其分成块。 我们将使用PyPDF库进行此操作,但您也可以使用任何其他库:
from pypdf import PdfReader
reader = PdfReader("Harry Potter and the Sorcerers Stone.pdf")
chunks = []
chunk = ""
for page in reader.pages:
text = page.extract_text()
if num_tokens_from_string(chunk + text) <= 15000:
# If adding the current page's text to the current chunk keeps the total tokens within 15k
chunk += text
else:
# If adding the current page's text exceeds 15k tokens, start a new chunk
chunks.append(chunk)
chunk = text
# Add the last chunk to the list
chunks.append(chunk)
让我们看看第一部分在哪里结束:
print(chunks[0])