ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

transformers-js - TEXT_GENERATION

transformers-js - TEXT_GENERATION 文本生成指南使用 Transformers.js 生成文本的指南包括流式输出和聊天格式。目录基本生成流式输出聊天格式生成参数模型选择最佳实践基本生成import{pipeline}fromhuggingface/transformers;constgeneratorawaitpipeline(text-generation,onnx-community/Qwen2.5-0.5B-Instruct,{dtype:q4});constresultawaitgenerator(Once upon a time,{max_new_tokens:100,temperature:0.7,});console.log(result[0].generated_text);// 完成后清理awaitgenerator.dispose();流式输出在生成 token 时实时流式输出以获得更好的用户体验。理解流式输出后您可以将其与其他功能如聊天格式结合使用。Node.jsimport{pipeline,TextStreamer}fromhuggingface/transformers;constgeneratorawaitpipeline(text-generation,onnx-community/Qwen2.5-0.5B-Instruct,{dtype:q4});conststreamernewTextStreamer(generator.tokenizer,{skip_prompt:true,skip_special_tokens:true,callback_function:(token){process.stdout.write(token);},});awaitgenerator(Tell me a story,{max_new_tokens:200,temperature:0.7,streamer,});浏览器!DOCTYPEhtmlhtmlbodytextareaidpromptplaceholderEnter prompt.../textareabuttononclickgenerate()Generate/buttondividoutput/divscripttypemoduleimport{pipeline,TextStreamer}fromhttps://cdn.jsdelivr.net/npm/huggingface/transformers4;constgeneratorawaitpipeline(text-generation,onnx-community/Qwen2.5-0.5B-Instruct,{dtype:q4});window.generateasyncfunction(){constpromptdocument.getElementById(prompt).value;constoutputDivdocument.getElementById(output);outputDiv.textContent;conststreamernewTextStreamer(generator.tokenizer,{skip_prompt:true,skip_special_tokens:true,callback_function:(token){outputDiv.textContenttoken;},});awaitgenerator(prompt,{max_new_tokens:200,temperature:0.7,streamer,});};/script/body/htmlReactimport { useState, useRef, useEffect } from react; import { pipeline, TextStreamer } from huggingface/transformers; function StreamingGenerator() { const generatorRef useRef(null); const [output, setOutput] useState(); const [loading, setLoading] useState(false); const handleGenerate async (prompt) { if (!prompt) return; setLoading(true); setOutput(); // Load model on first generate if (!generatorRef.current) { generatorRef.current await pipeline( text-generation, onnx-community/Qwen2.5-0.5B-Instruct, { dtype: q4 } ); } const streamer new TextStreamer(generatorRef.current.tokenizer, { skip_prompt: true, skip_special_tokens: true, callback_function: (token) { setOutput((prev) prev token); }, }); await generatorRef.current(prompt, { max_new_tokens: 200, temperature: 0.7, streamer, }); setLoading(false); }; // Cleanup on unmount useEffect(() { return () { if (generatorRef.current) { generatorRef.current.dispose(); } }; }, []); return ( div button onClick{() handleGenerate(Tell me a story)} disabled{loading} {loading ? Generating... : Generate} /button div{output}/div /div ); }聊天格式使用结构化消息进行对话。同时适用于基本生成和流式输出只需添加streamer参数。单轮对话import{pipeline}fromhuggingface/transformers;constgeneratorawaitpipeline(text-generation,onnx-community/Qwen2.5-0.5B-Instruct,{dtype:q4});constmessages[{role:system,content:You are a helpful assistant.},{role:user,content:How do I create an async function?}];constresultawaitgenerator(messages,{max_new_tokens:256,temperature:0.7,});console.log(result[0].generated_text);多轮对话constconversation[{role:system,content:You are a helpful assistant.},{role:user,content:What is JavaScript?},{role:assistant,content:JavaScript is a programming language...},{role:user,content:Can you show an example?}];constresultawaitgenerator(conversation,{max_new_tokens:200,temperature:0.7,});// 要添加流式输出只需传入 streamer// streamer: new TextStreamer(generator.tokenizer, {...})生成参数常用参数awaitgenerator(prompt,{// Token 限制max_new_tokens:512,// 要生成的最大 token 数min_new_tokens:0,// 要生成的最小 token 数// 采样temperature:0.7,// 随机性0.0-2.0top_k:50,// 只考虑前 K 个 tokentop_p:0.95,// 核采样nucleus samplingdo_sample:true,// 使用随机采样false 始终选择最可能的 token// 重复控制repetition_penalty:1.0,// 重复惩罚1.0 无惩罚no_repeat_ngram_size:0,// 防止重复 n-gram// 流式输出streamer:streamer,// TextStreamer 实例});参数效果温度Temperature低0.1-0.5更聚焦、更确定中0.6-0.9创造性与连贯性平衡高1.0-2.0更具创造性、更随机// 聚焦输出awaitgenerator(prompt,{temperature:0.3,max_new_tokens:100});// 创造性输出awaitgenerator(prompt,{temperature:1.2,max_new_tokens:100});采样方法// 贪心确定性awaitgenerator(prompt,{do_sample:false,max_new_tokens:100});// Top-k 采样awaitgenerator(prompt,{top_k:50,temperature:0.7,max_new_tokens:100});// Top-p核采样awaitgenerator(prompt,{top_p:0.95,temperature:0.7,max_new_tokens:100});模型选择在 Hugging Face Hub 上浏览可用的文本生成模型https://huggingface.co/models?pipeline_tagtext-generationlibrarytransformers.jssorttrending选择建议小型模型 1B 参数快速、适合浏览器使用dtype: q4中型模型1-3B 参数质量/速度均衡使用dtype: q4或fp16大型模型 3B 参数高质量、较慢最适合在 Node.js 中使用dtype: fp16查看模型卡片了解参数量和模型大小支持的语言基准测试分数许可证限制最佳实践模型大小浏览器使用量化模型q4服务器使用更大的模型fp16流式输出使用流式输出获得更好的用户体验 - 显示进度并让交互更流畅Token 限制设置max_new_tokens以防止生成失控温度根据用例调整创造性0.8-1.2事实性0.3-0.7内存完成后始终调用dispose()缓存只加载一次模型为多个请求复用相关文档管道选项 - 配置管道加载配置参考 - 环境设置代码示例 - 不同运行时的更多示例主技能指南 - 入门指南
返回列表