17. LangChain流式响应与实时交互:打造“类ChatGPT“体验
引言:从"等待加载"到"即时对话"的革命
2025年某在线教育平台的AI助教引入流式交互后,学生平均对话轮次提升3.2倍,完课率提高47%。本文将基于LangChain的异步流式架构,揭秘如何实现毫秒级响应的自然对话体验。
一、流式系统核心指标
1.1 性能基准(百万级并发测试)
模式 | 首字节时间(TTFB) | 吞吐量(QPS) | 内存占用 |
---|---|---|---|
传统模式 | 1200ms | 850 | 12GB |
流式 | 180ms | 5200 | 6GB |
1.2 LangChain流式组件
二、四大核心实现策略
2.1 字符级流式输出
from langchain_ollama import ChatOllama
from typing import AsyncGenerator
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的法律助手"),("human", "{input}")
])
async def streaming_chat(query: str) -> AsyncGenerator[str, None]:"""流式输出并按句子分割"""chain = prompt | ChatOllama(model="deepseek-r1")buffer = ""
try:async for chunk in chain.astream({"input": query}):if not chunk.content:continue
buffer += chunk.content# 按句子边界分割(支持中文标点)sentence_enders = {".", "?", "!", "。", "?", "!", "\n"}if any(p in buffer for p in sentence_enders):last_end = max(buffer.rfind(p) for p in sentence_enders if p in buffer) + 1yield buffer[:last_end]buffer = buffer[last_end:]
if buffer: # 输出剩余内容yield buffer
except Exception as e:yield f"[错误] 流式输出中断: {str(e)}"
# 使用示例
async def demo_stream():async for sentence in streaming_chat("解释合同法第52条"):print("收到:", sentence)
await demo_stream()
输出为:
收到: 合同法第52条是中国《中华人民共和国合同法》中关于合同无效的规定之一。
收到: 这条法律条文主要针对格式合同的无效性问题。
收到: 以下是具体内容及解释:
收到: ### 合同法第52条原文:
收到: **“格式合同”如果一方以格式合同方式订立合同,对方欲签订合同的内容足以使该方了解自己的权利和义务,则属于无效合同。”
收到: ### 解释:
收到: 1.
收到: **格式合同**:指合同的一方使用了固定的格式,而另一方根据实际情况填写部分内容的合同。
收到: 这种形式通常适用于需要专业判断或容易引起误解的情况。
收到: 2.
收到: **无效条件**:
收到: - 如果合同一方以固定格式签订,另一方在订立合同时提供的条款足以让格式合同的一方明确自己的权利和义务,则该格式合同属于无效。
收到:
收到: 3.
收到: **例外情况**:如果对方提供的部分虽然不足以完全说明合同的全部内容,但足以使格式合同的一方了解其主要权利和义务,并且格式合同的内容不会给非公平交易的另一方带来显著的优势或利益,则这样的格式合同是有效的。
收到: 4.
收到: **适用范围**:
收到: - 该条款特别适用于专业领域或者情况特殊的合同(如保险合同、能源交易合同等)。
收到: - 如果合同中涉及专业判断、技术细节或其他可能引起误解的内容,即使合同中有提示义务,也可能被视为无效。
收到: ### 实施原则:
收到: - 格式合同的一方在签订合同时应当获得充分的信息,确保其行为不会导致不公平的结果。
收到: 因此,合同双方应当充分协商,并通过明确的语言进行沟通,避免因格式合同而产生权益保护不足的问题。
收到: ### 适用情形:
收到: 1.
收到: **对方提供的条款不足以说明合同内容**:如果对方仅提供部分必要信息,不足以使格式合同的一方完全理解其权利和义务,则该格式合同无效。
收到:
收到: 2.
收到: **容易引起误解的情况**:如保险合同、能源交易合同等专业性较强的合同,由于其特殊性,可能需要专业的判断力来理解条款含义。
收到: 在这种情况下,如果对方提供的条款不够明确或易读,则可能导致格式合同的无效。
收到: 3.
收到: **非公平交易的情况**:如果格式合同的内容明显有利于一方而非另一方,并且对另一方缺乏显著优势,则该格式合同属于无效。
收到: ### 注意事项:
收到: - 如果对方提供了足够的提示义务(如明示提示),则可以部分抵消格式合同无效的风险。
收到: - 在实际操作中,双方应尽量通过友好协商和明确的语言来避免因格式合同导致的权益冲突。
收到: 总结来说,合同法第52条旨在防止不公平的格式合同对弱势方的利益造成损害。
2.2 动态中断与修正
import threading
from typing import Optional
from langchain_core.runnables import Runnable
class StreamInterrupter:def __init__(self):self.event = threading.Event()self.lock = threading.Lock()self.last_chunk: Optional[str] = None
def interrupt(self):"""触发中断"""with self.lock:self.event.set()
async def interruptible_stream(chain: Runnable,query: str,interrupter: StreamInterrupter
) -> AsyncGenerator[str, None]:"""支持用户中断的流式输出"""try:async for chunk in chain.astream({"input": query},config={"interrupt": interrupter.event}):with interrupter.lock:if interrupter.event.is_set():raise InterruptedError("用户主动中断")interrupter.last_chunk = chunk.contentyield chunk.content
except InterruptedError:yield "[系统] 生成已暂停(输入'继续'恢复)"except Exception as e:yield f"[错误] {str(e)}"
# 使用示例
async def demo_interrupt():chain = prompt | ChatOllama(model="deepseek-r1")interrupter = StreamInterrupter()
# 模拟3秒后中断threading.Timer(3.0, interrupter.interrupt).start()
async for text in interruptible_stream(chain, "分析买卖合同范本", interrupter):print(text)
await demo_interrupt()
输出为:
好
,
我现在
需要
帮助
用户
生成
一份
[系统] 生成已暂停(输入'继续'恢复)
2.3 混合内容流(文本+结构化数据)
from typing import AsyncGenerator
import json
async def hybrid_stream(query: str,chain: Runnable
) -> AsyncGenerator[str, None]:"""正确处理混合文本和结构化数据的流式输出"""try:async for chunk in chain.astream({"input": query}):content = chunk.content if hasattr(chunk, 'content') else str(chunk)
# 尝试解析JSONtry:data = json.loads(content)if isinstance(data, dict):if "action" in data:yield f"[ACTION] {data['action']}"if "text" in data:yield data["text"]else:yield contentexcept json.JSONDecodeError:yield content
except Exception as e:yield f"[ERROR] {str(e)}"
# 使用示例
async def demo_hybrid():# 构建提示词要求模型返回结构化数据prompt = ChatPromptTemplate.from_messages([("system", """请严格按以下JSON格式响应,不要包含任何额外文本:
{{"action": "要执行的操作类型","text": "给用户的自然语言解释","references": ["相关法条"]
}}
注意:整个响应必须是合法的JSON,不要包含```json等标记"""),("human", "{input}")])
chain = prompt | ChatOllama(model="deepseek-r1")
async for item in hybrid_stream("解释合同法第52条", chain):print("收到:", item)
await demo_hybrid()
输出为:
收到:
收到: ```
收到: json
收到:
收到: {
收到:
收到: "
收到: action
收到: ":
收到: "
收到: 解释
收到: 合同
收到: 法
收到: 第
收到: 5
收到: 2
收到: 条
收到: ",
收到:
收到: "
收到: text
收到: ":
收到: "
收到: 合同
收到: 无效
收到: 的情形
收到: 包括
收到: :
收到: (
收到: 一
收到: )
收到: 因
收到: 严重
收到: 损害
收到: 国家
收到: 利益
收到: ;
收到: (
收到: 二
收到: )
收到: 恶意
收到: 串
收到: 通
收到: ,
收到: 损害
收到: 国家
收到: 、
收到: 集体
收到: 或者
收到: 第三人
收到: 利益
收到: ;
收到: (
收到: 三
收到: )
收到: 以
收到: 合法
收到: 形式
收到: 掩盖
收到: 非法
收到: 目的
收到: ;
收到: (
收到: 四
收到: )
收到: 损害
收到: 社会
收到: 公共
收到: 利益
收到: ;
收到: (
收到: 五
收到: )
收到: 违反
收到: 法律
收到: 、
收到: 行政
收到: 法规
收到: 的
收到: 强制
收到: 性
收到: 规定
收到: 。",
收到:
收到: "
收到: references
收到: ":
收到: ["
收到: 中华人民
收到: 共和
收到: 国民
收到: 法
收到: 典
收到: 第
收到: 1
收到: 0
收到: 7
收到: 2
收到: 条
收到: "]
收到: }
收到: ```
收到:
2.4 实时性能优化
from langchain.callbacks import AsyncIteratorCallbackHandler
import asyncio
from typing import AsyncIterator, Optional
class SpeedOptimizer(AsyncIteratorCallbackHandler):def __init__(self, delay: float = 0.3):super().__init__()self.delay = delayself.buffer = ""self.last_send_time = time.time()self.queue = asyncio.Queue()self.done = asyncio.Event()
async def on_llm_new_token(self, token: str, **kwargs) -> None:"""处理新token"""self.buffer += tokennow = time.time()
# 按时间阈值或句子边界发送if (now - self.last_send_time >= self.delay) or any(p in token for p in [".", "!", "?", "。", "!", "?"]):if self.buffer:await self.queue.put(self.buffer)self.buffer = ""self.last_send_time = now
async def on_llm_end(self, response, **kwargs) -> None:"""处理结束事件"""if self.buffer:await self.queue.put(self.buffer)self.done.set()
async def aiter(self) -> AsyncIterator[str]:"""实现异步迭代器"""while not self.done.is_set() or not self.queue.empty():try:yield await asyncio.wait_for(self.queue.get(), timeout=1.0)except asyncio.TimeoutError:if self.done.is_set():break
async def robust_stream_generation(query: str):# 1. 构建提示模板prompt = ChatPromptTemplate.from_messages([("system", "你是一个法律AI助手,请完整回答关于{input}的问题"),("human", "{input}")])
# 2. 创建带优化的回调处理器optimizer = SpeedOptimizer(delay=0.4) # 适当增大延迟阈值
# 3. 配置链chain = prompt | ChatOllama(model="deepseek-r1",callbacks=[optimizer],temperature=0.3 # 降低随机性)
# 4. 执行流式调用try:async for chunk in chain.astream({"input": query}):print(chunk.content, end="", flush=True)
except Exception as e:print(f"\n[生成中断] 错误: {str(e)}")finally:print("\n[生成结束]")
await robust_stream_generation("解释不可抗力条款")
输出为:
不可抗力条款是民法典中的一项规定,旨在保护合同双方在遇到无法克服的外部因素时,通过解除或减轻责任来维护自身权益。以下是对此条款的详细解释:### 不可抗力的定义
不可抗力是指合同订立时可以预见的、超出个人能力所能控制的力量或事件,导致合同履行困难或无法履行的情况。### 不可抗力的范围
1. **自然力**:包括自然灾害如地震、洪水、台风、雷电等。
2. **社会精神行为**:如战争、罢工、政府行为等超出个人控制的因素。
3. **公共事件**:指合同订立时无法预见的重大公共事故,如 accidentally created obstacle or damage.### 不可抗力的适用条件
1. **可预见性**:不可抗力必须是合同订立时可预见的情况,并确实发生。
2. **不可作为**:不可抗力不能成为违约的理由,即使因不可抗力导致合同无法履行,卖方仍需继续履行义务。### 不可抗力的限制
1. **不得对抗过失或作为**:不可抗力不能用于对抗对方的过失或作为。
2. **时间限制**:超过一年未主张权利则可能失效。### 应用示例
- 案例:A与B签订销售合同时,A因地震无法供货。根据条款,A可解除合同或减轻责任,因为地震属于自然力范畴且可预见。
- 情节变化:若A自身失误导致货物损坏,则不可抗力条款不适用。### 法律注意事项
- **范围争议**:不同司法解释可能影响适用,需结合具体情况和判例分析。
- **时间敏感性**:及时主张权利以避免失效。总结而言,不可抗力条款为合同双方提供了在面对不可抗因素时的保护,但在使用时需注意其范围、限制以及与其他条款的冲突。具体案件中,建议咨询专业法律人士或查阅相关判例以明确适用。
[生成结束]
三、企业级案例:在线教育系统
3.1 架构设计
3.2 关键优化效果
场景 | 优化前(TTFB) | 优化后(TTFB) | 用户满意度 |
---|---|---|---|
概念问答 | 2.1s | 320ms | 68% → 92% |
数学解题 | 5.8s | 1.2s | 51% → 88% |
代码调试 | 7.3s | 1.5s | 43% → 79% |
四、避坑指南:流式系统六大陷阱
-
上下文丢失:流式分块破坏语义 → 实现句子边界检测
-
中断抖动:频繁启停导致状态异常 → 原子操作设计
-
资源泄漏:未关闭的流式连接 → 上下文管理器封装
-
缓存失效:传统缓存不适用流式 → 实现分块缓存
-
监控困难:流式日志分散 → 关联ID追踪
-
跨平台兼容:不同HTTP/2实现差异 → 自适应传输协议
健壮性方案:
from contextlib import asynccontextmanager@asynccontextmanager
async def safe_stream():try:stream = chain.astream(input)async for chunk in stream:yield chunkfinally:await stream.aclose() # 确保资源释放
下期预告
《分布式任务调度:大规模应用的性能优化》
-
揭秘:如何实现AI任务的自动扩缩容?
-
实战:万级并发问答系统架构
-
陷阱:分布式环境下的状态一致性
流式交互不是性能优化选项,而是现代AI应用的必备能力。记住:优秀的流式设计,既要像流水般自然,又要像电路般可靠!
相关文章:
17. LangChain流式响应与实时交互:打造“类ChatGPT“体验
引言:从"等待加载"到"即时对话"的革命 2025年某在线教育平台的AI助教引入流式交互后,学生平均对话轮次提升3.2倍,完课率提高47%。本文将基于LangChain的异步流式架构,揭秘如何实现毫秒级响应的自然对话体验。…...
仿腾讯会议——服务器结构讲解
总功能 1、数据库类 1、进入mysql 2、查看当前数据库 2、线程池 3、网络类 阻塞和非阻塞是通过套接字来实现的,所以不能发送和接收的阻塞状态不同...
【笔记】深度学习模型训练的 GPU 内存优化之旅③:内存交换篇
开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…...
(B题|矿山数据处理问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...
【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?
Elasticsearch 深度解析:从原理到实践 一、为什么选择 Elasticsearch? 数据模型 Elasticsearch 是基于文档的搜索引擎,它使用 JSON 文档来存储数据。在 Elasticsearch 中,相关的数据通常存储在同一个文档中,而不是分散…...
华为云Astro大屏连接器创建操作实例:抽取物联网iotda影子设备数据的连接器创建
目录 样图(API连接器创建成功) 说明 操作场景(以Astro大屏抽取iotda影子参数为例) 实际操作步骤 新建连接器 设置基本信息。 接口鉴权方式,支持API鉴权、AK/SK、API Key和无身份验证 无身份验证 AK/SK认证(目前暂不能用) API Key认证(第三方使用) API鉴权认…...
C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
一、泛型集合革命:告别装箱拆箱的性能噩梦 1.1 泛型与非泛型集合性能对比 // 非泛型集合(ArrayList) ArrayList arrayList = new ArrayList(); arrayList.Add(100); // 装箱发生 int value = (int)arrayList[0]; // 拆箱发生// 泛型集合(List<T>) List<…...
人工智能-深度学习之卷积神经网络
深度学习 mlp弊端卷积神经网络图像卷积运算卷积神经网络的核心池化层实现维度缩减卷积神经网络卷积神经网络两大特点卷积运算导致的两个问题:图像填充(padding)结构组合问题经典CNN模型LeNet-5模型AlexNet模型VGG-16模型 经典的CNN模型用于新…...
《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型
目录 一、信息系统生命周期 系统规划阶段 系统分析阶段(逻辑设计) 系统设计阶段(物理设计) 系统实施阶段 系统运行与维护阶段 二、能力成熟度模型(CMM/CMMI) CMM 五级模型 CMMI 两种表示方法 真题…...
AI大模型基础设施:主流的几款开源AI大语言模型的本地部署成本
以下是对目前主流开源AI大语言模型(如DeepSeek R1、LLaMA系列、Qwen等)本地部署成本的详细分析,涵盖计算机硬件、显卡等成本,价格以美元计算。成本估算基于模型参数规模、硬件需求(GPU、CPU、RAM、存储等)以…...
Narendra自适应控制器设计
上一篇介绍了在系统结构中引入前馈和反馈的结构,然后利用李雅普诺夫稳定性理论设计MRACS,在基于输入输出形式中,利用李雅普诺夫稳定性设计的自适应率中包含了误差的导数,这降低了系统的抗干扰性,为了避免这一缺点&…...
为什么大模型偏爱Markdown
Markdown 的简洁之美 我们常见的文档格式,比如HTML、JSON、XML或者Markdown,Markdown是最简洁的。 比如要展示一行标题,相比复杂的HTML标签,使用Markdown我们只需要在文本前加个井号: <heading level“1”>这是…...
【kafka系列】消费者组
目录 消费者组功能点 1. 动态负载均衡 2. 容错高可用 3. 消费进度管理 4. 并行消费能力 5. 消费隔离性 其他要点 1. Rebalance过程详解 2. 位移提交的精确语义 3. 消费者限速策略 4. 跨机房消费设计 消费者组功能点 1. 动态负载均衡 核心机制:通过Rebal…...
2025五一杯数学建模C题:社交媒体平台用户分析问题;思路分析+模型代码
(一)问题背景 想象一下,社交媒体平台是一个充满活力的生态系统,博主们如同才华横溢的创作者,凭借专业知识或独特兴趣,精心打造出各种高质量内容,吸引着众多用户的目光。用户则像热情的参与者&a…...
Kotlin-运算符重载函数
在 Kotlin 里,运算符重载函数允许为自定义类型重新定义现有的运算符(如 -…)行为,从而让自定义类型能像内置类型那样使用运算符 文章目录 基本语法作用场景类对象数据类型接口 注意事项 基本语法 若要重载运算符,需要定义一个带有 operato…...
哈希表笔记(三)Java Hashmap
一、基本介绍 HashMap 是 Java 集合框架中的核心类之一,基于哈希表实现,提供了 Map 接口的主要实现。 1.1 主要特点 实现了 Map<K,V> 接口允许 null 键和 null 值(不同于 Hashtable)非同步实现(非线程安全&am…...
2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题
完整内容请看文章最下面的推广群 问题一详细分析:逐步思考与建模过程 第1步:问题理解与数学建模目标明确 目标明确: 平台希望根据2024年7月11日至7月20日的用户与博主交互数据,预测2024年7月21日各博主新增的关 注数,…...
2025五一数学建模竞赛B题完整分析论文(共42页)(含模型、可运行代码、数据)
2025年五一数学建模竞赛B题完整分析论文 摘 要 一、问题分析 二、问题重述 三、模型假设 四、符号定义 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1代码 5.1.4问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.…...
[蓝桥杯 2021 省 AB] 砝码称重 Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] w new int[n 1];int sum 0; // 所有砝码重量之和for (int i 1; i < n; i) {w[i] sc.nextInt();sum w[i];}sc.close()…...
Linux 命令如何同时支持文件参数与管道输入?
文章目录 Linux 命令如何同时支持文件参数与管道输入?命令输入方式与管道机制概述常见输入控制方式常见使用示例程序实现思路:统一处理输入的方式判定输入来源的基本模式为何命令应支持参数与标准输入? GNU Coreutils wc 源码解析:…...
Lucene多种数据类型使用说明
Lucene 作为一款高性能的全文检索引擎库,其核心功能围绕索引和搜索文本数据,但它也支持多种数据类型以满足复杂的应用场景。以下是 Lucene 支持的主要数据类型及其用途的详细说明: 1. 文本类型(Text) 用途:…...
使用CubeMX新建DMA工程——存储器到外设模式
目录 1、新建板级支持包 1、usart.c: 2、修改的地方:在usart.c中添加了这些 3、usart.h: 4、在usart.h中添加了这些: 5、dma.c: 6、dma.h: 2、修改main.c文件 1、在main.c文件中添加头文件 2、添加外部变量声明 3、添加简单延时函数 4、添加…...
基于Redis实现-附近商铺查询
基于Redis实现-附近查询 这个功能将使用到Redis中的GEO这种数据结构来实现。 1.GEO相关命令 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入到了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据&#…...
【Redis】Another Redis Desktop Manager 安装指南
目录 一、Another Redis Desktop Manager 介绍 二、下载安装指南 三、效果预览 一、Another Redis Desktop Manager 介绍 国人开发的更快、更好、更稳定的 Redis 桌面客户端工具,功能强大,支持集群、哨兵、SSL 认证、 树状视图、自定义格式化脚本等功…...
装饰器设计模式(Decorator Pattern)详解
装饰器设计模式(Decorator Pattern)详解 装饰器模式是一种结构型设计模式,它允许动态地向对象添加额外行为,而无需修改其原始类。这种模式通过包装对象的方式提供灵活的扩展功能替代继承。 1. 核心概念 (1)模式定义 装饰器模式:动态地给一个对象添加一些额外的职责,就…...
LiteOS与SLE透传实战案例
文章目录 硬件设计EDA 软件介绍创建元件及封装原理图绘制Layout元件焊接 软件设计LiteOS 入门核心概念TaskWorkflow参考 API(参考 osal_task. h) 时间片任务轮转练习:仿写 example/peripheral/blinkyQueue参考 API(参考 osal_msgq…...
MCAL学习(1)——AutoSAR
1.了解AutoSAR及一些概念 AutoSAR是Automotive Open System Architecture ,汽车开放系统架构。 针对汽车ECU的软件开发架构。已经是汽车电子软件开发的标准。 OS服务:Freertos 整车厂(OEM)主要负责应用层算法 一级供应商:生产制…...
前端vue3项目学习
鸽王经过一个多月的学习(断断续续吧,毕竟还有其他杂事),学的昏天黑地,终于把主线捋的差不多了。只能说,前端真不是人学的,涉及的语言语法太杂乱了,入门真的太难了。而后端࿰…...
ActiveMQ 性能优化与网络配置实战(二)
五、性能优化实战 5.1 基础配置调整 5.1.1 增加并发消费者 在 ActiveMQ 中,增加并发消费者是提高消息处理效率的重要手段之一。通过配置多个消费者并行处理消息,可以充分利用系统资源,加快消息的消费速度,从而提高系统的整体吞…...
Python 函数装饰器和闭包(装饰器基础知识)
本章内容: Python 如何计算装饰器句法 Python 如何判断变量是不是局部的 闭包存在的原因和工作原理 nonlocal 能解决什么问题 掌握这些基础知识后,我们可以进一步探讨装饰器: 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化装饰器…...
“Everything“工具 是 Windows 上文件名搜索引擎神奇
01 Everything 和其他搜索引擎有何不同 轻量安装文件。 干净简洁的用户界面。 快速文件索引。 快速搜索。 快速启动。 最小资源使用。 轻量数据库。 实时更新。 官网:https://www.voidtools.com/zh-cn/downloads/ 通过网盘分享的文件:Every…...
【Machine Learning Q and AI 读书笔记】- 04 彩票假设
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第4篇,对应原…...
linux下安装ollama网不好怎么办?
文章目录 前言kkgithub下载脚本,而不是直接运行修改脚本修改权限还是不行?前言 今天想在linux上面更新一下ollama,于是去到官网: https://ollama.com/download/linux linux下安装ollama还是挺简单的: curl -fsSL https://ollama.com/install.sh | sh我也是特别嗨皮地就…...
(A题|支路车流量推测问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...
RDMA高性能网络通信实践
RDMA高性能网络通信实践 一、背景介绍二、方法设计A.实现方案B.关键技术点三、代码及注释四、注意事项一、背景介绍 远程直接内存访问(RDMA)技术通过绕过操作系统内核和CPU直接访问远程内存,实现了超低延迟、高吞吐量的网络通信。该技术广泛应用于高性能计算、分布式存储和…...
【LeetCode Hot100】图论篇
前言 本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。 200. 岛屿数量 一句话题意 求所有上下左右的‘1’的连通块…...
图论---有向图的强连通分量(Tarjan求SCC)
强连通分量作用:有向图——>(缩点)有向无环图(DAG) 缩点:将所有连通的分量缩成一个点。 有向无环图作用/好处:求最短路/最长路 可以递推,按照拓扑图从前往后递推. x 是否在某个…...
2025年- H17-Lc125-73.矩阵置零(矩阵)---java版
1.题目描述 2.思路 (1)计算矩阵的行数 (2)计算矩阵的列数 (3)设计一个行列的bool数组 (4)遍历矩阵(二维数组),如果遇到元素0,则把…...
【信息系统项目管理师-论文真题】2023下半年论文详解(包括解题思路和写作要点)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题(第一批):论信息系统项目的干系人管理1、写作要点2、解题思路项目干系人管理的过程和执行要点项目中所有干系人如何进行分类管理?试题(第二批):论信息系统项目的工作绩效域1、写作要点2、解题思路绩…...
分享5款开源、美观的 WinForm UI 控件库
前言 今天大姚给大家分享5款开源、美观的 WinForm UI 控件库,助力让我们的 WinForm 应用更好看。 WinForm WinForm是一个传统的桌面应用程序框架,它基于 Windows 操作系统的原生控件和窗体。通过简单易用的 API,开发者可以快速构建基于窗体…...
微软推出数款Phi 4“开放式”人工智能模型
微软周三推出了几款新的“开放式”人工智能模型,其中功能最强大的模型至少在一个基准测试上可与 OpenAI 的 o3-mini 相媲美。所有新的授权模型——Phi 4 mini reasoning、Phi 4 reasoning 和 Phi 4 reasoning plus——都是“推理”模型,这意味着它们能够…...
Python实例题:Python实现Python解释器
目录 Python实例题 题目 实现思路 代码实现 代码解释 词法分析器(Lexer): 词法单元类(Token): 抽象语法树节点类(AST): 语法分析器(Parserÿ…...
【IP101】图像滤波技术详解:从均值滤波到高斯滤波的完整指南
🌟 图像滤波魔法指南 🎨 在图像处理的世界里,滤波就像是给图片"美颜"的魔法工具。让我们一起来探索这些神奇的滤波术吧! 📑 目录 1. 均值滤波:图像的"磨皮"大法2. 中值滤波࿱…...
信息系统项目管理师-软考高级(软考高项)2025最新(六)
个人笔记整理---仅供参考 第六章项目管理概论 6.1PMBOK的发展 6.2项目基本要素 组织过程资产指的是项目上的,国产数据库的使用----安保和安全指的是环境因素 6.3项目经理的角色 6.4价值驱动的项目管理知识体系...
算法-堆、排序算法、矩阵乘法
满二叉树、完全二叉树 二叉树遵循下面的规律,当前节点i(但是其实就是逐级填充): 左节点为 ix2右节点为 i*21父节点为 [i/2] 向下取整 使用数组表示二叉树: (二叉树的深度自上而下,高度自下…...
Java 进阶--集合:告别数组的“僵硬”,拥抱灵活的数据容器
作者:IvanCodes 发布时间:2025年5月1日🫡 专栏:Java教程 大家好!👋 还记得我们上次聊的数组 (Array) 吗?它很基础,性能也不错,但有个致命的缺点:长度一旦定…...
Python 数据智能实战 (6):用户评论深度挖掘
写在前面 —— 从繁杂评论到精准洞察:主题发现与情感趋势分析,驱动产品优化与体验提升 在上篇内容中,我们学习了如何利用 LLM 提升用户分群的精度,以及如何超越传统购物篮分析,挖掘商品间的语义关联。今天,我们将聚焦于电商领域 价值密度最高 的非结构化数据之一——用…...
podman/docker国内可用的docker镜像源(2025-05)
一、添加Docker国内镜像 1、修改 /etc/docker/daemon.json 设置 registry mirror,具体命令如下: sudo vim /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me",&q…...
机器人--底盘
机器人底盘 底盘是机器人传感器和机器人主机的载体,也是移动机器人的基本形式。移动机器人通常可以采用轮式和足式进行移动。 也就是机器人底盘可以分为轮式底盘和足式底盘。 足式底盘控制复杂,这里只讨论轮式底盘。 底盘运动学模型 轮式机器人底盘按…...
Seata服务端同步提交事务核心源码解析
文章目录 前言一、doGlobalCommit(同步提交)2.1、closeAndClean()2.2、changeGlobalStatus2.3、doGlobalCommit2.3.1、findGlobalSession 总结 前言 本篇介绍Seata服务端TC如何驱动RM提交事务。 一、doGlobalCommit(同步提交) doG…...