🎯 一、为什么需要这些技术?
1.1 大模型的局限性
尽管大模型(如GPT、Claude、通义千问等)具有强大的理解和生成能力,但它们面临着以下核心挑战:
- 知识时效性问题:训练数据存在截止日期,无法获取最新信息
- 幻觉问题:可能生成看似合理但实际错误的内容
- 上下文长度限制:即使是长上下文模型,也无法处理海量企业数据
- 缺乏工具调用能力:无法直接与外部系统交互
- 通用性与专业性的矛盾:通用模型在特定领域可能表现不佳
- 多步骤任务执行困难:复杂任务需要规划、执行、反思的能力
1.2 企业级应用的需求
企业在落地大模型应用时,通常有以下诉求:
- 接入私有数据和知识库
- 与现有业务系统集成
- 实现自动化工作流
- 保证答案的准确性和可靠性
- 降低开发和运维成本
- 提升用户体验和交互能力
正是为了解决这些问题和满足这些需求,一整套大模型应用技术体系应运而生。
🗺️ 二、大模型应用技术全景图
技术分层架构
┌─────────────────────────────────────────────────────────────┐
│ 模型层 (Model Providers) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ OpenAI │ │ Claude │ │ Gemini │ │通义千问 │ │
│ │ GPT-4 │ │ Anthropic│ │ Google │ │ Kimi │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 网关与路由层 (Gateway & Router) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Higress │ │ LiteLLM │ │ Portkey │ │ One API │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Dify │ │ N8N │ │ FastGPT │ │ Coze │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 智能体编排层 (Agent Orchestration) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Agent │ │ CrewAI │ │ AutoGen │ │Semantic │ │
│ │ (ReAct) │ │ │ │ │ │ Kernel │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 框架与开发层 (Framework & Development) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │LangChain │ │ Spring AI│ │LlamaIndex│ │ Cursor │ │
│ │ │ │ │ │ │ │ Windsurf │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 核心能力层 (Core Capabilities) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ RAG │ │Function │ │ MCP │ │ Rerank │ │
│ │ │ │ Calling │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 (Data Storage) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Milvus │ │ Qdrant │ │ Pinecone │ │ Chroma │ │
│ │(向量数据库)│ │(向量数据库)│ │(向量数据库)│ │(向量数据库)│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 数据与工具层 (Data & Tools) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Crawl4ai │ │Firecrawl │ │ Jina │ │ Jieba │ │
│ │ │ │ │ │ Reader │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 可观测与评估层 (Observability & Evaluation) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │LangSmith │ │ LangFuse │ │ RAGAS │ │ TruLens │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
🧩 三、核心技术点详解与关联
3.0 模型层:大模型服务提供商
🤖 主流大模型对比
作用定位:提供基础的大模型推理能力
| 模型 | 厂商 | 优势特点 | 适用场景 |
|---|---|---|---|
| GPT-4/4o | OpenAI | API稳定、生态完善、多模态 | 通用场景、企业应用 |
| Claude 3.5 | Anthropic | 长上下文、安全对齐、代码能力强 | 代码生成、文档处理 |
| Gemini | 多模态融合、搜索集成 | 视觉理解、信息检索 | |
| 通义千问 | 阿里 | 中文优化、本地化服务 | 国内企业、中文场景 |
| Kimi | 月之暗面 | 超长上下文(200K+) | 长文档分析 |
| DeepSeek | 深度求索 | 开源、高性价比 | 成本敏感场景 |
| 文心一言 | 百度 | 产业知识、中文理解 | 垂直行业应用 |
| 豆包 | 字节跳动 | 对话体验、内容创作 | C端应用 |
3.1 网关与路由层:统一模型访问入口
🚪 Higress(AI网关)
作用定位:云原生API网关,统一管理AI模型调用
-
核心价值:多模型路由、负载均衡、流量控制、安全认证
-
解决痛点:多模型切换、成本优化、调用监控、故障转移
-
技术关键:智能路由、缓存加速、协议转换、可观测性
-
同级替代:
- LiteLLM:轻量级代理,统一OpenAI格式API
- Portkey:AI应用网关,支持多模型路由和fallback
- One API:开源多模型管理,支持负载均衡
3.2 核心能力层:增强大模型的基础能力
🔍 RAG(检索增强生成)
作用定位:解决大模型知识时效性和领域知识缺失问题
-
核心价值:将外部知识库与大模型结合,实现"检索+生成"的混合模式
-
解决痛点:私有数据接入、实时信息获取、减少幻觉
-
技术关键:向量化、语义检索、上下文注入
-
技术变种:
- 基础RAG:简单的检索+生成
- 高级RAG:HyDE、Self-RAG、RAPTOR等优化方法
- GraphRAG:基于知识图谱的RAG(微软开源)
- Adaptive RAG:动态选择检索策略
🔧 Function Calling(函数调用)
作用定位:让大模型具备工具使用能力
-
核心价值:大模型可以主动调用外部API、数据库、系统功能
-
解决痛点:与业务系统集成、执行实际操作、获取实时数据
-
技术关键:函数定义、参数提取、结果返回
-
不同实现:
- 原生Function Calling:OpenAI、Claude等模型内置
- ReAct模式:Thought-Action-Observation循环
- 工具链框架:LangChain Tools、Spring AI Functions
🔌 MCP(Model Context Protocol)
作用定位:标准化的上下文共享协议(Anthropic推出)
-
核心价值:统一大模型访问外部资源的方式,提供标准化接口
-
解决痛点:多工具集成复杂度、上下文管理、互操作性
-
技术关键:协议规范、资源抽象、安全控制
-
相关协议:
- MCP:Anthropic的标准化协议
- Plugin System:OpenAI的插件系统
- Custom Tools:各框架自定义工具规范
🎯 Rerank(重排序)
作用定位:提升RAG检索质量
-
核心价值:对初步检索结果进行精排,提高相关性
-
解决痛点:向量检索不够精准、语义相似但内容不相关
-
技术关键:交叉编码器、相关性打分、排序策略
-
主流模型:
- Cohere Rerank:商业化Rerank API
- BGE Reranker:智源开源中文Rerank模型
- Cross Encoder:基于BERT的交叉编码器
- ColBERT:高效的late interaction模型
3.3 数据存储层:向量数据库
💾 向量数据库对比
作用定位:存储和检索向量化后的数据
| 数据库 | 类型 | 优势特点 | 适用场景 |
|---|---|---|---|
| Milvus | 开源 | 高性能、分布式、云原生 | 大规模企业应用 |
| Qdrant | 开源 | Rust编写、高效、易用 | 中小规模应用 |
| Pinecone | 商业 | 托管服务、简单易用 | 快速开发、SaaS |
| Chroma | 开源 | 轻量级、Python友好 | 原型开发、个人项目 |
| Weaviate | 开源 | 多模态、GraphQL API | 复杂查询场景 |
| PGVector | 开源插件 | PostgreSQL扩展 | 已有PG数据库 |
| Elasticsearch | 开源 | 混合检索、成熟生态 | 全文+向量检索 |
3.4 框架与开发层:提高开发效率
⛓️ LangChain 及替代框架
作用定位:大模型应用开发的全栈框架
-
核心价值:提供链式调用、模块化组件、工具集成的统一框架
-
解决痛点:降低开发复杂度、复用常见模式、快速原型开发
-
技术关键:Chain、Agent、Memory、Callback机制
-
同级替代:
- LlamaIndex:专注RAG和数据索引(原GPT Index)
- Semantic Kernel:微软开源,C#/Python双语言
- Haystack:专注搜索和问答,由deepset开发
- LangGraph:LangChain团队新作,图结构编排
🍃 Spring AI
作用定位:Java生态的AI应用框架
-
核心价值:为Java/Spring开发者提供原生AI开发能力
-
解决痛点:Java生态集成、企业级特性、Spring生态融合
-
技术关键:多模型适配、向量存储、提示词模板
-
同级替代:
- LangChain4j:Java版LangChain
- Quarkus LangChain4j:Quarkus集成AI能力
- 直接调用SDK:各模型原生Java SDK
💬 Prompt Engineering(提示词工程)
作用定位:优化大模型输入输出的艺术与科学
-
核心价值:通过精心设计提示词,最大化发挥模型能力
-
解决痛点:提高回答质量、控制输出格式、引导推理过程
-
技术关键:Few-shot、Chain of Thought、角色设定、模板化
-
辅助工具:
- PromptPerfect:Prompt优化工具
- PromptBase:Prompt市场和分享平台
- LangSmith:Prompt版本管理和测试
- Helicone:Prompt监控和优化
🤖 AI编程工具对比
作用定位:AI辅助编程工具
| 工具 | 厂商 | 核心特点 | 适用场景 |
|---|---|---|---|
| Cursor | Anysphere | 对话式编程、上下文理解强 | 全栈开发、重构 |
| Windsurf | Codeium | Flow模式、智能补全 | 快速编码 |
| GitHub Copilot | Microsoft | 生态完善、VSCode集成 | 代码补全 |
| Codeium | Codeium | 免费、多IDE支持 | 个人开发者 |
| Tabnine | Tabnine | 本地运行、隐私保护 | 企业内网 |
| Amazon CodeWhisperer | AWS | AWS服务集成 | 云原生开发 |
| JetBrains AI | JetBrains | IDEA集成 | Java开发 |
3.5 智能体编排层:实现复杂任务自动化
🤖 Agent(智能体)
作用定位:具备自主决策和执行能力的AI实体
-
核心价值:将大模型从被动响应变为主动规划和执行
-
解决痛点:复杂任务分解、多步骤执行、自我修正
-
技术关键:ReAct模式、记忆机制、工具调用、反思循环
-
不同实现:
- ReAct Agent:Thought-Action-Observation模式
- Plan-and-Execute Agent:先规划后执行
- Reflexion Agent:带有反思能力的Agent
- BabyAGI/AutoGPT:早期自主Agent探索
👥 CrewAI
作用定位:多智能体协作框架(Python)
-
核心价值:让多个专业化Agent协同完成复杂任务
-
解决痛点:任务分工、角色扮演、协作流程
-
技术关键:Agent角色定义、任务分配、通信协议
-
同级替代:
- MetaGPT:软件公司模拟,多角色协作
- ChatDev:虚拟软件公司,端到端开发
- CAMEL:角色扮演式多Agent框架
🔄 AutoGen
作用定位:微软开源的多智能体对话框架
-
核心价值:通过多Agent对话自动完成复杂任务
-
解决痛点:自动化工作流、人机协作、代码生成与执行
-
技术关键:对话流程、群聊模式、代码执行环境
-
相关框架:
- AutoGen Studio:可视化AutoGen应用构建
- AG2(AutoGen 2.0) :下一代多Agent框架
- Semantic Kernel:微软另一AI编排框架
3.6 数据与工具层:数据获取与处理
🕷️ 网页爬虫工具对比
作用定位:获取互联网数据作为AI训练或检索素材
| 工具 | 类型 | 核心特点 | 适用场景 |
|---|---|---|---|
| Crawl4ai | 开源 | AI优化、Markdown输出 | AI应用开发 |
| Firecrawl | 商业API | 企业级、JS渲染 | 生产环境 |
| Jina Reader | 免费API | 网页转Markdown、简单易用 | 快速原型 |
| Apify | 平台 | 爬虫市场、托管运行 | 复杂爬取需求 |
| BeautifulSoup | 开源库 | Python经典、灵活 | 自定义开发 |
| Scrapy | 开源框架 | 高性能、分布式 | 大规模爬取 |
| Playwright | 开源 | 浏览器自动化、JS支持 | 动态网页 |
🔍 Embedding与多模态工具
作用定位:文本向量化和多模态处理
-
Embedding模型:
- OpenAI Embeddings:text-embedding-3系列,高质量
- BGE系列:智源开源,中文效果好
- M3E:Moka开源,中文小样本优化
- text2vec:中文文本向量化工具集
- Sentence Transformers:通用句子向量化
-
Jina AI:
- Jina Embeddings:多语言Embedding API
- Jina Reader:网页转Markdown API
- Jina Reranker:重排序模型
- Jina Colbert:高效检索模型
✂️ 中文NLP工具
作用定位:中文文本处理与分析
-
分词工具:
- Jieba(结巴) :最流行的中文分词库
- pkuseg:北大开源,多领域支持
- LTP:哈工大语言技术平台
- HanLP:多功能NLP工具包
-
其他工具:
- THULAC:清华中文词法分析工具
- SnowNLP:简单的中文NLP库
- FoolNLTK:中文处理工具包
3.7 应用层:低代码与可视化开发
🎨 AI应用开发平台对比
作用定位:快速搭建AI应用,降低开发门槛
| 平台 | 类型 | 核心特点 | 适用场景 |
|---|---|---|---|
| Dify | 开源 | LLMOps、工作流、Agent | 企业级AI应用 |
| FastGPT | 开源 | 知识库、工作流、国产 | 中文知识库 |
| Coze | 商业 | 字节出品、插件丰富 | 聊天机器人 |
| MaxKB | 开源 | 知识库、RAG、简单易用 | 快速搭建问答 |
| Langflow | 开源 | 可视化LangChain、拖拽式 | 开发者友好 |
| FlowiseAI | 开源 | 低代码LangChain、开源 | 个人项目 |
| Botpress | 开源 | 对话机器人、多渠道 | 客服机器人 |
🔗 工作流自动化平台
作用定位:可视化编排业务流程
-
主流平台:
- N8N:开源、节点丰富、自托管
- Zapier:商业、SaaS服务、易用
- Make(Integromat) :可视化、复杂流程
- Airflow:Apache开源、数据工作流
- Temporal:微服务编排、容错性强
- Prefect:Python工作流、现代化
-
AI集成特点:
- 连接LLM API
- 嵌入RAG流程
- 触发Agent任务
- 自动化数据处理
3.8 可观测与评估层:监控和优化
📊 LLM可观测性工具
作用定位:监控、调试、优化AI应用
-
LangSmith:
- LangChain官方可观测平台
- Trace追踪、Prompt管理、数据集测试
- 支持LangChain全生态
-
LangFuse:
- 开源LLM工程平台
- 成本分析、性能监控、Prompt版本管理
- 支持多框架集成
-
Helicone:
- LLM监控代理
- 请求日志、成本追踪、缓存加速
- 轻量级集成
-
Phoenix(Arize AI) :
- 开源AI可观测性
- Trace、Embedding可视化
- 模型评估
🎯 RAG评估工具
作用定位:评估RAG系统质量
-
RAGAS:
- RAG评估框架
- 自动化指标计算(Context Relevancy、Answer Relevancy、Faithfulness等)
- 支持多种LLM作为评估器
-
TruLens:
- LLM应用评估
- 反馈函数、实时监控
- 支持RAG评估
-
DeepEval:
- LLM输出评估
- 多维度指标、单元测试集成
- 支持自定义评估器
-
UpTrain:
- 开源评估框架
- 数据质量、模型性能
- 实时监控
🔗 四、技术关联与应用路径
4.1 从简单到复杂的技术演进路径
Level 1: 基础应用
└─ Prompt Engineering → 直接调用大模型API
Level 2: 增强能力
└─ Prompt + RAG → 接入知识库的问答系统
Level 3: 工具集成
└─ RAG + Function Calling → 可执行操作的AI助手
Level 4: 标准化集成
└─ RAG + Function Calling + MCP → 标准化工具访问
Level 5: 框架化开发
└─ LangChain/Spring AI → 快速开发完整应用
Level 6: 智能体应用
└─ Agent + Tools → 自主任务执行
Level 7: 多智能体协作
└─ CrewAI/AutoGen → 复杂任务自动化
Level 8: 平台化运营
└─ Dify/N8N → 企业级AI应用平台
4.2 典型应用场景的技术组合
场景1:企业知识库问答系统
技术栈:RAG + Rerank + Prompt + Spring AI + Jieba
数据层:Crawl4ai/Firecrawl采集数据
处理层:Jieba分词 → Jina向量化
检索层:向量检索 → Rerank精排
生成层:Spring AI + Prompt模板
场景2:智能客服系统
技术栈:Agent + Function Calling + RAG + MCP
能力层:RAG知识检索 + Function Calling调用业务接口
智能层:Agent自主决策和任务执行
集成层:MCP统一工具访问
场景3:自动化营销内容生成
技术栈:CrewAI + Crawl4ai + Prompt + LangChain
数据采集:Crawl4ai爬取市场信息
智能体编排:CrewAI协调研究员、写作者、审核者
框架支持:LangChain提供组件和链式调用
场景4:代码生成与审查助手
技术栈:AutoGen + Cursor + Function Calling
开发工具:Cursor辅助编码
智能协作:AutoGen多Agent对话生成代码
执行验证:Function Calling执行测试和部署
场景5:低代码AI应用平台
技术栈:Dify/N8N + RAG + Agent + 多种集成
可视化层:拖拽式界面设计
能力层:集成RAG、Agent等能力
集成层:连接各类AI服务和业务系统
🎯 五、技术选型指南
5.1 按开发语言选型
| 语言生态 | 推荐框架 | 适用场景 |
|---|---|---|
| Python | LangChain + Crawl4ai | 快速原型、AI研究、数据科学 |
| Java/Spring | Spring AI + MyBatis | 企业级应用、微服务架构 |
| 跨语言 | Dify/N8N | 快速交付、低代码开发 |
5.2 按应用复杂度选型
| 复杂度 | 推荐方案 | 说明 |
|---|---|---|
| 简单问答 | Prompt + API直调 | 适合简单场景 |
| 知识库问答 | RAG + 开发框架 | 中等复杂度 |
| 智能助手 | Agent + Function Calling | 需要工具调用 |
| 复杂任务 | 多Agent框架(CrewAI/AutoGen) | 任务分解协作 |
| 企业平台 | Dify/N8N + 完整技术栈 | 需要管理和运维 |
5.3 按团队能力选型
| 团队类型 | 推荐路径 | 说明 |
|---|---|---|
| 技术小白 | Dify/N8N | 无需编程基础 |
| 初级开发 | LangChain + Prompt | Python基础即可 |
| Java开发 | Spring AI + RAG | 利用现有技能 |
| 高级开发 | 自定义Agent + MCP | 灵活定制 |
🚀 六、技术趋势与展望
7.1 当前技术热点
- 多模态能力增强:从文本扩展到图像、视频、音频
- 长上下文突破:百万token上下文窗口
- Agent智能化:从简单工具调用到自主任务规划
- 标准化进程:MCP等协议推动互操作性
- 开发工具进化:AI辅助开发成为标配
7.2 未来发展方向
- 模型端侧化:更多端侧运行的小模型
- 垂直领域深化:行业专用模型和应用
- 人机协作优化:更自然的交互方式
- 成本持续下降:推理成本降低10-100倍
- 安全与合规:隐私保护、内容安全、可解释性
7.3 实践建议
- ✅ 先学核心:优先掌握RAG、Prompt、Agent
- ✅ 选好框架:根据技术栈选择LangChain或Spring AI
- ✅ 动手实践:每个技术都要写代码验证
- ✅ 关注标准:重视MCP等标准化协议
- ✅ 持续学习:技术迭代快,保持学习热情
📋 七、技术清单速查表
为了方便查阅,这里提供所有技术点的分类汇总:
🤖 模型层
OpenAI GPT-4、Claude 3.5、Google Gemini、通义千问、Kimi、DeepSeek、文心一言、豆包
🚪 网关层
Higress、LiteLLM、Portkey、One API
🎨 应用平台层
Dify、FastGPT、Coze、MaxKB、Langflow、FlowiseAI、Botpress
🔗 工作流层
N8N、Zapier、Make、Airflow、Temporal、Prefect
🤖 智能体层
ReAct Agent、CrewAI、AutoGen、MetaGPT、ChatDev、CAMEL、Semantic Kernel
⛓️ 框架层
LangChain、LlamaIndex、Spring AI、LangChain4j、Haystack、LangGraph
🔧 核心能力
RAG、GraphRAG、Function Calling、MCP、Rerank
💾 向量数据库
Milvus、Qdrant、Pinecone、Chroma、Weaviate、PGVector、Elasticsearch
🔍 Embedding模型
OpenAI Embeddings、BGE、M3E、text2vec、Sentence Transformers、Jina Embeddings
🎯 Rerank模型
Cohere Rerank、BGE Reranker、Cross Encoder、ColBERT
🕷️ 爬虫工具
Crawl4ai、Firecrawl、Jina Reader、Apify、BeautifulSoup、Scrapy、Playwright
✂️ 中文NLP
Jieba、pkuseg、LTP、HanLP、THULAC、SnowNLP、FoolNLTK
🤖 AI编程工具
Cursor、Windsurf、GitHub Copilot、Codeium、Tabnine、CodeWhisperer、JetBrains AI
📊 可观测性
LangSmith、LangFuse、Helicone、Phoenix、PromptLayer
🎯 评估工具
RAGAS、TruLens、DeepEval、UpTrain
💬 辅助工具
PromptPerfect、PromptBase、Jina Colbert
📝 八、总结
大模型应用开发是一个快速发展的领域,涉及的技术栈丰富而复杂。本文梳理的技术体系可以概括为:
核心思想:通过RAG、Function Calling、MCP等技术增强大模型能力
开发框架:利用LangChain、Spring AI等框架提高开发效率
智能化升级:基于Agent、CrewAI、AutoGen实现任务自动化
工具支撑:借助爬虫、分词、向量化等工具处理数据
平台化运营:通过Dify、N8N等平台实现快速交付
这些技术并非孤立存在,而是相互关联、层层递进的。理解它们之间的关系,选择合适的技术组合,是成功落地大模型应用的关键。
后续的每一期,我们将深入一个技术点,从原理到实践,从入门到精通,帮助你构建完整的大模型应用开发能力。
📚 附录:技术名词索引
- RAG: Retrieval-Augmented Generation(检索增强生成)
- MCP: Model Context Protocol(模型上下文协议)
- LLM: Large Language Model(大语言模型)
- Embedding: 嵌入向量/向量化
- Rerank: 重排序
- Agent: 智能体
- A2A: Agent to Agent(智能体间通信)
- ReAct: Reasoning and Acting(推理与行动)
- LLMOps: Large Language Model Operations(大模型运维)
- CoT: Chain of Thought(思维链)
- Few-shot: 少样本学习
- Zero-shot: 零样本学习