告别 Node 噩梦?用 Bun + TypeScript 像写诗一样调用大模型

告别 Node 噩梦?用 Bun + TypeScript 像写诗一样调用大模型

从 JS 弱类型的"坑"到一键接入 LLM,这套组合拳让我彻底爽到了

你有没有遇到过这样的场景:

前端从 input 框里拿到的数字,拼到 URL 里变成了 "1"+"2""12"

后端接口明明返回了 age: 18,却有人写成 age: "十八",然后整个支付流程静默失败......

JavaScript 的灵活,在大型项目里往往是噩梦的开端。

最近我尝试了一对"黄金搭档"------Bun + TypeScript ,不仅治好了我的类型焦虑,还让我用几行代码就调通了 DeepSeek 大模型。

这篇文章,我就从安装到实战,带你体验一次"零摩擦"的 AI Agent 开发。


🚀 Bun:不止是"更快的 Node"

如果你还在用 npm + Node 那一套,每次新建项目都要 npm init、安装 typescript、配置 tsconfig.json、折腾 nodemon......那真的该试试 Bun 了。

Bun 是一个JS/TS 运行时 + 包管理器 + 测试工具 的"全家桶"。

用一句话形容:开箱即用,快到离谱

  • 速度:启动、安装、执行都比 Node + npm 快好几倍(官方 benchmark 感人)
  • 零配置 :直接运行 .ts 文件,无需 ts-node 或预编译
  • 内置 API :支持 fetchWebSocketBun.serve() 等,不用再装 express 写一堆样板
  • 包管理bun install 替代 npm/yarn/pnpm,锁文件 bun.lockb 更高效

💡 一个小八卦:Anthropic(Claude 的母公司)已经收购了 Bun 团队,用于 Claude Code 的底层运行时。这说明 Bun 的稳定性与性能已经得到了顶级 AI 公司的认可。

安装(Windows 示例)

bash 复制代码
# 官方一键脚本(需管理员权限)
powershell -c "irm bun.sh/install/windows | iex"

# 或者用 npm 全局安装(镜像源加速)
npm install -g bun --registry https://registry.npmmirror.com

安装完成后,试试这个:

bash 复制代码
bun -v
# 输出: 1.x.x

是不是比 Node 那一套清爽多了?


🧠 TypeScript:JS 弱类型最后的救赎

JavaScript 的设计初衷是"让每个人都能轻松写几行脚本",但正因为太灵活,才容易在大型协作中埋雷。

比如这个经典问题:

ts 复制代码
// 你期待加法,结果变成了拼接
let a = "1";
let b = 2;
console.log(a + b); // "12" ------ 不报错,但业务逻辑崩了

或者更隐蔽的------后端返回 { price: "19.99" }(字符串),你直接拿去 price * 0.9,结果返回 NaN,订单优惠消失......

TypeScript 做的很简单:在写代码时就告诉你这里可能出错

ts 复制代码
let nickname: string = "9527";   // 字符串
let age: number = 18;            // 数字

function add(a: number, b: number): number {
  return a + b;
}

add(1, "2");  // ❌ TS 编译报错: 类型"string"的参数不能赋给类型"number"的参数

虽然看起来多写了几笔类型注解,但当你项目超过 1000 行,或者有 3 个人协作时,类型就是最好的文档

现在开发 AI Agent(比如用 LangChain、Vercel AI SDK),TypeScript 基本是标配。因为 AI 输出的 JSON 结构可能变化,类型系统能帮你提前捕获异常。


🧘 从 sleep 到异步:Promise 的优雅打开方式

在开始调用大模型之前,我们先复习一下 JS 的异步模型。

几乎所有 LLM API 调用都是异步 的(网络请求需要等待),掌握 Promiseasync/await 是必须的。

下面是一个简单的 sleep 工具函数:

ts 复制代码
function sleep(ms: number): Promise<void> {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// 使用示例
async function main() {
  console.log("⏳ 开始等待...");
  await sleep(2000);
  console.log("✅ 2 秒后醒来");
}

main();

Promise 就像一次"许下的诺言"------现在拿不到结果,将来一定会给你(成功或失败)。

await 则让异步代码看起来像同步一样顺序执行,再也不用手写回调地狱了。


🌐 实战:用 Bun + TypeScript + Axios 调用大模型 API

现在我们来做一件真正酷的事:调用 DeepSeek(或其他兼容 OpenAI 格式的 LLM)

1. 初始化项目

bash 复制代码
mkdir bun-llm-demo
cd bun-llm-demo
bun init -y

这会自动生成 package.jsontsconfig.json(零配置!)。

2. 安装依赖

bash 复制代码
bun add axios dotenv
  • axios:更友好的 HTTP 客户端(支持拦截器、自动 JSON 等)
  • dotenv:加载 .env 环境变量(用于存放 API Key)

3. 添加环境变量

创建 .env 文件:

env 复制代码
DEEPSEEK_API_KEY=sk-你的真实密钥
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1

⚠️ 千万别把 .env 提交到 Git!记得加 .gitignore

4. 写代码调用

创建 index.ts

ts 复制代码
import axios from "axios";
import dotenv from "dotenv";

dotenv.config();

async function chat() {
  try {
    const res = await axios.post(
      `${process.env.DEEPSEEK_BASE_URL}/chat/completions`,
      {
        model: "deepseek-chat",      // 或者 deepseek-coder
        messages: [
          { role: "user", content: "你好,请用三句话介绍 Bun 运行时。" }
        ],
        temperature: 0.7,
      },
      {
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${process.env.DEEPSEEK_API_KEY}`,
        },
        timeout: 30000,  // 30 秒超时
      }
    );

    const reply = res.data.choices[0].message.content;
    console.log("🤖 AI 回复:\n", reply);
  } catch (error: any) {
    console.error("❌ 请求失败:", error.message);
    if (error.response) {
      console.error("状态码:", error.response.status);
      console.error("详情:", error.response.data);
    }
  }
}

chat();

5. 运行

bash 复制代码
bun run index.ts

你会看到 AI 流畅地输出介绍 Bun 的文字。

整个过程不到 10 行核心代码,没有 Webpack、没有 Babel、没有 ts-node------就是这么丝滑


🧩 扩展:接入任意 OpenAI 兼容的 API

如果你用的是其他模型(如智谱、月之暗面、本地 Ollama),只需要改两个地方:

  • baseURL 换成对方提供的地址
  • model 改成相应模型名称

甚至可以写一个通用函数:

ts 复制代码
async function callLLM(prompt: string, model = "deepseek-chat") {
  // ... 同上,动态传入 model
}

配合 TypeScript 的类型推导,你的 AI Agent 会非常健壮。


📌 总结:为什么你应该尝试 Bun + TypeScript?

痛点 传统 Node + JS Bun + TypeScript
类型错误 运行时才暴露,可能遗漏 编译时捕获,IDE 实时提示
配置 TS 需要 ts-node, tsconfig, 甚至 webpack 原生支持,开箱即用
包管理器速度 npm install 等半天 bun install 快到飞起
调用 LLM API 需要 fetch polyfill 或 axios + 回调 直接 async/await,简洁干净
适合 AI Agent 开发 勉强可用,但生态碎片化 官方收购 + 社区涌现,趋势所在

在 AI 快速演进的今天,开发工具也应该"快、稳、爽"。

Bun 和 TypeScript 恰好就是这样的组合------不妥协性能,也不妥协代码质量

下一步,你可以尝试用 Bun 配合 langchainVercel AI SDK 写一个能调用工具(Function Calling)的智能体。相信我,你会爱上这种开发体验。


💬 最后留个互动问题

你目前在用什么运行时/语言开发 AI 应用?有没有被 JS 弱类型坑过的"经典案例"?欢迎在评论区分享,一起避坑!


稀土掘金技术专栏 · 未经授权禁止转载

作者:一位热爱折腾的前端/全栈开发者

如果觉得有帮助,请点赞/收藏/分享,让更多人告别配置地狱。

相关推荐
wuhen_n1 小时前
RAG 关键环节:文本分块策略与最优参数配置
前端·langchain·ai编程
狂炫冰美式1 小时前
AI 生成 Draw.io,导入飞书/Lark 画板后可编辑
前端·人工智能·后端
悟空瞎说1 小时前
吃透 TypeScript 6.0 五大实用新特性,顺带前瞻 TS7.0,附全代码示例
typescript
Moment1 小时前
我做了一套前端也能学懂的 AI Agent 系列,从 Prompt 一路讲到多 Agent 😍😍😍
前端·后端·面试
dy17172 小时前
二维码打印
前端·javascript·vue.js
智商不够_熬夜来凑2 小时前
【Radio & Checkbox】
前端·javascript·vue.js
xiaofeichaichai2 小时前
Diff 算法
前端·javascript
Larcher2 小时前
从 0 到 1:用 Bun + axios 快速搭建 LLM API 客户端
前端·javascript
子午2 小时前
基于DeepSeek的酒店客房管理系统~Python+DeepSeek智能问答+Vue3+Web网站系统
开发语言·前端·python