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

langchain学习--提示词

langchain提示词学习要点

提示词(Prompt)在LangChain中扮演着核心角色,直接影响模型输出的质量和准确性。以下是关键学习方向和实践方法:

基础结构设计

  • 明确指令:直接说明任务要求,例如"生成一份关于气候变化的报告摘要"
  • 提供上下文:添加背景信息提升相关性,如"针对2023年联合国气候报告数据"
  • 示例示范:通过few-shot learning提供输入输出示例

高级优化技巧

  • 变量插值:使用{variable}动态插入内容
  • 模板组合:将多个提示模板串联使用
  • 输出解析:指定返回格式如JSON或特定数据结构

常见应用场景

  • 问答系统:设计带知识库约束的提示
  • 文本生成:控制输出长度和风格
  • 数据提取:指定结构化输出要求

调试与评估

  • 记录不同提示版本的输出结果
  • 使用定量指标评估提示效果
  • 通过A/B测试比较不同模板

最佳实践

  • 保持提示词简洁明确
  • 逐步迭代优化提示内容
  • 考虑模型的具体版本特性
  • 处理敏感内容时添加安全约束

下面我介绍三个提示词类:

PromptTemplate

PromptTemplate 用于创建结构化提示词模板,允许动态插入变量。适用于需要重复使用相同提示结构但内容变化的场景。

核心功能

  • 支持变量插值:通过input_variables定义占位符,运行时填充具体值。
  • 支持模板格式化:支持 Jinja2 或 f-string 等语法,灵活控制输出格式。

示例代码

from langchain.prompts import PromptTemplate template = "请用{style}风格写一篇关于{topic}的文章。" prompt = PromptTemplate(input_variables=["style", "topic"], template=template) filled_prompt = prompt.format(style="幽默", topic="人工智能") print(filled_prompt)

PromptTemplate 提供了两种填充模板的方法

方法返回类型用途
.formatstr直接返回字符串
.format_promptStringPromptValue返回包装对象(更通用)
prompt=PromptTemplate.from_template( "我的邻居是{lastname},刚生了{gender},你帮我起个名字,简单回答,给出我理由" ) # 方式 1:.format() 返回字符串 prompt_text = prompt.format(lastname="张", gender="男") print(type(prompt_text)) # <class 'str'> # 方式 2:.format_prompt() 返回 PromptValue prompt_value = prompt.format_prompt(lastname="张", gender="男") print(type(prompt_value)) # StringPromptValue

FewShotPromptTemplate

FewShotPromptTemplate 用于构建包含示例的提示词,通过少量示例指导模型生成符合预期的输出。适用于需要上下文学习的任务。

核心功能

  • 示例插入:通过examples参数提供示例列表,每个示例可包含输入和输出。
  • 示例格式化:支持自定义示例的展示格式(如前缀、分隔符等)。
  • 结构:
  • FewShotPromptTemplate(
    examples=None, # 示例数据列表
    example_prompt=None, # 示例的格式化模板
    prefix=None, # 前缀(指令部分)
    suffix=None, # 后缀(用户输入部分)
    input_variables=None, # 需要动态注入的变量
    example_separator="\n\n" # 示例之间的分隔符
    )

示例代码

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate from langchain_community.llms.tongyi import Tongyi # 1. 定义示例模板 example_template = PromptTemplate.from_template( "评论:{review}\n情感:{sentiment}" ) # 2. 准备示例数据 examples = [ { "review": "这部电影太棒了,演员演技在线!", "sentiment": "正面" }, { "review": "剧情拖沓,浪费时间,不推荐。", "sentiment": "负面" }, { "review": "画面精美,但故事一般般。", "sentiment": "中性" } ] # 3. 创建 FewShot Prompt few_shot_prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_template, prefix="请判断以下评论的情感倾向(正面/负面/中性):", suffix="评论:{new_review}\n情感:", input_variables=["new_review"] ) # 4. 生成 Prompt prompt_text = few_shot_prompt.invoke({ "new_review": "服务态度很好,但是价格有点贵" }).to_string() print(prompt_text) """ # 输出: # 请判断以下评论的情感倾向(正面/负面/中性): # # 评论:这部电影太棒了,演员演技在线! # 情感:正面 # # 评论:剧情拖沓,浪费时间,不推荐。 # 情感:负面 # # 评论:画面精美,但故事一般般。 # 情感:中性 # # 评论:服务态度很好,但是价格有点贵 # 情感: """ # 5. 调用模型 model = Tongyi(model="qwen-plus") response = model.invoke(prompt_text) print(response) # 输出:中性

高级用法
动态选择示例(Example Selector)当示例很多时,可以智能选择最相关的示例:

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate from langchain_core.example_selectors import SemanticSimilarityExampleSelector from langchain_community.vectorstores import FAISS from langchain_community.embeddings import DashScopeEmbeddings # 1. 准备大量示例 examples = [ {"input": "你好", "output": "Hello"}, {"input": "再见", "output": "Goodbye"}, {"input": "谢谢", "output": "Thank you"}, {"input": "对不起", "output": "Sorry"}, # ... 更多示例 ] # 2. 创建示例选择器(基于语义相似度) example_selector = SemanticSimilarityExampleSelector.from_examples( examples=examples, embeddings=DashScopeEmbeddings(), # 使用嵌入模型 vectorstore_cls=FAISS, # 向量数据库 k=2 # 选择最相似的 2 个示例 ) # 3. 使用动态示例 few_shot_prompt = FewShotPromptTemplate( example_selector=example_selector, # ⭐ 使用选择器代替 examples example_prompt=PromptTemplate.from_template( "输入:{input}\n输出:{output}" ), prefix="翻译以下中文为英文:", suffix="输入:{new_input}\n输出:", input_variables=["new_input"] ) # 4. 调用时自动选择最相关的示例 prompt_text = few_shot_prompt.invoke({ "new_input": "早上好" }).to_string() # 会自动选择与"早上好"最相似的 2 个示例(如"你好"、"再见") print(prompt_text)

ChatPromptTemplate

ChatPromptTemplate 专为对话场景设计,支持多角色消息(如系统、用户、AI)的模板化。适用于聊天机器人或交互式对话任务。

核心功能

  • 多角色支持:通过SystemMessagePromptTemplateHumanMessagePromptTemplate等区分角色。
  • 消息序列化:将多条消息按顺序组合为对话上下文。

示例代码

# ChatPromptTemplate: 支持注入任意数量的历史会话消息 from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder from langchain_community.chat_models.tongyi import ChatTongyi from dotenv import load_dotenv load_dotenv() chat_prompt_template=ChatPromptTemplate.from_messages( [ ("system", "请按照唐诗的格式生成唐诗,且你是边塞诗人"), MessagesPlaceholder(variable_name="history"), ("human", "再来一首唐诗") ] ) # 方式 1:使用元组(简洁,推荐用于简单场景) history_data=[ ("human", "请给我写一首唐诗"), ("ai", "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦"), ("human", "好诗好诗,再给我来一首"), ("ai", "西风瘦马,客输西风,西风瘦马,客输西风"), ] # 方式 2:使用 Message 对象(规范,推荐用于复杂场景) history_data_messages = [ HumanMessage(content="请给我写一首唐诗"), AIMessage(content="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦"), HumanMessage(content="好诗好诗,再给我来一首"), AIMessage(content="西风瘦马,客输西风,西风瘦马,客输西风"), ] #链式结构 model=ChatTongyi(model="qwen-plus") chai=chat_prompt_template|model res=chai.invoke(input={"history":history_data}) print(res.content)

关键区别

  • PromptTemplate:基础模板,适用于单次输入输出。
  • FewShotPromptTemplate:通过示例引导模型,适合小样本学习。
  • ChatPromptTemplate:面向多轮对话,支持角色化消息编排。
http://www.jsqmd.com/news/608813/

相关文章:

  • 值类型与引用类型:别再只背“栈和堆”了,看这 个实际影响舱
  • 用Matlab从零复现RRT路径规划:手把手教你写代码并可视化避障过程
  • MATLAB里画双移线总报错?手把手教你解决MPC轨迹跟踪仿真中的参考轨迹绘制难题
  • Agilent16092A 是德Keysight16092A测试夹具
  • 保姆级教程:用Hikyuu框架从零搭建你的第一个量化策略(附完整代码)
  • 周红伟:OpenClaw+DeepSeek V4灰度+Mercor训练数据泄露,DeepSeek今天发布
  • 2026执医报班推荐:零基础、在职考生稳妥备考攻略 - 医考机构品牌测评专家
  • 2026年4月机械锚栓直销厂家有哪些,锚栓螺栓稳定性,连接牢固不松动 - 品牌推荐师
  • 美客多选品助手怎么用?爆款产品打造揭秘,美客多选品助手实操指南! - 跨境小媛
  • 小米6刷机全攻略:从解锁BL到Recovery刷入
  • 2026年4月市面上正规的四通球阀订制厂家推荐,四通球阀选哪家优选品牌推荐与解析 - 品牌推荐师
  • 基于YOLOv10深度学习的蘑菇毒性检测系统(YOLOv10+YOLO数据集+UI界面+Python项目+模型)
  • 用 SEONIB批量生成 SEO 博客来提升 Google 排名
  • 必收藏的wordpress主题开发手册
  • ThinkPHP6.0 物联网实战:基于Workerman/MQTT与phpMQTT构建设备通信中枢
  • Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”
  • Qwen-Image-Edit-2509小白指南:如何用自然语言给图片“增删改查”,简单易懂
  • 2026年4月市面上优质的吨袋包装机制造厂家推荐,破拱器/振动料斗/振动平台/振动筛,吨袋包装机供应商推荐分析 - 品牌推荐师
  • Linux设备驱动 -- RTC驱动移植DS1339
  • Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接戮
  • Stable-Diffusion-v1-5-archive多分辨率实践:512/768/1024输出适配与长宽比控制
  • 图书借阅系统
  • 使用 C# 删除 PDF 中的数字签名咐
  • 06OpenCVSharp角点检测与检测平整度
  • 2026年4月国内汽车后视镜热弯模具直销厂家,铝行业精炼用热鼎盘/硅酸钙保温管,汽车后视镜热弯模具直销厂家推荐分析 - 品牌推荐师
  • Nginx本地缓存
  • 扫雷游戏(优化)
  • 避坑指南:ESP32C3开发板音频系统常见问题排查(I2S+ES8311实战)
  • AI新手必读:从零开始,彻底搞懂AIGC与大模型(收藏版)
  • 别再死记硬背SAC公式了!用CleanRL代码逐行拆解,手把手教你理解熵正则化与重参数化