
前言本文为 LangChain 提示词模板配套学习笔记覆盖两种主流提示模板、四种模型调用方式、占位符复用技巧附带适配阿里云通义千问兼容 OpenAI 接口完整可运行代码可直接复制运行。前置环境准备1. 安装依赖在项目虚拟环境执行pip install langchain langchain-openai python-dotenv2. 配置密钥项目根目录新建.env文件填入阿里云 DashScope KeyenvaliQwen-apisk-你的阿里云百炼dashscope密钥一、提示词模板基础分类日常开发中提示词模板分为 4 类95% 业务场景只用前两种后两种仅做了解即可PromptTemplate纯文本大模型专用模板字符串拼接填充变量ChatPromptTemplate对话大模型通义千问 / GPT专用区分 system/human/ai 角色消息FewShotPromptTemplate少样本学习模板低频使用PipelinePrompt管道组合模板仅了解概念ChatPromptTemplate 构造入参格式实例化传入messages支持 3 种格式元组列表[(role, content)]字典列表[{role: xxx, content: xxx}]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, thingAI应用, user_input7 5等于多少 ) print( 格式化后的对话消息列表 ) print(prompt_messages) # 4. 初始化阿里云通义千问大模型 llm init_chat_model( modelqwen-plus, model_provideropenai, api_keyapi_key, base_urlhttps://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( modelqwen-plus, model_provideropenai, api_keyapi_key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1 ) # 通用对话模板 template ChatPromptTemplate([ (system, 你是简洁回答助手简短输出答案), (human, {question}) ]) # ---------------------- 1. 同步调用 invoke日常首选 ---------------------- def sync_invoke_demo(): print( 1. 同步调用 invoke ) msg template.format_messages(question9 * 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, flushTrue) print(\n\n) # ---------------------- 3. 批处理 batch批量多问题一次性请求 ---------------------- def batch_demo(): print( 3. 批处理 batch ) input_list [ {question: 11等于几}, {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问题{idx1}输出{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.pyfrom 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(rolePython工程师, query什么是装饰器) print(纯文本提示词, prompt_str, \n) # 3. 模型调用 llm init_chat_model( modelqwen-plus, model_provideropenai, api_keyapi_key, base_urlhttps://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(jobAI开发工程师, name小谷AI) # 仅传入剩余变量 msg fixed_template.format_messages(user_q解释提示词模板) print(msg)六、踩坑解决方案代码报错修复Missing credentials 密钥缺失必须导入dotenv并执行load_dotenv().env文件名称不能写错变量名和代码os.getenv()保持一致ChatPromptTemplate 调用模型报错对话模板必须使用format_messages()不能用format()EnvForge 插件读取.env 异常关闭其他.env 相关插件清除 IDE 缓存重启接口访问失败base_url 固定为阿里云兼容地址https://dashscope.aliyuncs.com/compatible-mode/v1model 填写qwen-plus。七、调用方式选择总结简单单次问答invoke同步调用前端实时打字输出stream流式调用批量多条问题处理batch批处理高并发服务、防止主线程阻塞ainvoke异步调用