Agent 真正的分水岭,不是“会回答”,而是“会稳定做事”:一文讲透推理框架与工程落地


大多数人构建 Agent 失败,不是因为用的模型不够强,而是因为根本没想清楚"怎么让它持续、可靠地把一件事做完"。

一、你遇到的那堵墙,叫"会回答"与"会做事"之间的鸿沟

很多团队第一次做 Agent 的过程是这样的:

用一个强模型,写几条 system prompt,加上几个工具调用,demo 跑起来了,看起来相当聪明——能搜索、能写代码、能总结。然后上线,开始出问题。任务中途卡住,工具调用失败没有恢复,执行路径陷入循环,最终状态不知道在哪里。

这不是模型不够强。换成更贵的模型,问题依然存在。

根本原因是:聊天和做事是两件截然不同的事。

聊天是无状态的一问一答。做事是有状态的、多步骤的、需要在不确定中持续推进的过程。中间有工具、有失败、有依赖、有反馈、有分支。光靠"更智能地生成下一个 token",不足以撑起这个过程。

这就是推理框架存在的意义。它不是让模型"更聪明",而是给模型提供持续完成任务的结构:怎么拆解问题,怎么规划步骤,怎么调用工具,怎么判断结果,怎么在失败后恢复。

二、推理框架解决的不是"智力"问题,而是"工程"问题

我们先把几个主流推理框架过一遍,但不是为了背概念——而是搞清楚它们各自在解决什么具体的工程问题

CoT:把复杂问题拆成中间步骤

Chain-of-Thought 的核心洞察很简单:语言模型在"一步到位"时容易出错,但如果强迫它逐步推导,准确率会显著提升。

工程上怎么理解?CoT 本质上是把一次高风险的大跳跃,拆成多次低风险的小推断。每一步都是可审查、可调试的。

适合的场景:推理密集型的单次任务——数学、逻辑、分析、判断。它是基础,几乎所有复杂推理框架都内嵌了 CoT。

不适合的场景:多轮工具调用、需要外部反馈的动态任务。CoT 是"想清楚再说",不是"边做边想"。

ReAct:推理与行动交替,专为工具调用设计

这是目前工程落地最广的框架之一。结构是 Thought → Action → Observation → Thought → Action……循环往复,直到任务完成。

它解决的核心问题:工具调用不是瞬间完成的,外部世界的反馈(Observation)会影响下一步的推理(Thought)。ReAct 把这个"感知-思考-行动"的循环显式地建模出来。

工程上需要注意的

  • Observation 的格式化很重要。把工具返回的原始数据整形成模型能有效利用的格式,直接影响后续推理质量。
  • 需要设计循环终止条件,否则容易陷入无限 Action 循环。
  • Token 消耗随步数线性增长,长任务要考虑上下文压缩。

Self-Consistency:同一问题跑多次,投票选最稳的答案

一次推理可能抽到错误路径。多跑几次、多数路径投票,能显著提升结论的稳定性。

工程上的代价很明显:token 消耗成倍增加,延迟上升。所以不是什么场景都该用——只有当错误代价远大于资源代价时才值得开。高风险判断、分类决策、关键路由,用得上。普通问答,不要上。

Plan-and-Solve:先想好再动手

模型在执行复杂任务时,有一个常见失败模式:漏步。生成过程中"忘了"某个必要环节,结果到最后发现流程不完整。

Plan-and-Solve 的做法是先生成一个显式计划,再逐步执行。计划是可见的、可检查的。

工程价值:让任务的整体结构在执行之前就被显式化。这意味着你可以在执行前做校验,比如检查计划步骤是否覆盖了约束条件、是否有明显遗漏。

注意:计划和执行之间存在"计划漂移"问题——执行过程中遇到新信息,计划可能需要动态调整。系统设计时要考虑计划的可修订性。

ToT:把推理当成搜索问题

Tree-of-Thoughts 把推理路径建模为树结构,在每个节点评估多个候选方向,选择最有价值的分支继续探索。

这在理论上非常优雅——它把推理变成了一个有价值评估的搜索过程。

但工程代价极高:每个节点要生成多个候选并评估,计算量爆炸式增长。ToT 在工程实践中应该只用于极高价值、可以容忍高成本的决策点,比如复杂规划的关键分叉处,而不是整个任务都走 ToT。

实际落地建议:局部 ToT——大多数步骤用 ReAct,遇到关键分叉点时切换到 ToT 做多候选评估。

Read more ⟶

MultiAgent 协作模式全解析:从单体 Agent 到分布式 AI 系统


当你的 Agent 开始在复杂任务面前"力不从心",不是模型不够强,而是架构不够好。这篇文章,我们彻底讲透多智能体系统的六大经典模式。

1. 引言:为什么单体 Agent 不够用了?

单体 Agent 的边界与天花板

2023 年,大多数人对 AI Agent 的想象是这样的:一个超级 LLM,接收用户输入,调用几个工具,输出结果。这个模型简洁优雅,在简单任务上表现出色。

但当你试图用它完成"分析竞争对手的产品策略、撰写一份 20 页的深度报告"时,问题开始暴露:

  • 上下文窗口是有限的。即便 GPT-4o 支持 128K tokens,一个需要反复迭代、持续积累上下文的长任务,终究会遇到天花板。
  • 并行处理能力缺失。单体 Agent 是串行思考的,它不能同时调研五个竞争对手,只能一个一个来。
  • 错误传播不可控。在一个长链任务中,第三步出错,后续所有步骤都在错误的基础上继续——没有隔离,没有检查点。
  • 专业性存在边界。一个通才 Agent 写代码不如专门调了代码数据集的 Agent,做财务分析不如经过金融语料微调的 Agent。

单体 Agent 的本质是"一个大脑包揽一切"。 这在人类组织中早已被证明是低效的,为什么在 AI 系统里还要走这条老路?

从"一个大脑"到"分工协作"的架构必然性

人类解决复杂问题的方式从来都不是依赖一个全知全能的个体。我们建立团队、设立角色、划定职责边界、通过沟通协作完成超越个人能力上限的任务。

多智能体系统(Multi-Agent Systems)正是这一思想在 AI 领域的工程化实践:

  • 专业化:每个 Agent 聚焦特定能力域,深而不广
  • 并行化:多个 Agent 可以同时工作,突破串行处理的速度瓶颈
  • 可组合性:不同 Agent 组合成不同的"工作流",灵活应对多种场景
  • 可观测性:系统的每个节点状态清晰可见,便于调试和优化

这不是趋势,这是复杂系统演化的必然结果。

2. 核心概念:Workflow vs Agent

在深入模式之前,必须厘清一个经常被混用的概念对:WorkflowAgent。混淆这两者,会导致架构决策的根本性偏差。

Workflow(工作流):预定义代码路径,确定性执行

Workflow 是一种由代码硬编码的控制流。执行路径在编写时就已确定,输入 A 经过步骤 1、2、3 得到输出 B,这条路径是固定的、可预期的、可重复的。

Read more ⟶

Transformer 全面拆解:从「预测下一个词」到改变世界的技术


写给那些不满足于"注意力机制很强大"这种解释的人。

本文目标:把一个"黑箱",拆成你能 mentally simulate 的系统。

引言:一个看似简单的问题

你有没有想过——ChatGPT 为什么"看起来懂你"?

当你问它"帮我写一封拒绝朋友请求的礼貌邮件",它不仅能写出来,还能感知到"拒绝"和"礼貌"之间的张力,给出一封语气恰当、逻辑自洽的信。这不是简单的模板填充,也不是数据库检索。

它真的理解语言吗?

答案比你想象的既更简单,也更深刻。

Transformer 本质上只做一件事:预测下一个 Token

没有世界模型,没有常识库,没有专门的语法规则。就是反复地、大规模地、在海量文本上——预测下一个词。

然而就是这个看似朴素的任务,催生出了 GPT-4、Claude、Gemini 这些震动世界的系统。

为什么?

因为"完美预测下一个词",在信息论上,等价于"完全理解语言背后的结构"。而 Transformer 架构,提供了一种前所未有的、可大规模扩展的方式去逼近这个目标。

这篇文章,我们就来把这个"黑箱",一层一层地拆开。

读完之后,你不一定能写出 GPT-4,但你应该能:

  • 在脑子里模拟 token 从输入到输出的完整流程
  • 理解为什么 Transformer 打败了 RNN
  • 知道为什么模型越大越聪明,以及这条路的边界在哪里
  • 对"模型到底理解了什么"有自己批判性的判断

不需要记公式,但需要你认真思考。

让我们开始。

第一部分:核心直觉

1. Transformer 的本质:信息如何在序列中流动?

在理解任何细节之前,先建立最重要的直觉:

Transformer 是一台"信息路由机器"。

给定一个 token 序列(比如一句话),Transformer 的核心任务是:让每个 token 能够"看到"并"收集"序列中其他位置的相关信息,然后据此更新自己的表示。

这句话有三个关键词:

  1. 看到:不是所有 token 都同等重要,需要有选择地关注
  2. 收集:把分散在序列中的信息汇聚到当前位置
  3. 更新:根据收集到的信息,修正自己对这个 token 的"理解"

这个过程,在每一层 Transformer Block 里都会发生一次。一个现代 LLM 有 96 层甚至更多,也就是说,每个 token 会经历 96 次这样的"信息更新"。

最终输出的向量,已经不再是孤立的词义,而是包含了整个上下文信息的、高度压缩的语义表示

Read more ⟶

LLM 微调实战指南:从原理到落地的完整路径


一、是否需要微调?

很多工程师一遇到大模型效果不好,第一反应是"我们去微调一下"。这个直觉并不总是错的,但它跳过了一个至关重要的问题:微调真的是你现在需要的吗?

微调不是万能药。它有成本(数据、算力、人力、维护),有风险(过拟合、灾难性遗忘、对齐破坏),有边界(不能弥补知识截止日期的缺陷,不能替代架构层面的问题)。在你投入资源之前,先把决策做对,比把微调做对更重要。

1.1 预训练(Pre-training)模型的能力边界

预训练大语言模型(LLM)是在海量文本上通过 Next Token Prediction 训练出来的,它内化了:

  • 语言能力:语法、语义
  • 世界知识:训练数据截止日前的大量事实
  • 推理能力:链式推理、类比、归纳
  • 泛化能力:zero-shot / few-shot 泛化

但它的边界同样清晰:

类型描述能否靠 Prompt 解决?
知识截止不知道训练后发生的事需要 RAG 或工具调用
领域深度不足医疗/法律细分知识密度低部分可以,复杂情况需微调
语言风格统一品牌语气、客服话术Prompt 可以但难以持续一致
私有数据注入公司内部文档需要 RAG 或微调
高并发低延迟推理成本敏感需要小模型微调

核心判断原则:如果你的问题本质是"模型不知道某件事",RAG 是更优先的选择;如果是"模型知道但表达/行为方式不对",微调才是你要的。

1.2 三种主流方案对比:Prompt Engineering vs RAG vs Fine-tuning

这三种方案不是竞争关系,而是递进关系。实践中应该先穷尽轻量方案,再考虑重量级方案。

Prompt Engineering  →  RAG  →  Fine-tuning
     最轻量                          最重量
     最快速                          最慢速
     最易维护                        最难维护
     效果有上限                      效果上限最高

Prompt Engineering

  • 零成本,快速迭代
  • 无需数据,无需训练
  • 受 context window 限制
  • 无法改变模型底层行为
  • 可被用户 jailbreak

RAG(检索增强生成)

Read more ⟶

为什么你的系统撑不住了?——从单体到分布式的演进之路


双十一零点,某电商系统每秒涌入数十万笔订单。数据库连接池耗尽,接口响应时间从毫秒级飙升到数十秒,告警短信一条接一条涌来。工程师们盯着监控大屏,手忙脚乱地重启服务——然而每一次重启,都只是在用创可贴掩盖骨折。

这不是虚构的故事,这是无数团队在业务快速增长时都会经历的"成长之痛"。而痛苦的根源,往往不是代码写得不好,而是架构选错了时机

本文将带你完整走过一段旅程:从单体系统的诞生与崩溃,到分布式架构的出现与代价,再到业界如何用一套成熟的工具箱应对这些挑战。这不是一篇罗列概念的字典,而是一张帮你理解取舍的工程地图

一、一个系统的成长故事:为什么走向分布式?

1.1 单体架构:一切从简单开始

每个系统在诞生之初,几乎都是单体架构(Monolithic Architecture)——所有业务逻辑、数据访问、接口层打包在一个进程里,共享同一个代码库,部署一个包搞定所有事。

这种架构在早期是完全合理的。它有真实的优势:

  • 开发效率高:本地一键启动,函数调用直接跨模块,IDE 里全局搜索无死角
  • 调试简单:一个进程、一份日志、一个调用栈,问题藏不住
  • 部署成本低:CI/CD 流水线简单,运维不需要协调多个服务

但随着业务增长,问题开始浮现。用户模块、订单模块、商品模块、支付模块全部耦合在一起——修改支付逻辑,要重新测试整个系统;商品服务的内存泄漏,会拖垮订单服务的响应;一个小功能上线,需要整个团队停下来做回归测试。

更致命的是扩展性:单体只能纵向扩展(Scale Up),也就是换更大的机器。但机器的 CPU、内存、磁盘 I/O 都有物理上限,而且扩容成本呈指数增长。当 QPS 达到某个量级,再贵的机器也撑不住。

1.2 过渡期:拆库、分层,但治标不治本

面对单体的瓶颈,第一反应往往是垂直拆分:按业务域把代码拆开,用户服务、订单服务、商品服务各自独立部署,通过 HTTP 或 RPC 互相调用。

这是正确方向上的第一步,它确实降低了部分耦合,让团队可以相对独立地迭代各自的服务。然而,多数团队会在这里发现一个残酷的现实:

数据库仍然是单点。

所有服务共享同一个数据库实例,数据库成为新的瓶颈和新的单点故障。更棘手的是,跨服务的业务操作(比如"下单同时扣库存")涉及多张表、多个服务,如何保证数据一致性?用数据库事务?那就回到了紧耦合。不用?那数据就会不一致。

这个阶段的架构,就像给一辆轿车换了更好的轮胎——跑得快一点了,但本质上它仍然不是一辆卡车。

1.3 分布式架构的出现:被逼出来的选择

分布式架构的出现,不是工程师们"追求技术先进性"的主动选择,更多是被现实逼出来的。驱动因素通常有以下几类:

  • 高并发压力:电商大促、游戏开服、直播带货,流量在短时间内放大数十倍,单机或少量节点根本无法承载
  • 海量数据:日志、行为数据、交易记录呈指数增长,单库存不下,单机查不动
  • 高可用要求:互联网服务需要 7×24 不间断,任何单点故障都意味着真实的业务损失
  • 全球化部署:用户分布在不同地区,需要就近服务以降低延迟

分布式的核心思想是:将一个大系统拆分为多个自治的小系统,让它们各自负责一部分职责,通过网络协同完成整体目标。这样,每个部分可以独立扩展、独立部署、独立容错。

听起来很美好——但代价是真实的,我们稍后会详细讲。

二、分布式系统是什么?

在深入挑战之前,先建立一个清晰的认知框架。

分布式系统的定义:多个独立的计算节点,通过网络通信协同完成任务,对外呈现为一个统一的整体系统。

它有几个本质特征:

  • 节点自治:每个节点有自己的 CPU、内存、存储,不共享内存(Shared-Nothing 架构)
  • 网络通信:节点间通过 RPC、HTTP、消息队列等方式交换信息,网络是唯一的通道
  • 并发执行:多个节点同时工作,时序不可预测
  • 局部视图:没有任何一个节点能看到系统的全局状态

分布式不是单一的架构,而是一类架构的统称。在不同场景下,它有不同的形态:

形态典型代表核心目标
微服务架构Spring Cloud、Kubernetes业务解耦、独立部署
分布式存储HDFS、Ceph、S3海量数据存储与访问
分布式计算Spark、Flink大规模数据处理
分布式数据库TiDB、CockroachDB、Cassandra数据水平扩展

三、分布式的代价:你得为可扩展性付出什么?

这是很多团队低估的部分。分布式系统带来了可扩展性和高可用,但也引入了单体中根本不存在的问题。

Read more ⟶

Kubernetes 集群应用日志采集最佳实践


1. Kubernetes 集群下应用日志采集面临的挑战

在传统的虚拟机或物理机环境中,应用日志通常以文件形式持久化在固定路径,日志采集 Agent 只需读取这些文件即可。但在 Kubernetes 环境下,日志管理面临一系列独特挑战。

1.1 容器的临时性

Pod 是 Kubernetes 中最小的调度单元,其生命周期具有高度不确定性:

  • 弹性伸缩:HPA 根据负载自动扩缩 Pod,Pod 随时可能被创建或销毁
  • 滚动更新:Deployment 更新时,旧版本 Pod 被逐个替换,历史日志随之消失
  • 节点故障:节点宕机时,Pod 被驱逐并在其他节点重建,原节点日志无法访问
  • 资源回收:节点磁盘压力触发 Eviction,Pod 被强制终止

若日志仅保存在容器内部,Pod 销毁意味着日志永久丢失,这对问题排查和合规审计都是不可接受的。

1.2 日志的分散性

一个中等规模的 K8s 集群可能有数百个节点、数千个 Pod,应用日志分散在每个节点的容器存储中:

  • 日志物理位置随 Pod 调度动态变化,无法预知
  • 跨节点查看日志需要逐台机器登录,效率极低
  • 分布式调用链的日志需要跨节点聚合,才能完整还原请求路径

1.3 多租户隔离需求

企业级 K8s 平台通常服务多个业务团队,因此需要:

  • 按 Namespace / Service 隔离不同团队的日志
  • 支持细粒度的日志访问权限控制
  • 按团队分摊和管控日志存储成本

1.4 传统方案的局限

传统方案核心问题K8s 场景下的不足
SSH 登录节点查看无法集中检索,效率低Pod 频繁漂移,难以定位日志位置
写入共享存储(NFS/EBS)需要应用改造,引入依赖增加应用复杂度,不适合无状态服务
应用直推日志中心与业务代码耦合多语言/框架依赖重,难以统一运维

因此,需要一种与业务解耦、集中化、可扩展的日志采集方案。

Read more ⟶

基于 Terraform 构建企业内部 kubernetes 集群


1. 为什么要构建企业内部 Kubernetes 集群?

随着企业业务规模的不断扩张,微服务架构逐渐成为主流,应用的数量、版本迭代的频率以及部署的复杂度都在急剧上升。在这一背景下,建立一套稳定、高效、可扩展的企业内部 Kubernetes 集群,成为支撑企业数字化转型的核心基础设施之一。

1.1 构建统一的资源调度平台

企业内部往往同时运行着多条业务线、多个团队的应用服务。Kubernetes 提供了统一的容器编排与资源调度能力,能够将计算、存储、网络资源进行统一抽象和调度,避免各团队烟囱式的资源使用模式,显著提升整体资源利用率。

1.2 支撑 CI/CD 流水线落地

Kubernetes 是现代 CI/CD 流水线的天然载体。通过与 GitLab CI、Jenkins、ArgoCD、Tekton 等工具集成,企业可以实现:

  • 持续集成(CI):代码提交后自动触发构建、测试,产出镜像并推送到私有镜像仓库。
  • 持续交付(CD):基于 GitOps 理念,通过声明式配置驱动应用在集群中的自动发布与回滚。
  • 多环境隔离:通过 Namespace、NetworkPolicy、RBAC 等机制,在同一集群内划分开发、测试、预发、生产等多套环境,降低环境管理成本。

1.3 提升业务稳定性与弹性

Kubernetes 内置的自愈能力(Pod 自动重启、节点故障迁移)、水平自动伸缩(HPA/VPA/KEDA)以及滚动更新策略,能够大幅提升业务服务的可用性和弹性,满足企业对 SLA 的严格要求。

1.4 降低运维复杂度

统一的控制平面使运维团队可以通过标准化的 kubectl 命令或声明式 YAML 配置管理所有工作负载,结合 Helm Chart 进行应用打包与版本管理,有效降低了跨团队、跨项目的运维协作成本。

2. 构建内部 K8s 集群核心流程

2.1 整体流程概览

基础资源准备 → 操作系统初始化 → 集群安装部署 → 网络插件配置 → 存储插件配置 → 集群验证 → 监控告警部署

2.2 基础资源准备

构建 K8s 集群首先需要准备充足的计算、存储和网络资源。

计算资源方案对比:

Read more ⟶

Homebrew 国内下载慢的解决之法及下载过程剖析


对懂点技术的人来说, HomeBrew 几乎成为了 MacOS 上的必装软件,主打一个安装方便,在终端一个命令即可安装配置好。MacOS 下使用的软件大致分为两类: 一类是如 fdneovim 在终端下使用的软件,另一类是如 Google Chrome 的 GUI 软件,通常可在 Apple Store 下载。 终端安软件安装方式: brew install <formula>,GUI 软件安装方式: brew install --cask <cask>,其中的 <formula><cask> 均为你想安装的软件名称, 如果不确定具体名称,可通过: brew search <keyword>搜索。 在国内网络环境下,在 MacOS 上安装软件时,通常会卡在如下所示的流程:

等了好久也没见动静,这是因为默认下载源是从 GitHub 数据中心下载,国内对 GitHub 有限制。

解决办法:配置国内镜像源

目前国内主流的 Homebrew 镜像有:清华大学、阿里云、中科大、腾讯云等。以清华源和阿里云为例,介绍配置方法。

1. 配置清华源

替换 Homebrew 源

#替换 brew.git
cd "$(brew --repo)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git

# 替换 homebrew-core.git
cd "$(brew --repo homebrew/core)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git

# 替换 homebrew-cask.git
cd "$(brew --repo homebrew/cask)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git

# 配置 bottle 镜像(formula 二进制)
# 推荐写入 ~/.zshrc 或 ~/.bash_profile
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles

# 立即生效
source ~/.zshrc  # 或 source ~/.bash_profile

# 更新 brew
brew update

2. 配置阿里云源

# 替换 brew.git
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git

# 替换 homebrew-core.git
cd "$(brew --repo homebrew/core)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git

# 替换 homebrew-cask.git
cd "$(brew --repo homebrew/cask)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-cask.git

# 配置 bottle 镜像
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles
source ~/.zprofile  # 或 source ~/.bash_profile
brew update

其他镜像如中科大、腾讯云等配置方法类似,详见各镜像站帮助文档。

Read more ⟶

0-3 岁孩子应该培养的关键能力


家里有一个快两岁的孩子,我一直在思考,该如何科学地养育他,需要培养哪些核心能力,使他成为一个身心健康、积极上进的人,而不是一味关注他参加多少辅导班、课外兴趣班,或计较他吃得胖瘦。带着这些思考,我咨询了多个“名导”——OpenAI 4o-mini、Kimi、DeepSeek R1等,整合了他们的回答,整体很满意,在自己受用的同时也分享给大家,希望能给有孩子的家长带来一些启发,下面是我整理的内容:

0-3 岁是儿童发展的关键期。此时大脑突触连接数量达到高峰,感官、认知、社交与情感等多方面发展迅速。皮亚杰的感知运动阶段理论、埃里克森的心理社会发展理论,以及哈佛大学、UNESCO 和 WHO 等权威研究,都强调了这一阶段丰富感官刺激、稳定亲子互动与系统性早教的重要性。基于这些理论与实证,个人认为 0-3 岁阶段最应着重培养以下五大关键能力:

  1. 运动能力(Gross & Fine Motor)
  2. 语言能力(Language)
  3. 感官能力(Sensory Integration)
  4. 认知能力(Cognition)
  5. 社交能力(Social-Emotional)

1. 运动能力(Gross & Fine Motor)

运动能力可分为大运动与精细运动:

  • 0-12 个月:重点练习俯卧抬头、翻身、坐稳、爬行等大运动;在 6-12 个月间加入摇铃抓握、拇指对捏、撕纸等精细动作。
  • 12-24 个月:培养独立行走、蹲起、爬梯等大运动,同时进行搭积木、倒水、串珠子等精细练习。
  • 24-36 个月:鼓励跑、跳、单脚站立、平衡木行走等,以提升身体协调与平衡;通过涂鸦、剪纸等活动丰富精细运动体验。
Read more ⟶

Japanese Word Series - Countries


Countries

Hiragana漢字English
にほん日本Japan
ちゅうごく中国China
かんこく韓国Korea
アメリカAmerica
イギリスUnited Kingdom
インドIndia
インドネシアIndonesia
タイTailand
ドイツGermany
フランスFrance
ブラジルBrazil
Read more ⟶