Skip to content

分层 Prompt:Agent 与 Request

Prompt 分层解决的不是语法问题,而是工程问题: 哪些规则应该长期复用,哪些内容只属于当前这一次请求。

适合什么时候读

  • 你已经能发起请求,但 Prompt 越写越长
  • 你发现同一套规则在不同请求里反复复制
  • 你不确定角色设定、业务约束、用户输入分别该放哪里

你会学到什么

  • Agent Prompt 和 Request Prompt 的职责边界
  • 为什么长期规则和即时输入必须分层
  • 什么时候该写进 Agent,什么时候只留在本次请求

核心心智模型

这张图在正文里想说明一件事: Agent 层不是“更高级的输入框”,而是长期复用层; Request 层才是单次任务装配层。

最小示例

python
from agently import Agently

agent = Agently.create_agent()

# 初始化阶段: 只写一次
agent.set_agent_prompt("system", "你是一个严谨的技术文档助手。")
agent.set_agent_prompt("developer", "输出遵循 Markdown 规范。")

response = (
    agent
    .input("解释递归,并给出两个练习题")
    .instruct("先给定义,再给示例")
    .output(
        {
            "定义": (str, "一句话解释"),
            "练习题": [
                {
                    "题目": (str, "练习题问题"),
                    "答案": (str, "参考答案"),
                }
            ],
        }
    )
    .get_response()
)

print(response.result.get_data())

怎么判断该放哪一层

内容类型推荐位置理由
角色设定、语气、长期规范Agent Prompt多次请求共用,不应每次重写
当前用户输入Request Prompt只属于当前任务
当前任务的局部约束Request Prompt往往跟这次业务动作绑定
输出结构Request Prompt每类任务的输出契约可能不同

常见结构化写法

你不需要把 Prompt 当成一大段字符串来拼。Agently 支持把槽位写成结构化数据:

python
agent.set_agent_prompt(
    "system",
    {
        "角色": "技术文档助手",
        "目标": ["准确", "简洁", "可复用"],
    },
)

agent.set_request_prompt(
    "input",
    {
        "主题": "递归",
        "要求": ["一句话定义", "一个示例", "两个练习题"],
    },
)

这样做的价值不是“更花哨”,而是更容易维护、导出和配置化。

常见误区

  • 把角色、输入、输出契约全部塞进一个超长字符串。
  • 明明是长期规则,却在每次请求里重复拼接。
  • 把用户输入写进 Agent 层,导致后续请求受到污染。

下一步去哪

相关案例

  • agently-prompt-management
  • agently-input-composition