自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 用LangChain重构Function Calling:从手搓代码到流水线作业

上一篇刚把手动调用 Function Calling 的坑踩完,写了一堆 auto_functions 和 run_conversation,代码虽然能跑,但说实话,看着那一坨 JSON Schema 的转换逻辑还是挺累人的。今天折腾了一下 LangChain,发现这玩意儿确实能省不少事。它把那些繁琐的代码都封装好了,而且提供了一套很简洁的“链式调用”写法。把之前的代码重构了一遍,感觉清爽了不少。

2025-12-17 08:00:00 476

原创 PyInstaller打包报错:No graph was found in the protobuf

这个报错极具误导性,它让你以为是模型文件损坏,实则是路径编码或解析器实现的问题。在开发 Windows 桌面应用时,永远不要信任 C++ 底层库对中文路径的支持。使用 Windows 短路径(8.3 格式)是解决此类跨语言/跨库路径问题的“银弹”。

2025-12-16 07:15:00 903

原创 中文同音字替换纠错系统技术实现

本系统是一个高性能的中文同音字/词纠错引擎,旨在解决中文语音识别(ASR)后处理或文本输入中常见的同音字错误问题。系统采用离线模型构建与在线实时推理相结合的架构,利用有限状态转换器 (FST)技术实现大规模规则的高效匹配与替换。代码位置实现步骤引入库: 使用pynini库,它是生成 FST 的核心工具。定义字符集 (Sigma):# 定义全集,utf8.VALID_UTF8_CHAR.star 表示任意合法的 UTF-8 字符串序列这是 FST 中的“通配符”概念,用于处理那些不需要替换的背景文本。

2025-12-15 18:01:12 811

原创 大模型如何长出“手”?手撸一个Function Calling的本地调用Demo

最近在折腾大模型的Function Calling(函数调用),也就是让大模型能联网、能查库、能执行代码。以前觉得这东西挺神秘,其实拆解开来看,核心逻辑并不复杂。正好手头有一段刚跑通的代码,本来是记在Jupyter里的,现在整理记录一下。这段代码用的是本地部署的Qwen3(通义千问)模型,配合OpenWeather的API查天气。下面就顺着代码逻辑,把这套“让大模型通过外部工具获取信息”的流程给捋一遍。这是模型要调用的“手”。它本质就是一个普通的Python函数。"""查询即时天气函数。

2025-12-15 07:45:00 754

原创 Langchain学习笔记之模型的输入与输出

Format:即指代Prompts Template,通过模板化来管理大模型的输入;Predict:即指代Models,使用通用接口调用不同的大语言模型;Parse:即指代Output部分,用来从模型的推理中提取信息,并按照预先设定好的模版来规范化输出。Format传统上我们创建提示词是通过手工编写来实现的,在这个过程中会利用各种提示工程技巧,如Few-Shot、链式推理(CoT)等方法,以提高大模型的推理性能。然而,在应用开发中,一个关键的考量是提示词不能是一成不变的。

2025-12-01 08:30:00 881

原创 RAG开发基础——RAG的落地场景

大模型很强,但当它遇到企业的真实场景时,总会出现“懂了,但没完全懂”的尴尬。于是,RAG(Retrieval-Augmented Generation)登场——它让模型不仅会生成,还能基于真实资料回答。这一章,我们聊聊 RAG 在八个典型场景中的实际用法。

2025-11-11 12:30:00 667

原创 RAG开发基础——微调 和 RAG 方案选型

很多人喜欢争论 RAG 和微调孰优孰劣,其实没必要。RAG 是“外脑”,微调是“内化”。真正的成熟系统,往往两者兼用——让模型既能查,又能懂。微调是为了“减少思考错误”;RAG是为了“增加事实正确”。当我们能平衡这两者时,AI 才算真正进入“能用”的阶段。

2025-11-11 09:00:00 411

原创 使用 Ollama 替代 OpenAI API Key —— 免费运行本地大模型

这样 Ollama 会在后台持续运行,不会阻塞 Notebook。这种方式非常适合 本地开发、离线测试 或 低成本项目原型搭建。在开发中我们常使用 OpenAI 的 API,但当。一个简单且免费的解决办法是 ——时,程序会报错中断。

2025-11-11 00:36:19 260

原创 RAG开发基础——RAG框架演进之路

传统 RAG 就像一个刚上岗的实习生:查得快,但经常查错;记得多,却用不准。Advanced RAG 更像一个老练的助理:懂上下文、懂重点、懂取舍。它不只是搜资料,而是在理解问题、筛选信息、优化回答这整条链路上都做了升级。传统 RAG 让模型“能查资料”;Advanced RAG 让模型“能理解资料,还能正确地说出来”。

2025-11-10 11:45:00 690

原创 RAG开发基础——RAG落地经历的那些坑

检索完之后,你得到的是“候选结果”,但这些结果的顺序可能并不合理。这时候,Reranker 上场了。比如用或可以重新计算 query 和文档的匹配程度。很多时候,好用的 Reranker 能弥补 embedding 的一半错误。它的作用就像搜索引擎里的 PageRank,帮你从“能找到”变成“找到最好”。很多人以为 RAG 的难点在模型,其实在工程细节。从清洗、切割、embedding,到数据库、检索、重排、验证,每一环都在决定最终的智能程度。

2025-11-10 08:15:00 632

原创 Extension activation failed, run the ‘Developer: Toggle Developer Tools‘ command for more informatio

无奈卸载重装,还是不行。把用户目录下的.cursor删了也不行,最后没辙了,搜索整个电脑上关于cursor的一切,然后全部删掉,删掉前面说的文件之后,再搜索发现大多数关于cursor的文件都在 "C:\Users\23349\AppData\Roaming\Cursor"里面,果断把这个也删了,然后再重装cursor,把python扩展下载好就好了。总结下来就是,要把关于cursor的一切删干净,尤其是"C:\Users\23349\AppData\Roaming\Cursor"目录要删掉。

2025-10-15 19:46:22 198

原创 深入解析端到端语音识别三巨头:CTC、AED与Transducer

近年来,随着深度学习的飞速发展,自动语音识别(ASR)技术也迈入了“端到端”(End-to-End, E2E)的时代。与传统的“声学模型+发音词典+语言模型”的割裂式框架不同,端到端模型将整个语音识别过程统一为一个单一的神经网络,直接将原始的语音信号(Audio)映射到文字序列(Text)。CTC和Transducer。本文将作为一篇技术博客,详细剖析这三种主流E2E-ASR模型的原理、优缺点、应用场景,并进行横向对比,帮助你深入理解它们的内在联系与核心差异。

2025-10-14 12:32:26 1316

原创 主流大模型部署工具超详细对比

场景决定选择,没有最好的工具,只有最合适的工具。个人玩票/快速验证:Ollama是你的不二之选。本地运行(无N卡/Mac):llama.cpp能给你带来惊喜。通用生产级API服务:vLLM是当前社区最主流、性能最强的选择之一。TGI如果你深度绑定Hugging Face生态,它会更顺手。复杂的生产级推理(Agent/CoT):SGLang能在提供顶级性能的同时,显著简化你的业务代码。追求极致性能的“氪金玩家”:是你在NVIDIA硬件上的终点。

2025-10-12 23:41:35 1217

原创 四川话ASR-微调-语音识别-Paraformer-Large

本项目基于阿里巴巴达摩院的预训练模型,使用220小时的高质量四川话数据进行微调,专门针对四川方言语音识别任务进行优化。

2025-09-29 10:54:24 1435

原创 ASR热词技术调研

本文主要总结了工业界主流的几种热词技术路径,按照热词发挥作用的阶段大体可以分为四个阶段,具体如下。

2025-09-17 15:45:59 823

原创 安卓开发日志——入门准备工作

最近又开始看安卓开发了,对于我这个新手来说,一切都是从头摸索。今天是开始学习的第一天,下载好了Android Studio,尝试跟着教程跑了一个demo,下面是练习过程中学习到的一些经验,总结一下。不管学C++还是学什么,我的第一个习惯就是学会调试,因为这样才能定位错误。对于安卓开发,一般通过logcat来调试,如果报错的话,java的代码一般不用看,要找自己项目里代码报错的地方,直接点击链接就能跳转到指定的报错行。真机调试:在设置里打开开发者选项,打开USB调试。

2025-07-29 17:50:06 916

原创 pytorch格式转华为昇腾的om格式

请在服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy。pytorch转onnx比较简单,教程有一大堆了,下面给出 onnx 转 om 格式的过程。–input_shape:执行推理时模型输入数据的shape,这个在转onnx的时候也需要。具体的转换过程为:pytorch => onnx => om。–model:model的ONNX模型文件存储路径。

2025-07-29 15:53:50 622

原创 解决 C++ 中 debug 无法命中断点的问题

最近在linux中进行debug,结果一直无法命中断点。找了各种帖子都试了,都没用,最后还是跟着ChatGPT一步一步验证才找到具体的原因,所以还得是靠 AI 啊。C++程序进行debug无法命中断点,具体表现就是每次点击 debug 按钮之后,程序直接执行完毕,尤其是红色的断点在程序执行过程中会变成空心的白色断点。升级gdb,这个已经有很多现成的解决方案了,这里只提供解决思路,具体可自行google。说白了就是gdb版本太低了。强制使用 DWARF-4。

2025-07-22 15:12:01 296

原创 CMakeLists.txt 中一些最常见和核心的命令

这些是构建任何 C++ 项目几乎都必须用到的基础命令。这些命令帮助你更好地组织和管理项目的文件。这些命令提供了对编译和链接过程的精细控制。希望这份总结能帮助你快速上手 CMake!

2025-07-21 21:27:07 612

原创 C++中的模板参数 vs 函数参数:编译期与运行期的分界线

在日常开发中,我们经常接触 函数参数,这是控制函数行为的最直接方式。但在 C++ 中还有一种强大的机制 —— 模板参数(Template Parameters),它赋予了我们在编译期就生成代码结构的能力。本文将通过直观的类比,讲清楚模板参数和函数参数的区别,并深入介绍模板参数的主要类型与用途。1️⃣ 类型模板参数 typename T / class T。🧩 你需要在编译期决定结构尺寸或逻辑分支。2️⃣ 非类型模板参数(编译期常量)🚀 你追求运行效率和零运行时开销。🔧 你想要类型安全的泛型结构。

2025-07-15 22:36:06 279

原创 C++ 中常见的字符串定义方式及其用法

最近在学习C++,下面将从基础到进阶的顺序,列出一些 C++ 中常见的字符串定义方式及其用法,包含完整代码和详细注释,加深对代码的理解。推荐尽量用 std::string 替代。不安全,容易越界或引发未定义行为。结尾必须是 ‘\0’

2025-07-15 00:06:38 782

原创 Vscode中使用C++代码进行debug

然后需要修改的就一个,将 program 参数的值设置为你已经编译好的可执行文件的地址,比如我的工作目录是 “D:\Desktop\C-Plus-Plus-master”,我的可执行文件的目录是 “D:\Desktop\C-Plus-Plus-master\backtracking\output\generate_parentheses.exe”,那就按照我图中的方式来改。先配置好C++的运行环境,比如安装C++插件,先把C++代码跑起来,所以你需要先编译好源码,才能进行后续的debug。

2025-07-12 23:20:01 857

原创 针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调

因为涉及到互翻,所以首先要告诉模型翻译的方向,具体就是在文本数据之前加一个目标语言的标识符,比如中翻英,原文“你好,你是谁?还有一个问题就是,输入是中英混合的文本,这样sentencepiece分词器也无法正确识别,一个办法就是将中英文分开,分别进行分词,然后将分词的结果按顺序进行拼接。通过下面的代码微调之后,就能得到一个双向的翻译能力的模型了,使用的方法和原生模型一样,直接加载就能推理了。最后,以上都是基于不重新训练分词模型的做法,如果可以重新训练分词模型,那么就不需要搞上面哪些操作了。

2025-05-30 18:23:18 1707

原创 ONNX模型的动态和静态量化

结合我的实践谈一下这两点,①在做语音合成模型量化的时候,模型中大量的卷积操作,使用netron打开后的结果如下图所示。②但是我当时量化的时候使用的校准数据是函数生成的,不是真是的输入数据,导致虽然模型量化成功了,但是效果却大打折扣。通常我们将模型转换为onnx格式之后,模型的体积可能比较大,这样在某些场景下就无法适用。最近想在移动端部署语音识别、合成模型,但是目前的效果较好的模型动辄几个G,于是便想着将模型压缩一下。这个代码贴的比较长,其实主要就是针对量化前后的模型进行了分析。

2025-05-30 17:16:09 1042

原创 htop指令的输出理解释

例子中,已使用内存为 16.4 GB,总内存为 188 GB,使用占比约为 8.7%。表示系统的CPU的核心数,每个核心后的数字就是核心的利用率。例子中,系统有64个核心,每个核心利用率都满了,表示当前CPU核心都被完全占用,没有任何空闲容量,这是计算的瓶颈。负载平均值,它是一个衡量系统忙碌程度的指标,表示在一段时间内,等待 CPU 处理的平均任务(进程)数量。最近在测试服务的性能,使用了htop指令,记录一下指令输出的内容要怎么去理解,下面给出一个htop输出的截图,总共分为8个模块,然后逐个进行解释。

2025-03-24 17:41:51 440

原创 celery进程卡死解决办法

今天在用celery做消息队列管理的时候出现了进程卡死的现象,具体表现为 celery 的 inference_task 函数接收到app 传来的请求,inference_task 在执行的时候直接卡在 model_pipeline 的地方不动了。另外,如果直接在 tasks.py 中加载模型,那么 app.py 引用 tasks.py 的时候也会导致重复加载,所以目前的办法就是 tasks.py 从其他脚本中导入加载好的模型,然后再延迟导入。

2025-03-19 13:43:03 473 1

原创 日志监控工具openobserve使用案例

分享一个日志监控工具,openobserve(简称 o2),它是一个云原生可观察性平台,专为日志、指标、跟踪、分析 而构建,旨在以 PB 级规模运行。下面通过一个使用案例来分享o2的使用。首先是我们的服务产生日志,然后使用 filebeat 将日志解析并发送到 o2 平台,最后 o2 平台对日志进行可视化展示、分析等等。以上就是全部的内容了,介绍的比较简单,也是为了方便入门,后面更多的功能还需要进一步探索。默认只支持上传最近5小时的日志,超过5小时之前的不会传送。

2025-03-14 17:20:06 1318 1

原创 loguru简单使用案例

今天使用了loguru来记录日志,感觉十分的方便,特此记录一下。

2025-01-03 00:10:56 651

原创 Git常用命令总结

本篇文章分享的是一些git的使用方法,掌握这些方法基本就可以满足日常的开发需求了。

2024-12-28 22:43:56 854

原创 基于Fastapi搭建API服务实践案例

本文讲述了如何使用fastapi搭建一个属于自己的服务,整个服务使用fastapi框架搭建,celery管理任务队列,slowapi限制请求的频率,主要技术点就是这么几个,其实实践起来也是很简单的,那么我们就开始吧!该服务以高效、模块化和异步化的架构设计,满足了非实时语音转写的需求,并具有良好的可扩展性和稳定性。

2024-12-28 17:09:01 1676

原创 深度学习模型部署框架之mnn

本文是深度学习模型部署框架的第三篇,更多部署框架可以查看本专栏的其他文章。概念:mnn是一个轻量级的深度神经网络引擎,支持深度学习的推理与训练。适用于服务器、个人电脑、手机、嵌入式各类设备。优势:轻量性,无任何依赖;兼容性好,支持常见的框架;工具齐全,与开发者交流方便。坑点:实践的不多,目前没发现什么坑点。本文介绍了mnn的在应用方面的一些经验总结,更多内容参阅文档。

2024-12-08 18:34:16 1285

原创 深度学习模型部署框架之tflite

本文是深度学习模型部署框架的第二篇,更多部署框架可以查看本专栏的其他文章。概念:TensorFlow Lite 是TensorFlow在移动和嵌入式设备上的轻量级推理框架,专门针对资源受限的环境进行了优化,以便在手机、嵌入式设备上运行深度学习模型。优势:缩减了模型的大小和功耗,适合嵌入式等资源受限的设备。坑点:tfl 目前主要支持 cnn 相关的算子 ,对 rnn 等其他网络中的算子还没有很好的支持。对自家的tf框架支持比较好,对于其他框架支持不佳。

2024-12-08 18:25:56 2146

原创 深度学习模型部署框架之ONNX Runtime

本文是深度学习模型部署框架的第一篇,更多部署框架可以查看本专栏的其他文章。概念:onnx一种开源模型格式,专注于推理所需的能力。同时,它还是一个中间深度学习框架,用于连接不同深度学习框架之间的转换。优势:跨平台兼容性好;性能优化;支持多种框架。坑点:onnx只是一个格式,就和json一样,只要满足规则,就是合法的。因此单纯从pytorch转成onnx格式很简单,但是不同后端框架接受的onnx是不一样的。

2024-12-08 18:07:18 3456

原创 机器翻译模型及评估指标总结

最近在做有关机器翻译的相关工作,所以记录一下。在这篇文章中,总结了一些常见的机器翻译开源模型,分析主流的评估指标如 BLEU、ROUGE 和 METEOR,并通过代码示例演示这些指标的实现,最后结合实际应用场景,分享我在机器翻译技术落地过程中的实践经验和思考,希望为读者提供一些参考与启发。在这篇文章中,系统总结了常见的开源机器翻译模型及其相关的应用链接,深入分析主流评估指标并展示实现代码的具体过程,最后结合实际项目的经验,分享机器翻译技术在落地过程中的一些解决方案,希望能够为读者提供全面的思路和实践参考。

2024-12-07 23:17:32 4084

原创 音频降噪模型总结

这篇文章介绍了7种常见的且效果不错的音频降噪模型,他们是从7个音频降噪项目总结而成,包含了源码以及效果展示。在项目的最后也贴出了参考的项目的地址,如果不想一次性看这么多的模型,也可以分别单独去看对应的项目。项目地址放在最后,如果最近在看音频降噪的小伙伴,可以好好看一下这个项目,相信你会有不少的收获,

2024-09-25 23:50:56 996

原创 Gradio使用案例

Gradio 是一个非常方便的 Python 库,用于快速构建用户友好的机器学习模型和其他应用程序的 Web 界面。通过 Gradio,你可以轻松地将机器学习模型转换成一个交互式的 Web 应用,而无需复杂的前端开发技能。这个程序创建了一个 Web 应用,用户可以上传音频并选择语言,推理结果显示在文本框中。Gradio 提供了简洁易用的界面,允许快速构建并分享应用,适合测试、演示和模型部署。gradio 是用于构建 Web 界面的库,能够快速将 Python 函数变为带有用户交互界面的应用程序。

2024-09-22 17:16:07 1614

原创 websocket的基本概念及基本用法

本文为websocket系列文章的第一篇,主要讲解一些websocket的基本概念和使用方法。WebSocket 是一种网络通信协议,它允许在客户端和服务器之间建立一个持久的连接,使得数据可以实时、双向地传输,从而为需要快速、连续交互的应用如在线游戏、聊天应用和实时数据更新提供了一个高效、低延迟的通信解决方案。本文讲解的内容很简单,更多的是为了加深对websocket的理解所做的一些笔记。

2024-09-10 00:16:38 1032

原创 python的一些并发执行案例(多线程、多进程、协程、子进程)

Python作为一种广泛应用的编程语言,虽然因其GIL(全局解释器锁)限制,导致在多线程并发执行中存在一定局限性,但它依然提供了多种并发执行方式。通过合理地运用多线程、多进程、协程、以及子进程,开发者可以在不同场景下大幅提升程序性能。本篇文章将围绕Python的几种主要并发执行模式进行探讨,结合实际案例展示如何在不同任务场景中选择并实现这些技术。我们将重点介绍多线程适用于IO密集型任务的场景,多进程在CPU密集型任务中的优势,协程在高并发异步任务中的强大能力,以及子进程在独立进程间通信中的独特价值。

2024-09-08 23:56:36 2055

原创 Tensorboard常见用法示例

通过运行这个脚本我们可以得到一个存放在 ‘/data/chenkj/tensorboard’ 下的文件,再运行下面代码就可以启动tensorboard了,我们只需要复制这行代码打印出的网址就可以在浏览器中在线查看模型的结构了,比如输出的是 http://0.0.0.0:6007/,只需要把0.0.0.0换成你开启tensorboard的机器的ip就行了,下面其他例子都是一样的操作,后续就不赘述了。

2024-09-06 22:03:58 453

原创 dataset和dataloader学习笔记

通过获取一个batch数据的讲解,加上代码中的注释基本就能搞明白是怎么组织数据和获取数据的了,这里额外讲解一下dataloader中的collate_fn参数的作用。拿到的结果是一个元组列表,类似:samples = [(X[1],Y[1]),(X[4],Y[4]),(X[8],Y[8]),(X[9],Y[9])]其中 features = torch.stack([X[1],X[4],X[8],X[9]])假定m=4, 拿到的结果是一个列表,类似:indices = [1,4,8,9]

2024-09-05 00:33:43 588

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除