欢迎光临
我们一直在努力

什么是提示词工程?一文详解

目录

一.什么是提示词?

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格式,因为我们系统提示词里面已经给出了格式,大模型就会严格遵守这个格式来输出结果

总结

也就是说,提示词优化不是一锤子买卖,而是一个不断优化、测试、再优化的过程。那么,一个好的提示词就需要不断的去尝试、修改,最终效果达到自己满意的程度即可。

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

赞(0)
未经允许不得转载:171主机测评 » 什么是提示词工程?一文详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址