sagents框架实战:从零构建具备记忆与协作能力的AI智能体

news2026/5/16 4:42:07
1. 项目概述一个面向开发者的AI智能体构建框架最近在AI应用开发领域一个名为sagents的开源项目引起了我的注意。它不是一个直接面向终端用户的聊天机器人而是一个旨在帮助开发者快速构建、管理和编排复杂AI智能体Agent的框架。简单来说你可以把它理解为一个“智能体工厂”或“智能体操作系统”的核心组件。如果你正在尝试将大语言模型LLM的能力集成到你的业务流程、自动化脚本或复杂决策系统中而不仅仅是做一个简单的问答接口那么sagents这类工具很可能就是你正在寻找的“脚手架”。它的核心价值在于将构建一个可靠、可维护、可扩展的AI智能体应用所面临的通用性难题进行了抽象和封装。比如如何让多个智能体协同工作如何让智能体持久化记忆和状态如何让智能体调用外部工具如API、数据库、搜索引擎如何对智能体的执行过程进行监控和调试sagents试图提供一套标准化的解决方案让开发者可以更专注于业务逻辑本身而不是重复造轮子。从我实际体验来看它特别适合那些需要将AI能力深度嵌入到现有系统、或者构建具有复杂工作流和长期记忆的AI应用的场景。2. 核心设计理念与架构拆解2.1 从“单次对话”到“持续智能体”的范式转变传统的基于大语言模型的开发大多遵循“用户输入 - 模型响应”的请求-响应模式。这种模式简单直接但局限性也很明显模型没有“记忆”每次对话都是独立的模型无法执行复杂、多步骤的任务模型难以与外部世界进行稳定、可控的交互。sagents的设计正是为了突破这些限制。它引入了“智能体”作为一等公民。在这个框架里一个智能体不仅仅是一个LLM的调用封装而是一个具有状态State、记忆Memory、工具Tools和决策循环Loop的自治实体。智能体可以持久化状态在一次会话中记住上下文甚至在多次会话间保持某些状态。执行多轮决策根据环境反馈和自身目标自主决定下一步该做什么思考、调用工具、等待输入。利用工具扩展能力通过预定义的工具函数去读取文件、查询数据库、调用API从而突破纯文本生成的限制。与其他智能体协作多个智能体可以组成一个“团队”各司其职共同完成一个更宏大的目标。这种设计理念使得基于sagents构建的应用更像是一个可以“持续运行”的智能服务而非一个被动的问答机。2.2 核心架构组件解析sagents的架构清晰地将智能体的生命周期管理分解为几个核心模块理解这些模块是高效使用它的关键。智能体Agent这是最核心的抽象。每个智能体都绑定了一个或多个LLM如GPT-4、Claude、本地模型并定义了其行为模式。框架通常会提供几种基础类型的智能体例如ReAct Agent基于“思考Reason-行动Act”模式的智能体它会先推理需要做什么然后选择工具执行再根据结果进行下一轮思考。这是实现复杂任务分解的经典模式。Conversational Agent专为多轮对话优化的智能体内置了更好的对话历史管理。Plan-and-Execute Agent先制定一个完整的计划再按步骤执行的智能体适合流程固定的任务。工具Tools这是智能体与外部世界交互的“手”和“眼睛”。一个工具本质上是一个Python函数框架负责将其标准化并生成描述供LLM理解。例如你可以创建search_web、query_database、send_email等工具。sagents通常提供一套基础工具如计算器、文件读写并让开发者能极其方便地自定义工具。记忆Memory负责存储和检索智能体的历史交互信息。简单的记忆可以是对话历史列表复杂的记忆可能包括向量数据库用于基于语义搜索相关的过往经验。记忆模块决定了智能体的“记忆力”有多好、有多准。状态管理State Management这是智能体在单次执行或多轮对话中保持的内部数据。例如一个订票智能体的状态可能包含{“destination”: “北京” “dates”: “2024-10-01 to 2024-10-07” “budget”: 5000}。框架需要提供一套机制来初始化、更新和传递这个状态。编排器Orchestrator当任务复杂到需要多个智能体协作时编排器就登场了。它负责定义智能体之间的工作流谁先执行谁后执行如何传递数据和状态。这可以通过简单的线性链、条件分支图甚至是基于LLM的“主管智能体”来自动分配任务来实现。3. 快速上手构建你的第一个智能体理论说了不少我们直接动手用sagents快速搭建一个能查询天气并给出穿衣建议的智能体。这个例子虽小但涵盖了智能体、工具、记忆等核心概念。3.1 环境准备与安装首先确保你的Python环境在3.8以上。创建一个新的虚拟环境是个好习惯。# 创建并激活虚拟环境以venv为例 python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # 安装 sagents 框架 # 注意具体包名可能因项目而异这里以假设的 pip 包名为例 pip install sagents-ai # 通常还需要安装对应的LLM SDK比如使用OpenAI pip install openai安装完成后你需要设置你的LLM API密钥。最常见的是使用环境变量export OPENAI_API_KEYyour-api-key-here # 或者在代码中通过os.environ设置注意对于生产环境强烈建议使用.env文件配合python-dotenv管理密钥切勿将密钥硬编码在代码中提交到版本库。3.2 定义核心工具让智能体能“感知”天气智能体本身不知道天气我们需要给它造一个“工具”。这里我们模拟一个天气查询函数实际应用中你会调用像 OpenWeatherMap 这样的真实API。# tools/weather_tool.py import json from typing import Optional from sagents.tools import tool # 假设框架提供了 tool 装饰器 tool def get_current_weather(location: str, unit: str celsius) - str: 获取指定城市的当前天气情况。 Args: location: 城市名例如 北京, Shanghai。 unit: 温度单位celsius 或 fahrenheit默认为 celsius。 Returns: 一个描述天气的JSON字符串。 # 这里是模拟数据真实情况应调用API # 例如response requests.get(fhttps://api.weatherapi.com/...?q{location}) weather_data { location: location, temperature: 22 if unit celsius else 72, unit: unit, conditions: 晴朗, humidity: 65, wind_speed: 10 } return json.dumps(weather_data, ensure_asciiFalse)关键点解析tool装饰器这是框架提供的魔法它会把你的普通Python函数包装成智能体可以理解和调用的工具。装饰器会自动从函数文档字符串Docstring和类型注解中提取工具的描述和参数信息这对LLM正确使用工具至关重要。清晰的文档Docstring 必须清晰描述工具的功能、参数和返回值。LLM 依赖这些信息来决定何时以及如何调用该工具。结构化的返回返回JSON字符串或字典是最好的实践这便于智能体解析结果并用于后续的推理或回答。3.3 组装智能体并运行接下来我们创建一个智能体并将天气工具赋予它。# main.py import asyncio from sagents.agents import ReActAgent # 导入一个具体的智能体实现 from sagents.llms import OpenAIChat # 导入LLM集成 from tools.weather_tool import get_current_weather async def main(): # 1. 初始化LLM后端 # 这里使用GPT-3.5-turbo成本较低适合测试 llm OpenAIChat(modelgpt-3.5-turbo, temperature0.1) # temperature 控制创造性对于工具调用类任务建议调低如0.1-0.3以保证稳定性 # 2. 创建智能体并传入工具列表和LLM agent ReActAgent( llmllm, tools[get_current_weather], # 将工具赋予智能体 verboseTrue # 打开详细日志方便观察智能体的思考过程 ) # 3. 运行智能体 query 我现在在上海天气怎么样该穿什么衣服 print(f用户: {query}) response await agent.run(query) print(f\n智能体: {response}) if __name__ __main__: asyncio.run(main())运行与观察 当你运行这段代码时如果verboseTrue你会在控制台看到类似以下的输出这正是ReAct模式的思考过程用户: 我现在在上海天气怎么样该穿什么衣服 思考: 用户想知道上海的天气和穿衣建议。我需要先获取上海的天气信息。 行动: 调用工具 get_current_weather参数: location上海。 观察: {location: 上海, temperature: 22, unit: celsius, conditions: 晴朗, ...} 思考: 当前上海气温22摄氏度天气晴朗。这个温度比较舒适可以建议穿长袖T恤、薄外套或衬衫搭配长裤。由于天气晴朗不需要雨具。 智能体: 上海目前天气晴朗气温22摄氏度。体感比较舒适建议您可以穿长袖T恤、衬衫或薄外套搭配长裤即可。外出享受阳光吧实操心得verboseTrue是调试神器在开发初期务必打开详细日志。它能让你清晰地看到智能体“脑子里”在想什么它决定调用哪个工具、传递了什么参数、得到了什么结果。绝大多数逻辑错误都能通过这个日志定位。温度参数temperature的设定对于需要精确工具调用和事实性回答的任务将temperature设为较低值0.1-0.3可以减少模型的“胡言乱语”让它的行为更确定、更可靠。对于创意生成类任务则可以调高。4. 深入核心状态管理、记忆与多智能体协作一个简单的工具调用智能体只是开始。sagents的强大之处在于对状态、记忆和协作的支持。4.1 管理智能体的状态与记忆让我们升级天气穿衣助手让它能记住用户的偏好比如用户怕冷还是怕热并在每次建议时考虑这一点。# 定义一个简单的内存和状态管理 from sagents.memory import SimpleMemory # 假设有简单内存实现 from pydantic import BaseModel, Field from typing import Optional # 使用Pydantic定义智能体的状态结构这能让状态管理更规范、类型安全 class UserPreferenceState(BaseModel): location: Optional[str] None cold_sensitive: bool False # 是否怕冷 last_advice: Optional[str] None async def main_with_state(): llm OpenAIChat(modelgpt-3.5-turbo) # 初始化记忆和状态 memory SimpleMemory() initial_state UserPreferenceState(cold_sensitiveTrue) # 假设用户默认怕冷 agent ReActAgent( llmllm, tools[get_current_weather], memorymemory, initial_stateinitial_state, # 传入初始状态 verboseTrue ) # 第一轮对话 response1 await agent.run(我有点怕冷现在北京天气如何该怎么穿) print(response1) # 智能体在思考时可以访问 agent.state.cold_sensitive 值为 True从而给出更保暖的建议。 # 第二轮对话状态和记忆被保持 response2 await agent.run(那如果我去上海呢) print(response2) # 智能体知道用户“怕冷”这个状态并且在生成对上海的建议时可以参考之前的对话历史记忆。状态State vs 记忆Memory状态是智能体当前任务相关的、结构化的数据。比如UserPreferenceState。它通常是可变的并随着智能体的执行而更新。记忆是历史对话和交互的记录。它更像一个日志用于提供上下文。高级的记忆系统如向量存储记忆可以基于语义搜索相关的历史而不仅仅是最近的几条。避坑指南对于复杂状态强烈建议使用像Pydantic这样的数据验证库来定义模型。这能提前避免很多因数据类型错误导致的诡异问题并且IDE的代码提示和补全会非常好用。4.2 实现多智能体协作工作流想象一个更复杂的场景一个用户想策划一次旅行。我们可以创建三个智能体分工合作信息收集智能体负责查询目的地的天气、景点信息。行程规划智能体根据收集的信息制定详细的日程安排。预算评估智能体根据行程估算大致花费。sagents的编排器模块可以让这些智能体有序工作。from sagents.orchestration import SequentialOrchestrator # 顺序编排器 from sagents.agents import ReActAgent async def travel_planning_workflow(user_request: str): # 创建三个智能体每个擅长不同领域可以绑定不同的工具集 info_agent ReActAgent( llmOpenAIChat(modelgpt-4), # 信息收集可以用更强的模型 tools[get_current_weather, search_attractions], # 假设有搜索景点的工具 name信息收集员 ) plan_agent ReActAgent( llmOpenAIChat(modelgpt-3.5-turbo), tools[], # 规划智能体可能主要靠推理 name行程规划师 ) budget_agent ReActAgent( llmOpenAIChat(modelgpt-3.5-turbo), tools[query_hotel_price, query_flight_price], # 查询价格的工具 name预算评估师 ) # 定义工作流先收集信息再规划最后评估预算 orchestrator SequentialOrchestrator( agents[info_agent, plan_agent, budget_agent] ) # 运行工作流初始输入是用户请求 final_result await orchestrator.run(user_request) return final_result # 使用 result await travel_planning_workflow(我想下个月去杭州玩三天预算5000元以内请帮我规划一下。) print(result)在这个工作流中SequentialOrchestrator会依次执行每个智能体。前一个智能体的输出会自动作为后一个智能体的输入的一部分。更复杂的编排器如图编排器、基于LLM的路由器可以实现条件分支、循环等复杂逻辑。经验之谈在多智能体系统中为每个智能体起一个清晰的name并在工具调用日志中显示出来对于调试和监控至关重要。当系统复杂时你一眼就能看出是哪个环节的哪个智能体在做什么。5. 性能优化与生产部署考量当你的智能体应用从Demo走向生产时稳定性、成本和性能就成为核心关注点。5.1 降低LLM调用成本与延迟LLM API调用通常是最大的开销。以下是一些实战策略模型分级使用不是所有任务都需要GPT-4。将任务分类对于简单的信息提取、格式转换使用GPT-3.5-turbo甚至更小的模型对于需要深度推理、规划的任务再使用GPT-4。你可以在创建不同智能体时指定不同的LLM。优化提示词Prompt清晰、简洁、结构化的提示词能减少不必要的token消耗并提高模型响应的准确性。将固定的指令放在系统消息System Message中避免在每次用户消息中重复。缓存Caching对于频繁出现的、结果确定的查询如“北京的天气”可以考虑对LLM的响应进行缓存。一些框架内置了缓存支持或者你可以使用像redis或diskcache来自行实现。异步与流式处理使用异步IOasyncio来并发处理多个独立的智能体调用或工具调用可以显著提升吞吐量。对于需要长时间运行的任务考虑支持流式响应让用户能更快地看到部分结果。5.2 增强智能体的可靠性与稳定性智能体不可控的“幻觉”和工具调用错误是主要风险。工具调用的验证与重试# 在工具函数内部加入健壮性检查 tool def query_database(sql: str) - str: try: # 1. 对输入SQL进行简单的安全校验避免DROPDELETE等 if drop in sql.lower() or delete in sql.lower(): return ERROR: Potentially dangerous operation is not allowed. # 2. 执行查询 result db_engine.execute(sql) # 3. 格式化结果 return format_result(result) except Exception as e: # 返回清晰的错误信息而非抛出异常避免智能体崩溃 return fERROR executing query: {str(e)}. Please check your SQL syntax.此外可以在智能体层面设置工具调用的最大重试次数。设置超时与看门狗Watchdog为每个智能体的run操作设置超时时间防止因LLM响应慢或工具卡死导致整个服务挂起。对于长时间运行的工作流可以考虑实现心跳机制或看门狗来监控其健康状态。后处理与验证对于关键输出如生成的代码、决策结论可以引入一个“验证者”智能体或简单的规则引擎进行二次检查。例如让另一个智能体从不同角度评审行程规划的合理性。5.3 监控、日志与可观测性在生产环境中你需要知道智能体在做什么、表现如何。结构化日志不要只打印文本。将每次LLM调用、工具调用、状态变更记录为结构化的日志JSON格式并发送到像ELKElasticsearch, Logstash, Kibana或Loki这样的日志聚合系统。这便于你搜索、分析和设置告警。关键指标Metrics追踪以下指标每次对话的LLM调用次数和总token消耗。工具调用的成功率和平均耗时。智能体完成任务的最终成功率需要业务层面定义。用户反馈评分如果有。链路追踪Tracing对于多智能体工作流使用像OpenTelemetry这样的标准来追踪一个用户请求在整个智能体系统中的流转路径每个环节的耗时和状态都一目了然这是排查复杂问题的利器。6. 常见问题排查与实战技巧在实际开发中你肯定会遇到各种问题。下面是一些典型问题及其解决思路。6.1 智能体不调用工具或调用错误工具症状智能体一直在“思考”但迟迟不触发工具调用或者调用了完全不相关的工具。排查步骤检查verbose日志这是第一步。看智能体的“思考”内容它是否准确理解了任务它是否在考虑使用工具审查工具描述LLM完全依赖你为工具编写的名称和描述Docstring来决定是否以及如何调用。确保描述清晰、准确包含关键词。例如一个总结网页的工具描述里最好有“summarize”、“webpage”、“content”等词。简化测试用一个极其简单的任务测试工具调用如“请调用获取天气工具参数是location北京”。如果这都不行问题可能出在框架集成或LLM配置上。调整提示词有时需要在给智能体的系统提示中更明确地鼓励或指导它使用工具。例如加入“你拥有以下工具请优先考虑使用它们来解决问题...”这样的指令。6.2 工具调用结果无法被智能体正确理解症状工具被调用了也返回了结果但智能体在后续思考中似乎忽略了结果或得出了错误结论。排查步骤检查返回格式工具返回的必须是字符串。对于复杂数据返回格式化的JSON字符串是最佳实践。LLM对JSON的解析能力很强。避免返回Python对象或过于复杂的嵌套结构。精简返回内容工具返回的信息可能太多、太杂包含了LLM不需要的噪音。只返回完成任务所必需的关键信息。例如天气工具只返回温度、天气状况、风力即可不需要返回完整的API响应体。在日志中确认在verbose日志的“观察Observation”部分仔细查看工具返回的原始字符串是什么是否是你期望的格式和内容。6.3 多智能体工作流中状态传递混乱症状工作流中后面的智能体拿不到前面智能体产生的数据或者数据格式不对。解决方案明确接口契约在设计工作流时就定义好每个智能体的输入和输出数据的结构可以用Pydantic Model。例如规定信息收集智能体的输出必须是一个包含weather和attractions字段的字典。使用状态管理不要仅仅依赖将输出作为文本传递给下一个智能体。利用框架的状态State管理功能。将需要共享的数据放在共享状态对象中每个智能体都读写这个状态。这样数据是结构化的传递也更可靠。编排器日志开启编排器的详细日志查看每个智能体执行前后的输入输出快照这是定位数据传递问题最直接的方法。6.4 处理长上下文和记忆溢出症状随着对话轮数增加智能体响应变慢甚至开始遗忘早期的关键信息。应对策略摘要式记忆Summarization不要无脑地将所有历史对话都塞进上下文。实现一个记忆摘要功能当对话轮数超过一定阈值或者检测到话题切换时让LLM自动对之前的对话历史生成一个简短的摘要然后用摘要代替冗长的原始历史。这能大幅节省token。向量记忆Vector Memory对于需要长期、语义化记忆的场景使用向量数据库。将历史对话片段转换为向量存储起来。当需要回忆时根据当前问题搜索最相关的历史片段只将这些片段放入上下文。这既节省token又提高了记忆的相关性。有状态工具对于一些关键信息如用户偏好不要依赖对话历史而是设计成工具或状态来维护。例如一个update_user_preference工具调用后直接修改智能体的内部状态这样信息就被持久化地记住了。开发基于sagents这类框架的AI智能体应用是一个不断迭代和调优的过程。从定义一个简单的工具开始逐步构建起具有状态、记忆和协作能力的复杂智能体系统这个过程本身充满了挑战和乐趣。最关键的是始终保持对智能体决策过程的可见性善用日志并围绕可靠性、成本和性能这三个核心维度进行持续优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2617122.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…