Flutter GPT-4.0 文本处理插件tiktoken_tokenizer_gpt4o_o1的使用
Flutter GPT-4.0 文本处理插件tiktoken_tokenizer_gpt4o_o1的使用
Tiktoken Tokenizer for GPT-4o, GPT-4, and o1 OpenAI models
这是一个实现Tiktoken分词器的库,该分词器用于OpenAI的模型。它是一个部分的Dart端口,从原始的OpenAI的tiktoken库而来,但具有更友好的API。
尽管在pub.dev上已有其他分词器,但截至2024年11月,它们都不支持GPT-4o和o1模型系列。此插件旨在填补这一空白。
支持的模型包括:
- Gpt-4
- Gpt-4o
- Gpt-4o-mini
- o1
- o1-mini
- o1-preview
此外,重要的是,这仅是一个Dart包(无需任何平台通道即可工作),并且分词操作是同步进行的。
将文本字符串拆分为标记很有用,因为GPT模型以标记的形式查看文本。知道文本字符串中有多少个标记可以告诉你:
- 某些文本是否对文本模型来说太长了。
- 一次OpenAI API调用的成本是多少(因为按标记计费)。
示例
要查看其运行情况,请运行示例应用:
如何使用它
// 创建一个Tiktoken实例以供你使用的模型。
var tiktoken = Tiktoken(OpenAiModel.gpt_4);
// 将文本字符串编码为标记。
var encoded = tiktoken.encode("hello world");
// 将标记字符串解码回文本。
var decoded = tiktoken.decode(encoded);
// 计算文本字符串中的标记数量。
int numberOfTokens = tiktoken.count("hello world");
高级使用
你还可以使用静态辅助函数getEncoder
和getEncoderForModel
来获取TiktokenEncoder
实例:
var encoder = Tiktoken.getEncoder(TiktokenEncodingType.o200k_base);
var encoder = Tiktoken.getEncoderForModel(OpenAiModel.gpt_4o);
TiktokenEncoder
实例提供了对编码过程的更精细控制,因为你现在可以访问更多高级方法:
Uint32List encode(
String text, {
SpecialTokensSet allowedSpecial = const SpecialTokensSet.empty(),
SpecialTokensSet disallowedSpecial = const SpecialTokensSet.all(),
});
Uint32List encodeOrdinary(String text);
(List<int>, Set<List<int>>) encodeWithUnstable(
String text, {
SpecialTokensSet allowedSpecial = const SpecialTokensSet.empty(),
SpecialTokensSet disallowedSpecial = const SpecialTokensSet.all(),
});
int encodeSingleToken(List<int> bytes);
Uint8List decodeBytes(List<int> tokens);
String decode(List<int> tokens, {bool allowMalformed = true});
Uint8List decodeSingleTokenBytes(int token)
List<Uint8List> decodeTokenBytes(List<int> tokens);
int? get eotToken;
在线分词器
我已经添加了许多测试以确保此Dart实现的正确性,但你也可以通过访问在线Tiktokenizer来比较此包的输出与默认实现的输出:
https://tiktokenizer.vercel.app/?model=gpt-4o
计数单词
词语和标记之间的关系是什么?
每种语言都有不同的词到标记的比例。以下是一些一般规则:
- 对于英语:1个词大约是1.3个标记
- 对于西班牙语和法语:1个词大约是2个标记
- 标点符号、特殊字符和表情符号有多少个标记?
- 每个标点符号(如, : ; ? !)算作1个标记。
- 特殊字符(如∝√∅°¬)的范围是从1到3个标记。
- 表情符号(如😁🙂🤩)的范围是从2到3个标记。
在此包中,我提供了一个单词计数器。你可以这样使用它:
var wordCounter = WordCounter();
// 打印0
print(wordCounter.count(''));
// 打印1
print(wordCounter.count('hello'));
// 打印2
print(wordCounter.count('hello world!'));
更多关于Flutter GPT-4.0 文本处理插件tiktoken_tokenizer_gpt4o_o1的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GPT-4.0 文本处理插件tiktoken_tokenizer_gpt4o_o1的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter中如何使用tiktoken_tokenizer_gpt4o_o1
(假设这是一个用于GPT-4.0文本处理的插件,尽管这个名称看起来是虚构的,我将提供一个类似的代码案例来展示如何在Flutter中使用一个文本处理插件)。在实际应用中,你需要找到并导入正确的插件包名。
以下是一个假设的Flutter插件使用案例,这里我们假设插件名为gpt4_tokenizer
,并且它提供了GPT-4.0文本分词功能。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加该插件的依赖项(请替换为实际的插件名称和版本):
dependencies:
flutter:
sdk: flutter
gpt4_tokenizer: ^0.1.0 # 假设的版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件并使用
在你的Dart文件中导入该插件并使用其功能。例如,在lib/main.dart
中:
import 'package:flutter/material.dart';
import 'package:gpt4_tokenizer/gpt4_tokenizer.dart'; // 导入插件
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String tokenizedText = '';
void tokenizeText(String text) async {
// 假设GPTTokenizer是该插件提供的一个类
GPTTokenizer tokenizer = GPTTokenizer();
List<String> tokens = await tokenizer.tokenize(text);
setState(() {
tokenizedText = tokens.join(' ');
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('GPT-4 Text Tokenizer Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
decoration: InputDecoration(
labelText: 'Enter text to tokenize',
),
onChanged: (value) {
// 这里可以添加即时分词功能,但为了简化,我们用一个按钮触发
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 获取TextField中的文本(这里为了简化,假设已经有一个文本变量text)
String text = 'This is a sample text for GPT-4 tokenization.';
tokenizeText(text);
},
child: Text('Tokenize Text'),
),
SizedBox(height: 20),
Text(
'Tokenized Text:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
Text(
tokenizedText,
style: TextStyle(fontSize: 16),
),
],
),
),
),
);
}
}
注意事项
- 插件名称和API:上面的代码使用了假设的插件名称
gpt4_tokenizer
和类GPTTokenizer
,以及一个假设的tokenize
方法。你需要根据实际的插件文档来替换这些名称和方法。 - 异步操作:分词操作可能是异步的,因此我们在
tokenizeText
方法中使用了async
和await
关键字。 - UI更新:使用
setState
方法来更新UI,这是Flutter中常用的状态管理方法。
在实际开发中,请确保你查阅并遵循插件的官方文档,因为插件的API和用法可能会有所不同。