LangGraph实战:如何通过中断机制实现高效人机协同
1. 什么是人机协同从“自动驾驶”到“人机共驾”大家好我是老张在AI和智能硬件这行摸爬滚打了十几年。今天想和大家聊聊一个听起来有点“高大上”但实际上非常接地气的概念人机协同也就是Human-in-the-loop。你可以把它想象成汽车的“自动驾驶”和“人工驾驶”的结合。完全自动驾驶听起来很酷但在复杂的城市路况下我们心里总有点不踏实对吧这时候如果系统能在关键路口、遇到突发状况时主动把方向盘交给你让你来做最终判断是不是感觉安全多了人机协同就是这种“人机共驾”的模式。它不是让AI完全取代人也不是让人去干所有重复的活而是让AI和人类各自做自己最擅长的事AI负责快速处理海量信息、识别固定模式、生成初步方案或草稿。它就像不知疲倦的副驾驶帮你把路况信息、导航路线都规划好。人类负责做最终的决策、处理伦理道德问题、理解复杂微妙的情境、对AI的产出进行质量把关。你就是那个手握方向盘、对最终结果负责的司机。我见过太多项目一开始追求“全自动”结果AI在遇到训练数据之外的场景时就会产生一些让人啼笑皆非甚至有风险的输出。比如一个自动生成营销文案的AI可能会不小心写出有歧义或者不符合品牌调性的句子。这时候如果能在发布前“踩一脚刹车”让编辑看一眼问题就解决了。所以人机协同的核心目标非常明确提高输出质量、增强可控性、处理AI搞不定的边缘情况并且通过人类的反馈让AI越用越聪明。这不仅仅是技术方案更是一种务实的设计哲学。2. LangGraph的中断机制给AI工作流装上“暂停键”那么在LangGraph这个强大的AI工作流编排框架里我们怎么实现这种“踩刹车”和“交还控制权”的操作呢答案就是它的中断机制。你可以把LangGraph构建的工作流想象成一条精心设计的自动化流水线。流水线上有多个工位节点物料数据状态依次经过。中断机制就是在你指定的工位上安装了一个红色的暂停按钮。这个机制主要由三个核心部分组成我结合自己的项目经验给大家拆解一下### 2.1 中断主动按下暂停键中断是主动触发的动作。在代码里你只需要在某个节点函数中调用interrupt()函数工作流就会立刻在这里暂停。这就像流水线上的工人发现了一个可疑零件他按下暂停按钮整个生产线停下来等待质检员来处理。interrupt()函数可以携带一个参数这个参数可以是任何能转换成JSON的信息比如一段提示文本、一个需要审核的数据对象。这个信息会被“抛”出工作流告诉外部的系统比如你的Web后台或前端界面“嘿我这儿需要人工介入这是具体情况。”### 2.2 检查点给当前状态拍张“快照”光暂停还不够。流水线停了但如果线上的半成品状态没保存等会儿重启时从哪开始会不会乱套这就是检查点的作用。当你调用interrupt()时LangGraph会通过你配置的检查点器自动将当前整个工作流的状态完整地保存下来。这个状态包括所有变量的值、消息历史、工具调用结果等等。这就像给暂停时的流水线拍了一张高清全景照片。检查点器有多种选择我后面会详细讲。简单来说开发时可以用内存型的速度快但生产环境一定要用数据库比如PostgreSQL来持久化保存这样即使服务器重启状态也不会丢失。### 2.3 恢复收到指令后继续运行人工处理完成后你需要告诉工作流“好了可以继续了。” 这时你需要再次调用工作流但传入的不再是普通输入而是一个特殊的Command对象里面包含了resume指令以及人工提供的输入数据。工作流收到这个指令后会从检查点加载之前保存的状态然后从那个被中断的节点的开头重新开始执行。注意是重新执行整个节点函数而不是从中断的那行代码接着走。当代码再次执行到interrupt()时这次它不会真的暂停而是直接返回你通过Command(resume...)传入的那个值然后节点继续执行后续逻辑。这个“中断-保存-恢复”的闭环就是LangGraph实现人机协同的技术基石。它让AI工作流从一条傻跑的直线变成了一个可以随时与人交互的智能循环。3. 手把手实战构建一个带人工审核的AI工作流理论说再多不如动手写段代码。下面我以一个内容生成与审核的场景为例带大家一步步实现一个完整的人机协同工作流。假设我们要做一个AI辅助写周报的系统AI生成初稿后必须经过人工确认才能发送。### 3.1 第一步定义工作流的状态与节点任何LangGraph工作流的第一步都是定义“状态”。状态就是一个字典装着工作流运行过程中所有需要记住的东西。from typing import Annotated, TypedDict from langgraph.graph.message import add_messages # 定义状态包含消息历史和生成的周报内容 class WeeklyReportState(TypedDict): messages: Annotated[list, add_messages] # 对话历史 report_draft: str # 周报草稿 status: str # 状态draft, pending_review, approved, rejected接下来我们定义几个节点。节点就是工作流中的一个个步骤。from langgraph.types import interrupt, Command from langchain_openai import ChatOpenAI # 初始化大模型 llm ChatOpenAI(modelgpt-4) def generate_report_node(state: WeeklyReportState): AI生成周报草稿的节点 # 基于对话历史让AI生成周报 prompt f根据以下对话历史生成一份工作周报摘要{state[messages]} response llm.invoke(prompt) # 更新状态 new_state { report_draft: response.content, status: pending_review # 状态变为待审核 } return new_state def human_review_node(state: WeeklyReportState): 人工审核节点这里会触发中断 # 将需要审核的内容通过interrupt“抛”出去 # 这个dict会出现在外部的调用结果里 decision interrupt({ action: review_weekly_report, draft_content: state[report_draft], instruction: 请审核此周报草稿输入 approve 批准或输入修改意见。 }) # 当工作流被恢复时decision变量就是你传入的resume值 return {human_feedback: decision}### 3.2 第二步组装工作流并配置持久化有了节点我们就像拼乐高一样把它们组装起来并指定执行顺序。from langgraph.graph import StateGraph, START, END from langgraph.checkpoint.memory import MemorySaver # 创建图构建器 builder StateGraph(WeeklyReportState) # 添加节点 builder.add_node(generate, generate_report_node) builder.add_node(review, human_review_node) # 添加边定义执行顺序开始 - 生成 - 审核 - 结束 builder.add_edge(START, generate) builder.add_edge(generate, review) builder.add_edge(review, END) # 编译图并配置检查点器这里用内存型方便演示 checkpointer MemorySaver() graph builder.compile(checkpointercheckpointer)### 3.3 第三步运行、中断与恢复现在让我们来运行这个工作流并模拟人工介入的过程。# 配置一个线程ID用于唯一标识这次会话 config {configurable: {thread_id: user_123_week_45}} # 1. 启动工作流输入一些原始信息 input_messages [{role: user, content: 我这周完成了项目A的测试和团队开了三次会。}] initial_result graph.invoke({messages: input_messages}, configconfig) print(AI生成的周报草稿已保存。) print(f当前状态: {initial_result.get(status)}) # 2. 检查是否发生了中断 if __interrupt__ in initial_result: interrupt_data initial_result[__interrupt__][0].value print(f\n[系统中断] 需要人工审核{interrupt_data[instruction]}) print(f待审内容{interrupt_data[draft_content][:200]}...) # 预览前200字 # 模拟人工在前端界面看到后做出决策 human_decision approve # 假设人工点击了“批准” # human_decision 这里需要补充项目B的进度 # 或者输入修改意见 # 3. 带着人工决策恢复工作流 resume_command Command(resumehuman_decision) final_result graph.invoke(resume_command, configconfig) print(f\n人工决策{human_decision}) print(f最终状态{final_result.get(status)}) print(f记录的人工反馈{final_result.get(human_feedback)})通过这段代码你就能看到一个完整的人机协同流程AI生成 - 自动暂停 - 等待人工 - 人工输入 - 继续执行。在实际项目中interrupt抛出的数据会被你的后端API接收然后渲染到一个待办任务列表里等待真实用户去处理。4. 四大典型应用场景与代码剖析中断机制非常灵活可以用在各种需要“把关”的地方。我结合过去做过的项目给大家分享几个最实用的场景和关键代码片段。### 4.1 场景一内容安全与发布审核这是最直接的需求。AI生成的文章、营销文案、客服回复在公开发布前必须经过人工审核确保内容安全、合规、符合品牌调性。def content_moderation_node(state: State): 内容审核节点 generated_content state[ai_generated_post] # 可以加入一些自动化的初步过滤规则 risky_keywords [敏感词A, 敏感词B] if any(keyword in generated_content for keyword in risky_keywords): # 自动标记为高风险必须人工审核 interrupt_flag high_risk else: # 低风险内容可以设置概率性抽样审核 interrupt_flag random_check # 触发中断将内容和审核原因传给人工 moderator_decision interrupt({ type: content_moderation, content: generated_content, risk_level: interrupt_flag, channel: state[publish_channel] # 发布渠道不同审核标准可能不同 }) # 根据审核结果更新状态 if moderator_decision approve: return {status: approved_for_publishing} elif moderator_decision edit: # 人工可能直接返回了修改后的文本 return {final_content: moderator_decision[edited_text]} else: # reject return {status: rejected, rejection_reason: moderator_decision[reason]}### 4.2 场景二金融交易与风险控制在金融科技领域AI可以监控交易、识别异常模式但最终的放行或拦截决策必须由风控人员做出。def fraud_detection_node(state: State): 欺诈交易检测节点 transaction state[current_transaction] user_profile state[user_profile] # AI模型评估风险分数 risk_score ai_risk_model.predict(transaction, user_profile) if risk_score 0.8: # 高风险阈值 # 高风险交易必须中断等待人工确认 action interrupt({ alert: 高风险交易待审核, transaction_id: transaction[id], amount: transaction[amount], risk_score: risk_score, suspicious_reasons: [异地登录, 大额异常] # AI分析出的原因 }) if action block: # 人工确认拦截 block_transaction(transaction[id]) return {action: blocked, by: human} elif action allow: # 人工确认放行 return {action: proceed} else: # mark_for_review # 标记但不立即阻断允许后续分析 return {action: flagged} else: # 低风险自动放行 return {action: auto_approved}### 4.3 场景三工具调用前的确认当AI试图调用某些具有“副作用”的工具时比如发送邮件、写入数据库、调用支付API中断机制可以确保人类知情并同意。from langchain.tools import tool from langgraph.types import interrupt tool def send_email(to: str, subject: str, body: str): 发送邮件工具内置中断 # 在真正执行前中断请求确认 approval interrupt({ tool: send_email, parameters: {to: to, subject: subject, body: body}, warning: 即将向外发送邮件请确认收件人和内容。 }) if approval.get(decision) approve: # 人工可能还修改了参数 final_to approval.get(edited_to, to) final_body approval.get(edited_body, body) # 调用真实的邮件发送API return mail_api.send(final_to, subject, final_body) else: raise Exception(邮件发送被用户取消。)### 4.4 场景四复杂决策的路由有时AI无法确定下一步该走哪条分支它可以把几种可能的选项和它的分析呈现给人让人来做选择。def decision_router_node(state: State): 决策路由节点 user_query state[last_user_message] # AI分析出几种可能的处理路径 possible_paths [ {id: path_sales, desc: 用户想咨询产品价格转销售客服。}, {id: path_tech, desc: 用户遇到技术问题转技术支持。}, {id: path_complaint, desc: 用户情绪不满可能是投诉转高级客服。} ] # AI可以附上自己的置信度分析 ai_confidence [0.7, 0.2, 0.1] # 分别对三条路径的置信度 # 将决策权交给人 chosen_path interrupt({ task: route_customer_service, query: user_query, options: possible_paths, ai_suggestion: possible_paths[0][id], # AI推荐第一条 confidence: ai_confidence }) # 根据人的选择返回不同的指令引导工作流走向不同的分支 return Command(gotochosen_path)5. 深入原理检查点与持久化存储的选择理解了怎么用我们还得稍微深入一点看看背后的支撑技术尤其是检查点器这关系到你系统的稳定性和可扩展性。我踩过不少坑总结下来就一句话开发用内存生产必须上数据库。### 5.1 检查点器的工作原理当你调用interrupt()时LangGraph会抛出一个特殊的异常。运行时捕获到这个异常后会做两件事将当前整个State对象以及节点执行位置等元数据序列化通常是JSON。调用你配置的检查点器的put_state方法将这个序列化后的状态存储起来。存储时会以一个唯一的thread_id作为键。恢复时就用同样的thread_id去检查点器里把状态找出来反序列化然后从对应节点的开头重新执行。### 5.2 三种主要的检查点器对比检查点器类型导入方式优点缺点适用场景内存检查点器from langgraph.checkpoint.memory import MemorySaver零配置速度最快适合快速原型验证。数据在内存中进程重启后状态全部丢失。无法跨多台服务器共享状态。本地开发、测试、Demo演示。SQLite检查点器from langgraph.checkpoint.sqlite import SqliteSaver轻量级单文件数据持久化到磁盘。配置简单适合单机小应用。并发写入性能较差不适合高并发场景。无法用于分布式部署。小型生产应用、单机部署的工具、内部系统。PostgreSQL检查点器from langgraph.checkpoint.postgres import PostgresSaver支持高并发数据持久化且可靠。支持分布式部署多台服务器可共享状态。需要单独维护PostgreSQL数据库实例配置稍复杂。中大型生产环境、高可用性要求的SaaS服务、分布式系统。### 5.3 生产环境配置示例这里给出一个生产环境使用PostgreSQL作为检查点存储的配置示例这也是我最推荐的方案。from langgraph.checkpoint.postgres import PostgresSaver import asyncpg import asyncio async def setup_production_checkpointer(): # 1. 创建数据库连接池 pool await asyncpg.create_pool( hostyour-db-host.com, port5432, userlanggraph_user, passwordsecure_password, databaselanggraph_checkpoints, min_size5, # 连接池最小连接数 max_size20 # 连接池最大连接数 ) # 2. 创建PostgresSaver实例 checkpointer await PostgresSaver.from_conn_pool(pool) # 3. 可选初始化数据库表如果还没创建的话 await checkpointer.setup() return checkpointer # 在异步上下文中使用 async def main(): checkpointer await setup_production_checkpointer() graph builder.compile(checkpointercheckpointer) # ... 后续使用graph使用连接池而不是单连接能极大提升在高并发下的性能。记得在应用关闭时妥善关闭连接池。6. 避坑指南中断机制的最佳实践与常见陷阱用了这么多年我总结了一些“血泪教训”。遵循这些最佳实践能让你少走很多弯路。### 6.1 中断的粒度要适中这是设计层面最容易犯的错误。中断太频繁每生成一句话都让人审核用户体验极差人也审到麻木。中断太稀疏AI一口气写完一篇长文再给人看如果方向错了修改成本巨大。我的经验在关键质量门禁和高风险操作前中断。比如文章的大纲生成后、最终发布前或者调用支付接口、删除数据库记录之前。给AI一定的自主空间但把好最后的出口。### 6.2 确保中断前后的操作是“幂等”的这是最重要的技术原则因为中断恢复后节点函数会从头重新执行。如果函数前半部分有非幂等的副作用比如向数据库插入一条新记录、调用一个计费API那么每次恢复都会重复执行这个操作造成数据重复或多次扣费。# ❌ 错误示例非幂等操作放在中断前 def process_order_node(state: State): order_id create_order_in_database(state[items]) # 每次恢复都会创建新订单 approved interrupt({order_details: state[items]}) if approved: charge_customer(order_id) # 可能重复扣款 return {order_id: order_id} # ✅ 正确示例将状态判断与中断前置 def process_order_node(state: State): # 先中断获取人工确认 approval_data interrupt({order_details: state[items]}) if approval_data[decision] approve: # 在确认后再执行非幂等操作 order_id create_order_in_database(state[items]) charge_customer(order_id) return {order_id: order_id, status: completed} else: return {status: cancelled}### 6.3 不要用try/except包裹interrupt调用interrupt()函数内部是通过抛出一个特殊异常来实现暂停的。如果你用try...except把它包住就会意外捕获这个异常导致中断信号无法传递到LangGraph运行时工作流就不会暂停。# ❌ 绝对不要这样做 def bad_node(state): try: result interrupt(等待输入) except Exception as e: # 这会捕获中断异常 print(f出错了: {e}) result default_value return {data: result} # ✅ 正确的做法让interrupt自由地抛出异常 def good_node(state): result interrupt(等待输入) # 放心运行时会在更高层捕获它 return {data: result}### 6.4 为人工界面提供清晰的上下文中断时抛出的数据最终是给真人看的。你不能只扔一段AI生成的晦涩文本过去。要像设计产品一样设计中断信息。# ✅ 好的中断信息设计 interrupt({ title: 周报发布审核, type: content_review, content_preview: state[report_draft][:500], # 提供预览 full_content_link: f/api/draft/{draft_id}, # 提供查看全文的链接 required_action: 请选择1. 批准发布 2. 退回修改 3. 拒绝, context: { author: state[author], generated_at: state[generated_time], ai_confidence_score: 0.92 }, metadata: { thread_id: config[configurable][thread_id], node_id: human_review_node } })好的中断信息应该包含任务标题、待审内容或链接、明确的操作指引、相关的背景信息。这样审核者才能快速理解情况并做出准确判断。7. 进阶技巧流式处理与复杂工作流编排当你掌握了基础用法后可以尝试一些更高级的玩法让交互更流畅工作流更智能。### 7.1 结合流式输出打造实时交互体验在需要人工审核的聊天机器人场景你可以一边流式输出AI的思考过程一边在需要时暂停等待输入。这能提供类似Copilot那样流畅的体验。from langgraph.types import Command config {configurable: {thread_id: stream_demo}} # 使用stream模式运行 for event in graph.stream( {messages: [{role: user, content: 帮我写封邮件然后发送给客户。}]}, configconfig, stream_mode[messages, updates] # 同时流式输出消息和状态更新 ): if event[0] messages: # 处理消息流 chunk event[1] if chunk.content: print(chunk.content, end, flushTrue) # 逐字打印AI回复 elif event[0] updates: # 处理状态更新流 chunk event[1] if __interrupt__ in chunk: print(\n\n[系统暂停] 需要您确认是否发送邮件。) # 在这里可以跳出循环等待前端用户输入 user_input input(请输入 yes 或 no: ) # 恢复工作流 resume_event graph.stream( Command(resume{decision: user_input}), configconfig, stream_mode[messages] ) # 继续处理恢复后的流...### 7.2 在工具内部使用中断除了在独立的“审核节点”中使用中断你还可以直接将中断内置于工具定义中。这样任何AI调用这个工具时都会自动触发审核流程。这种方式更模块化复用性更强。from langchain.tools import tool from langgraph.types import interrupt tool def update_database_record(record_id: str, new_data: dict): 更新数据库记录需要人工复核数据变更 # 中断将变更详情展示给人 approval interrupt({ operation: database_update, record_id: record_id, old_value: get_record_from_db(record_id), # 获取旧值用于对比 new_value: new_data, diff: calculate_diff(old_value, new_data) # 高亮显示差异 }) if approval[action] confirm: # 执行更新 return db.update(record_id, new_data) elif approval[action] edit: # 使用人工修改后的数据 return db.update(record_id, approval[edited_data]) else: return 操作已取消。### 7.3 实现多轮交互与输入验证中断不仅可以“一问一答”还可以实现多轮对话直到人工输入满足条件为止。比如让用户输入年龄如果输入的不是数字就提示重新输入。def collect_user_age_node(state: State): 收集用户年龄并验证输入 prompt 请输入您的年龄正整数 while True: # 每次循环都可能触发一次中断 user_input interrupt({prompt: prompt}) # 验证输入 try: age int(user_input) if age 0 and age 150: # 输入有效退出循环 return {user_age: age} else: prompt 年龄需在1-149之间请重新输入 except ValueError: prompt f{user_input} 不是有效的数字请重新输入年龄这个模式非常强大你可以用它来构建复杂的数据收集表单确保AI从人类那里获得的信息是结构化和有效的。从我这些年的实战来看LangGraph的中断机制是将AI从“玩具”变成“生产级工具”的关键一环。它没有削弱AI的能力而是通过引入人类的智慧和监督为AI系统装上了安全阀和导航仪。记住最好的AI系统不是完全自主的而是懂得在何时、以何种方式向人类“求助”的协作伙伴。希望这篇结合了大量代码和场景的分享能帮你真正掌握这项技术打造出既智能又可靠的AI应用。

相关新闻

Seedance 2.0 API安全接入五步法:从鉴权粒度控制到LLM输出归一化,附NIST SP 800-204B合规对照表

Seedance 2.0 API安全接入五步法:从鉴权粒度控制到LLM输出归一化,附NIST SP 800-204B合规对照表

第一章:Seedance 2.0 RESTful API 接入规范提示词模板分享为统一外部系统与 Seedance 2.0 平台的集成方式,本章提供一套可复用、结构清晰的 RESTful API 接入提示词模板。该模板专为 LLM 辅助开发场景设计,支持自动生成符合规范的请求构造、错…

2026/7/4 16:15:16 阅读更多 →
图片旋转判断惊艳效果展示:100张倾斜图自动识别与校正对比

图片旋转判断惊艳效果展示:100张倾斜图自动识别与校正对比

图片旋转判断惊艳效果展示:100张倾斜图自动识别与校正对比 本文展示的图片旋转判断技术,能够自动识别并校正倾斜图片,让歪斜的照片瞬间变正,效果惊艳实用。 1. 技术简介 图片旋转判断是一项实用的图像处理技术,能够自…

2026/5/17 5:32:31 阅读更多 →
Git-RSCLIP技术栈解析:从Gradio到PyTorch

Git-RSCLIP技术栈解析:从Gradio到PyTorch

Git-RSCLIP技术栈解析:从Gradio到PyTorch 1. 引言:遥感图像理解的新突破 Git-RSCLIP是一个专门针对遥感图像设计的图文检索模型,它让计算机能够"看懂"卫星图像和航空照片中的内容。想象一下,你有一张卫星拍摄的地面照…

2026/7/2 23:47:26 阅读更多 →

最新新闻

Go语言JWT认证实战:从原理到生产级安全实现

Go语言JWT认证实战:从原理到生产级安全实现

1. 项目概述:为什么Go和JWT是API安全的黄金搭档最近在重构一个微服务项目,认证模块的选型又让我重新审视了一遍JWT。说实话,在Go语言生态里做API认证,JWT几乎成了默认选项,但真正能把它用“安全”的团队并不多。大部分…

2026/7/4 17:10:57 阅读更多 →
嵌入式系统三重降压转换方案设计与优化

嵌入式系统三重降压转换方案设计与优化

1. 为什么需要三重降压转换方案在嵌入式系统和低功耗设备开发中,多电压域供电一直是个棘手问题。我最近接手的一个工业控制器项目就遇到了典型场景:主控MCU需要3.3V核心电压,传感器模块要求1.8V工作电压,而外围接口又得维持5V电平…

2026/7/4 17:10:57 阅读更多 →
基于YOLOv8的番茄叶片病变识别系统设计与实现

基于YOLOv8的番茄叶片病变识别系统设计与实现

1. 项目概述这个基于YOLOv8的番茄叶片病变识别系统是我在毕业设计期间完成的一个实用项目。作为一名计算机视觉方向的毕业生,我选择将深度学习技术应用于农业领域,解决传统病害检测方法效率低下的问题。系统能够自动识别番茄叶片上的多种常见病害&#x…

2026/7/4 17:08:57 阅读更多 →
Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持

Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持

Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https…

2026/7/4 17:08:57 阅读更多 →
QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程

QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程

QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过这样的烦恼?重要的二维码因为打印模糊、表面划痕或图…

2026/7/4 17:06:57 阅读更多 →
如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop …

2026/7/4 17:04:56 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻