第 12 章 · AI智能体的结构化输出与流式响应

AI智能体结构化输出与流式响应融合实战:Spring AI实现与避坑指南 大模型应用开发中,结构化输出与流式响应是智能体落地的关键。结构化输出通过JSON Schema约束模型生成,确保数据可被程序稳定解析;流式响应基于SSE实现实时推送,提升用户体验。两者结合时,需解决流式过程中JSON不完整、解析失败等工程难题。Spring AI提供BeanOutputConverter、Function Calling等方案,支持双通道输出与容错解析。适用于智能客服、制度学习助手等场景,实现自然语言与结构化数据的同步输出。 阅读详情

版本:Spring AI 2.0.1

目标:用 entity(...) 把模型输出变成 Java 对象;用 stream() 推出 token,接到 SSE,并旁路拼完整文本落库。 

本章分两段:

上半:结构化输出 —— 提示 / 原生约束 → entity → Converter →(可选)校验自纠
下半:流式响应   —— Flux → SSE → 旁路聚合落库

两段只在一个地方相交:没有 stream().entity(...)。要对象,用同步 call().entity(...);要打字机效果,先流式推 UI,结束后再对完整文本做转换。


12.1 为什么要结构化输出

模型默认返回自然语言。业务代码通常要的是对象:

{ "city": "杭州", "tempC": 26, "condition": "晴" }

不是「今天杭州大约二十六度,天气晴朗」。用正则从散文里抠字段,一改提示就容易坏。

稳定拿到对象,实际就三步:

  1. 告诉模型格式(Schema、示例,或 JSON mode)

  2. 把返回字符串转成 Java 类型

  3. 校验失败时,把错误信息喂回去再试

上图左路是「Prompt 里写格式 + Converter 解析」,右路是「供应商 API 级 ResponseFormat」。两条路最后都进 ChatClient.call().entity(...)。流式没有对等的 entity(),图底也写了这一点。


12.2 两条技术路线

提示侧供应商原生
做法Prompt 附 Schema / 格式说明,再用 Converter 解析Options 上挂 response_format / JSON_SCHEMA
约束强度中等更强,但取决于型号是否真支持
适用跨供应商、Ollama、兼容网关能力不明时OpenAI 等明确支持 structured 的路径

Spring AI 2.0 用 EntityParamSpec 组合这两条:默认走提示侧;需要时再开 useProviderStructuredOutput()。

选型可以直接按场景记:

跨供应商 / 本地模型     → 提示侧 + Converter,必要时 validateSchema()
OpenAI 且字段必须很严   → 开原生 structured,并叠加校验
只要合法 JSON、字段靠提示 → entity(Class) 或 JSON_OBJECT 通常够用

OpenAI 系常见两种格式:

  • JSON_OBJECT:保证是 JSON 对象,不保证字段符合你的 Schema

  • JSON_SCHEMA:按 Schema 约束;顶层 array 等边界见 12.8

2.0.1 起 OpenAI strict 默认偏 false。strict=true 时,可选字段、复杂 schema 更容易收到 HTTP 400;真要严格再显式打开。


12.3 entity(...):从响应取出对象

record WeatherReport(String city, int tempC, String condition) {}
​
WeatherReport report = chatClient.prompt()
        .user("用 JSON 描述杭州今天的天气:城市、摄氏温度、天气概况")
        .call()
        .entity(WeatherReport.class);

常用重载:

方法用途
entity(Class, Consumer<EntityParamSpec>)推荐;可开原生 structured / 校验
entity(ParameterizedTypeReference)泛型集合等
entity(StructuredOutputConverter)自定义 Converter
responseEntity(...)同时要 ChatResponse 元数据

stream() 路径没有 entity(...)。流式要对象,见 12.12。


12.4 EntityParamSpec:两个独立开关

record Answer(String summary, List<String> bullets) {}
​
Answer a = chatClient.prompt()
        .user("总结 Spring AI ChatClient")
        .call()
        .entity(Answer.class, spec -> spec
                .useProviderStructuredOutput()
                .validateSchema());
开关作用
useProviderStructuredOutput()把 JSON Schema 下发到供应商 API;不支持时静默回退到提示侧
validateSchema()校验返回 JSON,失败则带错误重试(默认最多 3 次);由 StructuredOutputValidationAdvisor 驱动;不支持 streaming

调用顺序可以记成:

entity(Class, spec)
  →(可选)原生 schema 约束
  →(可选)校验 Advisor 自纠
  → 调模型
  → Converter.convert(text) → T

三个常见坑:

  1. reasoning / thinking 型号可能仍返回纯文本,反序列化直接失败

  2. OpenAI Structured Outputs 通常不接受顶层 JSON 数组;List<T> 要包一层容器 record

  3. 「原生 structured 没生效」经常是静默回退——生产建议叠 validateSchema()

不想每次写 Spec,也可以用 Advisor 参数全局打开原生 structured;与 per-call 开关二选一,不要两套都开还互相打架。


12.5 Converter:文本到 Java

entity(...) 背后是 StructuredOutputConverter。

Converter做什么
BeanOutputConverterJSON → POJO / record;getFormat() 可生成提示侧格式说明
MapOutputConverter半固定结构;下游自己检查键是否存在
ListOutputConverter列表;供应商不支持顶层 array 时改用包装类型
record WeatherList(List<WeatherReport> items) {}

自定义 Converter 通常只做两件事:告诉模型怎么写、把文本变成 T。适合 XML、CSV 或领域 DSL。Markdown 代码围栏可以在转换前剥掉。


12.6 校验自纠与提示写法

打开 validateSchema() 时,框架会挂上 StructuredOutputValidationAdvisor。也可以显式注册自定义版本(改重试次数、JsonMapper、预置 schema);显式注册会替换自动那一份。

… → StructuredOutputValidationAdvisor → … → ChatModel
         ↑ 校验失败:追加纠错消息,再次 call

即使开了 JSON mode,提示里仍建议写清:

  1. 只输出 JSON,不要 Markdown 围栏

  2. 字段、类型、枚举取值

  3. 缺失字段怎么处理(null / 省略 / 默认值)

  4. 必要时给一个短示例

BeanOutputConverter.getFormat() 生成的说明可以直接拼进 Prompt,少手写 Schema。

三种写法对比:

// A. 最简
MyDto a = chatClient.prompt()
        .user(q)
        .call()
        .entity(MyDto.class);
​
// B. Options 挂 ResponseFormat
MyDto b = chatClient.prompt()
        .user(q)
        .options(OpenAiChatOptions.builder()
                .responseFormat(new ResponseFormat(ResponseFormat.Type.JSON_OBJECT))
                .build())
        .call()
        .entity(MyDto.class);
​
// C. Spec 统一开关(推荐)
MyDto c = chatClient.prompt()
        .user(q)
        .call()
        .entity(MyDto.class, spec -> spec
                .useProviderStructuredOutput()
                .validateSchema());

日常优先 C;供应商特有微调再叠 B。


12.7 嵌套对象与 Tool

嵌套可以直接映射到 record:

record OrderLine(String sku, int qty) {}
record Order(String orderId, List<OrderLine> lines, BigDecimal total) {}
​
Order order = chatClient.prompt()
        .user(rawOrderText)
        .call()
        .entity(Order.class, spec -> spec.validateSchema());

BigDecimal、日期等要在提示里约定格式。嵌套过深可以拆成两阶段抽取。泛型列表用 ParameterizedTypeReference;顶层 array 不行就包一层。

和 Tool 一起用时:

场景做法
工具返回值给模型短 JSON 字符串即可
最终答案要 DTO工具循环结束后,对最终助手文本做 entity
returnDirect=true在应用层自己解析工具结果,不要再指望外层 entity 自动包一层

12.8 供应商常见坑

场景注意
OpenAI / 兼容网关strict=true + 可选字段易 400;顶层 array 要包一层;网关未必真支持 json_schema,用校验兜底;代码围栏在提示里禁止,或 Converter 里 strip
Azure / Foundry跟部署模型能力走,不跟 Spring 模块名走
Anthropic / Google / Mistral原生 structured 随型号变;不支持就退回提示侧 + 校验。Google 上 ToolChoice 与纯 JSON 目标冲突时,拆成两步调用
Ollamareasoning 型号易吐纯文本;format: json 只保证 JSON,不保证字段

通用再记三条:原生 structured「没生效」先怀疑静默回退;自纠会多耗 token,要限制次数并修 schema;finishReason=length 多半是 JSON 被截断。


12.9 为什么要流式

非流式等整段答完才返回,首字延迟高。流式按 token / chunk 边到边推,长回答体验更接近「打字机」。

Spring AI 用 Reactor Flux 表示流,可以接到 WebFlux、MVC 的 SSE,或自己的消息通道。

上图四步:接请求 → ChatClient.stream() → Flux 增量帧 → SSE 推浏览器。 红框是硬约束:事件循环上不要跑阻塞 JDBC、同步 ChatModel.call()、或对长流 blockLast()。慢工具和落库放到独立线程,或用 doOnComplete 旁路。


12.10 流式 API

ChatModel:

Flux<ChatResponse> stream = chatModel.stream(
        new Prompt(List.of(new UserMessage("讲一个短故事"))));

ChatClient:

Flux<String> tokens = chatClient.prompt()
        .user("讲一个短故事")
        .stream()
        .content();

三个出口:

方法拿到什么何时用
content()文本增量多数聊天 UI
chatResponse()ChatResponse(finishReason、metadata、tool)要看结束原因 / 工具结构
chatClientResponse()还含 Advisor 上下文调试 Advisor 链

实现可能推 delta(增量)或 snapshot(全文快照)。接入前先看前几帧:

chatClient.prompt().user(q).stream().content()
        .take(5)
        .doOnNext(frame -> log.debug("frame={}", frame))
        .subscribe();

是 snapshot 时,前端应「替换」整段,而不是「追加」。


12.11 接到浏览器:SSE

浏览器 GET /chat/stream → Controller 组 prompt().stream().content() → ChatModel 吐 token → 以 event: delta 推回,最后 done。需要时再加 status(retrieving / tooling / answering)。

WebFlux

@GetMapping(path = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> stream(
        @RequestParam String q,
        @RequestParam String conversationId) {
​
    return chatClient.prompt()
            .user(q)
            .advisors(a -> a.param(
                    ChatMemory.CONVERSATION_ID, conversationId))
            .stream()
            .content()
            .map(token -> ServerSentEvent.<String>builder()
                    .event("delta")
                    .data(token)
                    .build())
            .concatWithValues(ServerSentEvent.<String>builder()
                    .event("done")
                    .data("[DONE]")
                    .build())
            .onErrorResume(ex -> Flux.just(ServerSentEvent.<String>builder()
                    .event("error")
                    .data(ex.getMessage())
                    .build()));
}

MVC(SseEmitter)

@GetMapping("/chat/stream-mvc")
public SseEmitter streamMvc(@RequestParam String q) {
    SseEmitter emitter = new SseEmitter(120_000L);
    Disposable disposable = chatClient.prompt()
            .user(q)
            .stream()
            .content()
            .subscribe(
                    token -> {
                        try {
                            emitter.send(SseEmitter.event()
                                    .name("delta")
                                    .data(token));
                        } catch (IOException e) {
                            emitter.completeWithError(e);
                        }
                    },
                    emitter::completeWithError,
                    emitter::complete);
    emitter.onCompletion(disposable::dispose);
    emitter.onTimeout(disposable::dispose);
    return emitter;
}

长思考、长 tool 时加心跳(event: ping),避免网关把空闲连接掐掉。

事件建议分流:

event: meta
event: status   (retrieving / tooling / answering)
event: delta
event: done / error

12.12 旁路聚合落库(以及流式后再转对象)

同一条流做两件事:上面透传给浏览器,下面用 doOnNext 拼完整文本再落库。同一条 Flux 不要重复订阅,否则会重复打模型。

StringBuilder full = new StringBuilder();
​
Flux<String> ui = chatClient.prompt()
        .user(q)
        .stream()
        .content()
        .doOnNext(full::append)
        .doOnComplete(() -> messageRepository.saveAssistant(
                conversationId, full.toString()));
​
return ui; // 控制器再包成 SSE

原则:

  • UI 走透传帧,保首字延迟

  • 落库走聚合结果

  • 一条流、一次订阅;旁路用 doOnNext / doOnComplete,不要再 subscribe 第二次

也可用 MessageAggregator 旁路得到完整 ChatResponse,再取 Usage / finishReason。

流式结束后要 DTO,对聚合文本做 Converter,或另开一次同步 call().entity(...):

String json = chatClient.prompt()
        .user(q)
        .stream()
        .content()
        .collect(Collectors.joining())
        .block();
​
MyDto dto = new BeanOutputConverter<>(MyDto.class).convert(json);

block() 只适合测试、批处理,或明确不在 WebFlux 事件循环上的代码路径。控制器若已经返回 Flux,不要在里面再 block()。

带 Tool 时,工具参数 JSON 常拆在多个 chunk 里,拼齐前不能执行,前端会感觉「停顿」。应推 status=tooling;多数产品只展示最终轮文本。不要指望流式中途跑 validateSchema()。


12.13 取消、超时与网关

客户端断开要取消订阅:

return chatClient.prompt().user(q).stream().content()
        .doOnCancel(() -> log.info(
                "client cancelled, conversationId={}", conversationId))
        .timeout(Duration.ofMinutes(2));

半截答案要不要写入记忆,由产品定:多数不写,或标 partial=true。

经 Nginx / API Gateway 时,对该 path 关闭响应缓冲、调大空闲超时,必要时关闭 gzip,否则前端会「等一整包」。


12.14 流式与 Advisor 顺序

常见顺序:

SafeGuard → Memory(读) → RAG(检索) → ToolCalling → ChatModelStream → Memory(写)

检索多半发生在首 token 之前;Memory 写回宜在流成功结束后。Usage 常在最终帧才完整;带 tool 时 Usage 多为累计值。


12.15 小结

主题记住这些
结构化提示侧 vs 供应商原生;entity + EntityParamSpec;Converter 做转换;validateSchema 不支持 streaming
流式Flux → SSE;旁路聚合落库;事件循环上不阻塞
交界没有 stream().entity(...);UI 流式,对象化走聚合后转换或同步 call()
基于NestJS与LangChain构建可扩展的AI流式Agent架构实践 在现代AI应用开发中,异步数据处理与实时交互是提升用户体验的关键技术挑战。其核心原理在于将传统同步的请求-响应模式转变为基于事件流的实时推送机制,通过流式传输实现边计算边输出。这一技术架构的价值在于能够显著降低用户等待时间,提供更自然的交互反馈,尤其适用于需要多步骤推理或调用外部工具的场景。在工程实践中,结合模块化后端框架与AI应用开发工具链,可以构建出高效、可维护的智能体系统。本文聚焦于如何利用NestJS的依赖注入和模块化特性,配合LangChain的Agent执行框架,并通过RxJS进行异步流编排,实 阅读详情

相关推荐

AI原生编辑器IfAI深度评测:多智能体协作与Rust驱动的编程新范式

AI编程助手正从简单的代码补全工具,向具备深度理解和自主执行能力的智能伙伴演进。其核心原理在于结合大型语言模型的推理能力与精准的代码分析技术,通过检索增强生成和智能体架构,实现对复杂项目上下文的准确感知与操作。这一技术价值在于将开发者从重复性编码任务中解放,转向更高层的设计与审核,显著提升工程效率。在应用场景上,它尤其适合大型项目重构、跨文件代码分析和自动化工作流构建。本文探讨的IfAI编辑器,正是这一趋势的集大成者,它通过Rust高性能内核与多智能体协作系统,实现了流畅的120FPS交互体验,并凭借符号感

weixin_27028523的博客 641

* LangChain Agent智能体详解(下):结构化输出、流式响应与综合实战

如果采用ToolStrategy策略处理结构化输出时,LangChain会在消息列表末尾追加一条Tool_message,让整个链路完整。但实际上没有实际的工具执行,这是一条伪消息。我们可以通过ToolStrategy的 tool_message_content 参数定制其消息内容,将指定的内容写入对话历在最终用户可见的对话流中,使用更自然的消息替代原始数据。用简短的确认信息替代可能很长的数据块,减少token消耗。

· 995

开源模型应用落地-模型上下文协议(MCP)-构建AI智能体的“万能插座”-“mcp-use”高级用法(十三)

本文介绍了MCP-USE如何通过标准化通信连接大模型与现实应用,并重点探讨其结构化输出和交互式聊天模式等高级使用技巧。

以微薄之力,予他人些许温暖. 8998

agno Team 结构化输入输出实战指南:从 Pydantic Schema 校验到流式结构化响应

本篇技术指南聚焦 agno 中 Team(多智能体团队)的结构化输入与结构化输出能力。文中以仓库 [cookbook/03_teams/04_structured_input_output](https://link.gitcode.com/i/56b08483dafaa99548ffe05fe428249b) 目录下的 11 个可运行示例为主线,覆盖团队级输入 Schema 自动校验、Pydan

gitblog_01199的博客 275

基于Spring AI与Langchain4j构建旅游规划智能体:Java生态的AI应用实践

AI智能体作为当前人工智能技术的重要分支,通过结合大语言模型的推理能力与外部工具的执行能力,实现了从感知到决策的闭环。其核心原理在于采用ReAct(推理-行动)等模式,让模型能够自主调用API、查询数据库等工具,完成复杂任务。这一技术为自动化、个性化服务提供了强大支撑,在客服、编程助手、数据分析等领域具有广泛应用前景。本文聚焦于旅游规划这一具体场景,探讨如何利用Java生态的Spring AI框架与Langchain4j库,构建一个能理解模糊需求、调用多源信息并生成可行行程的智能体。项目涉及向量数据库、工具

weixin_29061997的博客 284

智慧校园AI大模型数字化平台:算力选型、SSE流式输出与知识库实践

大模型落地校园场景,不是选一个排名靠前的模型那么简单,而是要从算力约束、部署架构和应用链路逐层拆解。本地部署需要先算清显存与量化位宽,再通过API网关统一路由与管控,才能兼顾数据安全和响应效率。流式输出(SSE)是保障师生交互体验的关键,利用增量返回与中断机制,可显著降低等待感和资源浪费。知识库(RAG)则让模型回答有据可依,从制度文件、教案到校历的版本管理,决定了问答的准确性与合规性。围绕智慧校园AI大模型数字化平台,从最小POC验证、选型参数、前后端实现到高频踩坑排查,可形成一套可复制的工程落地路径。

weixin_34269583的博客 395

大模型开发 - 07 ChatClient:Spring AI ChatClient 的流式响应实践(02)

**Spring AI 大模型开发系列文章摘要: 该系列全面介绍 Spring AI 框架在大模型开发中的应用,涵盖核心概念、多模型集成(DeepSeek、阿里百炼)、本地部署(Ollama)、ChatClient 统一接口、提示词工程、对话记忆管理、结构化输出等关键技术。重点解析了工具调用(Tool Calling)实现业务集成、多模态 API 开发,并深入探讨 Model Context Protocol(MCP)架构和 RAG 增强生成等高级主题。通过源码分析与实战案例,展示了如何构建智能对话系统、处

小工匠 2067

工业音频故障检测:从CNN到Transformer的技术演进

音频信号处理是工业设备预测性维护的核心技术之一,通过分析设备运行时产生的声波特征实现故障预警。传统方法依赖梅尔频率倒谱系数(MFCC)等手工特征,而深度学习技术尤其是Transformer架构,通过自注意力机制突破了CNN在跨频段特征提取上的局限。Audio Spectrogram Transformer(AST)等先进模型在工业场景中展现出91.2%的高召回率,显著优于传统方案。这种非接触式监测技术结合边缘计算优化,已成功应用于石油化工、电力能源等领域,实现提前72小时预测轴承故障,单项目可避免数百万元的

weixin_30467861的博客 327

Ai Agent 服务接口与 UI 对接实战:基于 SSE 流式响应输出 Step 1~4 执行过程

本篇文章围绕 CodeGuide 仓库中《AI Agent 拖拉拽 + 动态配置(RAG、MCP、Prompt)》项目第 3 阶段的关键一环展开:为 Auto Agent 自动智能对话体设计并实现 Server-Sent Events(SSE)流式响应接口。你将掌握如何设计 SSE 异步响应结果对象、如何把 Agent 执行链路的 Step 1~4(分析、规划、执行、检测)过程数据以流式方式实时推

gitblog_00512的博客 519

AI使用指南:6个超实用的Prompt提示词模板

最近越来越多人开始接触AI,但其实想要让AI更懂你,关键是掌握对的提示词模板!今天就给大家分享6种超实用的Prompt提示词模板,不管你是小白还是老手都能用

程序员世杰 8175

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2224

Spring AI 结构化输出与流式响应实战:智能体稳定输出方案

结构化输出通过约束模型生成固定 schema 数据,解决自然语言解析不稳定问题;流式响应基于 SSE 实现单向实时推送,降低首字延迟。两者结合时,需处理半截 JSON 的增量解析与传输冲突。在智能体应用中,这种组合能提升类型安全与可测试性,适用于知识库问答、客服助手等场景。Spring AI 框架下,通过 Bean 转换器与 Flux 流式接口,可落地一套稳定高效的结构化流式链路。

weixin_29094979的博客 131

PCB工艺-SI9000使用教程

本文介绍了阻抗计算工具SI9000的使用方法,重点讲解了微带线与带状线的区别、共面阻抗概念及参考面选择。通过USB差分走线实例,详细说明了如何选择计算模型、填写参数并确定线宽线距。文章还提供了层叠设计资料和工厂常规阻抗表格作为参考,建议制板时标注需控阻抗的线路供板厂调整。最后简单提及了嘉立创阻抗计算工具作为备选方案。

weixin_50120208的博客 2026

Agent应用渲染优化:流式响应与前端协同架构实战

Agent应用开发中,LLM的流式输出、Function Call的异步性与现代Web渲染框架(React/Vue/Svelte)的同步假设存在根本性范式冲突,导致卡顿、闪烁、状态不一致等典型问题。其本质是数据生命周期与UI生命周期的错配,需从‘调用-返回’转向‘协同演进’——通过状态层、流控层、渲染层的职责分离,实现Token级节流、语义块识别与增量式渲染。该方案显著提升首屏可见性与用户感知流畅度,广泛适用于金融客服、智能文档分析、多模态工具调用等LLM应用落地场景,尤其契合Agent、渲染、Functi

weixin_29010003的博客 273

Kaggle大神Abhishek的机器学习框架实战:从红酒数据集看交叉检验的坑与解法

本文通过Kaggle竞赛Grandmaster Abhishek Thakur的实战经验,以红酒数据集为例,深入探讨了机器学习中交叉检验的五大陷阱与优化策略。文章详细解析了决策树max_depth调优过程中的过拟合现象,对比了五种主流交叉检验方法的适用场景,并提供了回归问题中的分层技巧和特征工程陷阱的解决方案。最后,总结了交叉检验方案选型决策树,帮助数据科学家在实际项目中提升模型泛化能力。

h6j7k8l9p0的博客 964

110、3A 端到端调试:从 ISP register dump 到主观画质的完整调试流程

文章摘要 本文分享了ISP 3A(AE/AWB/AF)端到端调试的实战经验,通过具体案例解析常见问题排查方法。从硬件链路确认、寄存器dump分析、算法闭环验证到主观画质调优,提出了一套系统化调试流程。重点包括:如何通过示波器和寄存器抓包定位时序问题,AWB调试中black level校正的关键作用,AF闭环控制中hall传感器反馈的重要性,以及算法与硬件联调的"三板斧"方法论。作者强调3A调试本质是系统工程,需结合物理层信号测量、数据通路验证和算法状态跟踪,避免陷入局部优化陷阱。

sundong_81的博客 57

LangChain 1.0智能体开发实战:create agent三要素与四种流模式全解析!

文章详细介绍了LangChain 1.0中create_agent API的基本使用方法,包括环境搭建、智能体三要素(提示词、模型、工具函数)及消息类型与流式输出模式。通过天气助手实例演示了智能体的完整执行流程,帮助读者快速掌握新一代智能体开发标准。文章特别强调了工具函数必须包含清晰说明的重要性,并详细解析了四种流模式(无流、值流、消息流、自定义)的特点与应用场景。

m0_74942241的博客 1446

语音算法面试复习系列3——语音识别基础 + CTC 详解

摘要:本文系统讲解了语音识别(ASR)的核心算法CTC。主要内容包括:1) ASR的核心挑战是输入音频帧与输出文字序列的对齐问题;2) CTC通过引入blank标记和动态规划算法,无需对齐标注即可训练;3) 详细解析CTC前向算法实现路径概率求和,以及贪心和Beam Search解码方法;4) 指出CTC的条件独立性假设导致无法建模输出依赖关系;5) 对比CTC与传统方法和Attention/Transducer的优缺点,分析实际应用中的subsampling技术。文章包含数学推导、代码实现和面试常见问题,

m0_60605453的博客 305

Vercel AI SDK 快速上手:3 步在 Node.js 里搭出能调工具的 AI 聊天助手

想象一下:你在终端里敲下"帮我起草一封产品更新公告",几个字开始像打字机一样往外蹦;再问"北京现在适合跑步吗",它先查了天气,又换算了体感温度,最后给你一句"建议穿薄外套"。这就是用 Vercel AI SDK 在 Node.js 里搭建 AI 应用后的日常——Next.js 团队出品的这套免费开源 TypeScript 工具库,把调用大模型、流式输出、工具调用统一成了一致接口,让你不用为每个模型

gitblog_00961的博客 894

Windows2008使用-解决漏洞-CVE-2010-2730

随着硬件的升级,操作系统也逐渐进行了版本更新。目前阶段,Windows2016Server、Windows2022Server逐渐成为了以Windows系列的服务器平台系统。对于有些应用而言,由于其业务的固定,可能仍只能运行在Windows2008Server或者Windows2012Server上。有时候我们为安全需要,需要将相关的操作系统涉及的漏洞做修复。最近碰到在一个Windows2008R2 的操作系统漏洞CVE-2010-2730,一顿操作,终于找到了合适的方案,这里分享给大家。

mystonelxj的博客 2314

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[Ai Agent] LangChain Agents 进阶:从记忆融合到流式缓存的智能体工程化实践

本文深入探讨了LangChain Agents在生产环境中的工程化实践,重点解决记忆碎片化、响应阻塞和计算冗余三大挑战。通过记忆融合、流式缓存和智能缓存架构设计,显著提升多轮对话满意度和系统性能,适用于电商客服、实时字幕等场景。文章详细介绍了分级记忆存储、动态记忆压缩和五级缓存体系等关键技术方案。

weixin_29092579的博客 97

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

智能体七层防御体系:从数据输入到交互输出的AI安全工程实践

智能体安全本质上是面向多模态、长上下文、意图驱动型交互的新型系统安全问题。它既不同于传统Web应用的安全防护,也超越了单纯的大模型对齐或内容过滤范畴,核心在于对提示工程、工具调用、向量检索等关键环节实施分层可控干预。本文基于网鼎杯实战与27个商用智能体审计数据,系统梳理数据输入、向量检索、提示工程、工具调用、函数执行、响应生成、交互输出七大刚性层级,揭示L3提示工程层(91%失守率)与L6响应生成层(89%失守率)为高频风险点,并提供可落地的指纹校验、语义熔断、沙箱约束、流式Token拦截等工程方案,适用于

weixin_29056865的博客 252

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringAI构建智能体

本项目是《计算机科学与技术专业》实践课程的教学案例项目,基于DashScopeOllama构建完整的 AI 智能体应用。🔤大模型调用:DashScope 云端 API + Ollama 本地模型💬多轮对话:会话管理、上下文记忆🛠️:工具调用、智能决策📚RAG 知识库:Milvus 向量数据库、文档检索🎨多模态:文生图、语音合成⚡流式响应:SSE 实时输出多模型支持:DashScope 云端 + Ollama 本地,灵活切换完整 AI 能力:对话、文生图、语音、工具调用、RAG。

m0_74289031的博客 322

邓立国Agent开发入门必读书《AI Agent智能体开发实践》全文试读-示例案例丰富且能正确运行

第 1 章 初识智能体。

夏天又到了的专栏 868

前端工程师的AI工程转型之路:9-12个月带你掌握全栈AI技能!

前端工程师转型AI工程只需9–12个月,因异步编程、API集成、状态管理等核心技能可直接迁移。你熟悉的async/await、JSON处理、组件化思维,均适用于LLM调用、智能体编排与RAG架构。重点补足Python、嵌入向量、向量数据库与提示工程,跳过基础编程知识。以“全栈AI”为优势,结合前端能力打造交互式AI产品,实现高效转型。

libaiup的博客 740

本地AI智能体实战:生产级工具搭建与踩坑指南

本地AI智能体是将大语言模型能力封装为可调度、可审计、可中断的独立服务单元,依托Ollama、LangChain和FastAPI等轻量框架,在无公网依赖下实现端到端业务闭环。其核心原理在于模型服务化+工作流编排+资源可控性,技术价值体现在数据主权保障、响应确定性与长期运维成本优化。典型应用场景覆盖办公自动化(如PDF结构化)、嵌入式交互(如Excel插件)、边缘设备控制(如树莓派语音中控)。本文基于真实生产环境172天运行经验,聚焦AI智能体、本地AI两大热词,详解从CUDA环境避坑、流式响应调优到多模型热

weixin_26891599的博客 258
上一篇: 第 11 章 · 知识图谱 GraphRAG
下一篇: 第 13 章 · AI智能体的可观测性、运维与安全
AI深栈
博客等级 码龄14年 1粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值