全栈 AI 必修课:基于 Node.js 与 LLM 的渐进式提示词工程实践 全栈 AI 必修课基于 Node.js 与 LLM 的渐进式提示词工程实践一、 引言二、 基础工程架构与大模型环境配置1. 环境变量配置 (.env)2. 客户端实例化 (client.mjs)3. 通用文本生成接口 (completion.mjs)三、 核心 Prompt 的编写规则与设计哲学1. 清晰且具体的指令2. 给定输出格式3. 给出具体示例 (Few-shot)4. 分步骤引导大模型四、 渐进式演进历程NLP 核心任务的代码实现与演进分析1. 情感分类与多维推理演进阶段 A基础情感分类阶段 B限制输出字数与范围 (规则 2)阶段 C格式化为以逗号分隔的列表 (规则 2)阶段 D特定情绪定向判定阶段 E特定关键信息提取与标准 JSON 输出 (规则 1、2)阶段 F复合型多任务并行处理 (规则 1、2、4)2. 主题推断与多主题匹配任务任务 A自主多主题提炼任务 B零样本多标签分类3. 聚焦特定维度的文本总结与批量文本流处理维度 A通用信息概括 (字数约束)维度 B聚焦产品运输 (定向信息压缩)维度 C聚焦价格与质量维度 D多样本批量并行循环化处理五、 结论一、 引言在传统自然语言处理NLP领域构建情感分类、信息提取或文本总结等系统是一项系统性工程。传统的机器学习工作流涵盖数据标注、特征工程、模型训练及反复调优通常需要熟练的算法工程师耗费数天乃至数周的时间。随着大语言模型LLM的普及Prompt提示词工程开辟了全新的技术范式。开发者通过设计精准的自然语言指令即可在数分钟内构建出高可用性的推理系统。这种技术的“平权”极大地降低了开发门槛。本文将结合具体的 Node.js 项目工程代码深入解析如何通过工程化 Prompt 实现各类核心 NLP 任务并总结高效提示词的核心编写原则。二、 基础工程架构与大模型环境配置为实现高效的文本推理项目采用了基于 Node.jsES Modules的模块化架构利用openaiSDK 对接大语言模型如 DeepSeek 接口作为底层推理引擎。在基于大语言模型LLM的全栈开发中env、client和completion承担着不同的职责它们共同构成了应用程序与大模型交互的基础通道。我们可以把它们的关系理解为env负责提供大门钥匙client是连接大模型的“门禁与通道”而completion是通过通道去执行特定任务的“执行者”。1. 环境变量配置 (.env)env是项目的基础环境配置文件通常表现为.env文件。它的主要作用是将大模型调用所需的 API 密钥、接口基础路径以及指定的模型版本等敏感数据和可变参数从业务代码中彻底抽离出来。它为后续客户端的初始化提供了最底层的配置支撑。DEEPSEEK_API_KEYsk-666666DEEPSEEK_API_BASE_URLhttps://api.deepseek.comDEEPSEEK_MODELdeepseek-v4-flash2. 客户端实例化 (client.mjs)client是通过大模型官方 SDK如openai库创建的一个核心客户端对象。它直接读取env中配置的参数其主要作用是配置基础连接信息并建立通信通道。身份验证Authentication持有访问凭证向大模型服务器验证当前请求的合法性。通路配置Endpoint Configuration指定请求的基础路径明确将网络请求导向哪台远程服务器。连接复用Connection Reuse在整个工程架构中客户端只需要在client.mjs中初始化一次并默认导出。其他所有需要调用大模型的业务模块直接复用该实例避免了重复配置与连接资源的浪费。import{OpenAI}fromopenai;importdotenvfromdotenv;dotenv.config();constclientnewOpenAI({apiKey:process.env.DEEPSEEK_API_KEY,baseURL:process.env.DEEPSEEK_API_BASE_URL,});exportdefaultclient;3. 通用文本生成接口 (completion.mjs)completion在代码中表现为client.chat.completions.create是大模型最核心的文本生成与逻辑推理接口。它负责承载具体的指令并捕获大模型的输出结果。指定模型大脑在发起调用的同时明确指定本次推理任务所启用的具体模型版本同样动态读取自env的配置。管理上下文与角色Messages通过结构化的数组传递对话上下文。例如通过{ role: user, content: prompt }声明当前输入的文本属于用户指令引导大模型进行针对性推理。提取结构化响应大模型 API 返回的数据通常包含丰富的元数据如 Token 消耗、结束标识等。completion函数的作用在于剥离外壳通过路径response.choices[0].message.content精准提取出大模型真正吐出来的文本回复。importclientfrom./client.mjs;/** * 封装大模型文本生成接口 * param {string} prompt - 输入的提示词 * returns {Promisestring} - 模型返回的文本内容 */exportasyncfunctiongetCompletion(prompt){constresponseawaitclient.chat.completions.create({model:process.env.DEEPSEEK_MODEL,messages:[{role:user,content:prompt}]});returnresponse.choices[0].message.content;}三、 核心 Prompt 的编写规则与设计哲学在利用大模型处理 NLP 任务时Prompt 的设计直接决定了输出结果的稳定性与准确性。优秀的提示词工程应当严格遵循以下四大核心规则1. 清晰且具体的指令大模型虽然具备强大的泛化推理能力但模糊的指令会导致输出失控。指令必须明确告诉模型“做什么”以及“不能做什么”。原则使用明确的动作谓词如“识别”、“提取”、“判定”、“概括”并通过明确的分隔符如三个反引号 将指令与待处理的文本数据完全隔开避免指令混淆Prompt Injection。2. 给定输出格式在企业级全栈开发中大模型的输出结果通常需要被后台程序进一步解析和处理。因此必须约束模型的输出格式如单单词、列表、JSON 对象、布尔值等并限制字数。应用示例要求大模型仅输出 “正面” 或 “负面”或者要求其输出带有固定键名如sentiment、product的标准 JSON 字符串以便通过JSON.parse()转换为程序结构。3. 给出具体示例 (Few-shot)当面对复杂的推理逻辑或需要特定输出风格时通过在提示词中提供一个或多个“输入-输出”对的示例即 Few-shot Prompting能够显著提升模型的类比学习能力与格式对齐率。4. 分步骤引导大模型对于需要处理多项任务的复杂逻辑应当采用类似思维链Chain of Thought的逻辑将大任务拆解为清晰的子步骤引导模型按部就班地进行推理。例如先判定情感→ \rightarrow→再识别愤怒情绪→ \rightarrow→随后提取商品与品牌→ \rightarrow→最后组装输出。四、 渐进式演进历程NLP 核心任务的代码实现与演进分析以下内容完整还原了从简单任务到复杂场景的工程化演进过程。通过不同的 Prompt 阶段体现了如何逐步应用上述四大编写规则。1. 情感分类与多维推理演进在实际业务如电商客服质检、产品反馈监控中系统需要对用户评论进行自动化处理。以下首先展示作为输入源的原始文本数据定义constlamp_review_zh我需要一盏漂亮的卧室灯这款灯具有额外的储物功能价格也不算太高。\ 我很快就收到了它。在运输过程中我们的灯绳断了但是公司很乐意寄送了一个新的。\ 几天后就收到了。这款灯很容易组装。我发现少了一个零件于是联系了他们的客服他们很快就给我寄来了缺失的零件\ 在我看来Lumina 是一家非常关心顾客和产品的优秀公司;基于该文本源Prompt 通过增加限制与规则逐步升级阶段 A基础情感分类意图利用分隔符对评论进行基础情感倾向判定。constprompt以下用三个反引号分隔的产品评论的情感是什么 评论文本\\\${lamp_review_zh}\\\输出阶段 B限制输出字数与范围 (规则 2)意图消除模型的冗余解释使其仅返回标准状态便于后台程序直接分类。constprompt以下用三个反引号分隔的产品评论的情感是什么 用一个单词回答正面 或 负面 评论文本\\\${lamp_review_zh}\\\输出阶段 C格式化为以逗号分隔的列表 (规则 2)意图控制输出密度提取多个情感标签并以结构化符号分割。constprompt识别以下用三个反引号分隔的产品评论的作者表达的情感。 包含不超过五个项目。 将答案格式化为以逗号分隔的单词列表。 评论文本\\\${lamp_review_zh}\\\输出阶段 D特定情绪定向判定意图用于售后后台的紧急预警模块快速筛选客户是否表达了“愤怒”情绪。constprompt以下用三个反引号分隔的产品评论是否表达了愤怒 给出是或否的答案。 评论文本\\\${lamp_review_zh}\\\输出阶段 E特定关键信息提取与标准 JSON 输出 (规则 1、2)意图实现信息提取Information Extraction任务。将非结构化文本转化为带有固定键名product,brand的 JSON 对象若信息不存在则填充默认值。constprompt从评论文本中识别以下项目 - 评论者购买的商品 - 制造该商品的公司 评论文本用三个反引号分隔。将你的响应格式以“物品”product和“品牌”brand为键 的JSON对象。 如果信息不存在请使用**未知**作为值。 评论文本\\\${lamp_review_zh}\\\输出阶段 F复合型多任务并行处理 (规则 1、2、4)意图将情感倾向、情绪判定、实体提取组合为一个复合任务。通过分步骤的明确限制强制要求将特定字段转换为布尔值并压缩输出体积。constprompt从评论文本中识别以下项目 - 情绪正面或负面 - 是否表达了愤怒是或否 - 评论者购买的商品 - 制造该物品的公司 评论用三个反引号分隔。 将您的响应格式化为JSON对象。以“sentiment”、“angry”、“product”、“brand”为键。 如果信息不存在请使用**未知**作为值。 让你的回复尽可能简短。 将anger值格式化为布尔值 评论文本\\\${lamp_review_zh}\\\输出2. 主题推断与多主题匹配任务主题推断任务可以对海量文本如新闻、政务报告进行自动标签化分类用于内容索引或推荐系统。以下为分析所使用的新闻文本conststory_zh在政府最近进行的一项调查中要求公共部门的员工对他们所在部门的满意度进行评分。 调查结果显示NASA 是最受欢迎的部门满意度为 95。 一位 NASA 员工 John Smith 对这一发现发表了评论他表示 “我对 NASA 排名第一并不感到惊讶。这是一个与了不起的人们和令人难以置信的机会共事的好地方。我为成为这样一个创新组织的一员感到自豪。” NASA 的管理团队也对这一结果表示欢迎主管 Tom Johnson 表示 “我们很高兴听到我们的员工对 NASA 的工作感到满意。 We拥有一支才华横溢、忠诚敬业的团队他们为实现我们的目标不懈努力看到他们的辛勤工作得到回报是太棒了。” 调查还显示社会保障管理局的满意度最低只有 45的员工表示他们对工作满意。 政府承诺解决调查中员工提出的问题并努力提高所有部门的工作满意度。任务 A自主多主题提炼意图让模型自主提炼出五个核心主题并严格限制每个主题的字数与分隔符号。constprompt确定一下给定文本中讨论的五个主题。 每个主题用1-2个单词概括。 输出时用逗号分隔。 给定文本${story_zh}输出任务 B零样本多标签分类意图给定一个标准的主题候选列表topicList让模型批量判断文本是否提及了该话题并输出由0或1组成的匹配列表。consttopicList[美国国家航空航天局,地方政府,工程,员工满意度,联邦政府]constprompt判断主题列表中每一项是否是给定文本中的一个话题 以列表的形式给出答案每个主题用0或1。 主题列表${topicList.join(,)}给定文本L${story_zh}输出3. 聚焦特定维度的文本总结与批量文本流处理文本总结Summarization是行政、编辑以及管理岗位降本增效的核心场景。利用同一个文本源熊猫公仔评论prod_review_zh可以通过改变提示词的焦点实现完全不同侧重点的摘要。constprod_review_zh这个熊猫公仔是我给女儿的生日礼物她很喜欢去哪都带着。 公仔很软超级可爱面部表情也很和善。但是相比于价钱来说 它有点小我感觉在别的地方用同样的价钱能买到更大的。 快递比预期提前了一天到货所以在送给女儿之前我自己玩了会。维度 A通用信息概括 (字数约束)意图在 30 个词汇内对评论进行高度压缩。constprompt您的任务是从点赞商务网站上生成一个产品评论的简短摘要。 请对三个反引号之间的评论文本进行概括最多30个词汇。 评论文本\\\${prod_review_zh}\\\输出维度 B聚焦产品运输 (定向信息压缩)意图过滤并仅提取物流、快递相关的服务表现。constprompt您的任务是从点赞商务网站上生成一个产品评论的简短摘要。 请对三个反引号之间的评论文本进行概括最多30个词汇。 并且聚焦在产品运输上。 评论文本\\\${prod_review_zh}\\\输出维度 C聚焦价格与质量意图引导大模型筛选性价比与材质质量相关的文本片段。constprompt您的任务是从点赞商务网站上生成一个产品评论的简短摘要。 请对三个反引号之间的评论文本进行概括最多30个词汇。 并且聚焦在产品价格和质量上。 评论文本\\\${prod_review_zh}\\\输出维度 D多样本批量并行循环化处理意图在实际工程中数据往往以数组形式成批出现。通过 JavaScript 的for...of循环遍历不同的产品评论在同一个结构化 Prompt 内实现高吞吐量的信息提炼。以下展示了其余的多品类原始评论文本定义constreview_1prod_review_zh;constreview_2我想为我的卧室找一个漂亮的灯这款灯还有额外的存储空间价格也不太高。\ 购买后很快就收到了两天就送到了。但在运输过程中灯的拉链断了公司态度\ 很好发来了一条新的。新的拉链也在几天内就到了。这个灯非常容易装配。后来我\ 发现缺少一个部分所以我联系了他们的客户支持他们很快就给我寄来了缺失的部件\ 我觉得这是一家非常关心他们的客户和产品的好公司。// review for an electric toothbrushconstreview_3我的牙科卫生师推荐我使用电动牙刷这就是我购买这款牙刷的原因。目前为止我发现电池的\ 续航时间颇为令人印象深刻。在初次充电并在第一周保持充电器插头插入以调节电池状态之后我\ 已经将充电器拔掉并在过去的3周里每天两次刷牙都使用同一次充电。然而这款牙刷的刷头实\ 在太小了。我见过的婴儿牙刷都比这个大。我希望牙刷头能做得更大一些搭配不同长度的刷毛更好\ 地清洁牙齿间缝因为现有的无法做到这一点。总的来说如果你能以大约50美元的价格购入这款电动\ 牙刷那它就物超所值。厂家配套的替换刷头价格相当昂贵但你可以买到价格更为合理的通用款。\ 使用这款牙刷让我感觉像每天都去看了牙医一样我的牙齿感觉洁净如新// review for a blenderconstreview_4他们还在11月把17件套系统以大约$49的优惠价格销售几乎是五折。但不明原因轻易就可以归咎为价格欺诈\ 在到了12月第二周同一套系统的价格一下儿飙升到了$70-$89之间。11件套系统的价格也从之前的优惠价$29上\ 升了大概$10。看上去还算公道但如果你仔细观察底部会发现刀片锁定的部位相比几年前的版本要略逊一筹所\ 以我打算非常小心翼翼地使用例如我会将像豆子、冰块、大米之类的硬质食材先用搅拌机压碎然后调到我需要\ 的份量再用打发刀片研磨成更细的粉状制作冰沙时我首选交叉刀片如果需要更细腻些或者少些浆糊状我会换成\ 平刀。在制作果昔时把将要用的水果和蔬菜切片冷冻是个小技巧如果你打算用菠菜要先稍微焖炖软再冷冻\ 制作雪葩时用一个小到中号的食品加工器就行这样就不用或者很少加冰块到你的果昔了。大约一年后电机开始发出\ 一些可疑的声音。我联系了客服但保修期已经过期所以我只好另购一台。友情提示这类产品的整体质量都在下滑\ 所以他们更多的是利用品牌知名度和消费者的忠诚度来保持销售。我在两天之后就收到了它。通过构建数组执行批量文本摘要提取constreviews[review_1,review_2,review_3,review_4];for(letreviewofreviews){constprompt你的任务是从电子商务网站上的产品评论中提取相关信息。 请对三个反引号之间的评论文本进行概括最多20个词汇。 评论文本\\\${review}\\\constresponseawaitgetCompletion(prompt);console.log(response,\n);}输出五、 结论通过上述从单任务到流处理的工程实践可以发现大模型时代的 NLP 开发核心已从“编写复杂的特征算法”转变为“设计高质量的结构化指令”。在企业 LLM 能力接入的过程中只要严格遵循清晰具体指令、预设输出格式、引入示例对齐以及拆解复杂步骤这四大基本原则开发者便能以极低的成本快速构建出具备工业级鲁棒性的情感推断、信息抽取与定制化摘要系统为企业后台业务流带来颠覆性的生产力提升。