目录

Agent八股

什么是 Agent?与大模型有什么本质不同?

Agent 的基本架构由哪些核心组件构成?

天机学堂

jenkins控制台长什么样

提交代码,jenkins可以自动构建

阅读源码的方式是什么?

微信小程序

小程序基本的项目结构是什么?

小程序的Json配置文件分为哪几种?各自的主要内容是什么?

WXML模板是什么?与HTML有什么区别?

WXSS样式是什么?与CSS有什么区别?

小程序中 .js 文件的分类你了解吗?

小程序的宿主环境是什么?

小程序的通信模型你了解吗?运行机制?

小程序的常用的视图容器类组件你了解有哪些?

使用View组件实现flex横向布局效果

使用scroll-view组件实现的纵向滚动效果

使用swiper 和 swiper-item组件实现轮播图效果

swiper组件的常用属性有哪些?

小程序常用的基础内容组件你了解的有哪些?

请用text组件实现长按选中文本内容的效果

请用rich-text 组件把 HTML 字符串渲染为对应的 UI 结构

请写出button按钮的基本使用代码

请写出image组件的基本使用

image 组件的 mode 属性是指的什么?

小程序API是什么?怎么分类的?

在WXML模板语法中,数据绑定的基本原则是什么?

怎么在 data 中定义页面的数据?

Mustache 语法的格式是怎么样的?应用场景有哪些?

WXML模板语法的数据绑定,想要动态绑定内容该怎么写代码?

WXML模板语法的数据绑定,想要动态绑定属性该怎么写代码?

WXML模板语法的数据绑定,三元运算该怎么写代码?

WXML模板语法的数据绑定,算数运算该怎么写代码?

Agent八股

什么是 Agent?与大模型有什么本质不同?

首先,AI Agent的核心定义,它不是简单的大模型加插件、加工具,本质是一个具备自主闭环执行能力的AI系统。简单来说,我给它一个最终目标,它不需要人工一步步指令干预,能自主完成任务拆解、分步执行、结果反馈、动态调整,全程自主运转,真正实现“能做事、能闭环”,而不只是单纯输出文字。

想要分清它和普通大模型的区别,首先得清楚普通大模型的核心局限。普通大模型本质就是一个被动的问答文本生成器,存在三个致命问题。第一是知识冻结,它的知识截止在训练数据结束的时间,没办法自主获取实时信息,最新的资讯、股价、天气都查不到。第二是无法行动,它只能输出文字答案,只能告诉用户怎么做,但没办法自主操作外部工具、执行实际操作,比如写好邮件但不能自动发送。第三是无持续记忆和状态,每次调用、每次对话都是独立的,不会主动留存任务过程中的中间状态,必须人工传入上下文,否则就会失忆,完全没法独立完成多步骤复杂任务。整体来说,普通大模型只能被动一问一答,没有自主性、没有执行力、没有任务闭环。

AI Agent彻底解决了这些问题,它拥有一套完整的「感知-规划-行动-再感知」自主运行闭环,这也是它和大模型最本质的区别。支撑这个闭环的核心有三大关键能力,也是Agent的核心内核。

第一是工具调用能力。这是Agent从“只会说话”变成“能实际做事”的基础。它可以自主调用搜索引擎、接口、数据库、代码执行器、邮件服务等各类外部工具。这里要区分清楚,大模型只是决策的“大脑”,负责判断调用什么工具、传什么参数,真正的执行是靠代码完成的,执行结果会反馈给模型,让模型继续推进任务,彻底打破了大模型知识冻结、无法实操的局限。

第二是双层记忆机制。普通大模型全程失忆,而Agent配备了短期记忆和长期记忆。短期记忆用来留存当前任务的所有中间步骤、执行状态,保证复杂任务执行不脱节、不遗忘前文;长期记忆依靠向量数据库存储,保存用户偏好、历史任务记录等跨场景信息,让Agent的执行具备持续性和个性化。

第三是多步推理与自我纠错能力,这是Agent区别于简单自动化脚本的关键。面对复杂任务,它能自主把大目标拆解成多步子任务,自主规划执行顺序。更重要的是它具备反思纠错能力,某一步调用工具失败、搜索结果无效、参数报错时,它能自主感知问题、分析原因,调整关键词或参数重试,动态修正执行方案,不会死板执行、直接报错终止,能自适应不确定的复杂任务场景。

总结一下二者的本质区别:普通大模型是被动响应的文本生成工具,单次输入单次输出,无规划、无行动、无闭环、无自主能力;而AI Agent是主动自主的任务执行系统,依托记忆、工具调用、推理纠错能力,实现完整任务闭环,能自主落地复杂多步骤任务,真正和外部环境产生交互、完成实际工作。

另外我也补充一下Agent近年爆发的原因,以及当下的核心生态趋势。Agent概念很早就有,但24、25年才彻底落地爆发,核心是三个条件成熟:一是GPT-4、Claude3等新一代大模型,推理和指令遵循能力大幅提升,具备了自主规划决策的基础;二是Function Calling工具调用机制标准化,统一了工具调用格式,大幅降低了工程适配成本;三是LangChain、LlamaIndex等开发框架、向量数据库、各类工具API生态完善,让Agent从理论概念变成了可落地的工程产品。

目前Agent生态还有两个核心标准协议,也是行业主流趋势。第一个是MCP模型上下文协议,相当于Agent工具生态的通用接口,解决了Agent适配各类工具成本高的问题,工具只需适配一次MCP服务,所有支持MCP的Agent都可以直接调用,不用重复开发适配代码,统一了Agent和外部工具的交互标准。第二个是A2A智能体通信协议,专门解决多Agent协作问题,每个Agent会生成专属“能力名片”,标注自身功能、所需输入,不同厂商、不同框架的Agent可以自主识别、互通信息、协同完成复杂任务。简单来说,MCP负责Agent和工具的纵向交互,A2A负责Agent和Agent的横向协作,两者互补,构成了现在的Agent生态核心。

Agent 的基本架构由哪些核心组件构成?

完整的AI Agent架构,核心由四大缺一不可的组件组成,分别是LLM核心、工具系统、记忆系统、规划模块。我习惯用一个通俗的团队分工来理解:LLM是统筹全局的老板、工具系统是落地干活的外包团队、记忆系统是存档备查的档案室、规划模块是拆解任务的项目经理,四个组件协同配合,才能支撑Agent实现自主闭环的复杂任务执行。

首先是LLM核心,也就是整个Agent的决策大脑,所有输入信息,包括用户指令、工具返回结果、调取的历史记忆,最终都由LLM来理解、推理和决策,判断下一步是继续思考、调用工具,还是直接输出最终答案。没有LLM,剩下所有组件都只是无效的零件,无法自主运转。

在工程落地中,有两个关键细节。第一是System Prompt,相当于Agent的岗位说明书,提前定义好它的角色、行为边界、输出格式和工作准则,直接决定Agent的人格和行为逻辑,也是日常调优的核心重点。第二是模型分层选型,我们不会单一用一个模型,而是按需搭配:o3、DeepSeek-R1这类推理模型,推理能力极强、但延迟和成本高,专门用来做复杂任务拆解、关键决策;GPT-4o、Claude Sonnet这类通用模型,能力均衡,适配绝大多数Agent主循环流程;而轻量小模型成本低、响应快,专门处理意图分类、格式提取这类简单重复任务,兼顾性能和成本。

第二个核心组件是工具系统,是Agent和外部世界交互的唯一入口。原生大模型只能做文本生成,没办法联网、查数据、跑代码、发消息,所有实操能力都靠工具实现。常见工具包括搜索引擎、数据库查询、代码执行器、各类业务API等等。

这里有个很关键的分工误区:模型只负责决策,不负责执行。我们只会给工具写清楚名称、功能描述、入参参数这一份“说明书”,LLM根据场景自主判断调用哪个工具、填什么参数,以结构化JSON格式输出调用指令,真正的代码执行、接口请求都是程序完成的,最后再把执行结果反馈给模型,形成闭环。而且工具的描述质量直接决定调用准确率,描述越精准具体,模型越不会误用工具。

另外行业现在已经有了标准化的MCP模型上下文协议,相当于工具生态的通用USB-C接口。工具提供方只要实现一套MCP Server,所有支持MCP的Agent都可以直接调用,不用重复写适配代码,彻底解决了多工具、多Agent的适配成本问题,目前这个生态已经非常成熟了。

第三个核心组件是记忆系统,解决Agent任务失忆、状态断裂的问题,整体分为两层核心记忆,还可以结合认知科学做结构化分类。首先是短期记忆,依托模型的上下文窗口实现,用来存储当前任务的所有中间步骤、实时状态,支撑单轮复杂任务的连贯执行,但容量有限,任务结束就会清空。针对上下文溢出的问题,工程上一般用摘要压缩、滑动窗口的方式做取舍,平衡信息完整性和上下文容量。

然后是长期记忆,靠向量数据库实现,支持跨任务、跨会话存储信息,通过Embedding向量化存储、语义检索调取。我们可以把长期记忆分为三类:语义记忆存事实知识、情景记忆存过往执行经历、程序性记忆存做事的流程方法论,让Agent可以沉淀经验、越用越智能。同时工程上会做记忆优化,一是只存储高价值信息,避免噪音干扰;二是加入记忆衰减机制,通过时间权重降低老旧信息的优先级,避免过时数据影响决策。

最后一个核心组件是规划模块,是Agent处理复杂任务的核心能力。简单任务可以直接一步执行,但面对多步骤复杂目标,规划模块会依托LLM的推理能力,把大目标拆解成有序、可落地的子任务,还能动态调整执行方案。

它的推理能力主要靠两种主流技术支撑:基础的CoT思维链,让模型分步输出思考过程,提升基础推理准确率;进阶的ToT思维树,会在每个节点拓展多个推理分支,择优执行,更适合创意、复杂决策场景。

实际执行有两种经典模式,我们一般会结合使用。第一种是先规划后执行,提前输出完整任务步骤,结构清晰、便于人工审核,适合流程固定的任务;第二种是边执行边规划,也就是ReAct模式,每执行一步就根据结果动态调整后续计划,灵活性极强,适配不确定的复杂场景。两者结合,既能保证大方向不跑偏,又能灵活应对执行中的突发问题。

最后我整体串联一下四大组件的完整运行闭环:首先规划模块拆解用户复杂目标,生成执行步骤;接着LLM结合短期记忆、长期调取的历史信息做实时决策,判断是否调用工具;随后工具系统落地执行具体操作,把结果返回给模型;执行结果同步存入短期记忆,关键信息沉淀为长期记忆;之后循环迭代决策、执行、复盘,直到LLM判断任务完成,输出最终答案。

总结一下,这四个组件缺一不可:LLM负责决策、工具负责实操、记忆负责留存状态、规划负责拆解复杂任务,共同构成了Agent区别于普通问答大模型的自主执行能力。同时面试中需要避开三个常见误区:不要只答LLM和工具,忽略记忆和规划;不要把记忆等同于上下文,长短记忆的实现和作用完全不同;不要混淆工具的决策和执行主体,模型只决策、代码才执行。

天机学堂

jenkins控制台长什么样

提交代码,jenkins可以自动构建

阅读源码的方式是什么?

微信小程序

小程序基本的项目结构是什么?

小程序的Json配置文件分为哪几种?各自的主要内容是什么?

WXML模板是什么?与HTML有什么区别?

WXSS样式是什么?与CSS有什么区别?

小程序中 .js 文件的分类你了解吗?

小程序的宿主环境是什么?

小程序的通信模型你了解吗?运行机制?

小程序的常用的视图容器类组件你了解有哪些?

使用View组件实现flex横向布局效果

<!--pages/page/page.wxml-->
<!-- View组件:普通视图区域, 类似于 HTML 中的 div,是一个块级元素,常用来实现页面的布局效果 -->
<view class="container1">
  <view>A</view>
  <view>B</view>
  <view>C</view>
</view>
/* pages/page/page.wxss */
.container1 view {
  width: 100px;
  height: 100px;
  text-align: center;
  line-height: 100px;
}

.container1 view:nth-child(1) {
  background-color: lightgreen;
}

.container1 view:nth-child(2) {
  background-color: lightskyblue;
}

.container1 view:nth-child(3) {
  background-color: lightcoral;
}

.container1 {
  display: flex;
  justify-content: space-around;
}

使用scroll-view组件实现的纵向滚动效果

<!--pages/page/page.wxml-->
<!-- 可滚动的视图区域,常用来实现滚动列表效果 -->
<!-- 可选:scroll-y 与 scroll-x -->
<scroll-view class="container1" scroll-y>
  <view>A</view>
  <view>B</view>
  <view>C</view>
</scroll-view>
/* pages/page/page.wxss */
.container1 view {
  width: 100px;
  height: 100px;
  text-align: center;
  line-height: 100px;
}

.container1 view:nth-child(1) {
  background-color: lightgreen;
}

.container1 view:nth-child(2) {
  background-color: lightskyblue;
}

.container1 view:nth-child(3) {
  background-color: lightcoral;
}

.container1 {
  border:1px solid red;
  /* 给 scroll-view 固定高度 */
  height: 120px;
  width: 100px;
}

使用swiper 和 swiper-item组件实现轮播图效果

<!--pages/page/page.wxml-->
<!-- 轮播图区域 -->
<!-- indicator-dots 属性显示面板指示点 -->
<swiper class="swiper-container" indicator-dots>

  <!-- 第一项 -->
  <swiper-item>
    <view class="item">A</view>
  </swiper-item>

  <!-- 第二项 -->
  <swiper-item>
    <view class="item">B</view>
  </swiper-item>

  <!-- 第三项 -->
  <swiper-item>
    <view class="item">C</view>
  </swiper-item>

</swiper>
/* pages/page/page.wxss */
.swiper-container {
  height: 150px; /* 轮播图容器的高度 */
}

.item {
  height: 100%;
  line-height: 150px;
  text-align: center;
}

swiper-item:nth-child(1) .item {
  background-color: lightgreen;
}

swiper-item:nth-child(2) .item {
  background-color: lightskyblue;
}

swiper-item:nth-child(3) .item {
  background-color: lightcoral;
}

swiper组件的常用属性有哪些?

小程序常用的基础内容组件你了解的有哪些?

请用text组件实现长按选中文本内容的效果

<!--pages/page/page.wxml-->
<!-- 通过 text 组件的 selectable 属性,实现长按选中文本内容的效果 -->
<view>
  手机号支持长按选中效果:
  <text selectable>15823947021</text>
</view>

请用rich-text 组件把 HTML 字符串渲染为对应的 UI 结构

<!--pages/page/page.wxml-->
<!-- 通过 rich-text 组件的 nodes 属性节点,把 HTML 字符串渲染为对应的 UI 结构 -->
<rich-text nodes="<h1 style='color:red;'>标题</h1>"></rich-text>

请写出button按钮的基本使用代码

<!--pages/page/page.wxml-->
<!-- 通过 type 指定按钮类型 -->

<view>--- 通过 type 指定按钮类型 ---</view>
<button>默认按钮</button>
<button type="primary">主色调按钮</button>
<button type="warn">警告按钮</button>

<view>--- size="mini" 小尺寸按钮 ---</view>
<button size="mini">默认按钮</button>
<button type="primary" size="mini">主色调按钮</button>
<button type="warn" size="mini">警告按钮</button>

<view>--- plain 镂空按钮 ---</view>
<button size="mini" plain>默认按钮</button>
<button type="primary" size="mini" plain>主色调按钮</button>
<button type="warn" size="mini" plain>警告按钮</button>

请写出image组件的基本使用

<!--pages/page/page.wxml-->
<!-- image 组件的基本使用 -->

<!-- 空图片 -->
<image></image>

<!-- 使用 src 指向图片路径 -->
<image src="/images/1.jpg"></image>

image 组件的 mode 属性是指的什么?

<!--pages/page/page.wxml-->
<!-- image 组件的基本使用 -->

<!-- 空图片 -->
<image></image>

<!-- 使用 src 指向图片路径 -->
<!-- mode="aspectFill":缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来 -->
<image src="/images/1.jpg" mode="aspectFill"></image>

小程序API是什么?怎么分类的?

WXML模板语法中,数据绑定的基本原则是什么?

怎么在 data 中定义页面的数据?

在页面对应的 .js 文件中,把数据定义到 data 对象中即可:
// pages/page/page.js
Page({
  /**
   * 页面的初始数据(data节点)
   */
  data: {
    // 字符串类型的数据
    info: 'init data',
    // 数据类型的数据(数组)
    msgList: [{msg: 'hello'}, {msg:'world'}]
  },
})

Mustache 语法的格式是怎么样的?应用场景有哪些?

WXML模板语法的数据绑定,想要动态绑定内容该怎么写代码?

<!--pages/page/page.wxml-->
<view>{{info}}</view>
<view wx:for="{{msgList}}" wx:key="index">
  {{item.msg}}
</view>
// pages/page/page.js
Page({
  /**
   * 页面的初始数据(data节点)
   */
  data: {
    // 字符串类型的数据
    info: 'init data',
    // 数据类型的数据(数组)
    msgList: [{msg: 'hello'}, {msg:'world'}]
  },
})

WXML模板语法的数据绑定,想要动态绑定属性该怎么写代码?

<!--pages/page/page.wxml-->
<image src="{{imgSrc}}"></image>
// pages/page/page.js
Page({
  /**
   * 页面的初始数据(data节点)
   */
  data: {
    imgSrc: "http://www.itheima.com/images/logo.png"
  }
})

WXML模板语法的数据绑定,三元运算该怎么写代码?

<!--pages/page/page.wxml-->
<view>{{ randomNumber >= 5 ? '随机数字大于或等于5' : '随机数字小于5'}}</view>
// pages/page/page.js
Page({
  /**
   * 页面的初始数据(data节点)
   */
  data: {
    randomNum: Math.random() * 10 // 生成 10 以内的随机数
  }
})

WXML模板语法的数据绑定,算数运算该怎么写代码?

<!--pages/page/page.wxml-->
<view>生成100以内的随机数:{{randomNum * 100}}</view>
// pages/page/page.js
Page({
  /**
   * 页面的初始数据(data节点)
   */
  data: {
    randomNum: Math.random().toFixed(2) // 生成一个带两位小数的随机数
  }
})

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐