玩转 LangChain:从 Prompt 模板到多场景 AI 交互实战

在大模型应用开发中,Prompt 工程是核心环节之一,而 LangChain 作为主流的大模型开发框架,为 Prompt 的灵活构建与调用提供了强大支撑。本文将结合实际代码案例,带你从基础 Prompt 模板到少样本(Few-Shot)提示模板,一步步掌握 LangChain 在多场景下的 AI 交互实战技巧。

一、LangChain 核心:Prompt 模板的基础认知

LangChain 的langchain_core.prompts模块提供了丰富的 Prompt 模板类,能够精准定义系统消息、人类消息、AI 消息的格式,让 Prompt 构建更结构化、可复用。核心优势在于:

  • 支持动态变量注入,适配不同输入场景;
  • 分离 Prompt 结构与业务数据,降低维护成本;
  • 兼容多类型消息格式,贴合大模型交互逻辑。

二、实战场景 1:多语言风格化翻译

翻译场景中,我们常需要适配不同源语言、目标语言和文本风格,基于 LangChain 的 Prompt 模板可高效实现这一需求。

核心代码实现

python 复制代码
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_openai import ChatOpenAI

# 1. 定义系统提示模板(翻译角色与规则)
system_template_text = "你是一位专业的翻译,能够将{input_language}翻译成{output_language},并且输出文本会根据用户要求的任何语言风格进行调整。请只输出翻译后的文本,不要有任何其它内容。"
system_prompt_template = SystemMessagePromptTemplate.from_template(system_template_text)

# 2. 定义人类提示模板(待翻译文本+风格要求)
human_template_text = "文本:{text}\n语言风格:{style}"
human_prompt_template = HumanMessagePromptTemplate.from_template(human_template_text)

# 3. 初始化大模型(以通义千问为例)
model = ChatOpenAI(
    model="qwen-plus",
    openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 4. 多组输入批量翻译
input_variables = [
    {
        "input_language": "汉语",
        "output_language": "汉语",
        "text": "勿以善小而不为,勿以恶小而为之。",
        "style": "白话文"
    },
    {
        "input_language": "法语",
        "output_language": "英语",
        "text": "Je suis désolé pour ce que tu as fait",
        "style": "古英语"
    },
    {
        "input_language": "俄语",
        "output_language": "意大利语",
        "text": "Сегодня отличная погода",
        "style": "网络用语"
    },
    {
        "input_language": "韩语",
        "output_language": "日语",
        "text": "너 정말 짜증나",
        "style": "口语"
    }
]

# 执行翻译并输出结果
for input in input_variables:
    system_prompt = system_prompt_template.format(
        input_language=input["input_language"],
        output_language=input["output_language"]
    )
    human_prompt = human_prompt_template.format(
        text=input["text"],
        style=input["style"]
    )
    response = model.invoke([system_prompt, human_prompt])
    print(f"【输入】{input['text']}")
    print(f"【输出】{response.content}\n")

关键要点

  • SystemMessagePromptTemplate定义 AI 的角色与核心规则,确保翻译行为的一致性;
  • HumanMessagePromptTemplate接收用户的动态输入(文本、风格),灵活适配不同翻译需求;
  • 批量处理输入变量时,只需循环注入参数,无需重复定义 Prompt 结构,提升开发效率。

三、实战场景 2:少样本(Few-Shot)客户信息格式化

当需要 AI 按照固定格式处理数据时,Few-Shot 提示模板能通过示例让 AI 快速理解格式要求,无需复杂的规则定义。

核心代码实现

python 复制代码
from langchain_core.messages import HumanMessage
from langchain_core.prompts import FewShotChatMessagePromptTemplate, ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 1. 定义单条示例的Prompt模板
example_prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "格式化以下客户信息:\n姓名 -> {customer_name}\n年龄 -> {customer_age}\n 城市 -> {customer_city}"),
        ("ai", "##客户信息\n- 客户姓名:{formatted_name}\n- 客户年龄:{formatted_age}\n- 客户所在地:{formatted_city}")
    ]
)

# 2. 准备示例数据(让AI学习格式)
examples = [
    {
        "customer_name": "张三",
        "customer_age": "27",
        "customer_city": "长沙",
        "formatted_name": "张三",
        "formatted_age": "27岁",
        "formatted_city": "湖南省长沙市"
    },
    {
        "customer_name": "李四",
        "customer_age": "42",
        "customer_city": "广州",
        "formatted_age": "42岁",
        "formatted_city": "广东省广州市"
    },
]

# 3. 构建Few-Shot提示模板
few_shot_template = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

# 4. 组合最终Prompt(示例+新输入)
final_prompt_template = ChatPromptTemplate.from_messages(
    [
        few_shot_template,
        ("human", "{input}"),
    ]
)

# 5. 注入新的客户信息并调用模型
final_prompt = final_prompt_template.invoke({
    "input": "格式化以下客户信息:\n姓名 -> 王五\n年龄 -> 31\n 城市 -> 郑州"
})

model = ChatOpenAI(
    model="qwen-plus",
    openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
response = model.invoke(final_prompt)
print(response.content)

关键要点

  • FewShotChatMessagePromptTemplate封装示例数据和示例模板,让 AI 通过示例学习格式规则;
  • 示例数据只需贴合目标格式,无需额外说明,符合大模型的学习特性;
  • 新输入只需按统一格式传入,AI 会自动沿用示例的格式化逻辑。

四、实战场景 3:定制化角色交互(数学课助教)

除了结构化 Prompt,LangChain 也支持直接通过消息列表定义 AI 角色,实现轻量化的定制化交互。

核心代码实现

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

# 初始化模型
model = ChatOpenAI(
    model="qwen-plus",
    openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=1.2,  # 调整随机性,值越高回答越灵活
    max_tokens=300    # 限制回答长度
)

# 定义角色与问题
messages = [
    SystemMessage(content="请你作为我的数学课助教,用通俗易懂且直接的语言帮我解释数学原理。"),
    HumanMessage(content="什么是傅里叶级数?"),
]

# 调用模型并输出
response = model.invoke(messages)
print(response.content)

关键要点

  • SystemMessage直接定义 AI 的角色定位(数学课助教)和回答风格(通俗易懂、直接);
  • temperature参数控制回答的随机性,知识性场景可适当降低,创意场景可提高;
  • max_tokens限制输出长度,避免回答过于冗长。

五、总结与拓展

LangChain 的 Prompt 模板体系覆盖了从简单角色定义到复杂少样本提示的全场景需求,核心价值在于:

  1. 结构化:分离 Prompt 结构与业务数据,降低耦合度;
  2. 复用性:模板可多次调用,适配批量处理场景;
  3. 灵活性:支持动态变量、多语言风格、少样本学习,适配不同业务需求。

在实际开发中,可结合场景进一步优化:

  • 针对复杂场景,可组合多种 Prompt 模板(如 System+Few-Shot+Human);
  • 调整模型参数(temperature、max_tokens)适配不同交互需求;
  • 结合 LangChain 的其他模块(如记忆、工具调用),构建更复杂的 AI 应用。

掌握 LangChain 的 Prompt 模板技巧,能让大模型交互从 "零散的文本指令" 升级为 "结构化的工程化方案",大幅提升开发效率与交互效果。

相关推荐
华盛AI1 小时前
【键盘驱动的效率平台Raycast介绍】
人工智能
王_teacher1 小时前
LSTM 原理详解手动编写LSTM模型代码
人工智能·llm·nlp·lstm
CV-杨帆1 小时前
YOLO26 检测系统使用教程
人工智能
叼馒女友郭芙蓉1 小时前
structlog:Python 结构化日志终极解决方案
人工智能
幂律智能1 小时前
Prompt不是提问,而是任务定义
大数据·人工智能·prompt
闵孚龙1 小时前
AI Agent 长上下文压缩全解析:自动压缩、记忆治理、Prompt Cache、上下文工程,让长会话不跑偏
人工智能·架构·prompt·claude
子午1 小时前
基于YOLO的玫瑰叶片检测系统~Python+深度学习+人工智能+目标检测+YOLOV8算法
人工智能·python·yolo
爱看科技1 小时前
Meta Connect开发者大会定档在即,苹果/微美全息加速抢跑AI+XR消费级赛道
人工智能·xr
kcuwu.1 小时前
博客转抖音视频(文件上传版)Coze工作流实现文档(第一版)
人工智能·音视频·coze