夜雨聆风学习资料网

ARTICLE · 1182304

你的业务系统也该有个 AI 助手,不重造轮子,我是这么接的

你的业务系统也该有个 AI 助手,不重造轮子,我是这么接的
不知道做开发的同学有没有关注到一个现象,就是现在越来越多的应用已经接入了AI助手,像支付宝、顺丰小程序等等,那你是否有想过为你公司的应用,或者是业务系统也接入AI助手这样的功能呢?
我猜大概率你想过,只是不知道从哪儿做起罢了。
我想做,但是我又不希望从0开始,过程太漫长,不想重复造轮子,我希望能够快速实现我的想法,能够让我所负责的业务系统能有类似的AI助手功能,提高业务效率。所以我今天就带着这样的目的,我去github上搜索,果不其然,还真让我找到了,分享出来,名字就是:AI SDK。

AI SDK地址:

https://github.com/vercel/ai

官方是这么介绍的:

AI SDK 是 Vercel 开源的 TypeScript AI 应用开发工具包,面向开发者,帮助开发者构建 AI 应用和 Agent。它支持多家模型提供商,以及 React、Vue、Svelte、Next.js、Node.js 等技术环境。

说实在的,我写这篇文章的目的,压根不想花太多的内容篇幅去介绍AI SDK有什么,有哪些组件,官方有非常详细的介绍,我不想浪费时间多此一举。我只想用最少的篇幅去完成我使用了AI SDK后如何接入业务系统。
在这里,我把对AI SDK的如何使用分成了三层,首先从全局把握一下:
我翻译一下就是:
能力
具体作用
对业务开发的意义
模型接入
用统一接口调用不同厂商的模型
减少分别适配各家 API 的工作
服务端 AI 逻辑
文本生成、流式生成、结构化输出、工具调用、Agent 循环
把 AI 能力写进应用逻辑
前端
AI 交互
管理流式消息、加载状态、错误状态、工具结果等
更快构建聊天助手及 AI 交互界面
服务端的典型接口包括generateText和streamText,结构化输出可以通过 Schema 定义数据格式;前端则提供 useChat 等工具管理交互状态。
那可能有同学会问了,我使用了AI SDK到底能够解决什么痛点问题呢?
这里我想,需要区分开发者的痛点和业务用户的痛点。
AI SDK 解决的是开发层面的重复工作:
开发痛点
AI SDK 提供的帮助
需开发团队完成的部分
各家模型 API 不一致
统一模型调用接口
评估模型效果及差异
流式回答实现复杂
提供流式生成及前端状态管理
设计交互、配置代理和超时
AI 回答难以被程序使用
按 Schema 生成、校验结构化数据
检查内容是否符合真实业务规则
AI 只能回答,无法操作系统
提供工具调用和多步骤 Agent
实现业务接口适配、鉴权和执行逻辑
多步任务需要反复调用模型
提供 Agent 循环与停止条件
设计任务范围、错误处理和成本上限
开发团队把这些能力真正应用到业务系统,那么业务用户才会获得实实在在的好处,比如:业务关键用户需要查询工单编号为GD20261014001的工单的状态,目前卡在了哪一步?业务用户只需要自然语言描述而不需要忙着查工单,查物流,查库存等等繁琐操作。
最后的问题:AI SDK 和业务系统具体如何打通,如何协作?
我目前思考的设计方式是:在现在的业务系统旁增加一个 AI 服务层,复用已有业务接口。架构是这样的:
具体操作是这样的:
  1. 根据我现在使用的业务系统所使用的语言为.NET,那么我增加独立的 AI 服务,通过 HTTP 等方式调用原后端
  2. 把业务能力封装成工具,形如刚才讲述的例子,提供查询工单API,查询物流API等。代码形如这样:
import { tool } from 'ai';import { z } from 'zod';// businessApi 业务 API 客户端 // session 来自服务端验证过的登录会话functioncreateOrderTools(session, businessApi) {  return {    getOrder: tool({      description: '根据工单编号查询工单信息',      inputSchema: z.object({        orderId: z.string(),      }),      execute: async ({ orderId }) => {        return businessApi.getOrder({          orderId,          authContext: session,        });      },    }),  };}
真正打通两者的地方,就是 execute 中对业务 API 的调用。
非常重要的一步:把身份和权限贯穿整个调用,因为模型调用了getOrder,不代表它有权查看任意工单。
最后,我做了一个模拟的案例,效果如下所示:
当然目前我也在努力探索中,不当之处还需批评指正,互相学习。

相关学习资料