惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
博客园 - 司徒正美
V
Vulnerabilities – Threatpost
月光博客
月光博客
C
CXSECURITY Database RSS Feed - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Jina AI
Jina AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
S
Security Affairs
V
Visual Studio Blog
Schneier on Security
Schneier on Security
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
V2EX - 技术
V2EX - 技术
博客园 - Franky
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
D
DataBreaches.Net
O
OpenAI News
Forbes - Security
Forbes - Security
云风的 BLOG
云风的 BLOG
Google Online Security Blog
Google Online Security Blog
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
T
Tenable Blog
Latest news
Latest news
N
News and Events Feed by Topic
博客园_首页
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
美团技术团队
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
T
Threat Research - Cisco Blogs
SecWiki News
SecWiki News
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI

博客园 - 沐子馨

Agent Loop:从对话式 AI 到自主智能体的范式跃迁 解锁图数据建模的奥秘 基于 Neo4j 与 Milvus 的图RAG系统搭建指南 解决复杂推理难题:KG-RAG 在大模型中的应用 RAG 评估常用工具简介 RAG系统效果不好?一文看懂如何进行系统评估 写出让 AI “秒懂”的技能Skill 深入理解 RAG 中的格式化生成与函数调用 解锁 RAG 系统中的高级检索与重排序策略 掌握查询重构与智能路由的艺术 告别黑盒:手把手实现一个可解释、可调试的 Text2SQL 代理系统 告别简单向量搜索:RAG 中的高级查询构建与优化策略 深入理解 RAG 中的混合搜索策略 告别基础检索:掌握 RAG 中的句子窗口与递归路由策略 构建多模态检索系统:Milvus 部署、Schema 设计与混合检索实践 向量数据库原理与实战:从核心机制到 FAISS 应用 多模态向量嵌入:从文本到图像的语义统一与 RAG 应用 构建高效 RAG 的基石:深度解析 Embedding 模型原理与优化 All-in-RAG:解锁大模型“开卷考试”的终极能力 AI Agent 是如何思考的?一文读懂推理与决策引擎 终端革命:AI Agent 正在重新定义命令行 给企业装上“AI 大脑”:AgentSpace 如何从“手动检索”跨越到“智能决策”? Agentic 框架快速概览 AI 智能体交互如何带领它走出对话框,从屏幕像素迈向真实物理世界 高级提示词技巧如何带领大模型走出“一本正经胡说八道”的误区? 当 AI 学会“开疆拓土”:探索与发现模式如何从源头打破静态知识的桎梏,在陌生领域催生新洞见? 拒绝 AI “手忙脚乱”:优先级模式如何为智能体打造毫秒级的“任务调度官”? 构建生产级可信 Agent:评估与监控中的自动化审计与闭环优化机制 当 AI 学会“三思后言”:安全护栏如何从源头掐灭偏见、幻觉与恶意攻击? 拒绝“张口就来”:推理技术如何让 AI 像人类一样拆解复杂难题? 当家方知柴米贵:资源感知优化如何让 AI 智能体告别“算力浪费”? 开启多智能体互联时代:A2A 协议与 AI 协作网络的底层逻辑 为智能体装上“实时百科全书”:RAG 如何打破 AI 的知识边界? 构建负责任的AI:人类监督、干预与反馈闭环机制 当工具失效、网络中断:AI智能体的应急与自修复指南 赋予AI“北极星”:如何让智能体自主设定并追踪目标 打破“M×N”集成魔咒:MCP如何重塑AI应用架构 赋予模型“生命力”:大语言模型如何通过学习实现持续适应 赋予模型“长期记忆”:大语言模型的记忆管理机制 AI的“社会性”:深入理解多智能体协作机制 理解AI智能体的规划机制 理解大模型的工具使用 智能体的元认知:反思模式与自我优化机制 智能体并行化模式:提升复杂工作流性能的关键技术 超越线性执行:使用LLM实现智能体路由模式 解构复杂任务:深入理解提示词链(Prompt Chaining) 别再被 AI 术语唬住了!一文理清你需要了解的所有概念 不止是多写几句:谷歌如何用69页白皮书重塑提示工程 [转]长PDF文档的总结与评估策略 Context 工程:如何把正确的上下文喂给 AI 前端如何写出优秀的 AI Agent Skills mac安装python后command not found: pip keep-alive 原理剖析 如何优雅地在 React 中使用TypeScript,看这一篇就够了! react useContext React Context 详细介绍(状态共享、数据传递) 以用户为中心的性能指标【译】 element下拉框远程搜索debounce防抖控制 vue-router打开新窗口 propmise: allSettled()与all()的区别 使用 new Date() 在chrome、安卓和 IOS 中表现不同
什么是Agent?
沐子馨 · 2026-07-21 · via 博客园 - 沐子馨

最近两年AI发展火爆,各类智能体(Agent)层出不穷Agent 开发岗位在过去一年中大量涌现,无论你是前端还是后端去求职的时候都会问你一些关于Agent的内容。可以说,掌握 Agent 开发正逐渐成为程序员的必备技能。本片文章将以最小的案例带你急速进入Agent开发的大门。

什么是Agent?

Agent的概念其实很简单,你可以把大模型比作你的脑子,而Agent就是你这个人。

  • 大模型 = 大脑:负责思考、理解、推理、生成想法,但它没有“手脚”,无法直接行动。

  • Agent = 你这个人:不仅有一个大脑(大模型),还有感知环境的能力、记忆、以及可以调用各种“工具”(如用手上网查资料、用计算器算数、用API订票),最终把想法变成行动

Agent = 大模型(大脑) + 记忆系统(记忆) + 工具(手脚) + 反馈循环(学习)

了解了什么是Agent,接下来我们使用我们熟知的NodeJS来实现一个简单的智能体。

手写一个极简 Agent

为了让你直观理解 Agent 的工作流程,我们不依赖任何框架,实现一个只有一个工具(天气)的 Agent。这个例子会揭示最本质的Agent调用工具流程。

首先我们要知道开发一个Agent最重要的就是让大模型(LLM)具有调用工具的能力,而这个工具就是查询天气的功能,我们先定义这个工具函数。

// ---------- 1. 本地工具实现(模拟天气查询) ----------
async function getWeather(location, units = 'celsius') {  
    // 模拟真实 API 调用(实际可替换为 openweathermap.org 等)  
    const temp = units === 'celsius' ? 25 : 77;  

    return `${location} 当前温度 ${temp}°${units === 'celsius' ? 'C' : 'F'},晴天。`;}

// 工具名称到本地函数的映射
const toolsMap = {  
    get_weather: getWeather,
};

定义好了之后接下来要做的就是如何让LLM调用这个工具,要让LLM知道如何调用工具首先你要做的是要让LLM知道你有这个工具以及这个工具干嘛的以及如何穿参等等,对于此OpenAI提供了一个Schema规范,就是一个JSON,定义了调用的函数,函数名称,传参,描述等等,如:

const tools = [
  {
    type: 'function',
    function: {
      name: 'get_weather', // 调用的函数名
      description: 'Retrieves current weather for the given location.', // 工具描述
      strict: true,
      parameters: {
        type: 'object', // 参数类型
        properties: {
          location: {
            type: 'string',
            description: 'City name',
          },
          units: {
            type: 'string',
            enum: ['celsius', 'fahrenheit'],
          },
        }, // 传参
        required: ['location'],
        additionalProperties: false, // 控制一个对象是否可以包含 未在 properties 中明确定义的额外属性。
      },
    },
  },
];

这样定义好之后,当你问它“今天天气如何?”的时候它就知道去调用查询天气工具了。

接下来我们需要封装一个调用大模型API接口,还是以OpenAI为例:

async function callOpenAI(messages, tools) {
  const res = await fetch('https://api.openai.com/v1/chat/completions', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
    },
    body: JSON.stringify({
      model: 'gpt-5.5-chat-latest',
      messages,
      tools, // 传入工具定义
      tool_choice: 'auto', // 让模型自主决定是否调用
      temperature: 0,
    }),
  });

  const data = await res.json();
  return data.choices[0].message;
}

就是一个简单的fetch请求,传入用户的问题以及这个Agent所有的tools,当然我们现在只有一个tool。这里的OPENAI_API_KEY是你实际的Key,你可以定义到环境变量中或者读取一些配置文件等。

最后一步就是定义Agent的主函数了,接收用户消息并对大模型返回结果处理。

async function runAgent(userMessage) {
  // 消息历史
  const messages = [
    { role: 'system', content: '你是一个天气助手,可以查询天气。' },
    { role: 'user', content: userMessage },
  ];

  // 工具定义(就是你提供的那个 JSON)
  const tools = xxx;

  // 第一次调用:模型可能返回 tool_calls
  const assistantMsg = await callOpenAI(messages, tools);
  messages.push(assistantMsg);

  // 检查是否有工具调用请求
  if (assistantMsg.tool_calls && assistantMsg.tool_calls.length > 0) {
    for (const toolCall of assistantMsg.tool_calls) {
      const { name, arguments: argsStr } = toolCall.function;
      const args = JSON.parse(argsStr); // { location: "北京", units: "celsius" }

      const toolFunc = toolsMap[name];
      if (toolFunc) {
        // 执行本地工具
        const result = await toolFunc(args.location, args.units);

        // 回传工具结果
        messages.push({
          role: 'tool',
          tool_call_id: toolCall.id,
          content: result,
        });
      }
    }

    // 第二次调用:模型根据工具结果生成最终答案
    const finalMsg = await callOpenAI(messages, null); // 不再传 tools,直接生成回答
    return finalMsg.content;
  } else {
    // 没有调用工具,直接返回模型回答
    return assistantMsg.content;
  }
}

我们直接执行这个函数便完成了一个简单的Agent闭环,定义工具 → 调用模型 → 解析 tool_calls → 执行本地函数 → 回传结果 → 再次调用模型。怎么样。是不是比你想象中的简单。核心思想弄懂了,后续的开发就是在稳定性和功能上做“加法”。你现在已经掌握了构建 AI Agent 最本质的那条线。至于它能长成怎样的智能体,就看你的想象力了。