给 AI 智能体能力包一层 BFF,前端只调一个接口

最近重构了一个带 AI 功能的后台,前端同学跟我吐槽:调个智能体要先拿 token、再传一堆参数、还得自己拼会话上下文,文档翻得头大。我听完决定给他们包一层 BFF,结论是:前端最后只调一个接口。

BFF 解决的是「关注点错配」

Backend For Frontend 这词听着玄,本质就一句话:在前端和一堆后端能力之间,加一个专为前端服务的薄层。

之前前端要做的事:

  • 自己存 / 传 conversationId 维护多轮上下文
  • 自己处理鉴权 token 的获取和刷新
  • 智能体返回的字段一堆 snake_case,前端还要手动转 camelCase
  • 上游限流了、超时了,前端各种 if-else 兜底

这些全是后端的活儿,却漏到了前端。BFF 就是把这些收回来。

一个接口长啥样

我的设计是前端只认一个 POST /bff/assistant/ask,请求体干净到只有两个字段:

csharp 复制代码
// 前端视角:清爽
interface AskRequest {
  sessionId: string  // 前端只需维护这一个
  message: string
}

BFF 内部干的脏活:

dart 复制代码
app.post('/bff/assistant/ask', async (req, res) => {
  const { sessionId, message } = req.body

  // 1. 上下文:BFF 自己从 Redis 取历史,前端不用管
  const history = await ctxStore.get(sessionId)

  // 2. 鉴权:BFF 持有上游 key,前端永远拿不到
  const upstreamPayload = buildPayload(history, message)

  // 3. 调上游智能体能力
  const raw = await callAgent(upstreamPayload)

  // 4. 字段裁剪 + 命名转换,只把前端要的字段吐出去
  const clean = pick(raw, ['answer', 'references', 'usage'])

  // 5. 顺手把这轮存回上下文
  await ctxStore.append(sessionId, message, clean.answer)

  res.json(toCamel(clean))
})

前端拿到的就是规规整整的 { answer, references, usage },多轮、鉴权、转换全在 BFF 里消化了。

真实的取舍:别把 BFF 写成大杂烩

吹了半天,说点不好的。BFF 最容易腐化成一个啥逻辑都往里塞的垃圾桶,时间一长就成了新的巨石。我的纪律是:BFF 只做编排和裁剪,不做业务决策。比如「这个用户能不能用 AI 功能」这种权限判断,我放在更下游的领域服务里,BFF 只负责把它的结果透传,不自己实现一套。

另一个坑:BFF 加了一跳,链路追踪得跟上。我吃过一次亏------出问题分不清是 BFF 慢还是上游慢。后来给每个请求带个 traceId 一路透传,排查才有了抓手。

这套为啥成立

成立的前提,是上游那个智能体能力本身就是个规整的 HTTP 接口------我用的是那类零代码搭智能体、直接发布成 API 的平台,能力是现成的,我才有底气在前面包薄薄一层。换句话说,讯飞这种 MaaS 把「模型 + 编排」打包成接口,BFF 才能只管编排不管算力。

你们的 BFF 边界划在哪?评论区掰扯掰扯。

相关推荐
这token有力气5 小时前
Function Calling 格式漂移
人工智能
onething3655 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
onething3655 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈
IT_陈寒6 小时前
SpringBoot自动配置的坑,我爬了三天才出来
前端·人工智能·后端
甲维斯7 小时前
笑抽了!DeepSeek识图,豆包完胜了!
人工智能·deepseek
Lei活在当下15 小时前
【AI手记系列-2026/6/18】iSparto & Harness,Caveman 以及AI时代的生存指南
人工智能·llm·openai
冬奇Lab17 小时前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
冬奇Lab17 小时前
Agent 系列(22):Context Engineering 深度——三种上下文管理策略的量化对比
人工智能·agent
hboot17 小时前
AI工程师第二课 - 数据处理
人工智能·python·数据分析