《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
第62篇:TypeChat——类型安全的大模型编程框架
摘要
在构建 AI 应用时,一个常见的痛点是大语言模型(LLM)输出的不确定性与格式不一致问题。开发者往往需要手动解析、校验和处理模型返回的内容,这不仅增加了开发成本,也带来了潜在的运行时错误。
TypeChat 是一个基于 TypeScript 的类型安全大模型编程框架,它通过将 TypeScript 类型系统与 JSON Schema 结合,确保 LLM 输出始终符合预定义的结构,并在必要时自动修复错误输出,从而大幅提升 AI 应用的稳定性与可维护性。
本文将从零开始,带你了解 TypeChat 的核心原理、实战编码技巧及部署集成方法,适合 AI 初中阶开发者学习与实践。
核心概念与知识点
1. TypeChat 简介
什么是类型安全?
类型安全是指程序在运行过程中不会因为类型不匹配而出现错误。TypeScript 通过静态类型检查,在编译期就能发现很多潜在的 bug。
TypeChat 的核心设计理念
- Schema First:先定义输出结构,再调用模型生成。
- 自动修复机制:当模型输出不符合格式要求时,自动尝试修正。
- 类型即接口:TypeScript 类型既是代码结构,也是 API 接口规范。
与传统 LLM 输出方式的区别
方式 | 输出格式 | 错误处理 | 可靠性 |
---|---|---|---|
原始字符串输出 | 自由文本 | 手动处理 | 不稳定 |
JSON 字符串输出 | JSON | 手动校验 | 一般 |
TypeChat 输出 | 强类型对象 | 自动校验 + 修复 | 高 |
2. TypeScript 与 JSON Schema 的结合
TypeChat 内部使用 Zod 来定义输出结构,并将其转换为 JSON Schema 进行校验。
使用 TypeScript 定义输出结构
import { z } from 'zod';const UserSchema = z.object({name: z.string(),age: z.number(),email: z.string().email()
});
自动生成 JSON Schema
console.log(UserSchema.shape);
/*
{name: ZodString,age: ZodNumber,email: ZodString
}
*/
动态校验大模型输出是否符合预期格式
TypeChat 会自动对模型返回的 JSON 进行校验:
model.generate().then((user) => {console.log(user.name); // stringconsole.log(user.age); // number
});
3. TypeChat 工作原理
输入提示词 → LLM 生成 JSON 输出
const model = createModel<User>({schema: UserSchema,prompt: "请生成一位用户的资料"
});
自动修正不符合格式的响应
如果模型输出如下内容:
{"name": "张三","age": "twenty-five", // 错误类型"email": "zhangsan@example.com"
}
TypeChat 会检测到 age
不是数字类型,并尝试引导模型重新生成。
类型错误检测与反馈机制
TypeChat 会在控制台打印出错误信息,并记录重试次数:
[TypeChat] Validation failed for field 'age': Expected number, got string.
[TypeChat] Attempting to fix response...
4. 安装与配置
初始化 Node.js 项目
mkdir typechat-demo
cd typechat-demo
npm init -y
安装 TypeChat 依赖
npm install typechat openai zod
配置 OpenAI API 密钥
创建 .env
文件:
OPENAI_API_KEY=your_openai_api_key_here
加载环境变量:
import dotenv from 'dotenv';
dotenv.config();
示例代码运行演示
// index.ts
import { createModel } from 'typechat';
import { z } from 'zod';
import dotenv from 'dotenv';dotenv.config();const UserSchema = z.object({name: z.string(),age: z.number(),email: z.string().email()
});type User = z.infer<typeof UserSchema>;const model = createModel<User>({schema: UserSchema,prompt: "请生成一位用户的资料"
});model.generate().then((user) => {console.log("生成用户:", user);
}).catch((err) => {console.error("生成失败:", err);
});
运行:
npx ts-node index.ts
5. 实战编码【实战部分】
如何定义复杂嵌套结构
const AddressSchema = z.object({street: z.string(),city: z.string(),zipCode: z.string()
});const UserSchema = z.object({id: z.number(),name: z.string(),address: AddressSchema,tags: z.array(z.string())
});
错误处理与自动修复机制
TypeChat 默认最多重试 3 次,若仍无法修复则抛出异常:
model.generate({ maxFixAttempts: 5 }).then(...).catch(...);
日志输出与调试技巧
启用详细日志:
const model = createModel<User>({schema: UserSchema,prompt: "...",verbose: true
});
查看完整的输入输出日志,有助于调试模型行为。
6. 集成到现有系统
与 Express/FastAPI 后端服务集成
Express 示例(Node.js)
import express from 'express';
import { createModel } from 'typechat';
import { z } from 'zod';const app = express();
app.use(express.json());const UserSchema = z.object({...});const model = createModel<User>({...});app.post('/generate-user', async (req, res) => {try {const user = await model.generate();res.json(user);} catch (err) {res.status(500).json({ error: "Failed to generate user" });}
});app.listen(3000, () => console.log('Server running on port 3000'));
在前端应用中使用 TypeChat
你可以将 TypeChat 封装为 SDK,在 React/Vue/Angular 中调用:
async function fetchUser(): Promise<User> {const response = await fetch('/api/generate-user');return await response.json();
}
结合 LangChain 构建智能 Agent
import { TypeChatAgent } from 'typechat/langchain';
import { ChatOpenAI } from 'langchain/chat_models/openai';const chat = new ChatOpenAI({ modelName: "gpt-3.5-turbo" });
const agent = new TypeChatAgent(chat, schema);const result = await agent.run("请生成一份简历");
7. 优势与适用场景
优势 | 说明 |
---|---|
类型安全 | 编译期即可发现输出结构错误 |
减少后处理 | 不再需要手动解析和清洗输出 |
提高开发效率 | 更快地构建标准化 AI 接口 |
支持多种模型 | 兼容 GPT、Llama、Anthropic 等平台 |
适用场景
- ✅ 数据提取任务:如简历解析、发票识别
- ✅ 表单自动生成与填充
- ✅ 构建标准化输出的 AI 服务接口
性能与稳定性分析
分析维度 | 描述 |
---|---|
内部重试机制 | 最多 3 次自动修复尝试 |
失败回退策略 | 返回 null 或原始 JSON |
模型适应性 | 对 GPT-3.5/GPT-4 效果最佳,Llama 需微调 |
性能开销 | JSON 校验平均耗时 < 5ms |
实战案例研究
案例一:构建自动化的客服问答系统
功能需求:
- 用户输入自由文本问题
- 模型返回结构化答案 + 相关 FAQ ID
const AnswerSchema = z.object({answer: z.string(),faqId: z.number()
});
TypeChat 优势:
- 保证每次输出都有
answer
和faqId
- 自动修正缺失字段或类型错误
案例二:从自由文本中提取结构化数据
场景:从一段简历中提取教育经历
const EducationSchema = z.object({school: z.string(),degree: z.string(),year: z.number()
});const ResumeSchema = z.object({name: z.string(),education: z.array(EducationSchema)
});
TypeChat 输出示例:
{"name": "李明","education": [{"school": "清华大学","degree": "计算机科学","year": 2020}]
}
案例三:构建 AI 驱动的数据清洗工具链
场景:清理一批非结构化客户咨询数据
const InquirySchema = z.object({customerName: z.string(),phone: z.string().regex(/^\d{11}$/),issue: z.string()
});
TypeChat 可以批量清洗数据,自动修复格式错误。
未来展望
发展方向 | 描述 |
---|---|
支持更多语言 | Python、Rust 版本正在开发中 |
更强的语义理解能力增强 | 融合知识图谱与意图识别模块 |
与大型知识图谱结合 | 实现更精准的实体识别与推理 |
集成低代码平台 | 让非程序员也能快速构建 AI 应用 |
结语
TypeChat 通过引入类型系统,解决了大模型输出不稳定、结构不可控的问题,让 AI 开发回归“类型驱动”的工程化思维。
无论你是想构建企业级 AI 应用、自动化数据处理流程,还是打造标准化的 AI 接口,TypeChat 都是一个值得尝试的优秀工具。
📌 GitHub 示例源码地址(待补充)
📘 后续文章推荐
- 第63篇:《LangChain 实战:构建多步骤 AI Agent》
- 第64篇:《FastAPI + TypeChat 构建生产级 AI 服务》
- 第65篇:《AI 中间件架构设计:从单一服务到平台化演进》
如需进一步定制化开发或团队培训,欢迎联系作者!
相关文章:
《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
第62篇:TypeChat——类型安全的大模型编程框架 摘要 在构建 AI 应用时,一个常见的痛点是大语言模型(LLM)输出的不确定性与格式不一致问题。开发者往往需要手动解析、校验和处理模型返回的内容,这不仅增加了开发成本&a…...
STM32 片上资源之串口
STM32 片上资源之串口 1 串口介绍1.1 初步介绍1.2 主要特性1.2.1 USART特性1.2.2 UART特性 1.3 主要寄存器1.4 波特率计算1.5 常用工作模式1.5.1 轮询模式:1.5.2 中断模式:1.5.3 DMA模式: 1.6 常见应用1.7 注意事项 2 软件层面协议2.1 基本概…...
全球首个投影机息屏显示专利授权:九天画芯重新定义设备交互与节能显示新范式
一、从 “功能闲置” 到 “持续交互”—— 投影机专利授权开启显示技术新纪元 在智能设备高速发展的今天,投影机作为重要的显示终端,长期面临 “非观影时段功能闲置” 的行业痛点。2025 年,一项名为 “投影机息屏显示” 的核心基础专利获得授…...
音频分类的学习
1.深度学习PyTorch入门-语音分类 https://blog.csdn.net/sinat_41787040/article/details/129795496 https://github.com/musikalkemist/pytorchforaudio https://github1s.com/musikalkemist/pytorchforaudio/blob/main/04%20Creating%20a%20custom%20dataset/urbansoundda…...
Java—— 可变参数、集合工具类、集合嵌套
可变参数 说明 1. 可变参数本质上就是一个数组 2. 作用:在形参中接收多个数据 3. 格式:数据类型...参数名称 举例:int...a 4. 注意事项: 形参列表中可变参数只能有一个 可变参数必须放在形参列表的最后面 案例演示 …...
AGI大模型(15):向量检索之调用ollama向量数据库
这里介绍将向量模型下载到本地,这里使用ollama,现在本地安装ollama,这里就不过多结束了。直接从下载开始。 1 下载模型 首先搜索模型,这里使用bge-large模型,你可以根据自己的需要修改。 点击进入,复制命令到命令行工具中执行。 安装后查看: 2 代码实现 先下载ollama…...
“强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
近日,北京凯创未来科技有限公司总经理赵健凯先生莅临广东省绿算技术有限公司北京运营中心,双方正式签订战略合作协议,标志着绿算技术在高端智能家居及智能照明领域的技术实力与产业布局获得智能家居行业认可,同时也为凯创未来在高…...
【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权
【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权 文章目录 【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权[toc]一:Kerberos 委派攻击原理之 S4U2利用1.1原理1.2两种扩展协议**S4U2Self (Service for User to Self)****S4U2Proxy (Service for User to Proxy)*…...
Linux grep -r 查找依赖包是否存在依赖类 Class
方法一:通过 Linux ,grep -r ClassPath 命令 grep -f org.apache.kafka.connect.source.SourceRecord在 jar 包所在 lib 或者 lib/plugins 目录下执行,grep -r, flink-sql-connector-sqlserver-cdc-3.3.0.jar 中此 kafka Source…...
Qt笔记---》.pro中配置
文章目录 1、概要1.1、修改qt项目的中间文件输出路径和部署路径1.2、Qt 项目模块配置1.3、外部库文件引用配置 1、概要 1.1、修改qt项目的中间文件输出路径和部署路径 (1)、为解决 “ 输出文件 ” 和 “ 中间输出文件 ”全部在同一个文件夹下的问题&am…...
D. Eating【Codeforces Round 1005 (Div. 2)】
D. Eating 题意 有 n n n 个史莱姆排成一行,第 i i i 个史莱姆的权重为 w i w_i wi。若史莱姆 i i i 的权重满足 w i ≥ w j w_i \geq w_j wi≥wj,则它可以吃掉史莱姆 j j j;之后,史莱姆 j j j 会消失,…...
猫眼浏览器:简约安全,极速浏览
猫眼浏览器是一款以简约安全为目标的Chrome内核增强版浏览器,基于最新的Chromium开源内核进行二次优化开发。它不仅继承了Chrome浏览器的高速浏览体验,还通过增强的隐私保护设置,让用户远离被追踪和广告的烦恼。无论是日常浏览、信息查询还是…...
安全扫描之 Linux 杀毒软件 Clamav 安装
文章目录 背景Clamav 简介安装使用1、安装epel-release2、Clamav安装3、成功安装4、更新病毒库5、执行扫描6、结果分析7、常见问题 背景 最近在做HVV准备工作,应要求需要在 Linux 服务器上安装杀毒软件,以此文记录下Clamav 安装过程。 Clamav 简介 Cl…...
排序算法详解
排序算法全面解析 排序算法是计算机科学中最基础也最重要的算法之一。它将一组数据(例如数字列表、字符串集合)按照特定的顺序(升序或降序)重新排列。高效的排序算法对于优化其他算法(如搜索和合并算法)的…...
[特殊字符] GSG 插件 + 渲染 101:C4D 渲染效率革命!
一、GSG 插件:C4D 创作的「超级加速器」 灰猩猩(GSG)插件是 C4D 设计师的刚需工具: Light Kit Pro:1 分钟生成专业灯光预设,告别手动布光烦恼GorillaCam:自动添加电影级相机运动,镜…...
centos中postfix的作用
/usr/libexec/postfix/master 是 Postfix 邮件服务器的主进程,qmgr 和 pickup 是 Postfix 的子进程。这些进程本身是正常的,但如果你怀疑服务器被用于钓鱼活动,需要进一步检查 Postfix 的配置和日志,确保它没有被滥用。 1. 检查 P…...
tocmat 启动怎么设置 jvm和gc
在生产环境中部署 Java Web 应用时,我们经常需要给 Tomcat 设置 JVM 参数和 GC 策略,以提高性能、稳定性和可观察性。以下是完整教程: 一、Tomcat 设置 JVM 启动参数的方式 1. 修改 startup 脚本(推荐) 以 Linux 系统…...
【工奥阀门科技有限公司】签约智橙PLM
近日,工奥阀门科技有限公司正式签约了智橙泵阀行业版PLM。 忠于质量,臻于服务,精于研发 工奥阀门科技有限公司(以下简称工奥阀门)坐落于浙江永嘉,是一家集设计、开发、生产、销售、安装、服务为一体的阀门…...
Axure设计之轮播图——案例“一图一轮播”
轮播图是一种常见且实用的组件,用于展示多张图片或内容,同时节省页面空间。在Axure中,通过动态面板和交互设置,我们可以轻松实现一个“一图一轮播”的效果,即每次只展示一张图片,并通过按钮或自动切换来浏览…...
可视化图解算法39: 输出二叉树的右视图
1. 题目 描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 数据范围: 0≤n≤10000 要求: 空间复杂度 O(n),时间复杂度 O(n) 如输入[1,2,4,5,3],[4,2,5,1,3]时,通过前序遍历的结…...
数据库基础复习笔记
数据库 相关概念 名称全称检查数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操作和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库…...
鸿蒙OSUniApp 实现一个精致的日历组件#三方框架 #Uniapp
使用 UniApp 实现一个精致的日历组件 前言 最近在开发一个约会小程序时,需要实现一个既美观又实用的日历组件。市面上虽然有不少现成的组件库,但都不太符合我们的设计需求。于是,我决定从零开始,基于 UniApp 自己实现一个功能完…...
Kotlin 协程实战:实现异步值加载委托,对值进行异步懒初始化
在实际开发中,我们经常遇到这样的场景。 需要立即初始化但计算成本高昂的值 val expensiveValue calculateExpensiveValue() 可能引发阻塞的初始化操作 val resource loadResourceFromNetwork()这些场景通常需要满足以下需求: 异步加载:…...
MySQL增删查改进阶
文章目录 一、数据库备份二、数据库约束2.1 NOT NULL2.2 UNIQUE:唯一约束2.3 DEFAULT:默认值约束 一、数据库备份 在MySQL当中,数据库是如何备份的呢?主要通过三种方式进行备份: 数据库最终都是存储在硬盘上…...
Tensorflow2保存和加载模型
1、model.save() and model.load() 此种方法可保存模型的结构、参数等内容。加载模型后无需设置即可使用! 保存模型: model.save(my_model.h5) 加载模型: # 加载整个模型 loaded_model tf.keras.models.load_model(my_model.h5) 注意&…...
通过泛域名解析把二级域名批量绑定到wordpress的指定页面
通过泛域名解析将二级域名批量绑定到WordPress的指定页面,需要完成两个主要步骤:一是设置泛域名解析,二是配置服务器和WordPress以实现二级域名到指定页面的映射。以下是详细的操作方法: 1. 设置泛域名解析 在域名注册商的管理后…...
BGP联邦+反射器实验
一、实验拓扑 二、IP规划 骨干: 172.16.0.0/30 ---- R2-R3 172.16.0.4/30 ---- R3-R4 172.16.0.8/30 ---- R4-R7 172.16.0.12/30 ---- R6-R7 172.16.0.16/30 ---- R5-R6 172.16.0.20/30 ---- R2-R5 非骨干: 172.16.2.0/24 ---- R2的环回 2.2.2.2/32 17…...
3天云南旅游规划
云南的主要旅游城市和景点。昆明作为云南的省会,拥有丰富的自然景观和适合短途游玩的地方。 第一天可以安排在昆明市内和周边,方便游玩。 第二天,可以考虑去大理,这是云南的著名旅游城市,距离昆明大约2小时的车程。大理…...
SCDN能够运用在物联网加速当中吗?
在当今的科技化时代当中,物联网已经广泛渗透在各个领域行业当中,随着物联网规模的不断扩大,数据信息的传输速度和网络稳定性成为企业需要重视的两点因素,而SCDN也成为安全内容分发网络作为一种融合了内容加速和安全防护的技术&…...
Go语言八股之Mysql基础详解
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
计算机视觉----基础概念、卷积
一、概述 1.计算机视觉的定义 计算机视觉(Computer Vision)是一个跨学科的研究领域,主要涉及如何使计算机能够通过处理和理解数字图像或视频来自动进行有意义的分析和决策。其目标是使计算机能够从视觉数据中获取高层次的理解,类似于人类的视觉处理能力。 具体来说,计算机…...
Problem E: List练习
1.题目描述 运用List完成下面的要求: 1) 创建一个List,在List中增加三个工人,基本信息如下: 姓名 年龄 工资 Tom 18 3000 Peter 25 3500 Mark 22 3200 2) 插入一个工人,信息为:姓名:Robert࿰…...
12-串口外设
一、串口外设的基本概述 1、基本定义 串口通信,通过在通信双方之间以比特位(bit)的形式逐一发送或接收数据,实现了信息的有效传递。其通信方式不仅简单可靠,而且成本很低。 2、stm32的串口 下面是两个MCU的数据交互&…...
C++(2)
二、面向对象基础 1. 类与对象 1.1 核心概念 类(Class) 定义:抽象描述具有共同特征和行为的对象模板本质:代码复用的蓝图,定义数据(属性)与操作(行为࿰…...
GMT之Bash语言使用
GMT的操作有自己的逻辑和“命令”,但GMT是可以用Bash语言控制的,所以常常以.sh为后缀写GMT程序。 GMT程序运行步骤如下: 采用cd ,定位到指定文件夹;以sh ***.sh运行GMT,得到结果。 另外,遇到…...
半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6
半成品的开源双系统VLA模型,OpenHelix https://openhelix-robot.github.io/ 0. 摘要 随着OpenVLA的开源,VLA如何部署到真实的机器人上获得了越来越多的关注,各界人士也都开始尝试解决OpenVLA的效率问题,双系统方案是其中一个非…...
fiftyone-dataset使用基础
1.创建dataset 将dataset写入数据库时,对于已有的dataset name会报错: 解决方法:指定覆盖写 添加参数overwriteTrue, 默认为False # 在写入数据集时,指定overwriteTrue,表示当dataset_name在数据库中已存在时&#…...
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
目录 1. Object类 1.1 equals 1.2 toString() 2.final关键字 3.注解 4. 设计模式 4.1 单例模式 4.1.1 饿汉式 4.1.3 饿汉式 VS 懒汉式 5. 抽象类&抽象方法 6. 接口 1. Object类 1.1 equals 重写Object 的equals方法,两种实现方式…...
强力巨彩谷亚推出专业智慧显示屏,满足多元场景需求
LED显示屏作为信息传播与视觉展示的关键载体,其性能和品质的提升备受关注。为响应市场对高品质显示的迫切需求,强力巨彩旗下专业智慧显示高端品牌谷亚G-ART,携多款行业领先水平的LED显示屏产品亮相,为用户带来专业、高效且节能的显…...
基于Spring AI与Hugging Face TGI构建高效聊天应用:从配置到实践全解析
基于Spring AI与Hugging Face TGI构建高效聊天应用:从配置到实践全解析 前言 在人工智能技术蓬勃发展的当下,大语言模型(LLM)的应用场景日益丰富。如何快速将 Hugging Face 生态中的强大模型部署为可通过 API 访问的服务&#x…...
MySQL视图:虚拟表的强大功能与应用实践
在数据库管理系统中,视图(View)是一种极其重要却常被忽视的功能。作为MySQL数据库的核心特性之一,视图为开发者和数据库管理员提供了数据抽象、安全控制和查询简化的强大工具。本文将全面探讨MySQL视图的概念、工作原理、创建与管理方法,以及…...
matlab插值方法(简短)
在MATLAB中,可以使用interp1函数快速实现插值。以下代码展示了如何使用spline插值方法对给定数据进行插值: x1 [23,56]; y1 [23,56]; X 23:1:56*4; Y interp1(x1,y1,X,spline);% linear、 spline其中,x1和y1是已知数据点,X是…...
【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用,Deer-Flow(Deep Exploration and Efficient Research Flow)作为字节跳动近期开源的重量级项目,正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…...
基于开源AI大模型与S2B2C生态的个人品牌优势挖掘与标签重构研究
摘要:在数字文明时代,个人品牌塑造已从传统经验驱动转向数据智能驱动。本文以开源AI大模型、AI智能名片与S2B2C商城小程序源码为技术载体,提出"社会评价-数据验证-标签重构"的三维分析框架。通过实证研究发现,结合第三方…...
2025年PMP 学习十二 第9章 项目资源管理
2025年PMP 学习十二 第9章 项目资源管理 序号过程过程组1规划资源管理规划2估算活动资源规划3获取资源执行4建设团队执行5管理团队执行6控制资源监控 项目资源管理,包括实物资源和团队资源。 文章目录 2025年PMP 学习十二 第9章 项目资源管理项目团队和 项目管理团…...
AI生成功能测试文档|测试文档
AI生成功能测试文档:链接直达 计算机功能测试文档撰写教程 链接直达:生成功能测试文档工具 一、文档概述 (一)文档目的 明确计算机功能测试的流程、方法和标准,确保测试的有效性和可靠性,为软件的质量评…...
Python 常用模块(八):logging模块
目录 一、引言:日志模块在项目开发中的重要性二、从 Django 日志配置看 Logging 模块的核心组成三、logging模块核心组件详解3.1 记录器Logger3.2 级别Level3.3 根记录器使用3.4 处理器Handler3.5 格式化器Formatter3.6 日志流3.7 日志示例 四、日志模块总结 一、引…...
入门OpenTelemetry——可观测性与链路追踪介绍
可观测性 什么是可观测性 可观察性(Observability)是从外部输出知识中推断所获得,可理解为衡量一个系统内部状态的方法。可观测性是一种能力,它能帮助你回答系统内部发生了什么——无需事先定义每种可能的故障或状态。系统的可观…...
c#队列及其操作
可以用数组、链表实现队列,大致与栈相似,简要介绍下队列实现吧。值得注意的是循环队列判空判满操作,在用链表实现时需要额外思考下出入队列条件。 设计头文件 #ifndef ARRAY_QUEUE_H #define ARRAY_QUEUE_H#include <stdbool.h> #incl…...
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
前言 之前的文件分享过基于内存的STL缓存、环形缓冲区,以及基于文件的队列缓存mqueue、hash存储、向量库annoy存储,这两种属于比较原始且高效的方式。 那么,有没有高级且高效的方式呢。有的,从数据角度上看,࿰…...