一、AI 时代下的编程范式
1. Vibe Coding 氛围编程
1.1 Vibe Coding 的起源
在过去十年间,低代码/无代码平台和 AI 代码助手持续冲击着软件开发行业。如今,一种被称为 Vibe Coding 的新兴实践突然走红,甚至颠覆了人们对 "程序员到底在做什么" 的认知。
Vibe Coding(氛围编程)是一种依赖人工智能的计算机编程实践,其核心在于:开发者使用自然语言 提示向针对代码优化的大语言模型(LLM)描述问题,由 LLM 生成软件,从而使程序员摆脱编写和调 试底层代码的需要。


其关键特征在于:用户通常在不完全理解代码底层机制的情况下接受 AI 生成的代码。 实际上,这与仅仅将 LLM 作为代码输入的辅助工具不同,**Vibe Coding 仍然需要开发者审查、测试和 理解每一行代码。**Vibe Coding 的本质是完全沉浸于 AI 助手的 "氛围" 中,将详细的实现过程外包给 AI。
Vibe Coding 标志着软件开发模式的根本转变:从细致的手动编码,转向更抽象、意图驱动的方法,人 类开发者在此过程中扮演着指导 AI 的角色。
-
开发者需要更加注重问题定义和规范,清晰地使用自然语言表达需求和期望的结果。确定最佳的提 问方式变得至关重要。
-
同时,开发者需要具备指导和审查 AI 生成代码的能力,评估、完善和测试 AI 产出的代码。开发者 更像是扮演指导者或编辑的角色。
-
系统设计和架构的理解变得比低层次的编码更为重要。批判性思维和问题解决能力对于评估和改进 AI 生成的代码至关重要。
-
此外,开发者需要学习如何有效地与 AI 沟通,掌握提示技巧以获得期望的结果。虽然侧重点有所变 化,但对编程基本原理的理解对于有效地指导 AI 和进行调试仍然很有价值。
可以看到,清晰地定义问题和指导 AI 的能力变得至关重要。 此外,AI 的输出需要验证,这需要批判性 思维和对软件架构的理解。这表明开发者正在从"代码编写者"转变为更像是能够有效利用 AI 的"软件 架构师"或"产品负责人"。
1.2 Vibe Coding 的局限性
生成的代码往往只是"能用"而非"优秀"。
主要体现在以下几个方面:
• 代码质量与架构的"黑箱"困境
AI 的目标是生成功能上可运行的代码,但它无法理解什么是"优雅"、"可维护"、"可扩展"的 代码架构。
• 上下文长度的"金鱼记忆"与知识滞后性
有限的上下文窗口:即使上下文长度在不断增长,LLM 也无法记住并理解一个庞大项目的全部代 码。在开发过程中,后期的一个需求可能需要修改前期生成的代码。AI 由于"忘记"了之前的完整 上下文,很可能会生成与现有架构冲突或重复的代码,导致系统腐化。
知识截止与"幻觉":LLM 的训练数据有截止日期,它可能无法使用最新的语言特性、库版本或最 佳实践。更危险的是,它可能会"幻觉"出一些不存在的 API、库函数或参数,生成看似正确实则无 法运行的代码,这对开发者甄别能力提出了极高要求。
• 安全性与可靠性的"隐形地雷"
这是Vibe Coding在企业级应用中最致命的弱点。
安全漏洞的无声引入:AI没有 "安全" 意识。它可能会轻松地生成含有 SQL 注入、XSS 攻击、硬编 码密码、不当的权限设置等安全漏洞的代码。对于安全至关重要的系统(如金融、医疗),这是一个 不可接受的风险。
可靠性难以保障:生成的代码缺乏经过严格测试的可靠性。它可能在小规模数据下运行良好,但在高 并发、大数据量或边缘案例下表现不稳定甚至崩溃。缺乏完善的日志、监控和熔断机制,使得线上排 查问题变得极其困难。
可以看到,Vibe Coding 不是一个替代品,而是一个强大的效率倍增器。它的正确定位是:
**• 糟糕的"程序员":**它无法负责架构设计、制定技术方案、保证代码质量、确保系统安全。这些核心 的、战略性的工作必须由拥有扎实框架知识、丰富工程经验和深刻判断力的开发者来完成。

**• 优秀的辅助工具:**它擅长生成样板代码、完成重复性任务、编写单元测试、解释复杂代码、提供灵 感建议。它可以极大提升开发效率,解放开发者去专注于更有价值的任务。

实际上,目前真正跑在生产线上的代码,依旧是工程师一个函数一个函数敲出来的。但像是改函数签 名、重命名变量、写一个测试用例、小的 Demo、工具等这些"接地气"的工程活,恰恰是 AI 最佳的 用武之地。
2. AI 开发框架:新战略高地?
即使 AI 代码生成工具(Vibe Coding)日益强大,但它们生成的代码往往只是"能用"而非"优秀"。真正 的专业开发者需要理解架构设计、系统权衡与工程最佳实践------这正是框架学习的核心价值。
2.1 框架原则
AI 开发框架与传统框架(如 JAVA 中的 Spring,C++ 中的 libcurl 库),它们都共享一些框架原则:
抽象与封装
Spring:封装了Java EE开发的复杂性,如依赖注入、事务管理、MVC。开发者不需要手动管理对象生 命周期或处理繁琐的Servlet API。

AI 开发框架与传统框架(如 JAVA 中的 Spring,C++ 中的 libcurl 库),它们都共享一些框架原则: 抽象与封装 Spring:封装了Java EE开发的复杂性,如依赖注入、事务管理、MVC。开发者不需要手动管理对象生 命周期或处理繁琐的Servlet API。
LangChain:封装了与不同 LLM(OpenAI, Anthropic 等)、向量数据库(Chroma, Pinecone)、工 具(Tools)交互的复杂性。开发者不需要为每个供应商编写不同的 API 调用代码。

模块化与可组装性
LangChain:核心概念就是"链"(Chain),它将不同的模块(LLM, Prompts, Tools, Memory, Output Parsers)像乐高积木一样组合起来,构建复杂的 AI 工作流。

2.2 超级武器
在这场 AI 时代的变革中,如 LangChain、LangGraph 这样的 AI 开发框架正成为开发者的"超级武 器"。它们如同智能时代的操作系统,连接着强大的 AI 模型与复杂的现实应用,让开发者能够以更高效 率构建更强大的 AI 应用。
框架 知识为我们提供了:
• 架构:让我们知道代码应该组织成什么样子。
• 质量:让我们能判断 AI 生成的代码是否合格。
• 安全:框架内置的最佳实践和模式能规避许多基础风险。
• 集成:让我们能高效地将 AI 生成的"零件"组装到经过验证的、可靠的大系统中。
二、LangChain:LLM 应用开发的核心框架
1. LLM 驱动的应用程序的框架
由 LLM 驱动的应用程序的框架,它们的目标是提供构建复杂 LLM 应用(如带有记忆的代理、复杂的 RAG 系统、多步骤工作流)所需的全套工具。以下是按语言生态划分的主流框架:
1.1 Python 生态(绝对主流)
| 框架 | 核心特点与优势 | 适用场景 |
|---|---|---|
| LangChain | 生态最丰富,灵活性极高。提供了最全面的组件(链、代理、检索器等),社区活跃,集成工具众多(大量向量数据库、模型提供商)。 | 几乎任何复杂的 LLM 应用,尤其是需要高度定制化和集成第三方工具的场景。是大多数项目的首选。 |
| LlamaIndex | 专注于 RAG 和数据连接。在文档索引、查询、检索方面性能优异,提供了从简单到高级的多种检索策略。现已扩展为全功能框架。 | 以查询和分析私有数据为核心的应用,如企业知识库、文档智能问答、数据增强的聊天机器人。 |
1.2 JavaScript/TypeScript 生态(前端与全栈)
| 框架 | 核心特点与优势 | 适用场景 |
|---|---|---|
| LangChain.js | Python LangChain 的官方 JS/TS 移植版本。API 与 Python 版高度相似,支持大多数核心功能(链、代理、工具)。 | 全栈开发、浏览器扩展、Edge Runtime(如 Vercel Edge Functions)、Next.js 等现代 Web 框架的集成。 |
| LlamaIndex.TS | LlamaIndex 的 TypeScript 版本,专注于 TS 生态中的 RAG 应用。 | 在 Next.js、Nuxt 等全栈框架中构建强大的 RAG 应用。 |
1.3 Java 生态
| 框架 | 核心特点与优势 | 适用场景 |
|---|---|---|
| LangChain4j | 一个受 LangChain 启发为 JVM 设计的框架。API 设计符合 Java 习惯。注意它不是 LangChain 团队开发的,是一个社区项目。 | 需要将 LLM 能力集成到现有 Java 企业应用中的场景,如微服务、大型后端系统。 |
| Spring AI | Spring 官方项目,与 Spring 生态无缝集成。提供统一的 API 和数据抽象,生产就绪特性强。 | 所有基于 Spring Boot 的项目,尤其是企业级生产系统,追求稳定性和框架原生集成。 |
| Spring AI Alibaba | Spring AI 的扩展项目,由阿里云官方支持。核心优势在于对阿里云灵积模型服务平台(及通义千问等模型)的深度集成和优化。它提供了开箱即用的配置,方便 Java 开发者以 Spring 的方式便捷、安全地调用阿里云的各种大模型。 | 深度依赖阿里云生态和服务的 Spring 项目。当需要直接、高效地使用通义千问系列模型、在阿里云 VPC 内网访问模型服务以获取更低延迟和成本,或者需要与阿里云的其它云服务(如 OSS、NAS)结合时,这是最自然和推荐的选择。 |
1.4 C++ 生态
C++ 生态在 LLM 应用开发的全栈框架领域相对缺失,但这背后有深刻的技术、生态和商业原因,主要 原因是因为 C++ 的角色定位不同:
- 开发效率与快速迭代的需求不匹配
LLM 应用开发目前仍处于高度实验性 和快速迭代的阶段。
• Python/JS:作为动态语言,具有快速原型设计的优势。开发者可以快速修改提示词、调整工作 流逻辑、集成新的 API,并立即看到结果。这种快速反馈循环对于探索LLM能力至关重要。
• C++:作为静态编译型语言,虽然性能极高,但编译时间长,代码修改和测试的周期也更长。这 种"厚重"的开发体验与当前LLM应用需要的"敏捷"开发模式背道而驰。
- 生态系统的重心不同
LLM 应用开发严重依赖丰富的第三方库和服务。
• Python 生态:拥有无与伦比的库支持,包括但不限于:
◦ 机器学习框架:PyTorch, TensorFlow, JAX(它们虽然底层有C++,但主要API是Python)。
◦ 数据处理:NumPy, Pandas。
◦ Web 和 API 集成:FastAPI, Requests。
◦ 向量数据库客户端:种类繁多。
◦ 模型提供商 SDK:OpenAI, Anthropic 等官方 SDK 首选都是 Python。
• C++ 生态:其传统优势领域在于系统编程、游戏开发、高频交易、嵌入式等,对于现代Web API、云服务集成等领域的库支持远不如Python丰富和易用。
- 技术架构的天然分工(核心原因)
现代 LLM 应用架构普遍采用**" Python/JAVA 负责应用层(做什么)** ,**C++ 负责底层推理(怎么 做)"**的分工模式。
一个完美的例子是 llama.cpp (官网: https://github.com/ggerganov/llama.cpp):
• 它本身是一个用 C/C++ 编写的热门项目,用于高效推理 LLaMA 系列及众多其他架构的模型。它 以其出色的性能和极低的内存需求(通过量化)而闻名。
• 你可以将 llama.cpp 作为库链接到你的 C++ 应用程序中,从而在本地直接运行模型。我们可 以自行提供的 server 功能,启动一个 HTTP API 服务。
• 然后,上层的 Python 或 JavaScript 应用通过调用这个 API 来使用它,从而结合了 C++ 的推理性 能和 Python 的应用开发效率。
虽然缺少"全栈框架",但可以看到 C++ 在 LLM 技术栈中是不可或缺的基石,llama.cpp 就是最成功 的案例,使在消费级硬件上运行大模型成为可能。
1.5 如何选择?
团队技术栈:
优先选择团队最熟悉的语言生态,以降低开发和学习成本。
• 如果你所在的团队和技术栈是 Java,想快速为企业应用添加 AI 功能,LangChain4j 和 Spring AI 是绝佳的选择。
• 如果你的需求是极致性能、离线运行或在 资源受限的环境(如手机、嵌入式设备)中部署模型,那 么 C++ 生态的 llama.cpp 是你的不二之选。
• 在大多数情况下,一个混合架构也很常见:例如,用 C++ 实现高性能推理引擎,然后用 Java 或 Python 构建业务层和 API 接口。
项目需求:
• 如果项目是研究性质或需要最大灵活性 ,Python(LangChain) 是不二之选。
• 如果项目是以 RAG 为核心 ,**LlamaIndex(Python/TS)**提供了更专业的工具。
• 如果项目需要深度集成到现有企业级后端(如 Spring 应用),则选择对应的 Spring AI。
• 如果项目是面向 Web 的全栈应用或边缘函数,LangChain.js 是最佳选择。
社区与支持: Python 和 JS 生态的框架(LangChain)更新最快、社区最活跃,遇到问题更容易找到解决方案,是 大多数人的选择。
2. LangChain 介绍
2.1 复杂场景下,LLM 嵌入应用的问题?
在 复杂的场景下使用,如将 LLM 嵌入应用程序遭遇了全新难题:
• 简单提示词(Prompt)得到的答案经常出现幻觉?
• 提示词结构是否可以统一规范?
• 如何实现开发过程中大模型的轻松、灵活切换?
• 大模型输出是非结构化的,怎样与要求结构化数据的程序接口交互?
• 如何克服预训练模型知识陈旧的问题,引入实时更新?
• 如何连接模型与外部工具或系统,执行具体任务?
• ...
为了解决上述难题,业界正在形成一整套称为 "LLM 应 用工程" 的最佳实践和技术栈:
• 针对幻觉、提示词规范:采用 "提示词工程" 和 "检索增强生成(RAG)"。为医疗助手设计严 谨、系统的提示词模板,并强制模型在回答前先从权威、实时的医疗知识库中检索信息,而不是仅 凭记忆回答。
• 针对模型切换:使用 LLM API 抽象层(如 LangChain)。这些中间件统一了不同模型的接口,让开 发者通过配置而非修改代码来切换模型。
• 针对非结构化输出:采用 "输出解析" 技术。强制要求模型以 JSON 等格式输出,并在提示词中 严格定义 JSON 的 Schema。一些框架(如 LangChain)可以自动将模型输出解析为预定义的 Pydantic 对象。
• 针对知识陈旧:主要依靠 RAG 来注入实时、外部的知识。可以加入一些工具,比如搜索引擎工具
• 针对连接外部工具:采用 "智能体(Agent)" 框架。让 LLM 作为大脑,根据用户请求规划步 骤、选择工具(如计算器、数据库API、搜索引擎),并执行任务。 最终,一个成熟的 "智能医疗咨询助手" 不会是直接调用原生大模型,而是一个由精心设计的提示 词、RAG 系统、外部工具 API、输出解析器等共同组成的复杂系统。原生大模型只是这个系统的核心 引擎之一,而非全部。
2.2 LangChain:解决痛点
LangChain 可以解决上述所有问题!

LangChain 是一个用于开发由大语言模型 (LLM) 驱动的应用程序的框架。它通过将自然语言处理 (NLP)流程拆解为标准化组件,让开发者能够自由组合并高效定制工作流。
• 组件(Components):用来帮助当我们在构建应用程序时,提供一系列的核心构建块,例如语 言模型、输出解析器、检索器等。
• 自然语言处理流程(NLP):指的是完成一个特定 NLP 任务所需的一系列步骤。例如,构建一 个"基于公司文档的问答机器人"的流程可能包括:读取文档、分割文本、将文本转换为向量 (嵌入)、存储向量、接收用户问题、搜索相关文本段、将问题和文本段组合发送给大语言模型 (LLM)、解析模型输出并返回答案等。

2.3 LangChain 的技术特点
LangChain 框架的设计精髓在于以链式(Chain)的方式整合多个组件,从而构建出功能丰富的大语 言模型应用。链式表示 LangChain 允许将多个步骤或多个组件串联起来,无需各个组件各自完成其能 力,而是一次性执行这个"链"上的所有流程!

举一个最简单的例子,若我们想借助提示词完成一次对于 LLM 的提问,在 LangChain 中至少需要定义 两个组件: • 提示词模板组件 • 大模型组件

这相当于,提示词模板组件执行了一次,大模型组件也执行了一次。而对于链式执行来说,只需执行 一次链即可:

LangChain 框架提供了一系列标准化模块与接口,主要包括以下方面:
• 统一的模型调用:通过抽象化的接口支持多种大语言模型(例如 OpenAI GPT-4/5、Anthropic Claude 等)和嵌入模型,使开发者可以灵活切换不同模型供应商。
• 灵活的提示词管理:提供提示词模板 (Prompt Templates),支持动态生成输入内容,并可管理 少样本示例与提示选择策略,以提升模型响应质量。
• 可组合的任务链(Chains): 允许将多个步骤串联成完整流程 ,如先检索文档再生成回复,或组合 多次模型调用。开发者能够通过自定义链实现复杂的任务编排。
**• 上下文记忆机制(Memory):**用于存储多轮对话中的状态信息。LangChain 曾提供多种记忆管理 方案(如对话历史记忆和摘要记忆),以实现连贯的交互体验(注:该功能目前已由 LangGraph 支持,原有实现已过时)。
**• 检索与向量存储集成:**支持从外部加载文档,经分割和向量化处理后存储至向量数据库,在查询时 检索相关信息并输入大语言模型,帮助构建检索增强生成(RAG)类应用。LangChain 兼容多种主 流向量数据库(如 FAISS、Pinecone、Chroma)和文档加载工具,简化知识库应用的开发流程。
对于上述技术内容,LangChain 的开源组件和第三方集成可以轻松支持快速上手,帮助我们构建应用 程序。除此之外,使用 LangGraph 可以构建支持人机交互的有状态代理。LangChain 公司也在围绕框 架构建完整的生态系统,包括推出 LangSmith(一个用于调试、监控和评估 LLM 应用的平台)以及 LangGraph Platform(用于 LangChain 应用的部署、运维)等,为开发者提供从开发到生产的一站式 支持。
