LangChain实战:从概念到企业级AI应用开发的完整指南

news2026/4/29 3:12:31
1. 项目概述与核心价值看到“huangjia2019/langchain-in-action”这个项目标题很多对AI应用开发感兴趣的朋友尤其是那些已经接触过OpenAI API但苦于如何构建复杂、稳定应用的开发者应该会眼前一亮。这不仅仅是一个简单的代码仓库它更像是一本由一线开发者撰写的、关于如何将LangChain这个强大的框架真正“用起来”的实战手册。LangChain本身是一个用于开发由语言模型驱动的应用程序的框架它抽象了与模型交互、数据连接、记忆管理、代理决策等复杂环节但官方文档和教程往往更侧重于概念和基础用法。而这个“in-action”项目其核心价值就在于填补了“知道概念”到“能做出东西”之间的巨大鸿沟。我自己在尝试用LangChain构建企业级问答机器人、自动化流程助手时就深刻体会到仅仅按照官方Quickstart跑通一个示例距离生产可用还有十万八千里。你会遇到各种稀奇古怪的问题如何高效且低成本地处理长文档链Chain的调用超时了怎么办代理Agent有时候会陷入死循环怎么规避这个项目正是瞄准了这些实战中的痛点通过一系列精心设计的案例展示了LangChain在真实场景下的最佳实践、架构设计以及那些官方文档里不会写的“坑”和“技巧”。它适合所有希望利用大语言模型能力构建应用的开发者无论你是想做一个智能客服、一个文档分析工具还是一个复杂的多步骤决策系统都能从这里获得直接的灵感和可复用的代码。2. 项目整体架构与设计思路拆解2.1 核心定位从Demo到Production的桥梁“langchain-in-action”项目的设计思路非常明确它不是一个替代官方文档的百科全书而是一个“案例驱动”的进阶指南。其架构通常是围绕几个核心的、高价值的应用场景展开。例如智能文档问答RAG检索增强生成、多步骤任务自动化代理、与外部工具和API的集成、以及针对成本与性能的优化策略。每个案例都是一个独立的、可运行的工程但背后又贯穿着统一的设计哲学。这个哲学我称之为“面向生产的LangChain开发”。它意味着在代码中你不仅会看到如何调用LLMChain更能看到错误处理与健壮性如何为LLM调用添加重试机制如何设置超时当模型返回非预期格式时如何优雅降级可观测性与调试如何记录和追踪一次复杂链式调用的完整过程包括中间步骤的输入输出如何计算每次调用的Token消耗和成本模块化与可维护性如何将提示词模板、工具定义、链逻辑进行清晰分离方便后续迭代和A/B测试性能优化如何利用缓存减少重复的昂贵模型调用如何对文档进行高效的分块和索引以提升检索速度与精度项目通过具体的代码将这些抽象的原则具象化。比如它可能会用一个RobustSequentialChain类来封装基础的SequentialChain在其中内置重试逻辑和日志记录这正是新手在官方教程中学不到但在实战中必不可少的一环。2.2 技术栈选型与组合逻辑一个典型的“in-action”项目不会局限于LangChain本身而是会展示其与生态中其他优秀工具的整合。常见的组合包括向量数据库展示与Chroma、Pinecone、Weaviate或Qdrant的集成并比较不同数据库在本地部署和云服务场景下的优劣。文档加载与处理深入使用Unstructured、PyPDF2、markdown等库处理PDF、Word、HTML等多种格式并探讨不同分块策略按字符、按句子、按语义对最终问答效果的影响。替代LLM提供商除了OpenAI的GPT系列很可能集成Anthropic的Claude、开源的Llama 2/3通过Hugging Face或本地部署、乃至国内的大模型API并讨论在成本、性能、合规性之间的权衡。应用框架可能会用Streamlit或Gradio快速构建演示前端用FastAPI构建后端服务用Docker进行容器化封装形成一个完整的、可部署的应用原型。这种选型背后的逻辑是场景驱动和性价比驱动。例如对于内部知识库问答可能会优先考虑开源模型本地向量数据库如Chroma以保障数据隐私和零API成本而对于面向公众的、需要极高通识能力的应用则可能选择GPT-4等顶级API以确保用户体验。3. 核心模块深度解析与实操要点3.1 检索增强生成RAG的工业化实现RAG是当前LangChain最火热的应用场景但构建一个高效的RAG系统远比“加载文档-分块-嵌入-检索-生成”这个基础流程复杂。3.1.1 文档分块的艺术与科学分块Chunking是RAG的基石分块质量直接决定检索精度。项目会超越简单的按固定字符数分块引入更高级的策略递归字符分块尝试用不同的分隔符如\n\n,\n, , 递归地进行分割直到块大小符合要求。这能更好地保持段落或句子的完整性。语义分块使用嵌入模型计算句子间的相似度在语义边界处进行分割。这种方法能产生更连贯的块但对计算资源要求稍高。重叠分块在块与块之间设置一个重叠区域例如100个字符。这是防止答案恰好被分割在两个块边界而丢失关键上下文的关键技巧重叠大小通常设置为块大小的10%-20%。# 示例使用LangChain的RecursiveCharacterTextSplitter from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 目标块大小 chunk_overlap50, # 重叠大小 length_functionlen, separators[\n\n, \n, , ] # 分隔符优先级 ) docs text_splitter.split_documents(documents)注意分块大小没有黄金标准。对于事实性检索较小的块256-512字符精度更高对于需要理解上下文的摘要或分析较大的块1024字符更合适。必须通过实际查询进行测试和评估。3.1.2 检索环节的优化技巧检索不仅仅是简单的相似度搜索。项目会展示多路检索Hybrid Search结合稠密向量检索语义相似和稀疏检索如BM25关键词匹配。这能同时捕获语义相关性和精确关键词匹配显著提高召回率。可以使用langchain.retrievers中的混合检索器。重排序Re-ranking初步检索可能返回很多相关文档使用一个更小、更快的重排序模型如BAAI/bge-reranker对Top K个结果进行精排将最相关的1-2个文档放在最前面能极大提升最终生成答案的质量。元数据过滤在索引时为每个块添加元数据如来源文件名、章节标题、创建日期。检索时可以结合向量相似度和元数据过滤如“只检索来自2023年用户手册的章节”实现更精准的查询。3.2 智能代理Agent的可靠性与可控性设计LangChain的代理功能强大但让其稳定、可靠地工作是一大挑战。项目会重点解决代理的“幻觉”调用不存在的工具和“循环”问题。3.2.1 工具设计的规范性给代理定义工具时描述必须极其清晰、无歧义。工具函数的docstring就是给LLM的说明书。from langchain.tools import tool tool def get_current_weather(location: str) - str: 获取指定城市的当前天气情况。 Args: location (str): 城市名称必须是明确的城市名例如“北京”、“San Francisco”。 Returns: str: 该城市的天气描述如“晴朗25摄氏度”。 # ... 实现逻辑 ...模糊的描述会导致模型误用。同时工具应设计得具有原子性一个工具只做一件事避免复杂逻辑。3.2.2 通过结构化输出和验证来约束代理这是避免代理行为失控的关键。使用Pydantic来定义工具输入和代理最终输出的严格格式。from langchain.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field class AgentResponse(BaseModel): thought: str Field(description代理的思考过程) action: str Field(description要执行的动作或工具名) action_input: dict Field(description动作的输入参数) parser PydanticOutputParser(pydantic_objectAgentResponse) # 将这个parser加入到给LLM的提示词中强制其按格式输出当LLM的输出不符合Pydantic模型时可以触发重试或错误处理而不是任由代理解析失败后产生随机行为。3.2.3 设置明确的停止条件必须在代理初始化时设置max_iterations最大迭代次数和early_stopping_method提前停止方法。一个常见的实践是当代理连续多次如3次选择同一个工具或陷入类似的思考循环时就强制停止并返回当前结果或错误信息。3.3 记忆管理超越简单的对话历史对于多轮对话应用记忆至关重要。项目会探讨不同记忆类型的适用场景ConversationBufferMemory简单存储所有历史消息。适用于短对话但长对话下会迅速耗尽上下文窗口并增加成本。ConversationBufferWindowMemory只保留最近K轮对话。是平衡上下文与长度的实用选择。ConversationSummaryMemory让LLM定期总结之前的对话历史然后将总结作为记忆。这能极大地压缩信息适用于超长对话但存在信息损失和额外模型调用的成本。向量存储记忆将历史对话中的关键信息如用户提到的实体、偏好转换为向量存储在需要时通过检索召回。这实现了更接近人类“选择性记忆”的能力架构更复杂但更强大。一个高级技巧是混合记忆系统用BufferWindowMemory保持对话流畅性同时用SummaryMemory或向量记忆来保存长期的重要事实。4. 典型应用场景的完整实现流程4.1 场景一构建企业级智能知识库助手这是一个从数据准备到服务部署的完整流水线。4.1.1 数据预处理流水线采集与加载从Confluence、Notion、公司网盘、GitHub Wiki等不同来源使用对应的DocumentLoader加载文档。清洗与提取去除页眉页脚、无关标记。使用Unstructured库可以较好地保留文档结构标题、列表。分块与嵌入采用“递归分块重叠”策略。嵌入模型选择上如果追求效果text-embedding-ada-002或text-embedding-3系列是标杆如果要求本地化可以选用BAAI/bge系列或intfloat/e5系列开源模型。向量数据库索引将嵌入向量和元数据来源、页码等存入向量数据库。对于中小型知识库百万级向量以下Chroma本地或Pinecone云都是好选择。索引创建时可以考虑创建多个索引按文档类型或部门分类实现更精细的检索。4.1.2 检索与生成链的构建这里不仅仅是简单的RetrievalQA链。一个生产级的链应该包括from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate from langchain.chat_models import ChatOpenAI # 1. 自定义提示词模板要求模型基于上下文回答并注明“不知道” custom_prompt PromptTemplate( input_variables[context, question], template基于以下上下文信息请回答问题。如果上下文信息不足以回答问题请直接说“根据已知信息无法回答该问题”不要编造信息。 上下文 {context} 问题{question} 答案 ) # 2. 创建LLM实例配置温度、最大Token等参数 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, max_tokens500) # 3. 构建链并可能集成重排序检索器 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 对于大多数场景“stuff”方式足够 retrieverhybrid_retriever, # 使用之前构建的混合检索器 chain_type_kwargs{prompt: custom_prompt}, return_source_documentsTrue # 关键返回源文档用于溯源 ) # 4. 调用 result qa_chain({query: 我们公司的年假政策是怎样的}) print(result[result]) for doc in result[source_documents]: print(f来源{doc.metadata[source]}, 页码{doc.metadata.get(page, N/A)})返回源文档这个功能在企业场景下是刚需用于答案溯源和可信度验证。4.1.3 部署与服务化将上述流水线封装成FastAPI服务。from fastapi import FastAPI, HTTPException from pydantic import BaseModel app FastAPI() # 假设qa_chain已在服务启动时加载 class QueryRequest(BaseModel): question: str user_id: str None app.post(/ask) async def ask_question(request: QueryRequest): try: result qa_chain({query: request.question}) return { answer: result[result], sources: [{source: doc.metadata.get(source), content_preview: doc.page_content[:200]} for doc in result[source_documents]] } except Exception as e: raise HTTPException(status_code500, detailstr(e))最后使用Docker容器化并通过NginxGuicorn部署实现高可用。4.2 场景二自动化工作流代理假设我们要构建一个代理它能根据用户自然语言指令自动查询数据库、发送邮件、生成报告。4.2.1 工具集定义定义三个核心工具数据库查询工具、邮件发送工具、报告生成工具调用LLM。# 工具1查询数据库 tool def query_database(sql_query: str) - str: 执行SQL查询并返回结果。仅用于查询SELECT禁止执行修改操作。 # 使用SQLAlchemy等ORM安全地执行查询 ... # 工具2发送邮件 tool def send_email(to: str, subject: str, body: str) - str: 使用SMTP服务器发送电子邮件。 ... # 工具3生成报告摘要 tool def generate_summary(data: str) - str: 根据提供的文本数据生成一份简洁的摘要报告。 # 内部调用另一个LLMChain ...4.2.2 代理的提示词工程这是代理的“大脑”。提示词需要清晰地定义角色、目标、工具使用规则和输出格式。from langchain.agents import create_structured_chat_agent prompt 你是一个高效的工作流自动化助手。你的目标是根据用户请求协调使用可用工具完成任务。 你必须严格遵守以下规则 1. 每次行动前先简要说明你的思考。 2. 只能使用提供的工具。 3. 如果用户请求需要多个步骤请一步步来。 4. 最终输出必须是完整的、用户可理解的结果。 工具 {tools} 请使用以下格式 思考你对当前步骤的思考 行动要调用的工具名 行动输入工具的输入必须是JSON格式的键值对 观察工具返回的结果 ...重复思考/行动/观察直到任务完成 最终答案根据所有观察结果给用户的最终回复 开始 用户请求{input} agent create_structured_chat_agent(llm, tools, prompt)4.2.3 执行与监控使用AgentExecutor运行代理并开启详细输出和设置迭代上限。from langchain.agents import AgentExecutor agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolstools, verboseTrue, # 打印详细日志便于调试 handle_parsing_errorsTrue, # 处理输出解析错误 max_iterations10, # 防止无限循环 early_stopping_methodgenerate # 达到上限时让LLM生成一个最终答案 ) result agent_executor.invoke({input: 请查询上季度销售额最高的产品并将结果摘要发邮件给经理。})通过verboseTrue我们可以在控制台看到代理完整的“思考-行动-观察”链这对于调试复杂任务至关重要。5. 性能优化、成本控制与问题排查5.1 性能优化策略5.1.1 缓存对LLM的调用进行缓存可以大幅减少重复请求降低延迟和成本。LangChain支持内存缓存、SQLite缓存和Redis缓存。from langchain.cache import SQLiteCache import langchain langchain.llm_cache SQLiteCache(database_path.langchain.db)对于提示词模板相同、参数相似的请求缓存命中率会很高。但要注意对于需要实时性的对话可能需要更细粒度的缓存策略或禁用缓存。5.1.2 异步调用当需要并行处理多个独立查询时如批量处理用户问题使用异步可以极大提升吞吐量。import asyncio async def async_generate(chain, queries): tasks [chain.ainvoke({query: q}) for q in queries] results await asyncio.gather(*tasks) return results5.1.3 检索优化索引优化使用HNSW等高效索引算法向量数据库通常默认支持。预过滤在向量搜索前先用元数据如时间范围、类别过滤掉大量不相关文档缩小搜索范围。5.2 成本控制实战LLM API调用是主要成本来源。监控与统计在每次调用后从LLM响应中提取usage字段如prompt_tokens,completion_tokens并记录到日志或监控系统。可以自己写一个CallbackHandler来实现。模型选型在效果可接受的范围内使用更便宜的模型。例如对于简单的分类或提取任务gpt-3.5-turbo可能比gpt-4性价比高得多。提示词精简优化提示词去除冗余指令用更少的Token表达相同的意图。输出限制设置max_tokens参数防止模型生成过长的无关内容。分级处理对于复杂查询可以先用小模型如gpt-3.5-turbo判断意图和所需工具再决定是否调用更强大的模型或复杂链。5.3 常见问题排查实录问题1RAG系统返回的答案与文档内容无关或“幻觉”。排查步骤检查检索结果首先单独测试检索器看返回的文档块是否真的包含答案。可能分块太小导致信息碎片化或者嵌入模型不适合你的领域。检查提示词确认提示词中是否包含了“基于上下文”的强约束以及“不知道就说不知道”的指令。检查上下文长度如果检索到的文档总长度超过模型上下文窗口LangChain可能会进行截断导致关键信息丢失。需要调整分块大小或检索数量。解决方案引入重排序器提升检索精度在提示词中明确要求模型引用源文档中的具体语句使用map_reduce或refine等链类型来处理超长上下文但成本更高。问题2代理陷入无限循环或重复调用同一工具。排查步骤查看详细日志(verboseTrue)观察代理的思考过程。是不是思考逻辑出现了死循环检查工具描述工具描述是否清晰是否让LLM误解了工具的功能检查停止条件max_iterations是否设置得过小或过大解决方案优化工具描述使其输入输出更明确在代理的提示词中加入“避免重复操作”的指令实现一个自定义的EarlyStoppingCallback当检测到重复模式时主动中断。问题3处理长文档或复杂链时超时。排查步骤定位瓶颈使用分段计时确定是文档加载、嵌入、检索还是LLM生成环节慢。检查网络和API状态如果是调用云端API可能是网络延迟或API限流。解决方案为LLM调用和外部工具调用设置独立的超时参数对耗时的文档预处理环节如分块、嵌入实现异步或离线批处理考虑使用更快的嵌入模型或向量数据库。问题4依赖版本冲突导致运行错误。LangChain生态更新频繁这是一个非常常见的问题。解决方案项目应提供稳定的requirements.txt或pyproject.toml文件并注明核心依赖的版本。强烈建议使用虚拟环境如venv,conda或Docker来隔离项目环境。在升级依赖前先在测试环境中验证。6. 进阶技巧与扩展方向6.1 利用LangSmith进行全链路追踪与评估LangChain官方推出的LangSmith平台是提升开发效率的神器。它可以记录每一次链、代理、工具调用的详细信息输入、输出、耗时、Token用量、成本并以可视化链路的形式展示。调试可以清晰地看到是链中哪个环节出了错输入输出是什么。评估可以针对一组测试问题批量运行你的应用并自动或人工评估答案的质量从而量化每次迭代改进的效果。监控在生产环境中集成监控应用的性能指标和异常。 一个成熟的“in-action”项目应该包含如何集成和利用LangSmith的示例。6.2 自定义链与代理当内置链无法满足复杂业务逻辑时就需要自定义。例如创建一个需要多次检索、并综合多份文档信息才能回答的链。from langchain.chains.base import Chain from typing import Dict, List class MultiRetrievalQAChain(Chain): 一个自定义链先后从两个不同的知识库检索再综合回答。 retriever_a: BaseRetriever retriever_b: BaseRetriever llm_chain: LLMChain property def input_keys(self) - List[str]: return [question] property def output_keys(self) - List[str]: return [answer, sources_a, sources_b] def _call(self, inputs: Dict[str, str]) - Dict[str, str]: question inputs[question] # 第一步从知识库A检索 docs_a self.retriever_a.get_relevant_documents(question) # 第二步从知识库B检索 docs_b self.retriever_b.get_relevant_documents(question) # 第三步组合上下文调用LLM生成最终答案 combined_context f知识库A信息{docs_a}\n\n知识库B信息{docs_b} answer self.llm_chain.run(questionquestion, contextcombined_context) return {answer: answer, sources_a: docs_a, sources_b: docs_b}通过继承Chain基类你可以完全控制执行流程实现任何复杂的业务逻辑。6.3 与现有系统集成LangChain应用很少是孤岛。项目会展示如何作为微服务通过FastAPI/Flask暴露RESTful API供其他业务系统调用。集成消息平台使用langchain.tools中的SlackToolkit或自定义回调将智能助手接入Slack、钉钉、企业微信。触发工作流当代理完成某项任务后通过Webhook或消息队列如RabbitMQ, Kafka通知下游系统。最终一个优秀的“langchain-in-action”项目其代码本身就是最好的文档。它应该像一份精心编写的地图指引开发者避开泥沼穿越丛林最终抵达构建强大、可靠LLM应用的彼岸。它传授的不只是语法和API更是一种在快速发展且有时略显混乱的AI工程领域里如何保持清晰、稳健和高效的工程思维。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2556052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…