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

LangChain 入门 Prompts 提示词

目录
  • 设置角色和指令
    • 提示词工程
  • 对话示例
  • 格式化输出
  • 基于Model的结构化输出

提示词(Prompt) 就是发送给模型的消息,其中SystemMessage是 系统提示词(system prompt) ,可以给模型设定角色、聊天的背景、任务说明,对模型生成的内容脊很大的影响。

设置角色和指令

在创建模型的时候设定角色,就不需要在每次请求调用的时候,去指定了

# 创建 agent
agent = create_agent(model=model,system_prompt="你是一个天气预报助手。"  # 在这边设置,就不需要每次调用的时候去配置了
)

提示词工程

提示词工程(Prompt Engineering),通过优化提示词使模型输出的结果更符合业务需要的过程。
一般来说,系统提示词(System Prompt)会包含以下几个部分,不是每次都需要全部包含,根据需要进行裁剪,通常按此顺序排列:

  • 身份角色(Identity):你是谁?描述AI的职责、沟通风格和总体目标。
  • 指令说明(Instructions):你能做什么,什么不能做。请指导模型如何生成所需的响应。它应该遵循哪些规则?模型应该做什么,以及模型绝对不能做什么?
  • 对话示例(Examples):你应该怎么做。提供可能的输入示例,以及模型期望的输出。
  • 背景信息(Context):向模型提供生成响应所需的任何额外信息,例如RAG的额外知识库数据,或您认为特别相关的任何其他数据。

在编写 System Prompt 时,你可以使用 Markdown 格式和XML标签的组合来帮助模型理解提示和上下文数据的逻辑边界。

  • Markdown 的标题和列表有助于标记提示的不同部分,并向模型传达层级结构。它们还可以提高开发过程中提示的可读性。
  • XML 标签可以帮助明确区分一段内容(例如用作参考的辅助文档)的起始和结束位置 。

告诉模型,要做什么,不要做什么,减少不必要的输出,少了 Token 节约了钱

# 下面提示词会输出很多东西
# system_prompt = """
# 你是一个编程助手,你帮助用户编写 Python 代码。
# """# 告诉模型,要做什么,不要做什么,减少不必要的输出,少了 Token 节约了钱
system_prompt = """
# 身份
- 你是一个编程助手,你帮助用户编写 Python 代码。# 指令
- 定义变量时,使用 snake case 命名法,而不是 camel case 命名法。
- 不要返回 markdown 格式说明,仅仅返回代码即可。
"""print("创建 agent")
# 创建 agent
agent = create_agent(model=model,system_prompt=system_prompt  # 在这边设置,就不需要每次调用的时候去配置了
)

对话示例

对话示例(Few-Shot examples)是一种为模型提供多个示例的方法,以便它可以学习行为模式并生成更准确的响应。
简单的说就是:让AI学着示例的风格回复

system_prompt = """
# 身份
- 你是一个科幻作家,根据用户的要求创建一个太空之都。#示例,模拟AI的回复,让AI学着示例的风格回复
user:月球的首都是什么?
assistant:月华城(Lunara)一 镶嵌在月球静海环形山中的水晶穹顶都市,其核心是一座利用月球潮汐能驱动的巨型生态循环塔。user:火星的首都是什么?
assistant:赤晶城(Aresia)- 深嵌于火星奥林匹斯山熔岩管内的蜂巢都市,地表仅露出由火星红士烧制而成的螺旋尖塔。
"""

格式化输出

模型擅长自然语言交流和非结构化数据识别,但是传统程序识别结构化的数据会更加方便。所以有时候我们希望模型也能输出固定结构的内容,方便我们解析。

这可以通过系统提示词来实现,我们可以在提示词中指定模型的输出格式,从而使模型的输出更易于解析和使用。

system_prompt = """
# 身份
- 你是一个科幻作家,根据用户的要求创建一个太空之都。# 指令
- 请务必以JSON格式输出,不要加任何markdown样式。#示例,模拟AI的回复,让AI学着示例的风格回复
user:月球的首都是什么?
assistant: 
{"name": "月华市 (Lunaria)","location": "位于月球正面赤道附近的静海基地遗址之上,依托巨大的穹顶与地下网络建成","vibe": "冷冽、高效、革新","economy": "氦-3能源开采、量子通信枢纽、尖端生物圈农业"
}
"""messages = agent.stream({"messages": [HumanMessage(content="金星的首都是什么?")]},stream_mode="messages"
)
{"name": "云冕城 (Aurelia-V)","location": "悬浮于金星北半球约五十公里高空的同温层,由超导气浮基座与碳纤维锚索构成的空中环形群岛","vibe": "空灵、坚韧、云端诗学、浮世琉璃","economy": "超高空恒星光能捕获、大气碳硫循环精炼、微重力气培农业、极端行星气候工程枢纽"
}

完整代码

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from dotenv import load_dotenv
import osfrom langchain_core.messages import SystemMessage, HumanMessage, AIMessageload_dotenv()# 获取环境变更值
base_url = os.getenv("DASHSCOPE_BASE_URL")
api_key = os.getenv("DASHSCOPE_API_KEY")print("初始化模型")
# 初始化模型
model = init_chat_model(model="qwen3.6-plus",model_provider="openai",  # 指定模型提供者(阿里兼容 openai)base_url=base_url,api_key=api_key,temperature=1.5,top_p=0.9,
)# 下面提示词会输出很多东西
# system_prompt = """
# 你是一个编程助手,你帮助用户编写 Python 代码。
# """# 告诉模型,要做什么,不要做什么,减少不必要的输出,少了 Token 节约了钱
system_prompt = """
# 身份
- 你是一个科幻作家,根据用户的要求创建一个太空之都。# 指令
- 请务必以JSON格式输出,不要加任何markdown样式。#示例,模拟AI的回复,让AI学着示例的风格回复
user:月球的首都是什么?
assistant: 
{"name": "月华市 (Lunaria)","location": "位于月球正面赤道附近的静海基地遗址之上,依托巨大的穹顶与地下网络建成","vibe": "冷冽、高效、革新","economy": "氦-3能源开采、量子通信枢纽、尖端生物圈农业"
}
"""print("创建 agent")
# 创建 agent
agent = create_agent(model=model,system_prompt=system_prompt  # 在这边设置,就不需要每次调用的时候去配置了
)print("调用 agent")
messages = agent.stream({"messages": [HumanMessage(content="金星的首都是什么?")]},stream_mode="messages"
)for token, metadata in messages:if token.content:print(token.content, end="", flush=True)

基于Model的结构化输出

在LangChain中,实现结构化输出会更加简单。我们无需自己在提示词中添加描述实现结构化输出,而仅仅是两步即可:

  • 定义一个数据类型(基于pydantic)
  • 创建智能体,设置输出格式

# init_chat_model 中的。qwen3.6-plus 不支持 response_format=CapitalInfo 的方式

from pydantic import BaseModel#首先,我们定义一个类,用来封装模型要输出的数据: 
class CapitalInfo(BaseModel):name: strlocation: strvibe: streconomy: stragent = create_agent(model=model,system_prompt="你是一个科幻作家,根据用户的要求创建一个太空之都。",response_format=CapitalInfo,  # 设置结构化输出的格式
)

完整代码


from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from dotenv import load_dotenv
import osfrom langchain_core.messages import SystemMessage, HumanMessage, AIMessageload_dotenv()# 获取环境变更值
base_url = os.getenv("DASHSCOPE_BASE_URL")
api_key = os.getenv("DASHSCOPE_API_KEY")from pydantic import BaseModelclass CapitalInfo(BaseModel):name: strlocation: strvibe: streconomy: str# 初始化模型
model = init_chat_model(model="qwen3.6-plus",model_provider="openai",  # 指定模型提供者(阿里兼容 openai)base_url=base_url,api_key=api_key,temperature=1.5,top_p=0.9,
)# 告诉模型,要做什么,不要做什么,减少不必要的输出,少了 Token 节约了钱
system_prompt = """
你是一个科幻作家,根据用户的要求创建一个太空之都。
"""print("创建 agent")
# 创建 agent
agent = create_agent(model="deepseek-chat",   # init_chat_model 中的。qwen3.6-plus 不支持  response_format=CapitalInfo 的方式system_prompt=system_prompt,  # 在这边设置,就不需要每次调用的时候去配置了response_format=CapitalInfo,  # 设置结构化输出的格式
)print("调用 agent")
response = agent.invoke({"messages": [HumanMessage(content="金星的首都是什么?")]},
)print(response)
http://www.gsyq.cn/news/1468437.html

相关文章:

  • 从刺绣到触控:基于压阻织物的柔性多点触控传感器DIY指南
  • 【紧急预警】2024Q3起高发:LoRA微调后模型输出重复、loss震荡归零、梯度爆炸——3类反直觉训练故障的CUDA级溯源方案
  • 本地多模态RAG-Fusion:面向文档智能的可控知识处理架构
  • 济南翡翠回收无盲区:从称重、打光到上仪器,全程可视才值得托付 - 开心测评
  • 深入理解select:从I/O多路复用到TCP服务器实战
  • 如何选择最适合您的金属安检门:2026最新选型攻略 - 品牌优选官
  • 基于TPL5111的太阳能定时LED灯系统:低功耗户外照明DIY方案
  • 手把手复现TrackFormer核心:用PyTorch从DETR出发,构建你自己的‘Track Query’推理循环
  • 2025届毕业生推荐的六大降重复率平台推荐榜单
  • 基于STM32与机智云的智能家居安防系统实战开发指南
  • 3分钟掌握Windows安卓应用安装:APK安装器高效运行方案
  • ssm228图书商城网站的设计和开发+vue(文档+源码)_kaic
  • 营销人AI配置速查表:覆盖HubSpot/Marketo/Adobe+国产平台的12套预验证参数模板(限时开放下载)
  • 表情包素材制作教程,视频截取转 GIF 高效处理实用小窍门 - 软件工具教程方法
  • 解决截图标注难题:Flameshot深度解析与实战技巧
  • 深度解析Awesome-Courses开源项目:从零基础到架构师的全栈计算机科学自学路线与顶级名校课程资源整合指南
  • 从《哈利波特》到热搜分析:手把手用Java HashMap实现一个简易词云生成器
  • 3分钟快速上手:如何为阅读APP配置精品书源打造专属小说库
  • 2026最新:黟县除甲醛公司推荐:黟县甲醛检测、除甲醛治理、室内空气检测、CMA 检测优选指南 - 专注室内空气检测治理
  • 金融NLP进阶:FinBERT-tone在企业财报分析中的10个实战应用策略
  • HashCheck如何让大文件哈希计算从“等待“变成“瞬间完成“?
  • 高效解决PDF文档处理难题:开源PDF补丁丁完全实战指南
  • 从命令行到内核:手把手拆解ipmitool raw命令如何通过ioctl与BMC通信
  • 078、自动起飞控制算法
  • 中小企业低成本接入大模型的商业路径详解
  • 当AI能写诗、作曲、设计logo,人类最后的护城河是什么?20年一线研发总监的终极答案(含未公开的神经可塑性训练协议)
  • 物料清单BOM在橙色云CRDE智橙PLM产品中是如何实现协同的?
  • Python一键批量还原luac/LuaJIT字节码为可读Lua源文件
  • CAN FD 跑不起来?别只怪线缆,看看采样点与位时序
  • HarmonyOS Connect深度解析:从统一方案到开发者认证,如何重塑物联网开发