0 前言音视频技术开发与应用领域,除了视频、图像的知识,还会接触音频相关知识,所以本文聚焦音频基础知识,为FFmpeg音频学习铺垫。自然界声音如鸟鸣、水流,其实是种模拟信号,声音是振动产生的一种声波,通过气态、液态、固态物理介质传播并能被人或动物感知的波动现象:声音频率赫兹(Hz)表示,每秒周期性振动次数声音强度单位分贝(dB)电脑、Pad、手机上听到的音乐、声音等音频信号,均为数字信号1 音频采
0 前言虽前些年音视频技术都在持续发展,但近年影响导致音视频需求快速上涨,5G技术又给音视频提供很好硬件支持,很多活动转入线上,在线教育、视频会议、电商的直播带货等都迫切需要音视频技术,音视频开发行业充满无限可能。1 快速进场音视频领域需要知识储备庞大,涉及各种音视频基础知识、常用技术框架、不同应用场景。先要了解音视频领域基础概念知识,如:啥是PCM?咋计算音频码率?帧率是啥?有啥分类?为啥会出现
0 前言本文来看如何使用Spring AI Alibaba构建Agent应用。1 需求智能机票助手,可帮助用户完成机票预定、问题解答、机票改签、取消等动作,具体要求:基于 AI 大模型与用户对话,理解用户自然语言表达的需求支持多轮连续对话,能在上下文中理解用户意图理解机票操作相关的术语与规范并严格遵守,如航空法规、退改签规则等在必要时可调用工具辅助完成任务2 技术架构2.1 接入AI大模型不过是用
1 利用 ChatGPT 进行项目规划使用 V0 前,用 ChatGPT 规划整个项目。包括创建完整PRD、定义数据库结构、选择配色方案,规划所有页面的 UI 布局。这些准备工作确保我在开始使用 V0 之前有清晰愿景。2 使用 V0 设计 UI有了详细的布局和概念后,将其导入 V0 开始构建 UI。附上 Dribbble上的灵感截图可以帮助 V0 准确理解我想要的美感。在这种指导下,我让 V0 为
0 前言在数据分析领域快速发展的今天,通过自然语言与数据交互的能力变得越来越有价值。对话式分析旨在使复杂数据结构对没有专业技能的用户更易于访问。LangGraph 是个框架,用于构建使用语言模型的状态化、多代理应用程序。Waii 提供文本到 SQL 和文本到图表的功能,使用户能够通过自然语言与数据库和数据可视化进行交互。本文探讨 Waii 的能力如何增强 LangGraph 应用程序在对话式分析方
0 前言随LLM技术演进,AI应用开发部署越来越复杂。LangServe应运而生,旨在简化AI服务部署和运维的框架。专为LLM部署和管理而设计;本文旨在讲解LangServe的功能特点和实践运用。1 概述LangServe 提供一整套将LLM部署成产品服务的解决方案。可将LLM应用链接入常见Python Web框架(如FastAPI、Pydantic、uvloop、asyncio),进而生成一套R
LLM 的知识仅限于其训练数据。如希望使 LLM 了解特定领域的知识或专有数据,可:使用本节介绍的 RAG使用你的数据对 LLM 进行微调结合使用 RAG 和微调1 啥是 RAG?RAG 是一种在将提示词发送给 LLM 之前,从你的数据中找到并注入相关信息的方式。这样,LLM 希望能获得相关的信息并利用这些信息作出回应,从而减少幻觉概率。可通过各种信息检索方法找到相关信息。这些方法包括但不限于:全
一些LLM除了生成文本,还可触发操作。所有支持tools的LLMs可在此处找到(参见“Tools”栏)。有一个被称为“工具(tools)”或“函数调用(function calling)”的概念。它允许LLM在必要时调用一或多个由开发者定义的工具。工具可以是任何东西:网页搜索、外部API调用、或执行一段特定代码等。LLM本身无法实际调用这些工具;它们会在响应中表达出调用某个工具的意图(而不是直接生
0 前言LangChain4j 提供了用于以下功能的 Spring Boot 启动器:常用集成声明式 AI 服务1 常用集成的 Spring Boot startersSpring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。要使用 Spring Boot 启动器,请导入相应依赖包。Spring Boot 启动器依赖包的命名规范:
垃圾回收器使用一组称为 GC 线程的线程来执行回收工作。有时 JVM 可能会分配过多或过少的 GC 线程。本文将讨论 JVM 为什么会出现这种情况、其影响以及可能的解决方案。1 咋查找应用程序的 GC 线程数量进行线程转储分析来确定应用程序的 GC 线程数量:从生产服务器捕获thread dump使用thread dump分析工具进行分析立即显示 GC 线程数量,如图还可通过 JMX(Java M
0 前言官网描述六类工作队列模式:简单队列模式:最简单的工作队列,一个消息生产者,一个消息消费者,一个队列。另称点对点模式工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。也称点对点模式发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者路由模式:基于发布/订阅模式,有选择的接收消息,即通过 routing 路由进行匹配条件是否满足接收消息主题模式:同
1 支付的坑1.1 不能用前端传递过来的金额订单的商品金额要从数据库获取,前端只传商品 id。1.2 交易类型trade type字段不要传错v2版API,不同交易类型,要调用的支付方式也不同。1.3 二次签名下单时,在拿到预支付交易会话标识时,要进行二次签名操作。二次签名后的值,才能返回给前端使用。1.4 小程序可绑定到其它公司的商户下可同时关联到多个商户号:1.5 支付的单位是分,最小
扣减库存需要查询库存是否足够:足够就占用库存不够则返回库存不足(这里不区分库存可用、占用、已消耗等状态,统一成扣减库存数量,简化场景)并发场景,若 查询库存和扣减库存不具备原子性,就可能超卖,而高并发场景超卖概率会增高,超卖数额也会增高。处理超卖的确麻烦:系统全链路刷数会很麻烦(多团队协作),外呼也有额外成本最主要原因,客户抢到订单又被取消,严重影响客户体验,甚至引发客诉产生公关危机1.4.1
0 前言秒杀,既有需求真实且迫切的用户,也有试图牟利的黄牛。系统挑战,就是相较于以往千倍万倍的用户规模,可能是真人可能是机器人,在同一瞬间对系统发起冲击,需要海量的计算资源才能支撑。 秒杀系统的设计套路往往适用于其他高并发场景,具有较高的借鉴价值。同时,其特殊的挑战和需求,需要架构师在设计中权衡考量,这也有助于培养个人在权衡取舍方面的能力。1 无损技术方案好比治水:分流,让支流分摊压力,隔离风险。
在软件开发领域,事件驱动架构(Event-Driven Architecture,简称 EDA)因其促进实时通信、具有良好的可扩展性以及构建松耦合系统的能力,越来越受到重视。其核心思想是通过事件来实现通信。在使用事件驱动架构的过程中,关于事件的设计一直存在争议:我们应该采用“详细事件”还是“简单事件”?至今没固定答案;两者在特定情况下各有优势。但根据我的经验,简单事件通常更能使软件运行平稳且具有灵
0 前言开始一个新项目时,只是依赖于一份需求列表指导工作。基本上,你只能依靠几句试图解释系统预期功能和限制的句子来开展工作。对将要解决的问题或项目要缓解的用户痛点毫无了解。1 没有DDD时的问题解决这些项目导致与产品部门来回讨论,以真正理解所需的行为并了解可能的边界情况,结果是无效的会议和浪费时间。这正是DDD进入软件世界要解决的问题。DDD 是一套用于有效处理问题并高效地通过业务软件解决问题的技
loader机制让大模型具备实时学习的能力:0 Loader机制案例环境准备:import os os.environ["OPENAI_API_KEY"] = "sk-javaedge" os.environ["OPENAI_PROXY"] = "https://api.chatanywhere.tech" import os from dotenv import load_dotenv #
1 模型两种模型:LLM聊天模型然后,介绍咋用:提示模板格式化这些模型的输入输出解析器来处理输出LangChain 中的语言模型有两种类型:1.1 Chat Models聊天模型通常由 LLM 支持,但专门针对会话进行调整。提供者 API 使用与纯文本补全模型不同的接口。它们的输入不是单个字符串,而是聊天信息列表,输出则是一条人工智能信息。GPT-4 和 Anthropic 的 Claude-2
1 根据长度动态选择提示词示例组1.1 案例根据输入的提示词长度综合计算最终长度,智能截取或者添加提示词的示例。from langchain.prompts import PromptTemplate from langchain.prompts import FewShotPromptTemplate from langchain.prompts.example_selector import
超越chatGPT:学习使用prompts模板来调教LLM的输入输出,打造自己版本的"贾维斯"。1 Model I/O:LLM的交互接口任何语言模型应用程序的核心要素都是模型。LangChain 为你提供了与任何语言模型连接的组件:即 Prompts -> LLM -> Output parsers。2 基于prompts模板的输入工程prompts模板:更加高级和灵活的提示词工程。2
0 前言part1讨论了集成过程中遇到的挑战以及幂等事件处理的作用。解决集成问题之后,我们需要反思事件检索的问题。我们的经验教训表明,将事件检索与事件处理解耦至关重要。1 事件处理与请求/响应 API 紧耦合part1讨论了将请求/响应 API 集成到事件驱动微服务中时,由于基于请求/响应的通信,导致紧耦合。单个事件的处理速度取决于请求/响应 API 及其响应时间,因为事件处理会阻塞直到收到响应。
0 前言项目迭代到一定时期之后,随需求变更,团队换血,项目进度等影响,让架构师和开发从OOP转变为面向关系型数据库设计,逐步形成由下至上架构方式,设计速度快,技术也都能理解。于是都开始先设计表,对象和对象之间的关系完全用表与表关系描述,业务对象也逐步换成POJO,通过封装业务Service,将多个不同的数据对象聚合在Service层,导致这业务领域承担所不应承担的责任。这种模型开发简单,很多技术都
⚡ 构建作为图的语言智能体 ⚡1 概述LangGraph是一个用于构建具有状态、多参与者应用程序的大语言模型(LLM)的库,用于创建智能体和多智能体的工作流程。与其他 LLM 框架相比,它提供以下核心优势:循环可控性持久性LangGraph 允许你定义涉及循环的流程,这对于大多数智能体架构至关重要,使其与基于DAG的解决方案区别开来。作为一个非常底层的框架,它提供了对应用程序的流程和状态的细粒度控
1 羊毛党主要判断依据(组合判断)行为目的明确:行为序列通常是:登录-领券-下单!下单商品客单价低:订单商品集中在单价为5~20元以下的商品下单商品种类单一:订单商品种类超过一半为折扣商品年/月商品订单量少:只对羊毛商品感兴趣下单时间通常在深夜年/月登录次数少:远远小于正常用户的平均值注册时间短:常用IP和设备更换频繁IP和设备出现重叠。2 用户属性IP属地、设备IME和手机号的风控事件:用户是否
1 架构师能力思维模型全局思维抽象思维2 新需求的思考路径需求是否合理,是否能解决问题?能划分多少个子系统?每个子系统能划分多少个模块?这个系统需要可靠性吗,需要扩展能力吗?成本需要控制吗?表如何设计?API如何设计?模块之间如何通信?3 风控引擎设计的核心点架构会围绕核心点进行设计:3.1 高效率的规则(策略)选代风险规则可动态,自由组合的调整风险规则设计思路风险规则可由多个基础规则(因子)组成
0 前言时间分片的目的和原理时间分片旨在通过将数据根据时间戳分散到不同的表或数据库中,来提高查询效率和数据管理的可维护性。这种方法特别适用于大数据量的场景,可以有效减少单个查询对数据库的压力,提高查询速度。消息ID查询的需求在时间分片的基础上,根据消息ID进行查询是一个常见需求。消息ID通常作为唯一标识,可以快速定位到具体的消息数据。结合时间分片,可以进一步优化查询效率,尤其是在处理大量历史数据时
1 概述 本文探讨Metaspace和元数据GC阈值(Metadata GC Threshold)及如何调整它们这些参数。 2 元数据(Metadata) Metadata包含有关堆中对象的信息,包括类定义、方法表等相关信息。根据Java的版本,JVM将这些数据存储在永久代(Permanent Generation)或Metaspace。 JVM依靠这些信息来执行类加载、字节码验证和动态绑定等任务
1 使用ShardingSphere进行分库分表从application-dev.yaml配置文件中可以看出spring: shardingsphere: datasource: ds-0: username: root password: 123456 jdbc-url: jdbc:mysql://127.0.0
Jetty,Eclipse基金会开源项目,和Tomcat一样,Jetty也是“HTTP服务器 + Servlet容器”,且Jetty和Tomcat在架构设计相似。但Jetty也有自己特点,更小巧,更易定制化。Jetty作为后起之秀,应用范围越来越广,如Google App Engine就采用Jetty作Web容器。1 Jetty整体架构Jetty Server:多个Connector(连接器)、多
1 场景客户端调用服务端接口,服务端这个接口比较耗时。为了优化服务端的性能。服务端收到servlet请求后,释放掉servlet占用的线程资源。传统的 servlet 请求处理是同步的,即每个请求占用一个线程,直到请求处理完毕。如果处理时间较长,会阻塞线程,导致性能下降。开启一个异步线程去处理耗时的操作。当耗时操作处理完成后,将结果返回给客户端。注意:在此期间,客户端和服务端的http链接并不会断
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号