欢迎光临
我们一直在努力

Prompt Builder 架构详解:为什么 Prompt 不应该手工拼接

前言

很多 AI 项目最开始都是这样实现的:

const prompt = `
系统提示词

历史消息

RAG 内容

用户问题
`

然后直接发送给模型。

Demo 阶段没问题。

但是当系统开始支持:

  • 多轮对话;
  • RAG;
  • Memory;
  • Tool Calling;
  • 多 Agent;

问题会越来越严重。

例如:

  • Prompt 越来越长;
  • 上下文顺序混乱;
  • Tool 输出污染 Prompt;
  • Token 成本失控;
  • 很难维护;
  • 不同模块互相耦合。

这时候,Prompt 已经不应该被看成一个字符串。

而应该被看成:

一个动态生成的上下文系统。

Prompt Builder 正是解决这个问题的核心组件。


Prompt 不应该是字符串

很多开发者:

prompt += memory;
prompt += rag;
prompt += history;

不断 append。

最后:

Prompt 变成几千行。

没有优先级。

没有结构。

没有可维护性。

实际上:

Prompt 应该是一棵树。

而不是字符串。


Prompt 的组成部分

一个成熟系统的 Prompt 通常包含:

System Prompt

↓

Safety Rules

↓

Working Memory

↓

Long-term Memory

↓

RAG Context

↓

Tool Result

↓

History

↓

Current Question

这些部分:

重要性不同。

生命周期不同。

更新频率也不同。

因此:

不应该混在一起。


System Prompt 是最稳定的一层

例如:

你是一名专业技术助手。

不知道时请明确说明。

不要编造答案。

System Prompt 变化频率最低。

通常:

几十天甚至几个月都不会变化。

因此:

可以缓存。

单独维护。

不要和用户消息混在一起。


Working Memory

工作记忆:

最近:

10~20 条消息。

负责:

当前任务。

生命周期:

几分钟。

通常:

Redis。

动态生成。


Long-term Memory

长期偏好。

例如:

使用 TypeScript。

使用 Vue3。

喜欢 Feature First。

不需要每次都加载。

推荐:

Embedding 检索。

按需注入。

否则:

Prompt 会不断膨胀。


RAG Context

知识库内容。

特点:

变化快。

数量大。

不应该全部加入。

推荐:

TopK:

3~5。

控制:

1000 token。

否则:

容易污染上下文。


Tool Result

最容易出问题的一层。

错误做法:

把:

数据库结果。

文件内容。

搜索结果。

全部放进去。

正确方式:

先压缩。

再注入。

例如:

不要:

1000 行 SQL。

而是:

最近 7 天新增订单 35 条。

这样:

Prompt 更干净。


Prompt Builder 的核心思想

不是:

字符串拼接。

而是:

节点组合。

例如:

System Node

Memory Node

RAG Node

Tool Node

History Node

User Node

每个节点:

独立生成。

最后:

统一排序。

生成 Prompt。

这样:

维护成本大幅降低。


Token Budget

Prompt Builder 最重要的能力:

预算。

例如:

总预算:

8000 token。

其中:

System:

1000

Memory:

1000

RAG:

2000

History:

3000

Current Question:

1000

超出预算时:

自动裁剪。

而不是:

无限增长。


Prompt Builder 与 Agent

未来:

Prompt Builder 很可能成为:

Agent Framework 的核心。

因为:

Planner。

Memory。

RAG。

Tool。

最终都需要通过 Prompt Builder 进入模型。

它相当于:

LLM 的操作系统。


总结

Prompt 不应该是字符串。

而应该是:

上下文编排系统。

未来优秀 Agent 的竞争,

很大程度上会变成:

谁拥有更好的 Prompt Builder。

赞(0)
未经允许不得转载:X记录空间 » Prompt Builder 架构详解:为什么 Prompt 不应该手工拼接