第 2 章 大模型接入与使用#
2.1 SDK 介绍#
为了能更好地理解后续基于 LangChain 框架进行 RAG 大模型应用及 Agent 开发,这里我们先来介绍一下铺垫内容。
在日常开发中,我们经常会写出类似这样的代码 wechat.login(),虽然看起来再普通不过,但任何有过实战经验的开发者都知道:“登录”这件事,本身一点都不简单。那为什么 SDK 能把一个复杂的流程压缩成一个方法调用?要回答这个问题,我们必须先真正理解什么是 API,什么是 SDK。
2.1.1 API 是能力点#
从工程角度看,API 本质上是一个能力接口。比如在微信登录体系中,可能会存在这样的原生接口:
/oauth/authorize:负责授权/oauth/access_token:负责获取登陆令牌/oauth/refresh_token:负责获取刷新令牌/userinfo:负责拉取用户信息
这些接口各自职责明确, 每一个 API 都是一个原子能力点,它们的特点是足够底层、功能单一、调用成本高(参数多、约束多)。所以, API 的设计目标就是,我把能力开放给你,至于怎么用,那是你的事。
2.1.2 SDK是能力流#
软件开发工具包(Software Development Kit, SDK) 的出现,本质上是为了解决一个现实问题,即下游开发者不想、也不应该,每次都从零开放一个完整流程。
例如,如果每个微信小程序的开发人员都要写一套微信登录流程,那不仅繁杂、工作量大,且实现方式也会五花八门,这既提高了微信应用开发的门槛,也不利于微信平台自身的管理和风险控制。
于是,SDK 做了一件非常重要的事情:把多个 API 和通用业务逻辑封装成一个可复用的工具包,这也是为什么 SDK 往往以类和方法的形式出现。
因此,开发者在开发面向微信应用的时候,表面上我们看到的是 user = wechat.login(),但在 SDK 内部可能已经完成了如下整套流程的实现:
① 参数与环境校验:appid 是否配置、redirect_url 是否合法、当前环境是否支持登录;
② 鉴权与安全处理:构造签名参数、防止重放攻击;
③ 调用底层 API:发起 /oauth/authorize 使用 refresh_token 获取取 access_token;
④ 结果校验与解析:校验返回签名、判断错误码、解析令牌与有效期;
⑤ 状态管理:缓存令牌、记录过期时间、维护登录态;
⑥ 异常与兜底处理:网络异常、接口限流、平台异常返回。
这些逻辑本来全部需要业务开发者自己实现,但 SDK 把它们前移到了平台侧统一管理,最终的结果就是复杂流程被压缩成了一个方法调用,这也是为什么支付、登录、鉴权等操作往往会强制开发者使用 SDK,而不是直接调 API 接口。
2.1.3 API 与 SDK 的区别#
现在我们知道了 API 和 SDK 的基本概念,那两者的区别和边界又在哪里?
如果用一句话区分 API 和 SDK那就是:API 是能力点,SDK 是能力流。API 提供单点能力,它更偏底层、偏规范;SDK 是组合多个 API 并封装通用业务逻辑,提供可直接使用的能力,也就是说 API 面向系统而 SDK 面向开发者。
同时,SDK 封装的是通用业务逻辑,而非应用私有业务逻辑。例如 SDK 可以负责登录流程、支付流程、模型调用流程,但不应该负责用户体系设计、订单结算逻辑、业务策略规则等,这是 SDK 与业务代码之间非常清晰的一条边界。
因此,SDK 的核心作用就是把流程的复杂性前移到平台侧,把使用复杂性降到最低,所以当你看到一个看似简单得离谱的 SDK 方法时,它背后往往隐藏着一整套被精心打磨过的工程体系。