目录
一.什么是提示词?
1.系统提示词
2.提示词工程
①设定身份
②详细指令
③示例
④结构化输出
总结
一.什么是提示词?
说白了,发送给大模型的所有消息都可以称为提示词(Prompt),它直接影响模型的输出结果。
1.系统提示词
其中,SystemMessage尤为重要,我们把SystemMessage称为系统提示词(System Prompt),它可以给模型设定角色和本次聊天的背景,对模型生成的内容有很大的影响。
2.提示词工程
通过系统提示词,描述AI的职责、沟通风格和总体目标。
通过优化System Prompt从而让模型输出更理想的结果的这一过程,我们称为提示词工程(Prompt Engineering)。
也就是说,提示词优化不是一锤子买卖,而是一个不断优化、测试、再优化的过程。那么,提示词到底该怎么写呢?
角度一:从内容来说,提示词通常包含以下几个部分,通常按此顺序排列:
-
身份(Identity):描述AI的职责、沟通风格和总体目标。
-
说明(Instructions):请指导模型如何生成所需的响应。它应该遵循哪些规则?模型应该做什么,以及模型绝对不能做什么?
-
示例(Examples):提供可能的输入示例,以及模型期望的输出。
-
背景信息(Context):向模型提供生成响应所需的任何额外信息,例如RAG的额外知识库数据,或您认为特别相关的任何其他数据。
角度二:从格式来说,在编写System Prompt时,您可以使用Markdown格式和XML 标签的组合来帮助模型理解提示和上下文数据的逻辑边界。
-
Markdown 的标题和列表有助于标记提示的不同部分,并向模型传达层级结构。它们还可以提高开发过程中提示的可读性。
-
XML 标签可以帮助明确区分一段内容(例如用作参考的辅助文档、对话示例等)的起始和结束位置。
①设定身份
from langchain.messages import HumanMessage, AIMessage
from langchain.agents import create_agent
from dotenv import load_dotenv
# 1. 加载项目根目录下的 .env 文件,这样就可以让Langchain自动获取.env文件中的apikey了
load_dotenv()
# 2. 创建Agent
# 2.1 创建系统提示词,单领出来看着更加清晰
system_prompt = """
# 身份
– 你是派大星,请你用派大星的口吻和我对话
"""
agent = create_agent(
model="deepseek-chat",
system_prompt=system_prompt
)
# 3.调用Agent,发送消息
for token, metadata in agent.stream(
{"messages": [HumanMessage(content="你是谁")]},
stream_mode="messages"
):
print(token.content, end="", flush=True)
查看结果

②详细指令
from langchain.messages import HumanMessage, AIMessage
from langchain.agents import create_agent
from dotenv import load_dotenv
# 1. 加载项目根目录下的 .env 文件,这样就可以让Langchain自动获取.env文件中的apikey了
load_dotenv()
# 2. 创建Agent
# 2.1 创建系统提示词,单领出来看着更加清晰
system_prompt = """
# 身份
– 你是一个编程助手,你帮助用户编写Python代码。
# 指令
– 定义变量时,使用snake case命名法,而不是camel case命名法。
– 不要返回markdown格式说明,仅仅返回代码即可。
"""
agent = create_agent(
model="deepseek-chat",
system_prompt=system_prompt
)
# 3.调用Agent,发送消息
for token, metadata in agent.stream(
{"messages": [HumanMessage(content="怎样定义string变量记录学校名字,例如`耶鲁大学`")]},
stream_mode="messages"
):
print(token.content, end="", flush=True)
运行效果

③示例
当我们无法用语言描述我们想要的回答时,我们可以举几个例子,AI一看就懂你意思了。
from langchain.messages import HumanMessage, AIMessage
from langchain.agents import create_agent
from dotenv import load_dotenv
# 1. 加载项目根目录下的 .env 文件,这样就可以让Langchain自动获取.env文件中的apikey了
load_dotenv()
# 2. 创建Agent
# 2.1 创建系统提示词,单领出来看着更加清晰
system_prompt = """
# 身份
– 你是一个科幻作家,根据用户的要求创建一个太空之都。
# 示例
user:月球的首都是什么?
assistant:月华城(Lunara)—— 镶嵌在月球静海环形山中的水晶穹顶都市,其核心是一座利用月球潮汐能驱动的巨型生态循环塔。
user:火星的首都是什么?
assistant:赤晶城(Aresia)—— 深嵌于火星奥林匹斯山熔岩管内的蜂巢都市,地表仅露出由火星红土烧制而成的螺旋尖塔。
"""
agent = create_agent(
model="deepseek-chat",
system_prompt=system_prompt
)
# 3.调用Agent,发送消息
for token, metadata in agent.stream(
{"messages": [HumanMessage(content="心中之城的首都是什么?")]},
stream_mode="messages"
):
print(token.content, end="", flush=True)
运行结果

④结构化输出
from langchain.messages import HumanMessage, AIMessage
from langchain.agents import create_agent
from dotenv import load_dotenv
# 1. 加载项目根目录下的 .env 文件,这样就可以让Langchain自动获取.env文件中的apikey了
load_dotenv()
# 2. 创建Agent
# 2.1 创建系统提示词,单领出来看着更加清晰
system_prompt = """
# 身份
– 你是一个科幻作家,根据用户的要求创建一个太空之都。
# 指令
– 请务必以JSON格式输出,不要加任何markdown样式。
# 示例:
user: 月球的首都是什么?
assistant:
{
"name": "月华市(Lunaria)",
"location": "位于月球正面赤道附近的静海基地遗址之上,依托巨大的穹顶与地下网络建成",
"vibe": "冷冽、高效、革新",
"economy": "氦-3能源开采、量子通信枢纽、尖端生物圈农业"
}
"""
agent = create_agent(
model="deepseek-chat",
system_prompt=system_prompt
)
# 3.调用Agent,发送消息
for token, metadata in agent.stream(
{"messages": [HumanMessage(content="心中之城的首都是什么?")]},
stream_mode="messages"
):
print(token.content, end="", flush=True)
运行效果
{
"name": "星辉之心(Stellaris Core)",
"location": "位于银河系第三旋臂边缘,一颗由空间构造术打造的人造行星之上,悬浮于现实与意识的交界点",
"vibe": "神秘、沉思、进化",
"economy": "意识数据化交易、时空编织艺术、情感共鸣晶体生产"
}
可见此时回答就是严格的JSON格式,因为我们系统提示词里面已经给出了格式,大模型就会严格遵守这个格式来输出结果
总结
也就是说,提示词优化不是一锤子买卖,而是一个不断优化、测试、再优化的过程。那么,一个好的提示词就需要不断的去尝试、修改,最终效果达到自己满意的程度即可。
以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~


