采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
最大上下文 是模型本身确定(训练时)推理时是不能修改的,不同的模型是不一样的,比如8k, 32k, 128k
这里32k是模型训练设置的,固定, 可以外推到128K(也是模型层面的配置)
大部分的模型推理或者api,基本上支持设置max_tokens 最大输出token。 默认的情况下就是模型的最长上下文长度。
llm
=
RagLLM()
print
(llm(prompt
"hello, how to write a book?"
, max_tokens
2
))
max_tokens 会影响你输出的内容,需要根据你输出的内容的估计来确定大小。如果你需要回答的内容预计比较长,max_tokens可以长一些,比如比如写文章论文8192。如果都是简短的回答,可以设置小一些1024。
正常的情况下,模型的输出不会无限制的输出,一般生成时遇到结束符如endoftext 就会停止输出。max_tokens设置大一些也无影响,但还是根据场景来定,避免浪费token
过小的max_tokens会导致内容截断,需注意
谢谢老师,我知道了最大输出长度就是max_tokens。最大上下文 是模型本身确定(训练时)推理时是不能修改的,比如32k。但是,举个例子,对于16g显存的我们来说如果真的输入32k会爆显存的。所以在模型初始化的时候我们要设置一个最大的限制,超过了可能会截断或者做summary。在使用transformers包的时候,会在模型初始化的时候,把它初始化进去: model = AutoModelForCausalLM.from_pretrained( base_model_path, torch_dtype="auto", device_map="auto", max_length=1000, trust_remote_code=True ) 这个max_length就是限制的最大上下文,包含了输入和输出 所以我想langchain是不是也有这个参数?谢谢老师
好的,明白你的意思了。关键在于是否会自动截断, 正如你说的,在transformers框架中是可以通过max_length来,一般是generate或者tokenizer的时候。 而langchain是更高一级LLM中间件,langchain在封装大语言模型基座时基本的token限制几乎都是max_tokens 和max_new_tokens, 没有对输入的token的限制,主要取决于当前大部分大模型接口都没有支持截断的参数,比如openai等。也就是说 要(1)自定义对输入进新截断控制 (2)langchain也提供自定义LLM,这里你可以封装tansformers的截断控制的参数加进来。
登录后可查看更多问答,登录/注册
RAG全栈技术从基础到精通 ,打造高精准AI应用
113 8
114 7
74 5
129 4
49 4
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号