当前位置: 首页 > article >正文

收藏 | 从零开始学LangGraph,构建能思考的Agentic RAG系统,小白也能轻松上手!

传统RAG检索系统存在检索质量差、无法处理查询歧义、无法自纠正错误等问题导致幻觉率高。Agentic RAG通过引入Think-Act-Observe循环实现主动推理和自我修正。文章详细介绍了Agentic RAG的设计哲学和核心能力并使用LangGraph框架进行实践展示了如何构建一个动态检索、自我反思、多工具协作的智能检索系统。通过LangGraph的状态管理、可视化调试等优势即使是小白也能轻松上手提升RAG系统的响应质量和用户体验。当RAG学会思考用LangGraph构建Agentic RAG系统完全指南2024年我们还在为能用的RAG系统欢呼2025年RAG已经成为企业AI的标配但到了2026年如果你还在用传统的线性RAG——检索、增强、生成——你可能正在浪费用户的时间。根据2025年的生产环境数据高达30%的RAG响应存在事实性错误而这些错误的根源几乎都指向同一个问题检索质量。这篇文章将带你从传统RAG的困境出发深入理解Agentic RAG的设计哲学并通过LangGraph构建一个真正会思考的检索系统。一、传统RAG的致命缺陷1.1 线性管道的脆弱性传统RAG的工作流程非常直观用户提问 → 向量检索 → 拼接上下文 → LLM生成回答这个流程看起来完美但实际生产中却处处踩坑问题一检索器装聋作哑当用户问Lilian Weng关于reward hacking的类型有什么观点时检索器可能只返回了reward hacking相关的片段却漏掉了types这个关键限定词。结果LLM基于不完整的信息生成了一个看似合理但完全偏离重点的回答。问题二查询歧义无法处理用户问那个产品怎么样——哪个产品传统RAG没有任何机制来澄清或细化查询只能硬着头皮检索然后生成一个模糊的回答。问题三错误无法自纠正当检索到的文档与问题无关时传统RAG没有意识到错误的能力。它只会忠实地把无关内容喂给LLM然后LLM会产生一个自信但错误的回答——这就是所谓的幻觉问题。1.2 为什么简单方案不够用你可能会想“那我们加个re-ranker或者调大top-k”这些都是治标不治本。真正的问题在于传统RAG是被动的而复杂问题需要主动的推理。就像一个只会按图索骥的图书管理员传统RAG从不质疑用户的查询从不反思检索结果的质量也从不主动寻找更多信息。而Agentic RAG就是要让系统具备这种主动性。二、什么是Agentic RAG2.1 从管道到循环范式的根本转变Agentic RAG的核心转变是从线性管道到推理循环。这不是简单的技术升级而是思维方式的根本改变。传统RAG的工作模式就像一个只会执行命令的流水线工人1.收到问题2.去仓库找资料3.把资料交给写手4.写手生成答案问题出在哪里每个环节都是盲执行。工人不会质疑问题是否清晰不会检查找来的资料是否相关更不会在发现问题后主动修正。Agentic RAG的工作模式则像一个有经验的咨询顾问5.先理解你的问题必要时追问澄清6.判断需要查哪些资料去哪里查7.拿到资料后评估是否真的有用8.如果资料不对换个角度再查9.确认信息可靠后才给出专业答案这就是从被动执行到主动推理的质变。2.2 Think-Act-Observe循环Agentic RAG的核心是Think-Act-Observe思考-行动-观察循环这个循环会持续进行直到系统认为已经获得足够信息来回答问题。Think思考LLM分析当前状态决定下一步做什么·这个问题需要查资料吗·用户真正想问的是什么·我现有的信息足够吗Act行动执行具体的操作·调用检索工具·改写查询词·选择合适的数据源Observe观察评估行动结果·检索到的文档相关吗·信息是否完整·需要进一步行动吗2.3 五大核心能力详解一个成熟的Agentic RAG系统具备以下五种核心能力它们共同构成了系统的智能能力1智能查询理解系统能够深入理解用户问题的真实意图而不是简单地匹配关键词。工作原理·意图识别分析问题是问什么、“怎么问”、“为什么问”·实体抽取识别问题中涉及的关键实体人名、产品名、概念等·复杂度评估判断问题是否需要多步推理或简单查询就能解决实际例子用户问那个产品怎么样→ 意图识别用户想了解某个产品 → 实体抽取那个没有指明具体产品 → 系统回复您指的是哪个产品能提供更具体的名称吗能力2动态检索策略系统不会用固定的检索策略而是根据问题类型动态选择。支持的策略·向量检索基于语义相似度适合概念性问题·关键词检索精确匹配术语适合事实查询·混合检索结合向量和关键词取长补短·多跳检索当结果不足时自动扩展搜索范围能力3自我反思与纠错当检索结果不理想时系统能够意识到问题并主动纠正。纠错机制·相关性评分判断检索到的内容是否真的有用·质量评估检查信息是否过时、是否有偏见·改写决策当文档不相关时决定如何改写查询能力4多工具协作系统不局限于向量数据库可以调用多种外部工具。常用工具·向量数据库存储文档的检索器·Web搜索API搜索实时信息·数据库查询查询结构化数据·计算工具执行数学运算·外部API调用第三方服务能力5记忆与上下文系统记住对话历史在后续交互中保持连贯性。记忆类型·短期记忆当前会话的上下文·长期记忆跨会话的历史信息·工作记忆中间推理步骤的保存2.4 Agentic RAG vs 传统RAG特性传统RAGAgentic RAG执行模式线性管道循环推理检索方式被动检索主动决策错误处理无法纠错自我反思工具支持单一向量库多工具协作幻觉率~30%5%响应延迟低略高什么时候选择Agentic RAG·检索失败时需要自动重试·答案不在知识库中时需要追问·需要多轮交互·对质量要求高2.5 核心架构组件一个完整的Agentic RAG系统通常包含以下组件查询分析器Query Analyzer·判断是否需要检索·识别查询意图和实体·生成检索策略检索器Retriever·向量相似度检索·关键词匹配·混合检索策略查询改写器Query Rewriter·扩展查询词·消除歧义·语义增强文档评分器Document Grader·评估文档相关性·过滤无关内容·生成质量信号回答生成器Answer Generator·基于有效上下文生成回答·标注引用来源·处理不确定情况2.6 为什么选择LangGraph在众多Agent框架中LangGraph有几个独特优势状态管理内置的状态机制让复杂的多步推理变得可控。每一步的状态变化都有迹可循便于调试和优化。可视化可以清晰地看到每一步的决策过程。出了问题一眼就能看出卡在哪一步。持久化支持会话记忆和断点恢复。长对话不会丢失上下文用户体验更连贯。灵活性既可以用预置模板快速开始也可以完全自定义。从简单到复杂平滑过渡。生产就绪支持流式输出、错误重试、并发控制等企业级特性。最重要的是LangGraph的设计哲学与Agentic RAG高度契合——用图来表示状态流转用节点来封装逻辑用边来定义决策。三、用LangGraph构建Agentic RAG3.1 环境准备首先安装必要的依赖pip install langgraph langchain langchain-openai chromadb你需要准备·OpenAI API Key或其他LLM服务·一个向量数据库本例使用Chroma3.2 定义核心组件Step 1: 创建向量检索器from langchain_openaiimportOpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstoresimportChroma from langchain.text_splitterimportRecursiveCharacterTextSplitter from langchain_community.document_loadersimportTextLoader# 加载文档loaderTextLoader(your_knowledge_base.txt)documentsloader.load()# 分割文档text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)splitstext_splitter.split_documents(documents)# 创建向量存储vectorstoreChroma.from_documents(documentssplits,embeddingOpenAIEmbeddings())retrievervectorstore.as_retriever(search_kwargs{k:5})Step 2: 定义检索工具from langchain.toolsimporttool tool def retrieve_documents(query: str)-str:从知识库中检索相关文档 docsretriever.invoke(query)return\n\n.join([doc.page_contentfordocindocs])retriever_toolretrieve_documentsStep 3: 初始化LLMfrom langchain.chat_modelsimportinit_chat_model llminit_chat_model(gpt-4.1,temperature0)3.3 构建状态图from langgraph.graphimportStateGraph, MessagesState, START, END from langgraph.prebuiltimportToolNode, tools_condition from langchain.messagesimportHumanMessage# 创建状态图workflowStateGraph(MessagesState)MessagesState 是LangGraph预置的状态类它包含一个messages列表用于存储对话历史。3.4 实现核心节点节点1: 查询生成/响应决策def generate_query_or_respond(state: MessagesState):让LLM决定是否需要检索 responsellm.bind_tools([retriever_tool]).invoke(state[messages])return{messages:[response]}节点2: 查询改写REWRITE_PROMPT 分析用户问题的语义意图生成一个更适合检索的改写版本。 原始问题{question}请生成一个改进后的问题要求1. 保留核心意图2. 添加可能的同义词3. 消除歧义 改写后的问题 def rewrite_question(state: MessagesState):改写原始问题以提高检索质量 questionstate[messages][0].content promptREWRITE_PROMPT.format(questionquestion)responsellm.invoke([{role:user,content:prompt}])return{messages:[HumanMessage(contentresponse.content)]}节点3: 文档评分from pydanticimportBaseModel, Field from typingimportLiteral class GradeDocuments(BaseModel):文档相关性评分 binary_score: strField(descriptionyes 如果文档相关no 如果不相关)GRADE_PROMPT 你是一个文档相关性评估器。 检索到的文档{context}用户问题{question}判断文档是否包含与问题相关的信息 只回答yes或no。 def grade_documents(state: MessagesState)-Literal[generate_answer,rewrite_question]:评估检索文档的相关性 questionstate[messages][0].content contextstate[messages][-1].content promptGRADE_PROMPT.format(questionquestion,contextcontext)graderllm.with_structured_output(GradeDocuments)responsegrader.invoke([{role:user,content:prompt}])ifresponse.binary_scoreyes:returngenerate_answerelse:returnrewrite_question节点4: 生成回答GENERATE_PROMPT 基于以下上下文回答用户问题。如果上下文中没有足够信息请明确说明。 上下文{context}问题{question}回答请标注信息来源 def generate_answer(state: MessagesState):基于检索到的上下文生成回答 questionstate[messages][0].content contextstate[messages][-1].content promptGENERATE_PROMPT.format(questionquestion,contextcontext)responsellm.invoke([{role:user,content:prompt}])return{messages:[response]}3.5 组装完整工作流# 添加节点workflow.add_node(generate_query_or_respond)workflow.add_node(retrieve, ToolNode([retriever_tool]))workflow.add_node(rewrite_question)workflow.add_node(generate_answer)# 设置入口workflow.add_edge(START,generate_query_or_respond)# 条件边决定是否检索workflow.add_conditional_edges(generate_query_or_respond, tools_condition,# 自动判断是否调用了工具{tools:retrieve, END: END# 如果不需要检索直接结束})# 条件边评估文档质量workflow.add_conditional_edges(retrieve, grade_documents# 返回 generate_answer 或 rewrite_question)# 回答后结束workflow.add_edge(generate_answer, END)# 改写后重新开始检索workflow.add_edge(rewrite_question,generate_query_or_respond)# 编译图graphworkflow.compile()3.6 执行和调试# 执行查询forchunkingraph.stream({messages:[{role:user,content:Lilian Weng关于reward hacking的类型有什么观点}]}):fornode, updateinchunk.items(): print(f {node} )update[messages][-1].pretty_print()print()输出示例generate_query_or_respond[调用工具: retrieve_documents]retrieve[检索到3篇文档]grade_documents[评分: no - 文档不相关]rewrite_question[改写为:Lilian Weng reward hacking types classification categorization]generate_query_or_respond[调用工具: retrieve_documents]retrieve[检索到5篇文档]grade_documents[评分:yes- 文档相关]generate_answer根据Lilian Weng的文章reward hacking主要有三种类型...四、进阶技巧与最佳实践4.1 多检索器协同复杂场景下你可能需要多个专业检索器tool def search_product_docs(query: str)-str:搜索产品文档returnproduct_retriever.invoke(query)tool def search_api_docs(query: str)-str:搜索API文档returnapi_retriever.invoke(query)tool def search_troubleshooting(query: str)-str:搜索故障排除指南returntroubleshoot_retriever.invoke(query)tools[search_product_docs, search_api_docs, search_troubleshooting]LLM会根据问题自动选择合适的工具。4.2 添加记忆能力使用LangGraph的checkpointer实现会话记忆from langgraph.checkpoint.memoryimportInMemorySaver checkpointerInMemorySaver()graphworkflow.compile(checkpointercheckpointer)# 执行时指定thread_idconfig{configurable:{thread_id:user_123}}resultgraph.invoke({messages:[...]}, config)4.3 流式输出对于长回答使用流式输出提升用户体验asyncforeventingraph.astream({messages:[...]},stream_modevalues):ifmessagesinevent: print(event[messages][-1].content,end,flushTrue)4.4 错误处理与重试为关键节点添加错误处理from tenacityimportretry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3),waitwait_exponential(multiplier1,min4,max10))def retrieve_with_retry(state: MessagesState): try:returnretrieve_documents(state)except Exception as e: print(f检索失败: {e}, 正在重试...)raise4.5 性能优化缓存检索结果from functoolsimportlru_cache lru_cache(maxsize1000)def cached_retrieve(query: str)-str:returnretriever.invoke(query)并行检索importasyncio async def parallel_retrieve(queries: list[str])-list[str]: tasks[async_retrieve(q)forqinqueries]returnawait asyncio.gather(*tasks)批量处理对于大量文档使用批量嵌入# 批量嵌入比逐个嵌入快10倍以上embeddingsOpenAIEmbeddings()batch_embeddingsembeddings.embed_documents([doc.page_contentfordocindocuments])五、常见问题与避坑指南5.1 检索质量差怎么办症状检索到的文档与问题无关解决方案10.检查分块策略chunk_size是否合适11.尝试混合检索向量关键词12.添加re-ranker重排序13.优化查询改写prompt5.2 响应太慢怎么办症状用户等待时间过长解决方案14.减少循环迭代次数设置最大重试次数15.使用更快的模型如GPT-4o-mini16.实现流式输出17.缓存常见查询5.3 幻觉仍然存在症状LLM生成错误信息解决方案18.强化文档评分逻辑19.在prompt中明确不知道就说不知道20.添加事实核查节点21.使用结构化输出强制引用来源5.4 状态管理混乱症状多轮对话中上下文丢失解决方案22.使用checkpointer持久化状态23.定期总结对话历史24.为每个用户使用独立的thread_id六、总结Agentic RAG代表了RAG技术的下一代演进——从被动的管道到主动的智能体。核心要点回顾传统RAGAgentic RAG线性流程循环推理被动检索主动决策无法纠错自我反思单一策略多工具协作LangGraph的优势·状态管理清晰·可视化调试友好·支持复杂控制流·生态成熟稳定最后对于正在迷茫择业、想转行提升或是刚入门的程序员、编程小白来说有一个问题几乎人人都在问未来10年什么领域的职业发展潜力最大答案只有一个人工智能尤其是大模型方向当下人工智能行业正处于爆发式增长期其中大模型相关岗位更是供不应求薪资待遇直接拉满——字节跳动作为AI领域的头部玩家给硕士毕业的优质AI人才含大模型相关方向开出的月基础工资高达5万—6万元即便是非“人才计划”的普通应聘者月基础工资也能稳定在4万元左右。再看阿里、腾讯两大互联网大厂非“人才计划”的AI相关岗位应聘者月基础工资也约有3万元远超其他行业同资历岗位的薪资水平对于程序员、小白来说无疑是绝佳的转型和提升赛道。对于想入局大模型、抢占未来10年行业红利的程序员和小白来说现在正是最好的学习时机行业缺口大、大厂需求旺、薪资天花板高只要找准学习方向稳步提升技能就能轻松摆脱“低薪困境”抓住AI时代的职业机遇。如果你还不知道从何开始我自己整理一套全网最全最细的大模型零基础教程我也是一路自学走过来的很清楚小白前期学习的痛楚你要是没有方向还没有好的资源根本学不到东西下面是我整理的大模型学习资源希望能帮到你。扫码免费领取全部内容最后1、大模型学习路线2、从0到进阶大模型学习视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、 入门必看大模型学习书籍文档.pdf书面上的技术书籍确实太多了这些是我精选出来的还有很多不在图里4、AI大模型最新行业报告2026最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5、面试试题/经验【大厂 AI 岗位面经分享107 道】【AI 大模型面试真题102 道】【LLMs 面试真题97 道】6、大模型项目实战配套源码适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关文章:

收藏 | 从零开始学LangGraph,构建能思考的Agentic RAG系统,小白也能轻松上手!

传统RAG检索系统存在检索质量差、无法处理查询歧义、无法自纠正错误等问题,导致幻觉率高。Agentic RAG通过引入Think-Act-Observe循环,实现主动推理和自我修正。文章详细介绍了Agentic RAG的设计哲学和核心能力,并使用LangGraph框架进行实践&…...

【架构】-----Service 层代码太长太乱?试试这套 “见名知意” 的命名规范!

前言: java服务层业务比较复杂,导致单个函数行数太多,可读性极低,怎么解决?, 让函数名本身就清晰告知开发者:它的类型、职责、适用场景。以下是可落地的、行业通用的命名规范体系,兼…...

Mixture of Experts(MoE)

Mixture of Experts(MoE) 1. 使用背景大模型这几年有一个很明显的趋势:参数越大,能力往往越强。但问题也很直接。传统稠密模型里,参数一旦变大,训练和推理的计算量也会跟着一起涨。也就是说,模型…...

【AI】如何设计Agent的记忆系统?

记忆模块是Agent打破LLM上下文窗口限制、实现持续学习和个性化的关键。 设计Agent的记忆系统可以仿照人类的记忆机制。 分为短期记忆和长期记忆。 1、短期记忆(Short-Term Memory): 作用:存储当前任务的上下文信息,包括即时对话历史、中间的思考步骤、工…...

Flink从入门到上天系列第十九篇:Flink当中的容错机制

一:检查点的概念在流处理中,我们可以用存档读档的思路,就是将之前某个时间点所有的状态保存下来,这份 “存档” 就是我们所谓的 “检查点”(checkpoint)。遇到故障重启的时候,我们可以从检查点中…...

基于Matlab的齿轮-轴-轴承系统非线性动力学模型及其转速混沌特性分析

基于matlab的齿轮-轴-轴承系统的含间隙非线性动力学模型,根据牛顿第二定律,建立齿轮系统啮合的非线性动力学方程,同时也主要应用修正Capone模型的滑动轴承无量纲化雷诺方程,利用这些方程推到公式建模;用MATLAB求解画出…...

AI要干掉老师傅?老马揭秘CV落地真相

《人工智能AI之计算机视觉:从像素到智能》 模块五:未来与生态——多模态、产业与思维升维(认知拓展) 第 18 篇 AI不只是“看图”:老马带你拆解CV重塑三大行业的底层真相 前两天,有个在大型制造企业干了二十多年的老伙计找我喝酒。 几杯酒下肚,他开始大吐苦水:“老马…...

高铁卖票这件事,比你的生产计划做得强多了

获取更多资讯,赶快关注公众号《AI制造新观察》吧! 文章目录你以为退票手续费是在罚你?那你想错了退票手续费演进历程候补购票,根本不是你想的那么简单第一层价值:把虚假需求和真实需求分开第二层价值:实时构…...

西安康德航测 1553B 线缆

西安康德航测 1553B 线缆1553B 线缆产品(M17/176-0002 等效,GJB289A)规格:78Ω、24AWG 镀银、PFA 绝缘、屏蔽双绞线、-55℃~200℃类型:裸线、成品组件(含 TRB 双轴接头)一、技术性能优势&#x…...

三相调速永磁同步电动机maxwell模型 1、案例采用180-8极一字型冲片 2、转速为150...

三相调速永磁同步电动机maxwell模型 1、案例采用180-8极一字型冲片 2、转速为1500转 功率22kW 3、超高效率可达到1级能效 4、提供冲片图纸及Rmxprt路算结果及maxwell模型,可提供2极至8极不同转速及不同功率的电磁方案计算单 提供有限元分析模型,可直接用…...

吉林省GEO营销哪个服务商技术强

在AI搜索时代,GEO(地理定位优化)营销已成为企业提升本地曝光、精准获客的关键手段。吉林省内,吉林省吉品信息科技公司(简称“吉品信息科技”)凭借自主技术、合规优化及全流程服务,成为中小企业数…...

python+Ai技术框架的健身房课程预约管理系统的设计与实现django flask

目录技术选型与框架对比核心功能模块设计数据库设计(Django示例)AI功能实现步骤前后端交互部署与优化测试与迭代项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与框架对…...

GitNexus:零服务器代码知识图谱引擎,让代码理解更智能

GitNexus:零服务器代码知识图谱引擎,让代码理解更智能 今日 GitHub 热门:1,860 stars ⭐ | 当日星增 1,860 | 完全在浏览器中运行 🎯 核心特性 1️⃣ 零服务器架构 GitNexus 的最大亮点是完全在浏览器中运行: ┌──…...

72 编辑距离

题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros” 输出&…...

Git CI/CD什么意思

Git CI/CD什么意思 Git CI/CD 是现代软件开发中用于自动化构建、测试和部署代码的核心实践。它通常指的是将 Git(版本控制系统)与 CI/CD(持续集成/持续交付或持续部署)流水线相结合的工作流。 更清晰地理解,我们可以将…...

数据可视化 Amazon QuickSight介绍和使用

第一章:Amazon QuickSight 基础概念1.1 什么是 Amazon QuickSight?Amazon QuickSight 是亚马逊云科技(AWS)提供的一项全托管的、基于云的商业智能(BI)服务。它的核心目标是帮助组织内的任何员工&#xff0c…...

1143. 最长公共子序列-day49

class Solution {public int longestCommonSubsequence(String text1, String text2) {int l1text1.length();int l2text2.length();int[][] dp new int[l11][l21];//dp 前n个最长公共子序列for(int i0;i<l1;i){for(int j0;j<l2;j){//如果用dp[i][j]可以用text1.charAt(i…...

手把手玩转STM32+BQ76940电池管理系统

基于STM32F103主控的MSB管理系统资料 主控芯片STM32F103C8T6&#xff0c;锂电池管理芯片BQ76940。 资料组成&#xff1a;原理图&#xff08;AD打开&#xff0c;无PCB文件&#xff09;&#xff0c;程序源码&#xff0c;上位机软件&#xff0c;bq76940说明文档&#xff0c;bq7694…...

Windows超级管理器:一款功能全面的系统管理工具,可以系统检测、文件清理、隐私保护、磁盘管理、文件粉碎等等实用功能

软件获取地址 Windows超级管理器 Windows超级管理器是一款功能全面的系统管理工具&#xff0c;其功能包括系统检测、文件清理、隐私保护、磁盘管理、文件粉碎等等实用功能。 软件是绿色单文件版&#xff0c;大小仅6.35 MB&#xff0c;非常小巧。软件主界面可以查看你电脑的基…...

AI教育轻创合伙人靠谱吗?机遇与陷阱的深度剖析

随着人工智能技术的飞速发展&#xff0c;AI教育已成为行业新风口&#xff0c;各类轻创合伙人模式应运而生&#xff0c;吸引着众多创业者的目光。然而&#xff0c;面对“AI教育轻创合伙人靠谱吗”这一核心问题&#xff0c;市场观点不一。本文将从行业视角出发&#xff0c;深度解…...

热销榜单:2026年北京本凡科技推荐的最值得的小程序开发平台TOP3,助力企业数字化转型

在数字化转型的背景下&#xff0c;选择一个合适的小程序开发平台至关重要。2026年&#xff0c;北京本凡科技推荐的三大平台&#xff0c;各自以不同的特点和优势支持企业的发展。首先&#xff0c;北京本凡科技凭借其丰富的经验和定制化服务&#xff0c;帮助企业实现个性化需求。…...

违章真的会让车险涨价吗?很多车主都搞错了,看完少花几千块!(违章真的会影响车险保费吗?一文讲清楚交强险和商业险的浮动规则)

文章目录 📖 介绍 📖 📒 违章与车险保费的关系 📒 📝 保费调整的两个板块 📝 交强险浮动规则 🔢 保费优惠情况 📍 重要:地区差异说明 ⚠️ 保费上浮情况 📌 关于普通违章的说明 📝 商业险浮动规则 📌 轻微违章不计入 📌 严重违章可能累加 📌 出险记…...

西门子S7-200Smart测速产量统计程序:实时记录当班与总生产数据及生产时间参数的MCGS...

西门子生产测速产量统计程序。 可以记录当班生产量和生产总量&#xff0c;生产时间参数。 PLC程序是西门子S7-200Smart编写。 触摸屏使用MCGS编写。厂里新上的生产统计系统用了西门子S7-200Smart PLC搭配MCGS触摸屏&#xff0c;这组合在中小型产线里挺常见。今天主要聊聊这个测…...

py列表小练习:成绩统计程序一些数据容器的小练习

编程练习题&#xff1a;学生成绩统计系统题目描述&#xff1a;请编写一个学生成绩统计程序&#xff0c;实现以下功能&#xff1a;循环接收用户输入的学生成绩&#xff08;整数&#xff09;&#xff0c;输入 q 时结束输入&#xff1b;输入过程中如果输入非数字&#xff08;且不是…...

企业内部人才选拔AI工具盘点:洞察未来,激活组织潜能

引言&#xff1a;AI驱动的内部人才选拔新范式在全球经济与产业结构剧烈变革的当下&#xff0c;企业对人才的战略需求日益凸显。内部人才的精准配置与高效发展&#xff0c;已成为企业持续增长的关键。传统人才管理模式在面对内部人才识别、评估与发展时&#xff0c;常受限于信息…...

2026 学术写作效率革命:Paperzz AI 初稿引擎,重构本科 / 硕博论文创作全链路

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 一、开篇&#xff1a;当毕业季遇上智能工具&#xff0c;论文初稿写作迎来全新可能 每年毕业季&#xff0c;数…...

计算机毕业设计之springboot大学生志愿者管理系统

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对大学生志愿者管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…...

DDoS是什么?遇到后有哪些解决方法?

随着网际网络的发达&#xff0c;DDos攻击手法也变得越来越多元且难以防范&#xff0c;尤其官方网站、线上交易平台、使用者登入页面皆为攻击者之首选目标&#xff0c;DDos攻击让许多厂商与企业蒙上巨大的损失&#xff0c;那究竟有什么DDos防御措施能在遭受攻击事前进行部署与事…...

2026年2月亲测:清洁拖把实践分享

引言&#xff1a;清洁工具升级背后的消费逻辑2026年家居清洁市场正经历一场“效率革命”。行业报告显示&#xff0c;超70%消费者将“免手洗、无死角、抑菌性”列为清洁工具核心需求&#xff0c;传统拖把因操作繁琐、清洁不彻底逐渐被淘汰。作为深耕清洁领域14年的企业&#xff…...

网络安全岗位薪水多少?

网络安全行业薪资一直备受关注&#xff0c;也是很多人入行的重要原因。其薪酬受城市、经验、岗位影响较大&#xff0c;整体高于普通IT岗位&#xff0c;那么网络安全薪水一般多少?以下是具体内容介绍。网络安全岗位的薪水跨度较大&#xff0c;具体区间如下&#xff1a;初级职位…...