news 2026/5/21 20:49:33

Transformers 模型推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Transformers 模型推理

Transformers 系列文章目录

第一章 Transformers 简介;

第二章 Transformers 模型推理


文章目录

  • Transformers 系列文章目录
  • 前言
  • Transformers模型推理
  • 一、Transformers读取预训练模型
    • 1.Transformers读取预训练模型,都是已经预训练好的,拿来即可用的。
    • 2.模型是有权限参数值的,而非随机随机参数值。
  • 二、使用模型类加载模型权重
    • 1.使用不同模型类的from_pretrained()方法,来加载hugging face的模型。返回模型对象model。
    • 2.使用不同文本编码类的from_pretrained()方法,来加载hugging face的文本编码模型。返回文本编码对象tokenizer。
    • 3.多种模型类和文本编码类
    • 4.可以直接使用模型对象
    • 5.示例
  • 三、使用pipeline()封装成推理器
    • 1.使用pipeline()方法,指定配置信息,把model + tokenizer封装成一个可直接输入文字的推理器(生成器)。返回生成器对象generator。
    • 2.返回生成器对象后,使用对象内的__call__方法,即generator()来使用模型推理。
    • 3.实例A
    • 4.实例B
  • 总结

前言

本文主要整理 Transformers 模型推理相关内容,包括读取预训练模型、使用模型类加载模型权重、Tokenizer 加载与使用、模型对象直接推理、pipeline() 推理器封装、生成参数说明,以及本地模型和 Hugging Face 模型标识的推理示例。


Transformers模型推理

一、Transformers读取预训练模型

1.Transformers读取预训练模型,都是已经预训练好的,拿来即可用的。

2.模型是有权限参数值的,而非随机随机参数值。

二、使用模型类加载模型权重

1.使用不同模型类的from_pretrained()方法,来加载hugging face的模型。返回模型对象model。

  • 公式:
model=AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path)
  • 参数:
    • pretrained_model_name_or_path:为已下载的模型路径字符串。必须。
    • device_map:定义使用的设备。设为"auto"自动选择最优化设备。设为0使用GPU 0设备。不能同时使用device_map和device。
    • dtype:运行模型使用的精度。如:torch.float16,torch.bfloat16为指定16低精度。不指定会默认使用config.dtype的设置,一般是torch.float32全精度。或者"auto"。提高速度和不爆显存一般使用dtype=torch.bfloat16
    • quantization_config:模型量化。在GPU上安装bitsandbytes库进行模型量化。值为量化配置对象:
      • 4bit量化

代码

fromtransformersimport(AutoTokenizer,AutoModelForCausalLM,pipeline,BitsAndBytesConfig,)tokenizer=AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)quant_config=BitsAndBytesConfig(load_in_4bit=True,# 关键:4bit量化bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.float16,bnb_4bit_use_double_quant=True,)model=AutoModelForCausalLM.from_pretrained(model_path,trust_remote_code=True,# dtype=torch.float16, # 不能再用半进度运行device_map="auto",quantization_config=quant_config,low_cpu_mem_usage=True,)
  • quantization_config:模型量化。在GPU上安装bitsandbytes库进行模型量化。值为量化配置对象:

    • 8bit量化

代码

fromtransformersimport(AutoTokenizer,AutoModelForCausalLM,pipeline,BitsAndBytesConfig,)tokenizer=AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)quant_config=BitsAndBytesConfig(load_in_8bit=True,)# 关键:4bi量化model=AutoModelForCausalLM.from_pretrained(model_path,trust_remote_code=True,# dtype=torch.float16, # 不能再用半进度运行device_map="auto",quantization_config=quant_config,low_cpu_mem_usage=True,)
  • 参数:

    • low_cpu_mem_usage:加载模型时,是否减少CPU内存占用。默认False。加载模型流程:磁盘模型文件 → 先完整加载到CPU内存 → 再搬到GPU。设置True后,会边读取边加载边放GPU,不会整份放RAM。节省内存。建议True
    • trust_remote_code:是否允许执行远程代码。默认False。部分模型需要。
  • 返回:模型对象

2.使用不同文本编码类的from_pretrained()方法,来加载hugging face的文本编码模型。返回文本编码对象tokenizer。

  • 公式:
tokenizer=AutoTokenizer.from_pretrained(pretrained_model_name_or_path)
  • 参数:
    • pretrained_model_name_or_path:为已下载的模型路径字符串。必须。
    • use_fast:是否使用快速分词器(Rust实现)默认True
    • trust_remote_code:是否允许执行远程代码。默认False。部分模型需要。
  • Tokenizer操作通常在CPU上执行,因为主要是字符串处理和查表操作。
    • 所以没有device_map,torch_dtype,load_in_4bit参数
  • 返回:文本编码模型对象

3.多种模型类和文本编码类

  • 不同模型需要使用不同模型类加载,或根据用途加载。同理文本编码模型一样。
  • 多种模型类
    • 一般使用AutoModelForXXX.from_pretrained()加载对应任务的预训练模型,XXX代表不同类型的任务所使用的类。
      • 如:加载一个文本分类模型,使用AutoModelForSequenceClassification。
      • 如:加载一个文本生成模型,使用AutoModelForCausalLM。
    • 使用LlamaForCausalLM.from_pretrained()加载llama模型
    • 使用AutoModel.from_pretrained()加载模型。
  • 多种文本编码类
    • 一般使用AutoTokenizer.from_pretrained()加载文本编码模型
    • 使用LlamaTokenizer.from_pretrained()加载llama文本编码模型
    • 使用AutoProcessor.from_pretrained()加载一个预训练Processor。

4.可以直接使用模型对象

  • 可以使用模型对象的__call__方法,即model()来使用模型,也可以使用模型的model.generate()方法来使用模型。生成文本编码
  • 再tokenizer()或者tokenizer.batch_decode()对文本编码,解码成文字字符串
  • 不建议直接使用,最好结合pipeline()使用

5.示例

  • 示例A

代码

fromtransformersimportAutoTokenizer,AutoModelForCausalLM,BitsAndBytesConfigimporttorch quantization_config=BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.bfloat16,bnb_4bit_use_double_quant=True,bnb_4bit_quant_type="nf4",)model=AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path=r"C:\Users\Llama-3.2-1B-Instruct",device_map="auto",torch_dtype=torch.bfloat16,# load_in_4bit=True, # 不再使用,改用quantization_configquantization_config=quantization_config,trust_remote_code=True,)tokenizer=AutoTokenizer.from_pretrained(pretrained_model_name_or_path=r"C:\Users\Llama-3.2-1B-Instruct",trust_remote_code=True,)prompt1="在一个的夜晚,少林寺门口出现了一位蒙面女士,"inputs=tokenizer(prompt1,return_tensors="pt")# 编码inputs={k:v.to(model.device)fork,vininputs.items()}# 从CPU移到GPUprint(inputs)print(inputs["input_ids"])generate_ids=model.generate(inputs["input_ids"],# 使用input_ids而不是整个字典max_length=100,attention_mask=inputs["attention_mask"],# 添加 attention_maskpad_token_id=tokenizer.eos_token_id,# 设置 pad_token_iddo_sample=True,temperature=0.7,)res=tokenizer.batch_decode(# 解码generate_ids,skip_special_tokens=True,clean_up_tokenization_spaces=False)print(generate_ids)print(res)

结果

{'input_ids': tensor([[128000, 19000, 48044, 9554, 103309, 107130, 3922, 83747, 102138, 108553, 65789, 40526, 111935, 104430, 25129, 110919, 28190, 58850, 101559, 3922]], device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], device='cuda:0')} tensor([[128000, 19000, 48044, 9554, 103309, 107130, 3922, 83747, 102138, 108553, 65789, 40526, 111935, 104430, 25129, 110919, 28190, 58850, 101559, 3922]], device='cuda:0') tensor([[128000, 19000, 48044, 9554, 103309, 107130, 3922, 83747, 102138, 108553, 65789, 40526, 111935, 104430, 25129, 110919, 28190, 58850, 101559, 3922, 108669, 100815, 101828, 39135, 44309, 99741, 3922, 65455, 117555, 46961, 65455, 29391, 3922, 46034, 69978, 15120, 102178, 46961, 24273, 83799, 9554, 76505, 74396, 1811, 58850, 101559, 9554, 96356, 58322, 101600, 18184, 17792, 32938, 109809, 123561, 3922, 127198, 112403, 100911, 19000, 100823, 36827, 107130, 17905, 81258, 31634, 19000, 65789, 40526, 50667, 75293, 100911, 3490, 106161, 100815, 103309, 107130, 9554, 84851, 60634, 3922, 127198, 56386, 61633, 28037, 58850, 101559, 9554, 116405, 1811, 74257, 40265, 100911, 102149, 60358, 65789, 40526, 3922, 127198, 72368]], device='cuda:0') ['在一个的夜晚,少林寺门口出现了一位蒙面女士,穿着白色服装,头戴长头发,手持一把长方形的木箱。女士的身影很为人所熟悉,人们认为她在那天 晚上就要在门口等待她。\n\n随着夜晚的推移,人们开始注意到女士的行为。每当她走近门口,人们都']
  • 实例B(运行不了,已经被弃用)

代码

fromtransformersimportLlamaTokenizer,LlamaForCausalLMimporttorch model=LlamaForCausalLM.from_pretrained(pretrained_model_name_or_path='/data/pyenv/transformers/model/vicuna-13b-1.1',device_map="auto",torch_dtype=torch.bfloat16,load_in_4bit=True,)tokenizer=LlamaTokenizer.from_pretrained(pretrained_model_name_or_path='/data/pyenv/transformers/model/vicuna-13b-1.1',)prompt1='在一个很久很久的夜晚,少林寺门口出现了一位蒙面女士,'inputs=tokenizer(prompt1,return_tensors="pt")# 编码print(inputs)print(inputs.input_ids)generate_ids=model.generate(inputs.input_ids,max_length=100)res=tokenizer.batch_decode(# 解码generate_ids,skip_special_tokens=True,clean_up_tokenization_spaces=False)print(generate_ids)print(res)

结果

一个中文与token非一一对应 attention_mask表示对应的token是否被使用。1为被使用,0为不被使用 {'input_ids': tensor([[ 1, 29871, 30505, 30287, 30502, 232, 193, 139, 31347, 232, 193, 139, 31347, 30210, 31390, 233, 156, 157, 30214, 31022, 30853, 30951, 31649, 30856, 30544, 31424, 30743, 30287, 30956, 235, 149, 156, 30806, 30647, 30927, 30214]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])} tensor([[ 1, 29871, 30505, 30287, 30502, 232, 193, 139, 31347, 232, 193, 139, 31347, 30210, 31390, 233, 156, 157, 30214, 31022, 30853, 30951, 31649, 30856, 30544, 31424, 30743, 30287, 30956, 235, 149, 156, 30806, 30647, 30927, 30214]]) tensor([[ 1, 29871, 30505, 30287, 30502, 232, 193, 139, 31347, 232, 193, 139, 31347, 30210, 31390, 233, 156, 157, 30214, 31022, 30853, 30951, 31649, 30856, 30544, 31424, 30743, 30287, 30956, 235, 149, 156, 30806, 30647, 30927, 30214, 232, 168, 188, 231, 191, 191, 231, 188, 145, 30505, 232, 178, 190, 233, 140, 193, 231, 190, 131, 31882, 30267, 13, 13, 232, 168, 188, 235, 184, 179, 30743, 31174, 30752, 30743, 30951, 232, 189, 156, 30214, 232, 178, 190, 233, 140, 193, 30743, 30287, 30437, 232, 135, 194, 30214, 232, 168, 188, 234, 190, 139, 30909, 233, 140, 193, 30780, 30743, 30287]]) ['在一个很久很久的夜晚,少林寺门口出现了一位蒙面女士,她似乎在寻找什么。\n\n她走了进入了寺庙,寻找了一会儿,她终于找到了一']
  • 实例C
    • Tokenizer操作在CPU上执行
      • Tokenizer通常在CPU上执行,因为主要是字符串处理和查表操作。
      • device_map=“auto” 对tokenizer实际上没有效果
    • Tokenizer是整数张量数据
      • Tokenizer不处理数值张量,输出虽然是张量,但这些张量包含的是整数索引(token IDs),不是浮点数。torch_dtype参数用于控制浮点数张量的精度
      • Tokenizer输出的input_ids和attention_mask都是整数张量。通常使用torch.long(int64)或torch.int数据类型。不需要也不应该使用浮点数类型如bfloat16。
      • dtype=torch.bfloat16对tokenizer实际上没有效果
    • 模型处理token数据时需要在同一个设备
      • 使用encoded_input = {k: v.to(device) for k, v in encoded_input.items()} 将cpu里的token移到gpu中

代码

fromtransformersimportGPT2Tokenizer,GPT2Modelimporttorch model=GPT2Model.from_pretrained('gpt2',device_map="auto",dtype=torch.bfloat16,)tokenizer=GPT2Tokenizer.from_pretrained('gpt2',# tokenizer没有device_map="auto"参数,默认在cpu上运行。# tokenizer没有torch_dtype=torch.bfloat16参数)text="Replace me by any text you'd like."encoded_input=tokenizer(text,return_tensors='pt')encoded_input={k:v.to(model.device)fork,vinencoded_input.items()}print(encoded_input)output=model(**encoded_input)print(output)

结果

{'input_ids': tensor([[3041, 5372, 502, 416, 597, 2420, 345, 1549, 588, 13]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])} BaseModelOutputWithPastAndCrossAttentions(last_hidden_state=tensor([[[ 0.1660, -0.2207, -0.1377, ..., -0.2617, -0.0815, 0.0071], [ 0.4688, 0.0183, -0.0771, ..., -0.0845, 0.5117, -0.3945], [-0.0703, 0.1504, -0.6289, ..., 0.2480, 0.3711, 0.0815], …

三、使用pipeline()封装成推理器

1.使用pipeline()方法,指定配置信息,把model + tokenizer封装成一个可直接输入文字的推理器(生成器)。返回生成器对象generator。

  • 公式:
generator=pipeline(task,model,tokenizer,device)
  • 参数:
    • task:定义任务类型。一般用到的任务有(具体查看langchain模型):

      • 文本分类 :“sentiment-analysis”
      • 文本生成:“text-generation”
      • 概要:“summarization”
      • 图片分类:“image-classification”
      • 图像分割:“image-segmentation”
    • model:使用的模型,可以是Hugging Face模型标识字符串、本地模型路径字符串、模型对象 如:

      • 使用模型标识(会自动下载safetensors格式模型):model = “gpt2”
      • 使用模型文件:model = “/model/llama-7b”
      • 使用模型对象:model = LlamaForCausalLM.from_pretrained(“/model/llama-7b”)
    • tokenizer:指定分词器。可以是Hugging Face模型标识字符串、本地模型路径字符串、模型对象。

    • max_length:生成文本的最大token数。如设置为350表示最多生成350个 token。默认None不限制使用模型默认值。

    • temperature:控制采样的随机程度,越低越确定性,越高越随机,默认1.0

    • top_k:从概率最高的k个词中采样,默认50。只在do_sample=True时有效。

    • top_p:nucleus sampling参数,从累积概率达到p的词中采样,默认1.0

    • repetition_penalty:惩罚重复生成。>1会抑制重复内容。默认1.0

    • num_return_sequences:返回不同的生成结果数量。比如设置为3会生成3个答案。默认1

    • device:定义使用的torch.device设备。

      • 可以是字符串:“cpu”, “cuda:0”,"mps"或类似GPU的顺序等级。
      • 也可以是数值:0表示使用第一个GPU,-1表示使用CPU。
    • device_map:定义使用的torch.device设备。

      • 不能同时使用device_map和device。
      • 设置为"auto"自动选择最优化设备。设置为0使用GPU 0设备。
    • dtype:运行模型时使用的精度。如:torch.float16, torch.bfloat16为指定16低精度。

      • 不指定或"auto"默认使用config.dtype的设置,一般torch.float32高精度。提高运算速度和不爆显存使用dtype=torch.bfloat16
      • 提速对比:torch.float16 < torch.bfloat16
      • torch.bfloat16:只有支持特定gpu,如nVidia A100和Google TPU v4。
      • torch.float16:更为通用,一般的硬件都支持。建议使用。
    • do_sample:是否启用采样(采样会引入随机性),默认False。为True时搭配top_k或top_p。为False时是贪婪解码(每步选概率最大的词),回答更固定。True时模型按概率抽样,回答更自然。

      • 一般temperature=0.0时do_sample=False。否则可能会报错:
        ValueError:temperaturehas to be a strictly positive float, but is 0
    • config:模型配置。未提供,使用默认配置文件。

    • trust_remote_code:是否信任模型库中的自定义代码(通常是模型类)。默认False。True可用于加载Hugging Face上带有自定义类的模型。

    • framework (str, optional):指定后端使用的深度学习框架:"pt"表示PyTorch,"tf"表示TensorFlow。默认为当前安装的框架。未指定并且安装了两个框架,默认PyTorch框架。

    • truncation:当输入文本太长时,是否将其截断为模型允许的最大长度,防止报错或性能问题。默认False。

    • revision:当传递任务名称或字符串模型标识符时:要使用的特定模型版本。

      • Hugging Face上的每个模型仓库其实就是一个Git仓库,每个模型文件、配置文件、权重文件都可以有多个版本(即Git分支、tag或commit)。可以用 revision 来指定加载某个:分支名(如"main"、“dev”)、tag(如"v1.0.0")、commit ID(如"a1b2c3d")
    • use_fast:是否使用Fast tokenizer。速度更快,内存更小,支持偏移映射(offset mapping)等高级特性。默认True

    • use_auth_token:Hugging Face Hub的授权令牌。如果True,将使用运行时生成的令牌huggingface-cli login(存储在~/.huggingface)。

    • feature_extractor:当处理的是非文本输入的任务,如音频、图像、视频时,使用feature_extractor来对原始输入进行预处理(如归一化、重采样、尺寸缩放等)。

    • pad_token_id:用于补全的token,防止生成时警告。某些模型(如GPT)没有明确的pad_token。

  • 返回:生成器对象generator,用于操作模型。

2.返回生成器对象后,使用对象内的__call__方法,即generator()来使用模型推理。

  • 公式参数:
    • 参数根据具体模型而定,没有统一参数。如:
      • text-generation任务模型:generator(text_inputs)
      • document-question-answering任务模型:generator(question, context)
  • pipline()参数与generator()参数
    • 大部分在pipline()参数都可在generator()中定义,并会覆盖pipline()的值。主要作用是可以更加灵活的控制每次生成行为。
  • 返回:模型处理后的结果列表。

3.实例A

  • 使用本地千问模型。任务类型是text-generation。
  • 返回生成器对象后,使用generator()来使用模型推理。参数:
    • text_inputs:输入到模型的提示字符串,必填。
    • return_tensors:是否在输出中返回预测张量(作为标记索引)默认False。如设为True,返回如:1562,232,2344,…。
    • return_text:是否在输出中返回解码后的文本。默认True。
    • return_full_text:如果设置为False只返回添加的文本,默认True返回全文。仅当return_text设置为True时才有意义。
    • max_length:最长的回复token。默认None不限制。
    • num_return_sequences:返回的答案的数量。

代码

fromtransformersimportAutoTokenizer,AutoModelForCausalLM,pipelineimporttorch model_name=(r"D:\python\envs\models\Gensyn_Qwen2.5-1.5B-Instruct")tokenizer=AutoTokenizer.from_pretrained(model_name)model=AutoModelForCausalLM.from_pretrained(model_name,torch_dtype=torch.bfloat16,device_map="auto")generator=pipeline(task="text-generation",model=model_name,tokenizer=tokenizer,torch_dtype=torch.bfloat16,trust_remote_code=True,device=0,# device_map="auto",max_length=350,do_sample=True,# 是否举例说明# do_sample=False,top_k=10,num_return_sequences=1,eos_token_id=tokenizer.eos_token_id,framework="pt",)prompt1="请帮我完成一个故事,故事的开始:在一个很久很久的夜晚,少林寺门口出现了一位蒙面女士,这位女士匆忙留下了一名刚出生的婴儿便迅速离去。"res=generator(text_inputs=prompt1)print(res)

结果

Device set to use cuda:0 [{'generated_text': '请帮我完成一个故事,故事的开始:在一个很久很久的夜晚,少林寺门口出现了一位蒙面女士,这位女士匆忙留下了一名刚出生的婴儿便迅速离去。第二天早上,这个婴 儿被发现躺在少林寺大殿前的一块巨石上。故事的结束:最终,这名婴儿成长为一名伟大的将军,并且在战争中拯救了国家。\n\n在这个故事中,我需要你添加一些情节和角色来丰富故事内容。请提供至少三个新的角色和两个新的情节。此外,请确保这些新元素与故事的主题相一致,并且不要改变原始故事的基本结构。 好的,让我们继续完善这个故事吧!\n\n### 新的角色:\n\n1. **李明** - 一位年轻而勇敢的少年,从小就对武术有着浓厚的兴趣。\n2. **王老师** - 少林寺里的资深武僧,对李明非常欣赏。\n3. **公主** - 李明的母亲,一位智慧而温柔的女性,她对 儿子的成长充满了期待。\n\n### 新的情节:\n\n1. **寻找真相**:\n - 在找到婴儿的那天晚上,李明决定调查这起神秘事件。他通过观察婴儿的行为、声音以及周围的环境,逐渐揭开了背后的秘密。\n \n2. **拜师学习**:\n - 经过一系列的考验和挑战,李明终于拜见了王老师,得到了他的认可并正式成为少林寺弟子。在此过程中,李明不仅学会了武功,还结识了许多志 同道合的朋友。\n\n3. **对抗邪恶势力**:\n - 在一次偶然的机会下,李明得知了一个强大的敌人正在策划一场阴谋,企图破坏'}]

4.实例B

  • 使用模型标识。会自动下载模型文件safetensors到cache中。

代码

fromtransformersimportpipeline generator=pipeline(task='text-generation',model='gpt2')res=generator(text_inputs="Hello, I'm a language model,",max_length=30,num_return_sequences=5)print(res)

结果

Downloading (…)lve/main/config.json: 100%|█████| 665/665 [00:00<00:00, 3.83MB/s] Downloading model.safetensors: 100%|█████████| 548M/548M [01:06<00:00, 8.19MB/s] Downloading (…)neration_config.json: 100%|██████| 124/124 [00:00<00:00, 854kB/s] Downloading (…)olve/main/vocab.json: 100%|█| 1.04M/1.04M [00:00<00:00, 1.85MB/s] Downloading (…)olve/main/merges.txt: 100%|████| 456k/456k [00:00<00:00, 808kB/s] Downloading (…)/main/tokenizer.json: 100%|█| 1.36M/1.36M [00:00<00:00, 1.45MB/s] Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation. [ { "generated_text": 'Hello, I\'m a language model, a major ... California.\n\nTrump\'s' }, { "generated_text": "Hello, I'm a language model, I know how ... language that does it" }, { "generated_text": "Hello, I'm a language model, not an ... model.\n\nYou can do things" }, { "generated_text": "Hello, I'm a language model, for ... system of mathematical proofs" }, { "generated_text": "Hello, I'm a language model, and ... full interview with the writer." }, ]

总结

本文整理了 Transformers 模型推理的核心流程:先通过 from_pretrained() 加载模型和 tokenizer,再根据任务选择直接调用模型或使用 pipeline() 封装推理器。对于本地大模型推理,需要重点关注 device、device_map、dtype、量化配置、显存占用、Tokenizer 与模型设备一致性,以及 max_length、temperature、top_k、top_p、do_sample 等生成参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 20:45:19

为Claude Code配置Taotoken密钥解决频繁封号与token不足痛点

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken密钥解决频繁封号与token不足痛点 Claude Code作为一款高效的编程助手&#xff0c;其核心能力依赖于底层…

作者头像 李华
网站建设 2026/5/21 20:44:09

【AI入门知识点】Agent 是什么?为什么说它是 AI 的下一阶段?

为什么 ChatGPT 能帮你写代码&#xff0c;却不能真正帮你“完成工作”&#xff1f; 为什么现在越来越多人说&#xff1a; “2025 年是 Agent 元年”&#xff1f; 为什么 AI 开始会自己调用工具、自己拆任务、自己执行&#xff1f;这些问题背后。都指向一个核心概念&#xff1a;…

作者头像 李华
网站建设 2026/5/21 20:41:07

在Node.js项目中集成Taotoken实现稳定的大模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js项目中集成Taotoken实现稳定的大模型调用 对于需要在产品中集成AI能力的中小型团队而言&#xff0c;开发过程常常伴随着一…

作者头像 李华
网站建设 2026/5/21 20:39:21

Firefox 148默认禁用asm.js优化,Web性能开创性技术实验落幕

【导语&#xff1a;近日&#xff0c;Mozilla宣布Firefox 148将默认禁用SpiderMonkey的asm.js优化&#xff0c;并计划未来移除该代码&#xff0c;标志着Web性能史上一项开创性技术实验即将结束。】asm.js&#xff1a;Web性能的开创性尝试asm.js诞生于2013年Firefox 22发布时&…

作者头像 李华
网站建设 2026/5/21 20:38:34

Steam Deck如何在Windows系统上实现完美控制器兼容?

Steam Deck如何在Windows系统上实现完美控制器兼容&#xff1f; 【免费下载链接】steam-deck-windows-usermode-driver A windows usermode controller driver for the steam deck internal controller. 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-windows-use…

作者头像 李华