本章目标:帮你在一堆技术名词里做减法,只留下"现在就需要"的东西。
刚接触 Agent 开发,最容易犯的错误就是技术栈焦虑------LangChain、LangGraph、LlamaIndex、CrewAI、AutoGen、Dify、向量数据库、知识图谱......名词太多,不知道从哪下手。
真相是:你第一个 Agent 项目,只需要 4 样东西。
2.1 一个 LLM API ------ 先跑通,别纠结
Agent 的"大脑"就是大语言模型。你需要一个能调用的 LLM API。
入门推荐:选一个,立刻注册,拿到 API Key。
| 选项 | 优势 | 适合场景 |
|---|---|---|
| OpenAI (GPT-4o) | 生态最成熟,教程最多 | 英文为主的项目 |
| Anthropic (Claude) | 长上下文、代码能力强 | 需要处理长文档 |
| 豆包 (Doubao) | 国内直连、中文优化 | 国内部署、中文场景 |
| DeepSeek | 性价比高、推理能力强 | 预算敏感的项目 |
新手常见纠结:
"我应该用哪个模型?GPT-4o 还是 Claude?"
答案:都行,先用一个跑通。 模型切换的成本很低(改一个 API 地址和 Key),但一直在选型上犹豫的成本很高。
typescript
// 就这么简单,3 行代码调用一个 LLM
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const response = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 1024,
messages: [{ role: 'user', content: '你好,请介绍一下自己' }],
});
console.log(response.content[0].text);
关键点: 大部分 LLM API 的调用方式都高度相似(传入消息列表,返回文本),切换模型只需要改几行配置。所以不要在选型上花超过 10 分钟。
2.2 一个数据库 ------ PostgreSQL 一把梭
Agent 需要存数据:用户信息、对话历史、生成的内容、配置项......你需要一个数据库。
入门推荐:PostgreSQL,不用考虑第二个。
为什么?
- 够用 --- 关系型数据、JSON 数据、全文搜索,PostgreSQL 全都支持
- 向量搜索也能做 --- 装个
pgvector插件,就能存和查询向量(Embedding),不需要额外装 Pinecone、Milvus 等专用向量库 - 生态成熟 --- ORM 支持好(Prisma、TypeORM),云服务多(Supabase、Neon、阿里云 PolarDB)
- 一个库解决所有问题 --- 不用同时维护 MySQL + Redis + Milvus 三套系统
bash
# 本地开发:用 Docker 一行启动
docker run -d --name postgres \
-e POSTGRES_PASSWORD=mysecret \
-p 5432:5432 \
postgres:16
# 启用向量搜索
psql -c "CREATE EXTENSION IF NOT EXISTS vector;"
"等等,我不需要专门的向量数据库吗?"
入门阶段真的不需要。pgvector 能处理百万级别的向量检索,对于大多数 Agent 项目绰绰有余。等你的数据量真的到了千万级别,再考虑专用方案也不迟。
2.3 一个 ORM ------ Prisma,让你不用手写 SQL
直接写 SQL 可以,但容易出错,也不利于维护。ORM(对象关系映射)帮你用代码操作数据库。
入门推荐:Prisma。
为什么不是 TypeORM / Sequelize / Drizzle?
| 特性 | Prisma | TypeORM |
|---|---|---|
| 类型安全 | 自动生成完整类型 | 需要手动定义 |
| 学习曲线 | Schema 文件直观 | 装饰器语法较重 |
| 迁移管理 | 内置 migrate 命令 | 需要额外配置 |
| 调试体验 | 错误信息清晰 | 错误有时难懂 |
prisma
// prisma/schema.prisma --- 定义你的数据模型
model Conversation {
id String @id @default(uuid())
title String
messages Message[]
createdAt DateTime @default(now())
}
model Message {
id String @id @default(uuid())
role String // "user" | "assistant"
content String
conversation Conversation @relation(fields: [conversationId], references: [id])
conversationId String
}
bash
# 三条命令搞定数据库
npx prisma db push # 同步 schema 到数据库
npx prisma generate # 生成类型安全的客户端
npx prisma studio # 打开可视化数据管理界面
2.4 一个后端框架 ------ NestJS 或 Express
Agent 需要一个 HTTP 服务来接收请求、调用 LLM、返回结果。
入门推荐:
- 想快速原型 → Express(最简单,代码量最少)
- 想长期维护 → NestJS(模块化架构,适合项目变大后的组织)
typescript
// Express 版 --- 最小的 Agent 后端
import express from 'express';
import Anthropic from '@anthropic-ai/sdk';
const app = express();
app.use(express.json());
const client = new Anthropic();
app.post('/chat', async (req, res) => {
const { message } = req.body;
const response = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 1024,
messages: [{ role: 'user', content: message }],
});
res.json({ reply: response.content[0].text });
});
app.listen(3000, () => console.log('Agent 服务启动在 http://localhost:3000'));
2.5 你现在不需要的东西
很多教程会一上来就让你装一大堆工具。以下这些入门阶段可以先跳过:
| 技术 | 为什么先不需要 | 什么时候需要 |
|---|---|---|
| LangChain | 抽象层太厚,入门反而增加理解成本 | 需要复杂链式调用时 |
| LangGraph | 状态机框架,初学者用不到 | 需要多步骤、有分支的 Agent 流程时 |
| 专用向量库 (Pinecone/Milvus) | pgvector 够用 | 数据量超千万、需要专业调优时 |
| Redis | Agent 入门不需要缓存层 | 高并发、需要会话缓存时 |
| Kubernetes | 部署一个 Agent 用 Docker 就够 | 需要自动扩缩容时 |
| 消息队列 (RabbitMQ/Kafka) | 同步调用先跑通 | 需要异步任务处理时 |
原则:每多引入一个技术,就多了一个出 Bug 的地方。 先用最少的技术栈跑通,再按需添加。
2.6 最小技术栈总结
css
你的第一个 Agent 项目技术栈:
┌─────────────────────────────────┐
│ 前端 (可选) │
│ Vue / React / 纯 HTML 都行 │
├─────────────────────────────────┤
│ 后端框架 │
│ Express / NestJS │
├─────────────────────────────────┤
│ LLM API │
│ OpenAI / Claude / 豆包 │
├─────────────────────────────────┤
│ ORM │
│ Prisma │
├─────────────────────────────────┤
│ 数据库 │
│ PostgreSQL + pgvector │
└─────────────────────────────────┘
总共 4 个核心依赖,一个下午就能搭起来。
下一章我们会解释这些技术背后的核心概念------Embedding 是什么、RAG 怎么工作、Tool Use 有什么用。但你不需要先理解这些概念才能开始写代码。先动手,遇到问题再回来看概念解释。