- 博客(119)
- 收藏
- 关注
原创 LangChain——AI应用开发框架(核心组件2)
概念:RAG(Retrieval-Augmented Generation,检索增强生成)是当下 LLM 应用开发的核心技术范式,核心解决LLM 知识陈旧、幻觉、无法引用外部数据的问题 —— 简单说就是「先检索外部知识库中的相关信息,再让 LLM 基于这些信息生成回答」,而不是让 LLM 凭空「编造」内容。为了更好的理解 RAG,我们先用AI 搜索来引出 RAG。对于【AI 大模型】来说,它最擅长的是语义理解和文本总结,最不擅长的就是获取实时的信息。因为大模型的训练数据是有截止日期的!
2026-01-24 10:11:32
582
原创 LangChain——AI应用开发框架(核心组件1)
一个简单的例子,假设我们想根据一个城市名询问 LLM 其历史,按照之前的做法,我们可以定义HumanMessage("请介绍上海的历史") 、 HumanMessage("请介绍西安的历史") 消息等等。在更复杂的场景下,我们可能会使用消息列表来跟踪状态,例如我们可能只想将这个完整消息列表的子集传递模型调用,而不是所有的历史记录。这使得与LLM 的交互从“模糊的文本对话”变成了“精确的数据 API 调用”,是构建可靠、高效 LLM 应用不可或缺的组件。有趣的是,模型越好,它需要精准的示例就越少。
2026-01-24 10:01:24
626
2
原创 LangChain——AI应用开发框架
本文介绍了LangChain框架中聊天模型(LLM)的核心功能与应用。主要内容包括:1)聊天模型的定义与接口调用方式;2)LCEL语言用于组件编排;3)参数控制(temperature、max_tokens);4)工具调用功能实现外部服务集成;5)结构化输出支持JSON/Pydantic等格式;6)流式输出技术实现实时响应;7)使用LangSmith平台进行应用监控和调试。文章通过代码示例详细演示了各项功能的具体实现方法,展示了如何将基础聊天模型扩展为具备工具调用、结构化输出等高级能力的智能应用。
2026-01-23 23:24:16
623
原创 LangChain—AI应用开发框架(认识模型)
本文介绍了模型和大语言模型的基本概念与应用。模型本质上是学习数据规律的数学函数,通过输入输出关系完成特定任务。大语言模型(LLM)是基于大规模神经网络的语言模型,采用自监督或半监督方式训练,具备强大的文本生成能力。主流LLM包括GPT-5、DeepSeekR1等,可通过API、开源模型本地部署或SDK方式接入。此外,文章还阐述了嵌入模型的作用,它能将文本转换为数值向量,应用于语义搜索、推荐系统等场景。这些技术共同构成了现代AI应用的基础框架。
2026-01-23 23:12:52
628
原创 用AIPing统一API快速接入限时免费开放的GLM - 4.7与MiniMax - M2.1 ,打造专属快速解读文档项目!
AIPing致力于为开发者提供统一的AI模型调用接口,支持多种主流大语言模型,让开发者能够通过简单的API调用,轻松使用各种先进的AI模型,大幅降低开发成本,提高开发效率,快来体验: [https://aiping.cn/#?然而,每个模型都有自己的API接口和调用方式,开发者需要花费大量时间学习和适配不同模型,这大大增加了开发成本和复杂度。,核心定位是:为开发者提供统一的AI模型调用接口,支持多种主流大语言模型,简化AI应用开发流程,降低开发成本。:快速接入先进AI模型,加速AI应用落地。
2025-12-24 15:51:27
435
18
转载 2025年主流远程控制软件横向测评:技术特性、场景匹配与选型参考
客户端体积小巧,部署便捷。例如,RayLink 服务于专业视觉工作者,UU远程聚焦游戏,向日葵强化硬件运维,RustDesk 满足自建需求。例如,在模拟的弱网环境下,仍能保持可用的操作响应。国内主流软件通过广泛部署国内加速节点,有效改善了跨运营商、跨地域访问的延迟问题,这是提升基础体验的重要一环。在核心的编码压缩、低延迟传输技术上,国产软件已经实现了快速跟进与应用,部分体验指标上与国际产品互有优劣。一款合格的轻量级选择,适合对电脑操作不熟悉、或仅需进行简单远程协助的用户,其简洁性是其最大优势。
2025-12-18 16:53:46
106
5
原创 探索Kurator:云原生技术的探索与应用
Kurator作为一款云原生管理工具,凭借其丰富的功能和灵活的架构,帮助开发者和企业简化了云原生应用的管理。本文通过多个示例详细展示了如何使用Kurator进行容器管理、跨云迁移、自动扩展等操作。无论是微服务应用的部署,还是跨云平台的资源管理,Kurator都提供了强大的支持,并且其活跃的社区和开源精神使其不断推动云原生技术的进步。
2025-11-28 16:37:34
967
15
原创 brpc远程过程调用
所谓的异步请求是指我们的rpc操作是异步执行的。对于服务器这边: 由于对于请求的业务处理,不一定是在Echo方法中的,也就是说Echo方法执行结束不代表业务处理完成,所以此时就无法构造响应。由于对于请求的业务处理,不一定是在Echo方法中的,也就是说Echo方法执行结束不代表业务处理完成,所以此时就无法构造响应。RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许一台计算机(客户端)通过网络调用另一台计算机(服务器)上的函数或方法,而无需了解底层网络技术的细节。
2025-09-24 11:29:04
1015
28
原创 从零开始的 Docker 之旅
REPOSITORY 和 TAG 标签 均为<none> 的镜像被称为虚悬镜像,一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的。造成虚悬镜像的原因:原因一:原本有镜像名和标签的镜像,发布了新版本后,重新 docker pull *** 时,旧的镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消;原因二:docker build 同样可以导致这种现象。
2025-08-26 23:23:53
669
41
原创 【Linux系统编程】线程概念与控制
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“⼀个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。所以,Linux内核中没有线程的概念,只有进程的概念,使用轻量级进程模拟线程。
2025-08-05 20:48:14
1469
39
原创 【Linux系统编程】进程信号
需要通过系统调用来修改信号的处理动作:signal我们可以自己定义某个信号的处理函数,然后调用该函数,就可以修改该信号的默认处理动作,转而来执行我们的函数。当然也可以设置成忽略处理。
2025-08-03 20:48:23
1121
32
原创 【Linux系统编程】进程间通信:管道+共享内存
1,进程间通信的目的数据传输:一个 进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另⼀个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷⼊和异常,并能够及时知道它的状态改变。2,进程间通信的方式管道:匿名管道pipe,命名管道。
2025-08-02 15:34:30
950
22
原创 【Linux系统编程】Ext2文件系统
缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
2025-07-29 22:15:14
856
30
原创 【Linux系统编程】环境变量,进程地址空间与进程控制
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进⾏查找。在进程替换的时候,只需要将要执行的程序的代码和数据覆盖式的加载到内存中对应位置即可,进程数据结构对象和虚拟内存不需要修改,页表可能需要进行修改。另外,进程一旦变成僵尸状态,那就刀枪不入,“杀⼈不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死⼀个已经死去的进程。最后,父进程派给子进程的任务完成的如何,我们需要知道。
2025-07-27 22:41:01
1119
30
原创 【Linux系统编程】进程优先级,进程切换与进程调度
• bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率!nice值得取值范围:[-20,19],而默认优先级(PRI)是80,所以进程优先级的范围就是[60,99]并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期是一直都存在的。
2025-07-27 21:20:45
819
10
原创 一文吃透 Redis:主从复制 / 哨兵 / 集群模式 + 缓存 + 分布式锁
主从复制解决的问题:单点问题单点问题:单个redis节点,可用性不高,性能有限。主从复制的特点:1,主节点可以用来读写,从节点只能用来读,可以减少主节点的访问压力。2,主从复制存在多种拓扑结构:可以在适当的场景使用适当的拓扑结构,比如一主多从的结构,同步操作快,但是消耗的网络资源多,因为主节点要通过网络和所有从节点实现同步。而树形结构,主节点消耗的网络资源减少了,但是如果树的层级太高,会造成数据同步的延迟增长加。3,复制分为全量复制,部分复制和实时复制。
2025-07-24 21:22:44
1627
35
原创 Redis学习:持久化与事务(Transaction)
在子进程重写文件的同时,父进程仍然在不停的接受其他客户端的请求,父进程还是会把这些请求写入到缓冲区aof_buf中,同时父进程这里又准备了一个aof_rewrite_buf缓冲区,也会将新收到的请求写入到这个缓冲区中,也就是说aof_rewrite_buf缓冲区专门放fork之后收到的数据。注意,这里不能不写,考虑到极端情况,如果子进程在重写的过程中,服务器挂了,子进程内存中的数据就会丢失,此时 新的aof文件中的内容还不完整。当redis重新启动的时候,就会读取这个AOF文件的内容,用来恢复数据。
2025-07-24 20:55:07
1291
5
原创 消息队列学习
首先介绍一下阻塞队列(Blocking Queue),在多线程编程中阻塞队列(Blocking Queue)是⼀种常⽤于实现⽣产者和消费者模型的数据结构。其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放⼊了元素;当队列满时,往队列⾥存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进行操作时会被阻塞)。而阻塞队列是应用于同一主机的不同线程之上。
2025-07-22 15:00:13
1378
24
原创 【Linux网络编程】多路转接IO(二)epoll
这种情况,不建议让多个线程同时在epoll_wait监听的socket,而是让其中一个线程epoll_wait监听的socket,当有新的链接请求进来之后,由epoll_wait的线程调用accept,建立新的连接,然后交给其他工作线程处理后续的数据读写请求,这样就可以避免了由于多线程环境下的epoll_wait惊群效应问题。事件回调机制:避免使用遍历,而是使用回调函数的方式,将就绪的文件描述符结构加入到就绪队列中,epoll_wait 返回直接访问就绪队列就知道哪些文件描述符就绪。
2025-06-26 14:55:18
983
20
原创 【Linux网络编程】多路转接I/O(一)select,poll
二者对比特性SelectPoll最大 FD 数受限(FD_SETSIZE)无限制性能(FD 量大时)O(n) 扫描O(n) 扫描事件类型仅读/写/异常更丰富(POLLRDNORM 等)平台支持跨平台Linux 专用FD 重用每次需重置 fd_set可复用 pollfd 数组Select:FD 数量少(<1024),需跨平台Poll:FD 数量多,仅需支持 Linux注意:两种模型都采用水平触发(LT)模式,即只要 FD 处于就绪状态,每次调用都会返回该 FD。
2025-06-24 14:04:23
1103
22
原创 【Linux网络编程】五种IO模型与非阻塞IO
阻塞IO:在内核将数据准备好之前,系统调用会一直等待。所有的套接字,默认都是阻塞状态的。非阻塞IO:如果内核将数据还没有准备好,系统调用仍会直接返回,并且返回EWOULDBLOCK错误码。轮询信号驱动IO:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作。IO多路转接:虽然从流程图上看和阻塞IO类似。实际上最核心的在于IO多路转接能够同时等待多个文件描述符的就绪状态。异步IO:由内核在数据拷贝完成时,通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。
2025-06-23 12:23:04
802
19
原创 【Linux网络编程】数据链路层
如上图,主机A在 向主机B发送数据的时候,是需要将数据进行一层一层的封装,向下交付,到达网络层,需要封装IP报头,其中包含源IP地址和目标主机的IP地址。否则需要对数据包进行分片(fragmentation),这个工作是在网络层完成的,网络层的IP协议中的16位标识,3位标志,13位片偏移可以实现数据包的分片和组装工作。即包含了数据链路层的内容,也包含了一些物理层的内容。但是现在的问题是,当前的两台主机只能知道对方的IP地址,不知道对方的MAC地址,需要进行通信,必须 要先获取到对方的MAC地址。
2025-06-01 20:44:18
1212
32
原创 【Linux网络编程】网络层IP协议
因此, 除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。在复杂的网络结构中,找出一条通往终点的路线;4位首部长度:表名IP协议报头的长度,单位是4字节,所以IP协议报头的最大长度是15*4=60字节。包含在这个范围中的,都称为私有 IP,其余的则称为全局 IP(或公网 IP)。
2025-06-01 15:34:34
1323
10
原创 【Linux网络编程】传输层协议TCP,UDP
客户端调用connect发起三次握手,向服务器发起建立连接的请求。而服务器端通过listen将自己设置为监听状态。本质上,connect是发起三次握手,但是不参与三次握手的。服务器端通过accept获取底层建立好的连接,也不参与三次握手。
2025-05-29 11:27:19
1732
28
原创 【数据库课程设计】网上投票管理系统
开发环境:SQL Server 2022,Qt Creator 4.11.1 (Community)屏幕录制 2025-05-20 183909(1)应用系统背景随着互联网技术的发展,传统线下投票方式(如纸质投票、会议举手表决等)逐渐暴露出效率低、成本高、统计复杂、安全性差等问题。网上投票管理系统旨在通过数字化手段实现投票流程的自动化,支持多场景投票需求(如企业决策、校园活动、社会调研等),提供高效、安全、透明的投票服务。系统目标提高投票效率和准确性,减少人工统计错误;
2025-05-20 19:04:19
1403
41
原创 高并发内存池(三):TLS无锁访问以及Central Cache结构设计
在上篇文章中,我们完成了thread chche整体结构的设计。以及项目的整体框架也已经有所了解了。对于该项目,高并发内存池:主要分为三层结构,thread cache,Central Cache以及Page Cache。对于 thread cache,每个线程独享一个thread cache,申请资源时,优先找对应的thread cache,其中涉及到内存对齐规则的映射。TLS线程局部存储,单例模式,慢开始反馈调节算法。
2025-05-12 18:07:22
1657
38
原创 【Linux网络编程】HTTPS协议原理
加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文,经过一系列的变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间数据,来辅助这一过程的完成,这样的数据称作密钥。2,为什么需要加密?如果使用HTTP协议,不对传输的数据进行加密,由于我们通过网络传输的数据都会经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改了。
2025-05-12 08:00:09
1013
30
原创 高并发内存池(二):项目的整体框架以及Thread_Cache的结构设计
现代很多的开发环境都是多核多线程,在申请内存的场景下,必然存在激烈的锁竞争问题。前面也已经提到过,malloc本身就是一种内存池,malloc申请内存资源的方式已经很优秀了。而这个项目的原型tcmalloc就是在高并发场景下更胜一筹。所以我们的项目主要处理的是在多线程下申请内存资源,我们的线程池需要考虑几个问题:性能问题多线程环境下,锁竞争问题。内存碎片问题而malloc也是一个内存池,它解决的问题就是1和3,他不考虑在多线程环境下锁的竞争问题。
2025-05-09 15:35:51
1244
36
原创 高并发内存池(一):项目简介+定长内存池的实现
这个项目是实现一个高并发的内存池。它的原型是google的一个开源醒目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的线程内存管理,用于替代系统的相关内存分配函数(malloc,free)。这个项目是对tcmalloc的一个简化版,是对tcmalloc的学习,实现一个我们自己的高并发内存池。在该项目中涉及到的C++知识包括数据结构(链表,哈希桶),操作系统内存管理,单例模式,多线程 以及互斥锁等等。
2025-05-07 23:29:07
1261
29
原创 【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
GET方法:获取静态资源或者网页提交参数,以uri形式提交GET提交参数一般不建议太长,因为uri长度是有限的GET传参,参数是会显示出来的。POST方法:提交参数,以正文部分参数参数不会回显,相对私密不管是GET还是POST,都是明文传送,可以抓取,是不安全的。要做到真正的安全,必须要把报文进行加密,就要用到https协议。是用来负责会话管理与会话保持的。是HTTP的附加功能,不严格属于HTTP。
2025-05-02 16:25:42
1302
39
原创 【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
虽然说,应用层协议是需要我们程序猿自己定的。但是实际上,已经有大佬们定义了一些现成的,非常好用的应用层协议,供我们直接使用。HTTP(超文本传输协议 )就是其中之一。在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或传输超文本(如HTML)。
2025-04-25 20:22:20
2006
38
原创 美团2024年春招第一场笔试 C++
如果我们开始将所有节点都初始化好,那么就会超出内存限制,那么就和使用vector一样了,甚至占用的内存比vector还要大,所以我们不能一次性就初始还所有节点。但是对于op=1删除朋友关系操作,比较困难,因为并查集擅于进行 添加关系操作的,不好处理删除节点关系。这也就是map不会超出内存限制而vector会超出内存限制的原因。统计元字符中 有多少个M和T,再加上最多可以修改 多少个即可。所以在删除朋友关系这里出现了问题。
2025-04-21 20:35:29
1296
36
原创 贪心算法学习C++
题目连接:45. 跳跃游戏 II - 力扣(LeetCode)【题目描述】在给定的一个nums数组中,nums[i]表示从当前i位置最多可以向后跳跃nums[i]个位置。问跳跃到最后 数组最后一个元素的最少跳跃次数???【贪心】nums=[2,3,1,1,4,2,6,7,1]。还是以这个数组为例。第一次的起跳位置是数组下标为0的位置。经过一次跳跃之后,可以到达3或者1,此时的位置是第二次起跳位置,也就是说第二次起跳的位置是3或者1。同理,假设3为第二次起跳的位置 ,那么可以到达【1,1,4】,假设1为第二次
2025-04-16 18:37:16
1645
35
原创 【Linux网络编程】TCP Echo Server的实现
这次的echo server代码的编写,我遇到的问题是客户端代码运行到connect就停止了,也就是创建完套接字就阻塞住了,没有执行 建立连接以及后序的代码。找了半天才发现是服务器端的端口号初始化时出现了问题,裂开!!!
2025-04-14 21:00:20
1379
39
原创 【Rust学习】Rust数据类型,函数,条件语句,循环
println!("x 的值为 : {}", x);println!("y 的值为 : {}", y);
2025-04-05 14:01:04
1429
10
原创 【Rust学习】Rust环境搭建和Rust基础语法
rustup-init.exe 是 Rust 的安装和管理工具,默认情况下,它会同时安装这些工具:rustc,rust-std,cargo,rust-docs,rustfmt,clippy。其中,rustc 是 Rust 的编译工具,cargo 是 Rust 的包管理工具。使用这两个函数打印信息的时候,第一个参数是格式字符串,后面一串是可变参数,在C语言printf中"%+字母"表示占位符,而在Rust中,使用'{ }'可以使用相同名字声明新的变量,新的变量就会隐藏(shadow)之前的同名变量。
2025-04-05 11:06:28
1688
33
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅