当前位置: 首页 > news >正文

提示词模板之构造方法

前言

本文为 LangChain 提示词模板配套学习笔记,覆盖两种主流提示模板、四种模型调用方式、占位符复用技巧,附带适配阿里云通义千问兼容 OpenAI 接口完整可运行代码,可直接复制运行。

前置环境准备

1. 安装依赖

在项目虚拟环境执行:

pip install langchain langchain-openai python-dotenv

2. 配置密钥

项目根目录新建.env文件,填入阿里云 DashScope Key:

env

aliQwen-api=sk-你的阿里云百炼dashscope密钥

一、提示词模板基础分类

日常开发中提示词模板分为 4 类,95% 业务场景只用前两种,后两种仅做了解即可:

  1. PromptTemplate:纯文本大模型专用模板,字符串拼接填充变量
  2. ChatPromptTemplate:对话大模型(通义千问 / GPT)专用,区分 system/human/ai 角色消息
  3. FewShotPromptTemplate:少样本学习模板,低频使用
  4. PipelinePrompt:管道组合模板,仅了解概念

ChatPromptTemplate 构造入参格式

实例化传入messages支持 3 种格式:

  1. 元组列表:[(role, content)]
  2. 字典列表:[{"role": "xxx", "content": "xxx"}]
  3. Message 对象列表:SystemMessage / HumanMessage / AIMessage

二、ChatPromptTemplate 基础构造示例(核心代码)

文件:ChatPromptTemplate_Constructor.py

""" ChatPromptTemplate 构造方法实例化 messages 支持元组列表、字典列表、Message对象列表三种格式 适配阿里云通义千问 qwen-plus 兼容OpenAI接口 """ from langchain_core.prompts import ChatPromptTemplate import os from langchain.chat_models import init_chat_model from dotenv import load_dotenv # 1. 加载.env环境变量 load_dotenv() api_key = os.getenv("aliQwen-api") if not api_key: raise ValueError("密钥读取失败,请检查项目根目录.env文件配置") # 2. 使用构造方法创建对话提示模板,内置占位符 chatPromptTemplate = ChatPromptTemplate( [ ("system", "你是一个AI开发工程师,你的名字是{name}。"), ("human", "你能帮我做什么?"), ("ai", "我能开发很多{thing}。"), ("human", "{user_input}"), ] ) # 3. 填充占位符,生成对话消息列表 prompt_messages = chatPromptTemplate.format_messages( name="小谷AI", thing="AI应用", user_input="7 + 5等于多少" ) print("===== 格式化后的对话消息列表 =====") print(prompt_messages) # 4. 初始化阿里云通义千问大模型 llm = init_chat_model( model="qwen-plus", model_provider="openai", api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 5. 同步调用 invoke(基础单次问答) print("\n===== invoke 同步调用结果 =====") result = llm.invoke(prompt_messages) print("完整返回对象:", result) print("模型输出内容:", result.content)

三、四种模型调用方式完整代码示例

新建文件llm_call_demo.py,包含同步、流式、批处理、异步全部写法

import asyncio import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model from langchain_core.prompts import ChatPromptTemplate # 加载环境变量 load_dotenv() api_key = os.getenv("aliQwen-api") llm = init_chat_model( model="qwen-plus", model_provider="openai", api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 通用对话模板 template = ChatPromptTemplate([ ("system", "你是简洁回答助手,简短输出答案"), ("human", "{question}") ]) # ---------------------- 1. 同步调用 invoke(日常首选) ---------------------- def sync_invoke_demo(): print("===== 1. 同步调用 invoke =====") msg = template.format_messages(question="9 * 8等于多少") res = llm.invoke(msg) print(res.content, "\n") # ---------------------- 2. 流式调用 stream(实时打字效果) ---------------------- def stream_demo(): print("===== 2. 流式调用 stream =====") msg = template.format_messages(question="介绍LangChain") stream = llm.stream(msg) for chunk in stream: print(chunk.content, end="", flush=True) print("\n\n") # ---------------------- 3. 批处理 batch(批量多问题一次性请求) ---------------------- def batch_demo(): print("===== 3. 批处理 batch =====") input_list = [ {"question": "1+1等于几"}, {"question": "Python是什么"}, {"question": "通义千问是什么模型"} ] batch_msgs = [template.format_messages(**item) for item in input_list] batch_res = llm.batch(batch_msgs) for idx, res in enumerate(batch_res): print(f"问题{idx+1}输出:{res.content}") print("\n") # ---------------------- 4. 异步调用 ainvoke(高并发非阻塞) ---------------------- async def async_invoke_demo(): print("===== 4. 异步调用 ainvoke =====") msg = template.format_messages(question="什么是异步调用") res = await llm.ainvoke(msg) print(res.content) # 程序入口 if __name__ == "__main__": sync_invoke_demo() stream_demo() batch_demo() # 异步函数需用asyncio.run执行 asyncio.run(async_invoke_demo())

四、PromptTemplate 纯文本模板补充示例

文件:text_prompt_demo.py

from langchain_core.prompts import PromptTemplate import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model load_dotenv() api_key = os.getenv("aliQwen-api") # 1. 纯文本模板创建 text_template = PromptTemplate( template="请以{role}身份,解答问题:{query}", input_variables=["role", "query"] ) # 2. format 生成完整文本字符串 prompt_str = text_template.format(role="Python工程师", query="什么是装饰器") print("纯文本提示词:", prompt_str, "\n") # 3. 模型调用 llm = init_chat_model( model="qwen-plus", model_provider="openai", api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) res = llm.invoke(prompt_str) print("模型回答:", res.content)

五、partial 局部填充模板示例(固定部分变量)

from langchain_core.prompts import ChatPromptTemplate # 原始模板 base_template = ChatPromptTemplate([ ("system", "你是{job},名字叫{name}"), ("human", "回答我的问题:{user_q}") ]) # partial 预填充固定参数job、name,只需传入user_q fixed_template = base_template.partial(job="AI开发工程师", name="小谷AI") # 仅传入剩余变量 msg = fixed_template.format_messages(user_q="解释提示词模板") print(msg)

六、踩坑解决方案(代码报错修复)

  1. Missing credentials 密钥缺失
    • 必须导入dotenv并执行load_dotenv()
    • .env文件名称不能写错,变量名和代码os.getenv()保持一致;
  2. ChatPromptTemplate 调用模型报错
    • 对话模板必须使用format_messages(),不能用format()
  3. EnvForge 插件读取.env 异常
    • 关闭其他.env 相关插件,清除 IDE 缓存重启;
  4. 接口访问失败
    • base_url 固定为阿里云兼容地址:https://dashscope.aliyuncs.com/compatible-mode/v1,model 填写qwen-plus

七、调用方式选择总结

  1. 简单单次问答:invoke同步调用
  2. 前端实时打字输出:stream流式调用
  3. 批量多条问题处理:batch批处理
  4. 高并发服务、防止主线程阻塞:ainvoke异步调用
http://www.jsqmd.com/news/1189260/

相关文章:

  • 深入解析TI DRA77P异构处理器:MPU与DSP协同设计及外设配置实战
  • 《天道》第一篇观后感(1-2集)
  • 如何从零开始构建Linux系统:beijing_est_institute_2021项目实践教程
  • 开源之夏openEuler社区:Spring Boot与ElasticSearch集成最佳实践
  • 为什么给孩子批改完作业还是不知道哪里错了,原因竟然是这个
  • 暑假出游游戏党救星随身畅玩 PC 端游
  • 【Hugging Face】模型名称解码与实战筛选:从命名规则到精准匹配
  • MCP3551 ADC芯片与PIC18F2610 SPI接口配置详解
  • 2026年7月最新青岛万国官方售后客服服务电话及地址网点大全 - 万国中国官方服务中心
  • 终极AI模型调用解决方案:SysAIFrame让多模型集成从未如此简单
  • 标题:呼和浩特旧金变现全攻略:足金18K铂金金条怎么卖才划算?五大实体店深度拆解 - 小城生活闲谈
  • 多维聚合中的数据变形:轴向重映射与层级折叠原理
  • 基于TPS61170与PIC18F57Q43的高效DC-DC升压转换设计
  • 【题解】CF2246E
  • 2026北京LV回收哪家正规?毓典全国连锁、资质齐全合规回收LV箱包腕表 - 旧奢新值
  • Python计算机视觉入门:从环境搭建到数字识别项目实战
  • 计算机毕业设计之基于springboot框架的学生成绩管理系统
  • 基于行业共识的多源数据融合验证体系——(交叉验证的背景与必要性)
  • 告别命令记忆烦恼!SmartShell交互模式使用教程:3步轻松生成复杂命令
  • UE5 2D动画高效管理:PaperZD插件从入门到精通实战指南
  • 济南包包回收上门多少钱 正规连锁门店报价有无折损费用 - 讯息早知道
  • 长沙天心区防水补漏|维小达|不拆除补漏、室内防水、屋面防水、外墙防水、飘窗防水、阳台防水、地下室防水补漏、厨卫漏水一站式修缮服务 - 一点传媒
  • 西安线下收表门店挑选攻略,实地走访多家实体对比资质 - 讯息早知道
  • 多模态AI影视评论生成:从特征融合到专业评论的技术实现
  • 2026年7月深圳刑事律师行业深度解析:八强全维服务能力对标与科学选型指南 - 优企名品
  • Ubuntu22.04部署MuJoCo210与mujoco-py:从零到一的避坑实战指南
  • 万字全景:超声波雷达和毫米波雷达的强劲对手——UWB近场感知技术
  • **2026毓典奢品汇:天津卡地亚首饰回收终极指南,LOVE保值密码与五大门店实测排行** - 二奢行情速报
  • TPA3138D2与PIC32MX664F064L在嵌入式音频系统中的应用
  • 从事件流到事件委托:掌握JavaScript事件传播的核心机制