【从0开发一个 Agent】第三章:初始化项目
在上一章中我们完成了技术选型与架构设计。从本章开始我们将正式进入工程落地阶段。万丈高楼平地起一个优秀的企业级项目往往取决于最初的项目骨架是否扎实。本章的目标是搭建整个项目的核心骨架配置好所有核心依赖并建立一套清晰、可扩展的目录结构。1. 为什么需要精心设计的初始化很多开发者习惯于使用create-next-app生成默认项目后直接开始写业务代码这在 AI Agent 项目中是致命的。AI Agent 项目的特殊性多职责分离我们需要区分 UI 组件、业务逻辑、AI 核心逻辑、工具调用、数据库模型等。服务端与客户端边界Next.js App Router 对 Server Component 和 Client Component 有严格区分AI SDK 的某些 Hook 只能在客户端使用而数据库操作只能在服务端进行。配置复杂度Prisma、pgvector、AI SDK、HeroUI 都需要特定的配置才能协同工作。本章我们将建立标准化的 Next.js 项目骨架。核心依赖的安装与配置。符合 AI Agent 开发范式的目录结构。数据库的初始化与连接。2. 创建 Next.js 项目首先我们使用官方脚手架创建项目。注意我们选择 src/ 目录结构这是企业级项目的标准做法能将应用代码与配置文件彻底隔离。# 创建项目npx create-next-applatest ai-agent-enterprise--typescript--tailwind--app--src-dir--eslint# 进入项目cdai-agent-enterprise3. 安装核心依赖根据第二章的技术选型我们需要安装以下核心包# AI 核心npminstallai ai-sdk/openai# 数据库 ORMnpminstallprisma prisma/client# UI 组件库 (HeroUI)npminstallheroui/react framer-motion# Markdown 渲染 (用于 AI 回复)npminstallreact-markdown remark-gfm4. 目录结构设计一个清晰的目录结构是项目可维护性的基石。我们在src/下建立以下结构src/ ├── app/# Next.js App Router 路由与 API│ ├── api/# API 路由 (AI 对话接口等)│ ├── page.tsx# 首页│ └── layout.tsx# 根布局├── components/# UI 组件│ ├── ui/# 基础 UI 组件 (Button, Input 等)│ └── chat/# 聊天业务组件 (ChatWindow, MessageBubble)├── lib/# 核心工具与配置│ ├── ai/# AI SDK 配置、工具定义│ ├── db/# Prisma Client 单例│ └── utils.ts# 通用工具函数├── types/# 全局 TypeScript 类型定义└── styles/# 全局样式为什么这样设计app/apiAI 对话接口必须放在这里利用 Next.js Route Handlers 处理流式响应。lib/ai将 AI 相关的配置、Prompt 模板、Tool Calling 定义集中管理避免业务逻辑与 AI 逻辑耦合。lib/dbPrisma Client 在开发环境下会创建大量连接必须封装为单例Singleton以防止连接池耗尽。5. 核心配置实现5.1 Prisma 数据库初始化npx prisma init这会生成prisma/schema.prisma和.env文件。为什么需要 PrismaPrisma 提供了类型安全的数据库访问。当我们在 AI Agent 中定义工具时可以直接将 Prisma 的查询结果作为 Tool 的返回值TypeScript 会自动推导类型极大减少运行时错误。5.2 AI SDK 配置在src/lib/ai/config.ts中import{createOpenAI}fromai-sdk/openai;exportconstopenaicreateOpenAI({apiKey:process.env.OPENAI_API_KEY,baseURL:process.env.OPENAI_BASE_URL,// 支持 DeepSeek 等兼容接口});5.3 HeroUI 配置HeroUI 需要包裹HeroUIProvider。在src/app/layout.tsx中import{HeroUIProvider}fromheroui/react;exportdefaultfunctionRootLayout({children}:{children:React.ReactNode}){return(html langzh-CNbodyHeroUIProvider{children}/HeroUIProvider/body/html);}6. 项目架构流转图初始化完成后我们的项目数据流如下7. 测试验证运行开发服务器npmrun dev访问http://localhost:3000如果看到 Next.js 默认页面且没有报错说明项目骨架搭建成功。验证清单项目能正常启动HeroUI 组件能正常渲染Prisma 能正常连接数据库检查控制台无报错环境变量能正常读取8. 常见问题与踩坑分析问题 1Prisma 在 Next.js 中导致连接池耗尽原因Next.js 的 HMR热更新会在每次代码修改时重新执行模块导致 Prisma Client 被反复实例化。解决在src/lib/db/index.ts中使用全局单例模式import{PrismaClient}fromprisma/client;constglobalForPrismaglobalThisasunknownas{prisma:PrismaClient};exportconstprismaglobalForPrisma.prisma||newPrismaClient();if(process.env.NODE_ENV!production)globalForPrisma.prismaprisma;问题 2HeroUI 样式不生效原因HeroUI 依赖 Tailwind CSS 的插件配置。解决确保在 tailwind.config.ts 中正确配置了 heroui/theme 插件。本章总结我们创建了基于 App Router 的 Next.js 项目选择了 src/ 目录结构。安装了 AI SDK、Prisma、HeroUI、react-markdown 等核心依赖。建立了符合 AI Agent 开发范式的目录结构将 UI、AI 逻辑、数据库配置分离。完成了 Prisma 初始化与 AI SDK 基础配置。解决了 Prisma 连接池、HeroUI 样式等常见踩坑问题。项目骨架已经搭建完毕并且可以正常运行。从下一章开始我们将正式接入大模型实现第一个流式对话功能。

相关新闻

Windows 11任务栏拖放功能修复完整指南:告别效率瓶颈的终极方案

Windows 11任务栏拖放功能修复完整指南:告别效率瓶颈的终极方案

Windows 11任务栏拖放功能修复完整指南:告别效率瓶颈的终极方案 【免费下载链接】Windows11DragAndDropToTaskbarFix "Windows 11 Drag & Drop to the Taskbar (Fix)" fixes the missing "Drag & Drop to the Taskbar" support in Wind…

2026/10/12 20:09:44 阅读更多 →
玩具+床上用品+家具-美国 Law‑Label(法律标)+14 州 URN 注册(CA/UT/PA 重点)

玩具+床上用品+家具-美国 Law‑Label(法律标)+14 州 URN 注册(CA/UT/PA 重点)

1、法规背景与适用范围 1.1 法规背景 1)立法来源:美国州级法规,不是联邦法规;32 个州强制填充类产品张贴 Law‑Label;其中14 个州强制申请 URN(Uniform Registration Number 工厂统一注册号)&a…

2026/10/11 0:55:23 阅读更多 →
uos-uwsgi-exporter性能测试报告:单实例与集群部署对比分析

uos-uwsgi-exporter性能测试报告:单实例与集群部署对比分析

uos-uwsgi-exporter性能测试报告:单实例与集群部署对比分析 【免费下载链接】uos-uwsgi-exporter A Prometheus exporter for uwsgi. 项目地址: https://gitcode.com/openeuler/uos-uwsgi-exporter 前往项目官网免费下载:https://ar.openeuler.or…

2026/10/4 13:06:17 阅读更多 →

最新新闻

深度学习框架选型指南:PyTorch、TensorFlow、JAX、PaddlePaddle对比与实战

深度学习框架选型指南:PyTorch、TensorFlow、JAX、PaddlePaddle对比与实战

1. 从“选哪个框架”这个老问题说起如果你在深度学习这个圈子里待过一段时间,大概率会被问到或者问过别人一个问题:“我到底该学哪个框架?”这个问题几乎和“该学Python还是R”一样,属于入门阶段的经典纠结。但有意思的是&#xf…

2026/10/14 12:05:09 阅读更多 →
SQLite+FTS5+BM25实现可落地的上下文管理范式

SQLite+FTS5+BM25实现可落地的上下文管理范式

1. “context-mode”到底是什么?不是新框架,也不是黑科技,而是开发者日常里被忽略的上下文工程实践“context-mode”这个词最近在技术社区突然密集出现,尤其和MCP、SQLite、FTS5、BM25这些词高频共现。它既不是某个开源项目的官方…

2026/10/14 12:05:09 阅读更多 →
轻量大模型智能客服系统落地实践:RAG+状态感知+私有化部署

轻量大模型智能客服系统落地实践:RAG+状态感知+私有化部署

简介:本资源是一套基于大模型构建的智能客服对话系统完整工程实现,面向Java后端开发者、AI应用工程师及NLP方向学习者,解决企业级客服场景中意图理解、多轮对话管理与个性化响应生成等核心问题。项目以SpringAI为关键中间件,封装大…

2026/10/14 12:05:09 阅读更多 →
短视频无水印下载工具:原理与实现详解

短视频无水印下载工具:原理与实现详解

1. 项目背景与需求解析在短视频内容爆发的时代,很多用户都有保存优质视频素材的需求。但直接通过手机录屏会带有平台水印,影响二次创作和收藏体验。市面上虽然存在一些在线解析工具,但往往需要频繁复制链接、操作步骤繁琐,且存在隐…

2026/10/14 12:05:09 阅读更多 →
artcraft:构建创意工具链,实现从灵感到成品的可复用生产流程

artcraft:构建创意工具链,实现从灵感到成品的可复用生产流程

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是——这大概率不是一个单纯的艺术项目,也不是一个纯粹的手工教程。把“art”和“craft”拼在一起,本身就带着一种“…

2026/10/14 12:05:09 阅读更多 →
artcraft 实战:从模糊灵感到可复现的创作流水线

artcraft 实战:从模糊灵感到可复现的创作流水线

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个词,我脑子里蹦出来的不是某个具体工具,而是一种很朴素的组合感——art 加 craft,艺术加手艺。这两个词放在一起,本身就带着一种张力&am…

2026/10/14 12:04:09 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →