尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

提示词模板之构造方法

提示词模板之构造方法
📅 发布时间:2026/7/14 20:27:12

前言

本文为 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异步调用

相关新闻

  • 2026年7月最新青岛万国官方售后客服服务电话及地址网点大全 - 万国中国官方服务中心
  • 暑假出游游戏党救星随身畅玩 PC 端游
  • 2026北京LV回收哪家正规?毓典全国连锁、资质齐全合规回收LV箱包腕表 - 旧奢新值

最新新闻

  • 迪文串口屏CRC16校验源码包:含Modbus与TapeZBC双模式,支持STM32/51/AVR裸机移植
  • MATLAB一键生成涡旋光束:调节拓扑荷数l实现高斯光束相位螺旋化与OAM可视化
  • 遗传算法工业落地:精英策略与自适应算子实战指南
  • OpenCV C++视频读取失败:从路径到FFmpeg的完整排查指南
  • 2026年香薰定制源头工厂:自产+支持贴牌 - 香氛评价员
  • 爱彼中国官方售后服务中心|地址与客户服务热线权威信息声明(2026年7月更新) - 爱彼中国官方服务中心

日新闻

  • AWS SSM安全运维实践:零公网暴露的合规远程开发方案
  • Tableau 2024.1 图表选择指南:5种业务场景与最佳图表类型匹配
  • dsPIC33FJ与CMT-8540S-SMT在嵌入式音频处理中的高效应用

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号