时光地下铁

Software is a great combination of art and engineering.

0%

OpusOhos:为 HarmonyOS 打造高性能音频编解码库

引言

随着 HarmonyOS 生态的快速发展,移动应用对高质量音频处理的需求日益增长。无论是实时语音通话、音频录制还是流媒体传输,都需要一个高效、可靠的音频编解码解决方案。Opus 作为一种开放、免版税的音频编解码标准,以其卓越的音质和灵活性在业界广受认可。然而,HarmonyOS 平台缺乏成熟的 Opus 编解码库支持。本文将详细介绍 OpusOhos 库的设计与实现过程,探讨如何将 C/C++ 原生库高效集成到 HarmonyOS 应用开发生态中。

目前该库已发布到OpenHarmony三方库中心仓,点击前往

阅读全文 »

RAG(Retrieval-Augmented Generation)是一个将信息检索(Retrieval)和生成式模型(Generation)结合的来增强生成内容的准确性和丰富度的一种技术,广泛应用于提高大语言模型(LLM)在处理复杂任务时的表现,尤其是在信息量庞大、需要背景知识支持的场景下,表现尤为突出。它通过结合外部知识库进行检索,增强模型生成的能力,特别适用于需要大量背景知识的任务。

对于开发者而言,理解并实现 RAG 技术,不仅能提升 AI 应用的质量,还能帮助你构建更加智能、高效的产品。

RAG 的基本概念

RAG 通过将信息检索(如从数据库或文档中检索相关信息)与生成式模型(如 GPT-4、T5)结合,来提供更准确的回答和高效的生成能力。其流程分为两个步骤:

  1. 信息检索(Retrieval):

    • 在这一步,模型根据用户的查询从一个外部的知识库、数据库或者文本集合中检索出与查询最相关的信息。

    • 检索过程中使用技术如 embedding(文本向量化)和 相似度计算(如余弦相似度),通过匹配查询和文档的语义相似度来提取相关信息。

  2. 生成式回答(Generation):

    • 一旦检索到相关信息,生成式模型(如 GPT-4)使用这些信息来生成最终的答案或内容。

    • 生成模型会将检索到的文本与用户的原始查询结合,生成更具信息量和准确性的输出。

RAG 的优势

RAG 的结合检索与生成的特点,使得它在以下几个方面具有明显优势:

  • 减少生成模型的幻觉(hallucination):
    传统的生成式模型在没有外部信息的支持下可能会生成虚假或不准确的答案。RAG 通过引入检索步骤,确保生成的内容是基于现实中的信息来源,提高了结果的准确性。

  • 扩展模型知识:
    生成式模型通常只依赖于训练时的数据,但通过 RAG,模型可以动态地从外部知识库中检索更新的信息,避免了过时或不完整的知识。

  • 提高效率:
    由于检索步骤是通过外部资源完成的,生成模型只需要在相关信息的基础上生成输出,从而减少了需要处理的信息量,提高了生成效率。

RAG 的工作流程

RAG 系统的工作流程可以通过以下几个步骤来描述:

  1. 查询用户输入:

    • 用户提出问题或请求。
  2. 信息检索(Retrieval):

    • 通过将用户的输入转化为 embedding(例如通过文本编码模型),从外部知识库中检索相关文档或信息。
  3. 信息过滤与排序:

    • 检索到的信息会根据与用户查询的相关性进行排序,并过滤掉不相关的内容。
  4. 生成模型(Generation):

    • 将检索到的信息与用户的查询结合,送入生成式模型(如 GPT-4、T5)中,生成准确的响应。
  5. 返回答案:

    • 最终的生成文本作为回答返回给用户。

RAG 在 iOS 开发中的应用

在 iOS 开发中,RAG 主要用于构建智能助手、问答系统、文档检索系统等应用。它能够结合本地嵌入(embedding)与云端大模型,提供快速、准确的信息检索与生成。

示例:在 iOS 中实现 RAG

假设你正在开发一个 RAG-based 文档检索助手,流程如下:

  1. 文档处理:

    • 将大量文档(如 PDF、Word 文件)转换成文本,并通过嵌入技术(如 sentence-transformer)将文档转换为向量表示。
  2. 查询处理:

    • 用户提出查询,系统将查询也转化为 embedding,并通过相似度计算在本地数据库中进行检索。
  3. 信息检索:

    • 系统从本地数据库中检索出与用户查询最相关的文档段落。
  4. 生成回答:

    • 将检索到的相关段落与用户查询一起传递给大模型(如 Qwen、GLM),生成最终的回答。
  5. 输出答案:

    • 返回生成的答案,用户可以得到基于检索和生成结合的高质量回答。

应用场景:

  • 智能客服助手: 根据用户的提问,结合历史对话和知识库内容,生成准确的服务回复。

  • 智能文档助手: 在文档中检索相关信息,并生成精确的答复或摘要。

  • 知识库查询系统: 通过检索外部知识库的信息并生成相关回答,帮助用户获取所需的知识。

大模型基础概念(适合客户端工程师的轻量入门)

下面内容专为客户端工程师写,不讲晦涩的数学,而是告诉你:

👉 它是什么
👉 为什么重要
👉 你在实际 AI 应用中怎么用


Token / Context / Prompt / System Prompt


1. Token 是什么?

Token 是模型处理文本的最小单位,可以是字、词或词片段。

  • GPT 类模型:英文按词片段、中文按字切分

  • Token ≠ 字符

  • 模型所有计算都按 token 进行

📌 为什么 iOS 工程师必须懂 Token?

  • 调用 API 时会计费(按 token)

  • 上下文长度(context window)限制以 token 计

  • 多轮对话需要控制 token 数量,否则会 “爆 context”

例子:
“我喜欢 iOS 开发”
→ Token 可能被切成:
[“我”, “喜欢”, “i”, “OS”, “开发”]

阅读全文 »

项目管理平台搭建:以iOS开发为例

在中大型项目中,目前主流的开发方式都是组件化开发,根据项目业务的大小,工程中组件一般会有几十,上百,甚至上千组件,如何在项目开发中合理的管理组件,管理项目版本,进行项目开发是个棘手的问题。

解决方案概览

  • 目标:以标准化的组件模型、清晰的版本策略、可持续的交付流程,降低多组件协作成本,提升发布稳定性与可预测性。
  • 关键做法
    • 组件管理:统一命名规范、目录结构、依赖图与可见性边界,使用注册中心进行组件发现与治理。
    • 版本管理:采用语义化版本(SemVer),配合发布列车(Release Train)与自动化变更日志。
    • 项目开发流程:以持续集成为核心,建立变更评审、质量门禁、二进制产物缓存与可回滚发布机制。

根据该方案,建设项目后台进行统一管理,可快速进行项目开发,组件维护,推进发布列车(Release Train)。


阅读全文 »

魔数鸿蒙扫描

魔数鸿蒙扫描Git

介绍

魔数鸿蒙扫描是一款专为鸿蒙应用开发设计的辅助工具,旨在帮助开发者优化应用安装包结构、提升用户体验。通过深入的分析检测功能,该工具能够扫描指定路径的App包内容,并生成详细的检测结果报告。这些报告为开发者提供了宝贵的数据支撑,助力他们排查问题、优化包结构,从而打造出更加高效、稳定的应用。

阅读全文 »

魔数计算器服务协议及隐私政策

欢迎您使用魔数计算器!
为使用魔数计算器,您应当阅读并遵守《魔数计算器服务协议及隐私政策》(以下简称“本协议”)。请您务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的相应条款,以及开通或使用某项服务的单独协议,您使用此服务即表示您接受本协议。限制或免除责任条款可能以加粗形式提示您注意。 除非您已阅读并接受本协议所有条款,否则您无权使用魔数计算器服务(以下简称“本服务”)。您对本服务的任何查看使用行为即视为您已阅读并同意本协议的约束。

阅读全文 »

Swift网络库最著名的就是Alamofire,但是在实际项目中,想要尽可能简单的发起网络请求,必须对Alamofire进行一层封装。依赖Alamofire的封装库也有很多优秀的,比如Moya。但是经过项目的使用,我发现Moya用起来并不简单。

阅读全文 »

OC类型的代码,底层实现都是C/C++语言,可以说,OC语言就是对C/C++语言的封装,比如,任何OC对象,添加__bridge const void *修饰,都可以转变为void指针类型。

阅读全文 »

方法名后缀为”!”的方法

在Ruby中,方法名后缀为”!”的方法通常表示该方法会修改调用它的对象。这种约定起源于Smalltalk语言,在Ruby中广泛使用。

当一个方法后面带有”!”符号时,这个方法通常会修改调用它的对象的状态。例如,如果我们对一个数组调用sort!方法,这个方法会对数组进行排序,并返回排序后的数组,而原始数组将被修改。

阅读全文 »

最近觉得之前的网站图标设计的太简陋,于是我设计了一个新图标,新图标是一个背着的大熊猫图案,灵感来自于背着人们吃竹子的熊猫。通过新图标,我想表达的是一只大熊猫,坐在那里,独自思考的场景,对于这个博客,这个图标比较契合。

前几年,简单图床发布之后,反映了了,于是我基本上放弃了维护,因为没有来自独立软件的收入,我的开发者账号也没有在续费了。因此软件也自动下架了。

通过此事我也学到了一些小小经验:

  • 要明白软件的目的是为了服务用户

  • 运营很重要

  • 软件收入很重要,即使开个赠个咖啡的入口也行