logo
1

根据文本长度选择对应的千帆模型

程序描述:依据千帆平台api+langchain,计算文本的token数量,进而选择适合的千帆模型

一、逻辑说明:

1、使用千帆平台api转化文本长度为token长度
2、根据token长度选择适合的千帆模型

二、程序中使用的千帆模型说明

ERNIE-Bot-4 message的content长度不要大于不能超过4800个字符,且不能超过2000 tokens
ERNIE-Bot-8K message的content长度不能超过9600个字符,且不能超过6000 tokens
ERNIE-Bot message的content长度不能超过4800 个字符,且不能超过2000 tokens
通常情况下,我们都使用ERNIE-Bot-turbo,原因便宜

三、程序如下

  
  
from langchain.chat_models import QianfanChatEndpoint
from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.prompt import PromptValue
import os
from conf import Conf # key在这里配置
import qianfan
os.environ["QIANFAN_AK"] = Conf.API_Key
os.environ["QIANFAN_SK"] = Conf.Secret_Key
short1_context_model = QianfanChatEndpoint(model="ERNIE-Bot-4") # 不能超过4800 个字符,且不能超过2000 tokens
# langchain的代码都没适配ERNIE-Bot-8K,可以用设置 endpoint的方式(8k的是 ernie_bot_8k)
short2_context_model = QianfanChatEndpoint(endpoint="ernie_bot_8k") # 不能超过9600个字符,且不能超过6000 tokens
short3_context_model = QianfanChatEndpoint(model="ERNIE-Bot-turbo") # 不能超过11200个字符,且不能超过7000tokens
def get_context_length(prompt: PromptValue):
messages = prompt.to_messages()
text = messages[0].content
# tokens = short1_context_model.get_num_tokens_from_messages(messages)
token_len = qianfan.Tokenizer.count_tokens(text)
return token_len
prompt = PromptTemplate.from_template("任务: {context}")
# 结合千帆自助工具 https://console.bce.baidu.com/tools/#/tokenizer
def choose_model(prompt: PromptValue):
context_len = get_context_length(prompt)
if context_len < 30: # 方便测试,正常使用200
print("short model")
return short1_context_model
elif context_len < 60: # 方便测试,正常使用600
print("longer model")
return short2_context_model
elif context_len >= 60: # 方便测试,正常使用700
print("longest model")
return short3_context_model
chain = prompt | choose_model | StrOutputParser()
chain.invoke({"context": "2023年第一季度百度的财报,请详细以表格的形式输出"}) # Tokens=17 24
chain.invoke({"context": "2023年第一季度百度的财报,请详细以表格的形式输出,并分析汇总表格有那些项目说明,其中百度核心收入是多少人民币"})
chain.invoke(
{
"context": "2023年第一季度百度的财报,请详细以表格的形式输出,并分析汇总表格有那些项目说明,其中百度核心收入是多少人民币?核心收入同比多少?百度智能云营收营收多少?净利润和ads利润是多少?最后对百度核心收入提高做一下建议,百度智能云2024年ipo做下模拟计划"}
)

四、其他工具

1、百度查文本token自助工具
2、openai查文本token长度
3、百度文本token api
其中本地调用和远程调用说明如下
qianfan.Tokenizer.count_tokens(text) 这种本地调用查的是估算值,一般值偏大
qianfan.Tokenizer.count_tokens(text, mode="remote") 这种远程调用,查值精准,百度计划2023-12-20开放。
评论
用户头像