从0到1打造企业级AI售前机器人——实战指南六:AI产品落地前的系统优化!

0 阅读10分钟

欢迎大家来到企业级AI售前机器人实战系列文章: 从0到1完成一个企业级AI售前机器人的实战指南。

本篇是该系列的第六篇,核心内容是:AI产品最终落地前,要进行的几处系统优化

上一篇我们具体实现了用户的意图逻辑,针对不同的意图分类执行了不同的逻辑,本篇我们需要完成AI产品落地前的几个优化点:

  1. 作为问答系统,首当其冲的就是要对回复速度进行优化
  2. 问题拆分:解决用户一个问题询问多个问题
  3. 意图分提示词:每个意图都有特点的提示词要点
  4. 提示词安全优化:防止提示词泄露、并做出对应的响应

关于我

我是一个十年老程序员、React Contributor,三年前转型至AI在应用层的设计与落地。

目前转型成功,并担任多个AI项目负责人,已经完成了多款智能问答产品的上线、以及TOB产品的功能AI化升级。

本专栏将会基于我过去几年的经验,对各类AI应用落地的方案和思路积累了很多踩坑和迭代经验,进行全方位的AI产品的核心流程拆解!

我相信AI在未来将会是基础设施,而对于普通人而言,基础设施的机会不在基础设施本身,在应用层谋求发展可能是一个不错的出路。

加油!共勉!

回归正题:

上线前的优化

优化一:回复速度

我们既然要优化回复速度,首先就要知道:什么样的回复速度算好?

截止到当前(2025年6月),AI问答系统的用户教育其实已经完成的差不多了。

在用户的心智模型中,这类系统4-6秒的响应延迟已经是完全能够接受了。

没有用户对着一个四秒延迟的AI问答说:这个系统好慢啊。 但是反过来,用户会赞叹一个2s响应的AI问答,觉得系统响应很快。

所以,我们优化的目标也就有了,普遍做到4-6秒,部分响应做到更快。

优化的方案,我们可以分别从大模型侧、提示词侧、用户侧三个方面进行优化:

大模型侧优化

我使用的是火山方舟提供的的上下文缓存(Context API)

先看效果:

指标提升比例案例(前 → 后)
速度+27%4秒 → 2.9秒
费用-70%10万/年 → 3万/年

实测下来,基本上可以做到提升 27% 的响应速度和 减免70% 的费用消耗。

原本我们需要四秒响应,现在只需要不到三秒就可以,70%的费用减免可以从原本的十万每年一下降到三万每年。

上下文缓存(Context API)是火山方舟提供的一个高效的缓存机制,旨在优化生成式AI在不同交互场景下的性能和成本。它通过缓存部分上下文数据,减少重复加载或处理,提高响应速度和一致性。

在方舟中目前存在session 缓存前缀缓存两种缓存方式:

  • session 缓存:保留初始信息,同时自动管理上下文,在动态对话尤其是超长轮次对话场景的可用性更强,搭配模型使用,可以获得高性能和低成本。
  • 前缀缓存:保留初始信息,适合静态Prompt模板的反复使用场景。

session缓存和前缀缓存支持的模型不一样,按照我们常用的模型来说:session缓存支持doubao-1.5,前缀缓存支持doubao-1.5deepseek v3deepseek r1

使用这些模型时,可以考虑使用上下文缓存的能力。

提示词侧优化

大模型的推理时长、首tokens响应时长都是跟大模型提示词长度挂钩的,所以需要让我们的提示词工程师,刻意且有效的控制提示词的输入、输出长度。

  1. 控制提示词输入的长度

提示词的输入长度影响到的是: 大模型的首token延迟。

以火山方舟的doubao-1.5-pro-32k为例:

2000tokens的输入时,首token延迟大约在0.6s-1.8s左右。

20000tokens的输入时,首token延迟大约在2.2s-4s左右。

  1. 控制提示词输出的长度

提示词的输出长度影响到的是:大模型节点任务完成的时间。

同样以火山方舟的doubao-1.5-pro-32k为例:

输出速度通常是30tokens/s左右,如果我们控制输出的内容在30个tokens以内,那么我们就可以控制这部分的耗时在1s内。

用户侧优化

在用户侧的优化耗时方案是:重置用户的等待感。

  1. 可以使用前端使用延迟。

有研究表示:人类对于等待的感知,通常是要达到300ms之后,才会出现明显的等待感。

所以我们可以利用这300ms,来重置用户的等待感。

表现效果是,用户点击发送按钮后,先发送请求,再体现对话界面的交互动画,整个时长设置不要超过300ms。

这样就给我们争取到了300ms的时间。

  1. 增强前端用户的等待体验,降低用户的等待感。

对于AI产品来说,尽量不要再用单纯的loading动画了,用户会很无聊的...

可以采用两种方式:

  1. 有意思的动画

有意思的动画是指:可以转移用户注意力,让用户观察的动画,通常由三帧以上的连贯动画组成。

  1. 告知用户当前再做什么

把loading动画,换成不断变化的AI工作进度,让用户知道AI当前在干什么,也可以显著降低用户的等待感。

流程重置

如果上面所有优化流程都做完了,依然对响应时间不满意,就需要考虑重新调整流程了。

例如:原本整个流程执行下来要四个大模型,就要重新设计流程,改成三个,甚至两个大模型就可以出结果。

优化二:问题拆分

解决用户一个问题询问多个问题的场景,例如:你们的某1产品和某2产品哪个更适合我的场景?

此时对于模型来说:它需要知道某1产品和某2产品的使用场景,然后根据用户的使用场景来进行回答,在意图上来区分就是:某1产品介绍某2产品介绍

这个场景的解决方案通常就是选择进行问题拆分

我们需要新增一步对用户的问题进行拆分的流程,这一步使用提示词来完成即可,然后将多个问题并发进行处理。

unbind_prompt 提示词核心:对当前query按照现有的意图进行拆分和匹配,拆分结果为:能够匹配独立意图的独立的问题

  import { unbind_prompt } from './prompts/index.js'
  // actionData 是包含多个独立问题和意图的数组
  let actionData = await chatModel({
    message: [
      { role: 'user', content: unbind_prompt({ query }) }, 
    ],
    model: Models.db_32k_model,
  })

优化三:意图分提示词

当前所有的意图都是使用output_prompt来执行最终的回复,如图:

lc2.png
  import { output_prompt } from './prompts/index.js'
  // ! 最终回复
  let result = await chatModel({
    message: [
      { role: 'user', content: output_prompt({ query: newQuery, data: actionData }) },
    ],
    model: Models.db_32k_model,
    stream: true
  })
  return result

这样的话,每个意图如果有自己的特色的提示词要或者回复格式进行控制。我们就没办法控制到这么细的力度了。

所以,我们需要根据意图的区分,来给每个意图一份独立的output_prompt


  let special_output_prompt;
    switch (userAction) {
    case '1': // 需要谈合同
      special_output_prompt = ht_prompt
      break;
    case '2': // 需要留资
      special_output_prompt = lz_prompt
      break;
    case '3': // 需要产品推荐
      special_output_prompt = tj_prompt
      break;
    case '4': // 咨询某产品细节
      special_output_prompt = xj_prompt
      break;
    case '5': // 需要产品介绍
      special_output_prompt = js_prompt
      break;
    case '6': // 询问其他场景
      special_output_prompt = ot_prompt
      break;
    default:  // 闲聊
      special_output_prompt = output_prompt
      break;
  }

  // ! 最终回复
  let result = await chatModel({
    message: [
      { role: 'user', content: special_output_prompt({ query: newQuery, data: actionData }) },
    ],
    model: Models.db_32k_model,
    stream: true
  })
  return result

这样就可以实现,针对某个特定的意图进行特定的回复逻辑控制了。

优化四:提示词安全优化

AI产品上线后,一定会遇到的一个问题,就是有人试图在AI嘴里套出你辛苦调试出来的提示词。

这里给大家两个目前防止提示词泄露效果最好的两个方案:

  1. 调用大模型时利用message的结构,手动把设置的提示词加入到历史对话或者系统提示词中,

示例:assistant的回复中可以添加一些引导性的提示词,可以让后续的大模型对指令遵循能力更强

chatModel({
    message: [
      { role: 'user', content: `我们的提示词限制` },
      { role: 'assistant', content: `好的,我将会按照xx来进行对话` },
      { role: 'user', content: query },
    ],
    model: Models.db_32k_model,
    stream: true
  })

  1. 一劳永逸版本,也是我目前线上使用比较多的版本:关键词验证法。

对大模型输出的内容进行关键词扫描,一旦出现设定的关键词,就认为出现了提示词泄露,此时前端就需要关闭sse请求,同时把前端显示的内容替换成:“我们聊一点别的吧”

lt.png

结语

本篇我们写了AI产品在落地前,实现了几个细节上的优化点:

  • 回复速度:提升问答系统回复速度的优化方式
  • 问题拆分:解决用户一个问题询问多个问题
  • 意图分提示词:每个意图都有特点的提示词要点
  • 提示词安全优化:防止提示词泄露、并做出对应的响应

这几个细节的优化过程中,我们既考虑回复速度也考虑回复质量。

不过多数情况下,都是尽可能保证回复质量,在必要的时候会舍弃一些回复速度,毕竟回复速度可操作的空间还是比较大的。

后续我会不断把新的内容搬到这个专栏,希望这个系列能够打造成帮助大家落地AI产品时的实战手册!

加油,共勉!

提前订阅不迷路:售前AI机器人掘金专栏地址

☺️你好,我是华洛,如果你对程序员转型AI产品负责人感兴趣,请给我点个赞。

你可以在这里联系我👉www.yuque.com/hualuo-fztn…

已入驻公众号【华洛AI转型纪实】,欢迎大家围观,后续会分享大量最近三年来的经验和踩过的坑。

专栏文章

# 从0到1打造企业级AI售前机器人——实战指南五:处理用户意图的细节实现!

# 从0到1打造企业级AI售前机器人——实战指南四:用户意图分析(路由解决方案)

# 从0到1打造企业级AI售前机器人——实战指南三:RAG工程的超级优化

# 从0到1打造企业级AI售前机器人——实战指南二:RAG工程落地之数据处理篇🧐

# 从0到1打造企业级AI售前机器人——实战指南一:根据产品需求和定位进行agent流程设计🧐

# 聊一下MCP,希望能让各位清醒一点吧🧐

# 实战派!百万PV的AI产品如何搭建RAG系统?

# 团队落地AI产品的全流程

# 5000字长文,AI时代下程序员的巨大优势!