游乐游手机版
首页/AI教程/文章详情

5分钟快速实现你的第一个Node.js智能体完整教程

时间:2026-06-06 17:00
5分钟实现你的第一个 Node js 智能体 摘要 AI Agent(智能体)无疑是当下最火热的技术概念,但说穿了,它的核心原理其实并不复杂。这篇文章的目标很简单:带你用 5 分钟时间,从零开始实现一个能真正干活的智能体——一个旅行助手。我们会借助 ReAct 模式(思考-行动-观察循环),让 AI

5分钟实现你的第一个 Node.js 智能体

摘要

AI Agent(智能体)无疑是当下最火热的技术概念,但说穿了,它的核心原理其实并不复杂。这篇文章的目标很简单:带你用 5 分钟时间,从零开始实现一个能真正干活的智能体——一个旅行助手。我们会借助 ReAct 模式(思考-行动-观察循环),让 AI 学会自主决策、调用工具、直至完成任务。全程使用真实 API,没有半点 mock 数据,目的是让你彻底理解 Agent 的底层原理,搞懂 LangChain、AutoGPT 这类框架到底在玩什么把戏。

5分钟实现你的第一个 Node.js 智能体

前言

最近 AI Agent 这个概念确实有点热得发烫,各家大厂竞相推出自己的 Agent 框架。但对不少开发者来说,Agent 始终隔着一层纱——它到底是怎么工作的?为什么能“自动”把事儿给办了?

今天就花 5 分钟,咱们亲手从零实现一个真正的智能体,把这层窗户纸捅破。

什么是智能体(Agent)?

说白了,智能体就是大语言模型加上工具调用能力,再套上一个循环决策机制。

传统 ChatGPT 只能跟你一问一答,但智能体可以做到的事情更多:

  1. 自主决策:分析目标任务,制定执行计划
  2. 调用工具:查天气、搜信息、执行操作,真刀真枪地干活
  3. 循环迭代:根据上一步的观察结果调整策略,直到任务收工

这就好比给大模型配上了“手”和“眼睛”,让它能真正去“做事”。

ReAct:智能体的核心设计模式

这次实现的智能体采用 ReAct 模式(Reasoning + Acting),是目前最主流的 Agent 设计思路。

用户请求 → Thought(思考) → Action(行动) → Observation(观察) → ... → Finish(完成)

看个具体例子:

用户:帮我查北京天气,推荐景点 循环1: Thought: 用户想了解北京天气和景点,我先查天气 Action: get_weather(city="北京") Observation: 北京当前晴天,气温18摄氏度 循环2: Thought: 已获取天气信息,现在可以推荐景点 Action: get_attraction(city="北京", weather="晴天") Observation: 推荐故宫、长城等户外景点 循环3: Thought: 信息已收集完毕,可以回答用户 Action: Finish[北京今天晴天18°C,推荐故宫、长城...]

这个“思考→行动→观察”的循环,就是 Agent 的灵魂所在。

代码实现

1. 项目结构

智能体1/ ├── index.js # 智能体核心代码(接入真实 LLM API) ├── package.json # 项目配置 └── .env.example # 环境变量示例

项目全部调用真实 API,没有任何 mock 数据:

  • 天气查询:调用 wttr.in 免费 API
  • 景点推荐:由 LLM 利用自身知识库完成

2. 核心代码解析

系统提示词(让 AI 学会 ReAct 格式)

const AGENT_SYSTEM_PROMPT = ` 你是一个智能旅行助手。你的任务是分析用户的请求,并使用可用工具一步步地解决问题。 # 可用工具: - get_weather(city: str): 查询指定城市的实时天气。 - get_attraction(city: str, weather: str): 根据城市和天气搜索推荐的旅游景点。 # 输出格式要求: 你的每次回复必须严格遵循以下格式: Thought: [你的思考过程和下一步计划] Action: [你要执行的具体行动] Action的格式必须是以下之一: 1. 调用工具:function_name(arg_name="arg_value") 2. 结束任务:Finish[最终答案] `;

这段提示词就是 Agent 的“培训教材”,教给大模型三件事:有哪些工具可用、如何输出思考和行动、什么时候该结束任务。

工具函数(Agent 的“手”)

// 查询天气 - 调用真实 wttr.in API(免费,无需 API Key) async function get_weather(city) { const url = `https://wttr.in/${encodeURIComponent(city)}?format=j1`; const response = await fetch(url); const json = await response.json(); const current = json.current_condition[0]; const weatherDesc = current.weatherDesc[0].value; const tempC = current.temp_C; return `${city}当前天气:${weatherDesc},气温${tempC}摄氏度`; }

需要再次强调:本示例只用真实 API,没有半点 mock 数据。景点推荐由 LLM 利用自身知识完成,这恰恰展示了 Agent“用工具获取外部信息,用知识库进行推理”的核心能力。

主循环(Agent 的“大脑”)

async function main() { const promptHistory = [`用户请求: ${userPrompt}`]; for (let i = 0; i < 5; i++) { // 最大循环5次 // 1. 构建 Prompt,调用 LLM const fullPrompt = promptHistory.join('\n'); const llmOutput = await llm.generate(fullPrompt, AGENT_SYSTEM_PROMPT); // 2. 解析 Action const actionMatch = llmOutput.match(/Action:\s*(.*)/s); const actionStr = actionMatch[1].trim(); // 3. 执行工具或结束任务 if (actionStr.startsWith('Finish')) { // 提取最终答案,结束循环 console.log(`任务完成: ${finalAnswer}`); return; } // 4. 执行工具,获取观察结果 const observation = await executeTool(toolName, args); const observationStr = `Observation: ${observation}`; // 5. 记录到历史,进入下一轮循环 promptHistory.push(llmOutput); promptHistory.push(observationStr); } }

这就是 Agent 完整的运转流程:

  1. 把对话历史发给 LLM
  2. LLM 输出 Thought 和 Action
  3. 解析 Action,执行对应的工具
  4. 把 Observation 追加到历史记录
  5. 循环往复,直到 LLM 输出 Finish

3. 运行演示

步骤一:安装依赖

cd 智能体1 npm install

步骤二:配置环境变量

方式1:单行命令(推荐快速测试)

API_KEY='your_api_key' BASE_URL='https://your-api-gateway/v1' MODEL_ID='your_model_id' npm start

方式2:使用 export 设置(适合多次运行)

export API_KEY='your_api_key' export BASE_URL='https://your-api-gateway/v1' export MODEL_ID='your_model_id' npm start

方式3:使用 .env 文件(推荐生产环境)

# 复制示例文件 cp .env.example .env # 编辑 .env,填入你的配置 # .env 内容: API_KEY=your_api_key BASE_URL=https://your-api-gateway/v1 MODEL_ID=your_model_id # 加载并运行 source .env && npm start

步骤三:查看运行结果

实际运行效果(使用 glm-5 模型):

============================================================ ? 智能旅行助手启动 模型: glm-5 API: https://ai-gateway.greatld.com/lixx/v1/all/v1 ============================================================ ? 用户输入: 你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。 ============================================================ ? --- 循环步骤 1 --- ? 正在调用大语言模型... ✅ 大语言模型响应成功 ? 模型思考: Thought: 用户想要查询北京的天气并根据天气推荐景点。我首先需要调用工具获取北京的实时天气信息。 Action: get_weather(city="北京") ? 正在调用天气API: https://wttr.in/北京?format=j1 ✅ 天气API响应成功 ? 观察结果: Observation: 北京当前天气:Sunny,气温18摄氏度,湿度28%,风速14公里/小时 ============================================================ ? --- 循环步骤 2 --- ? 正在调用大语言模型... ✅ 大语言模型响应成功 ? 模型思考: Thought: 我已经获取了北京的天气信息(晴天,18摄氏度,微风)。这个天气状况非常舒适,适合户外活动。我可以利用我的旅游知识,推荐适合晴天游览的户外景点,如皇家园林或登高望远的地方,然后结束任务。 Action: Finish[北京今天天气晴朗,气温18摄氏度,湿度适中,非常适合户外活动。推荐您前往颐和园游览,在阳光明媚的日子里,昆明湖波光粼粼,万寿山景色宜人,非常适合散步和拍照。此外,您也可以考虑去故宫博物院,并顺便登上景山公园俯瞰故宫全景,晴天的视野会非常开阔壮观。] ============================================================ ✅ 任务完成! ============================================================ ? 最终答案: 北京今天天气晴朗,气温18摄氏度,湿度适中,非常适合户外活动。推荐您前往颐和园游览,在阳光明媚的日子里,昆明湖波光粼粼,万寿山景色宜人,非常适合散步和拍照。此外,您也可以考虑去故宫博物院,并顺便登上景山公园俯瞰故宫全景,晴天的视野会非常开阔壮观。

运行过程解析

智能体完整走了一遍 ReAct 循环:

步骤 动作 说明
1 调用 LLM 模型分析用户请求,决定先查天气
2 执行工具 调用真实天气 API,获取北京天气
3 调用 LLM 模型根据天气信息,利用自身知识推荐景点
4 结束任务 输出最终答案,完成任务

这里的关键在于:景点推荐完全由 LLM 自身知识库完成,不需要硬编码任何数据,这才是 Agent 真正的智能所在。

关键设计点解析

1. 为什么用循环而不是单次调用?

你想啊,一个复杂任务往往需要多步推理。单次调用只能应付简单问题,而 Agent 通过循环可以:先查天气再推荐景点、先搜资料再总结答案、先分析需求再执行操作。每一轮都基于上一个“观察结果”来做新决策,这才是智能的完整闭环。

2. Prompt History 的作用

promptHistory 这个数组记录着完整的对话历史:

用户请求: ... Thought: ... Action: ... Observation: ... Thought: ... Action: ... Observation: ...

有了它,LLM 才能“记住”自己之前做了什么、观察到了什么,从而做出正确的下一步判断。

3. 工具注册机制

const a vailableTools = { get_weather, };

把所有工具函数放到一个对象里,好处显而易见:动态查找调用方便、扩展新工具简单、错误处理也顺手。

要加一个新工具,只需三步:实现工具函数(调用真实 API)→ 注册到 a vailableTools → 在系统提示词中说明工具用途。

4. Action 解析的正则表达式

// 解析工具名和参数 const toolNameMatch = actionStr.match(/(\w+)\(/); const argsMatch = actionStr.match(/\((.*)\)/); const argRegex = /(\w+)="([^"]*)"/g;

这一组正则表达式负责解析 LLM 输出的 Action 格式,比如把 get_weather(city="北京") 解析成 { name: "get_weather", args: { city: "北京" } }

进阶:如何扩展这个 Agent?

添加新工具

// 搜索工具 - 调用真实搜索 API(如 DuckDuckGo) async function search_web(query) { const url = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json`; const response = await fetch(url); const data = await response.json(); return data.Abstract || '未找到相关信息'; } // 注册新工具 const a vailableTools = { get_weather, search_web, };

然后在系统提示词里添上工具说明即可。Agent 会自动学习何时调用新工具,不用你做额外的适配。

支持更复杂的任务

  • 多城市旅行规划
  • 动态天气预警
  • 与用户交互确认

总结

通过这 5 分钟的实战,我们理清了几个核心认知:

  1. Agent 的本质:LLM + 工具 + 循环决策
  2. ReAct 模式:Thought → Action → Observation 的循环
  3. 关键技术点:系统提示词设计、工具注册、Action 解析、Prompt History 管理

这就是所有复杂 Agent 框架的底层原理!无论 LangChain、AutoGPT 还是 OpenAI Function Calling,本质上都在做同一件事——只是封装得更完善、功能更丰富。

掌握了这个基础实现,接下来你就能:看懂各种 Agent 框架的源码、根据实际需求定制自己的 Agent、避开 Agent 开发中那些常见的坑。

来源:https://juejin.cn/post/7623591918139801650
上一篇蹲点智能体总部三天,看懂一人即公司的本质 下一篇零代码复刻DeepResearch:Dify+EdgeOne打造全球科技热点深度起底神器
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Synthesia零基础教程:客户端安装与工作区权限设置
AI教程 · 2026-06-07

Synthesia零基础教程:客户端安装与工作区权限设置

本文介绍了AI视频生成工具Synthesia的入门流程。内容涵盖从官网下载客户端、完成账户注册与登录,到软件安装与启动的完整步骤。详细说明了如何初始化工作区,包括创建首个AI视频项目、选择模板与AI主播。最后,指导用户理解并设置团队协作中的不同权限角色,以便安全高效地共同管理项目。

FramePack新手入门指南:安装启动报错修复导出全流程
AI教程 · 2026-06-07

FramePack新手入门指南:安装启动报错修复导出全流程

本文详细介绍了FramePack工具从下载安装到项目导出的完整流程。内容涵盖软件安装步骤、首次启动设置、常见报错解决方案以及项目打包导出方法。指南旨在帮助用户快速掌握工具核心操作,解决使用过程中可能遇到的技术问题,确保顺利完成AI视频帧处理任务。

FLUX.1保姆级教程:环境安装、显存优化与首次出图测试
AI教程 · 2026-06-07

FLUX.1保姆级教程:环境安装、显存优化与首次出图测试

本文详细介绍了FLUX 1的安装与初步使用流程。内容涵盖从Python环境配置、代码仓库克隆、依赖包安装,到关键的显存优化设置,最后指导用户完成首次文生图测试。教程旨在帮助用户顺利搭建运行环境,解决常见安装问题,并实现基础图像生成功能。

AnythingLLM新手实战:本地大模型部署后知识库接入设置
AI教程 · 2026-06-07

AnythingLLM新手实战:本地大模型部署后知识库接入设置

本文介绍了在本地部署大模型后,如何为AnythingLLM设置知识库。内容涵盖知识库的基本概念、创建与配置步骤、文档上传与处理技巧,以及如何通过问答测试其效果。旨在帮助用户有效整合本地文档资源,构建个性化的AI知识助手,提升信息检索与利用效率。

Aider安装失败排查:扩展冲突与登录异常全解析
AI教程 · 2026-06-07

Aider安装失败排查:扩展冲突与登录异常全解析

本文针对Aider安装过程中常见的扩展冲突与登录异常问题,提供了系统的排查思路与解决方案。内容涵盖如何识别并处理与其他AI工具的兼容性问题,解决因网络或账户设置导致的登录失败,以及通过环境检查、依赖更新等步骤彻底排除安装障碍,帮助用户顺利完成安装与配置。