前端别到处手拼 prompt,我把它收口到一处

4 阅读2分钟

聊个观点。做了大半年 AI 功能,我越来越确信一件事:前端代码里到处散落着手拼的 prompt 字符串,是个迟早爆雷的坏味道。 这篇说说我踩的雷和后来的收口做法。

先看看烂成什么样

项目早期没规划,prompt 哪用哪写。组件 A 里:

const prompt = `你是客服,用户问:${q},请简洁回答`

组件 B 里又来一句风格略不同的:

const prompt = `请你作为助手,回答以下问题:${q}`

页面 C、工具函数 D 里还有几处。一开始没感觉,直到产品说"统一一下助手的语气,别太机械"。我得去全项目 grep 这些字符串,一处处改,还总担心漏掉哪个角落。改完上线,果然漏了一个 webview 里的,语气不一致被用户截图吐槽。

散落手拼的几宗罪

  • 改一次提示词要全项目翻,漏改是常态。
  • prompt 和业务变量混在 UI 代码里,可读性差,review 时一坨字符串没人想看。
  • 没法测、没法版本管理,谁改了哪句、为什么改,全靠 git blame 猜。
  • 注入风险:用户输入直接拼进 prompt 字符串,边界没处理就容易出幺蛾子。

我的收口做法

核心就一句:prompt 不该是前端业务的关注点,把它从代码里赶出去。

我后来把对话的人设、语气、回复格式这些,统一挪到一个能零代码搭智能体的平台上配置。在那儿把"你是谁、怎么说话、答成什么格式、配哪个知识库"一次性配好,前端只管把用户这句话发过去、接回答渲染。前端代码里再也没有一行手拼的 system prompt。

收益很直接:

  • 产品要改语气,后台调一下就行,前端零改动零发布。这条最爽。
  • 前端代码干净了,组件只剩 UI 和数据流,没有混进来的提示词字符串。
  • 提示词有了统一的归口,谁改、改了啥,有迹可循。

也不是没代价

  • 灵活度让渡了一部分。 某些需要前端根据运行时上下文动态拼一小段的场景,被收口后就得绕一下,不如直接拼字符串自由。
  • 多了一个外部依赖。 提示词配置不在代码仓库里,前端 review 看不到全貌,得去那个平台看,协作上多一道沟通。

但权衡下来我认。前端到处手拼 prompt 这事,规模一上来必然失控,早收口早省心。

模型我接的讯飞 MaaS,现成 API,prompt 也不落在前端代码里,清爽。你们的 prompt 都怎么管?散在代码里还是收口了?评论区聊聊。