本文将带你从零开始,搭建一个基于豆包大模型的智能聊天机器人,并接入钉钉实现智能对话、历史记录管理、百度搜索等完整功能。
2026年,AI已经像空气一样渗透到我们工作和生活的每个角落。从ChatGPT到OpenClaw,大模型技术正在颠覆我们的生活方式。作为一名开发者,如果还没有亲手写过AI项目,那真的out了!
今天,我将带你从零开始,手把手搭建一个基于豆包Seed大模型的智能聊天机器人,并接入钉钉实现以下完整功能:
- ✅ 智能对话:基于豆包Seed大模型的自然语言理解与生成
- ✅ 钉钉集成:支持钉钉机器人私聊和群聊场景,开箱即用
- ✅ 历史记忆:自动保存24小时内的聊天记录,实现上下文连贯对话
- ✅ 工具调用:集成百度搜索,AI能自主获取实时信息
- ✅ 权限管理:私聊仅回复管理员,群聊支持白名单控制
- ✅ 数据持久化:MySQL存储聊天记录,方便后续分析和调优
项目源码:github.com/pbstar/chat…
技术栈概览:
在开始之前,请确保开发环境和以下平台凭证均已就绪:
本地环境
- Node.js >= 20.0.0(推荐使用最新的LTS版本)
- MySQL数据库(5.7或8.0版本均可)
钉钉机器人(钉钉开放平台)
前往开放平台创建企业内部机器人应用,消息接收模式选择 Stream模式(无需公网IP),发布后获取以下凭证:
- Client ID / Client Secret:在"凭证与基础信息"中获取
- Robot Code:在"机器人"标签页中获取
- 管理员 UserId:在管理后台"通讯录"中找到自己账号,地址栏 URL 中可以看到
豆包大模型(火山引擎控制台)
进入 火山方舟 → 模型广场,开通 模型服务,然后在 API Key 管理 中创建并保存 SEED_API_KEY。查看文档
百度搜索API(百度智能云)
开通千帆大模型平台,在"应用接入"中创建应用获取 BAIDU_API_KEY,同时开通 AI搜索 服务。查看文档
💡 所有云服务均有免费额度,按本文步骤操作基本不会产生费用。
让我们从创建项目目录开始:
安装核心依赖:
初始化TypeScript配置:
创建项目目录结构:
一个清晰的项目结构能让代码更易维护。下面是完整的项目结构:
创建 文件,将所有敏感信息和配置项集中管理:
⚠️ 注意:文件包含敏感信息,切勿提交到代码仓库!务必在中添加。
5.3.1 应用入口 (src/index.ts)
5.3.2 钉钉消息监听 (src/services/dingtalk/index.ts)
这是整个项目的核心,负责接收和处理钉钉消息:
关键设计:
- 立即确认:收到消息后立即响应,防止钉钉重复推送
- 分层处理:权限控制 → 记录 → AI处理 → 发送,职责清晰
- 异常处理:完善的try-catch,确保系统稳定性
- 限流保护:添加延迟避免触发钉钉限流
5.3.3 AI对话核心逻辑 (src/services/doubao/index.ts)
这是与豆包大模型交互的核心,实现了结构化输出和工具调用:
技术要点:
- 结构化输出:通过JSON Schema强制AI返回规范格式,避免解析错误
- 工具调用循环:支持多轮工具调用(工具可以调用工具)
- 错误处理:完善的异常捕获,单个工具失败不影响整体流程
- 性能监控:记录调用耗时,便于优化
5.3.4 闲聊Agent (src/services/doubao/agents/chat.ts)
这个文件将历史记录、提示词和工具整合起来,形成完整的对话Agent:
5.3.5 角色提示词 (src/services/doubao/prompts/chat.ts)
提示词的质量直接影响AI的表现,这里是一个精心设计的prompt:
提示词设计技巧:
- 明确角色:给AI一个清晰的定位
- 示例驱动:用✅❌指明什么能做、什么不能做
- 格式强制:用JSON Schema约束输出,便于程序解析
- 场景细化:详细说明什么时候该用工具
5.3.6 百度搜索API (src/api/baiduApi.ts)
5.3.7 聊天记录缓存 (src/stores/record.ts)
使用内存缓存提高查询效率:
5.3.8 数据库操作 (src/db/record.ts)
数据库设计要点:
- 索引优化:对常用查询字段加索引
- 字段注释:每个字段都有清晰注释
- 时间索引:按创建时间过滤,提高查询效率
- 双写策略:同时写入数据库和缓存,保证数据一致性
在 中添加以下脚本:
创建数据库初始化脚本 :
运行初始化:
看到以下日志说明启动成功:
测试场景1:基础对话
- 在钉钉群聊中添加机器人
- @机器人发送:"你好,小红帽"
- 期待回复:"你好呀,我是小红帽,很高兴认识你!"
测试场景2:上下文记忆
- 发送:"我叫张三"
- 发送:"我叫什么名字?"
- 期待回复:"你刚才说过,你叫张三呀!"
测试场景3:百度搜索
- 发送:"最近有什么热点新闻?"
- 观察控制台日志,应该看到工具调用
- 回复应该包含搜索到的实时信息
测试场景4:权限控制
- 使用非管理员账号私聊机器人
- 期待回复:"抱歉,我只回复管理员的私信哦~"
项目还提供了HTTP接口,方便其他系统调用发送钉钉消息:
接口地址:
请求头:
请求体:
实现代码 (src/routes/open.ts):
在 中添加定时任务:
在应用入口中启动定时任务:
可能原因:
- Client ID/Secret配置错误
- 机器人未发布或发布未生效
- 群聊中未正确添加机器人
解决方案:
- 检查 中的配置是否正确
- 在钉钉开放平台重新发布机器人
- 确认机器人已在群聊中(被@才会触发)
可能原因:
- 提示词中工具描述不够清晰
- 用户提问不属于工具使用场景
- API Key权限不足
解决方案:
- 优化提示词,明确工具使用场景
- 测试时使用明确的搜索类问题,如"搜索一下最近的科技新闻"
- 检查百度API额度是否充足
可能原因:
- MySQL服务未启动
- 连接信息配置错误
- 数据库用户权限不足
解决方案:
通过本文的学习,你已经从零开始搭建了一个完整的AI聊天机器人,掌握了以下核心技能:
- 钉钉机器人开发:Stream模式的配置与消息处理
- 大模型API调用:火山方舟豆包模型的结构化输出和工具调用
- 工具增强AI:集成百度搜索,让AI具备获取实时信息的能力
- 上下文管理:MySQL持久化 + 内存缓存的双层架构
- 权限控制:基于用户ID的私聊过滤和群聊白名单
- 🔮 多Agent架构:引入意图识别,不同场景使用不同Agent
- 🔮 多模态支持:扩展图片识别、语音对话能力
- 🔮 记忆永久化:对一个月之前的聊天记录进行整理总结形成永久记忆
- 🔮 Web管理后台:可视化配置机器人、查看对话日志、数据统计
AI技术发展日新月异,但万变不离其宗。通过这个项目,你不仅学会了搭建一个实用的AI聊天机器人,更重要的是掌握了:
- 如何封装和调用大模型API
- 如何让AI具备工具使用能力
- 如何设计健壮的消息处理系统
- 如何组织可维护的TypeScript项目
这些技能可以迁移到任何AI项目的开发中。
记住:最好的学习方式是动手实践。现在就去克隆代码,运行起来,然后根据自己的需求进行改造吧!
- 项目源码:github.com/pbstar/chat…
- 钉钉开放平台:open.dingtalk.com/
- 火山方舟文档:www.volcengine.com/docs/82379/…
- 百度千帆搜索API:cloud.baidu.com/doc/qianfan…
- TypeScript官方文档:www.typescriptlang.org/
如果这篇文章对你有帮助,欢迎点赞、收藏、评论三连!有任何问题可以在评论区留言,我会及时回复。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/230548.html