Nanobot 从 AgentLoop 启动看怎么驱动大模型运行

别再踩坑了!QT5.15.2配置Android开发环境保姆级避坑指南(含Java8、SDK Tools版本选择) 本文提供QT5.15.2配置Android开发环境的详细避坑指南,重点解决版本锁定、SDK工具选择和QtCreator配置等常见问题。通过实测推荐的Java8、Android SDK Tools版本及NDK配置,帮助开发者高效完成环境搭建,避免隐性冲突和配置失败。 阅读详情

背景

在之前的文章中我们分析了nanobot onboard和 nanobot gateway命令的实现,
这次我们分析 AgentLoop.run方法怎么驱动整个Agent的运行,
从整理上来看,该 nanobot用到了Typer,Rich,Questionary,prompt_toolkit这种现代、美观且交互式命令行界面 (CLI) 的强大工具组合。
Typer 用于定义 CLI 结构和参数;Rich 负责文本样式、表格、面板和 Markdown 渲染;Questionary 用于创建交互式问答界面
其中 Rich中的Console,Markdown,Table,Text用来进行渲染,支持颜色、表格、面板、语法高亮和 Markdown ,以更好的进行个性化的展示。
其中最主要都是用协程实现,其中也会调用线程来做其他工作。
关于协程和线程的区别:

协程是用户态的轻量级“微线程”,切换由用户程序控制,没有内核态切换,开销极小;线程是内核态的资源单元,切换由操作系统调度,开销较大.
线程切换需要涉及用户态到内核态的转换,上下文包括内核栈、硬件寄存器等,保存和恢复资源较多

Agent.run命令

这个是所有Agent驱动的主循环方法,也是消息传递的主入口,它从 MessageBus 拉入站消息,再异步分发到真正的处理逻辑,
最终把处理结果发送到 outbound队列中,从而发送给对应的 Channel。
于此同时,能够优先处理 /stop , /restart, /status 这种命令

1.设置启动标志并且链接MCP

self._running = True
await self._connect_mcp()

首先用一个标志位来标记并且保持主循环持续运行,再次连接远程的MCP服务器,并把远程Tool注册进当前 ToolRegistry中。
在 _connect_mcp的实现中使用了AsyncExitStack来手动管理上下文,
这里主要用 enter_async_context 和 aclose 两个方法注册和释放异步资源。如果在注册的过程中发生异常的话,则调用close方法。
在 connect_mcp_servers方法中根据MCP的类型(是stdio或者sse)来建立不同的连接(使用了httpx模块)。最后以MCPToolWrapper类的方式注册到ToolRegistry中,
可以看到其实MCP也是最终通过Tool方式调用的。

2.主循环,消费入站队列消息
这里是个死循环,以最大超时1秒的间隔去从入站队列中消费消息。

        while self._running:
            try:
                msg = await asyncio.wait_for(self.bus.consume_inbound(), timeout=1.0)
            except asyncio.TimeoutError:
                continue
            except asyncio.CancelledError:
                # Preserve real task cancellation so shutdown can complete cleanly.
                # Only ignore non-task CancelledError signals that may leak from integrations.
                if not self._running or asyncio.current_task().cancelling():
                    raise
                continue
            except Exception as e:
                logger.warning("Error consuming inbound message: {}, continuing...", e)
                continue

            raw = msg.content.strip()
            if self.commands.is_priority(raw):
                ctx = CommandContext(msg=msg, session=None, key=msg.session_key, raw=raw, loop=self)
                result = await self.commands.dispatch_priority(ctx)
                if result:
                    await self.bus.publish_outbound(result)
                continue
            task = asyncio.create_task(self._dispatch(msg))
            self._active_tasks.setdefault(msg.session_key, []).append(task)
            task.add_done_callback(lambda t, k=msg.session_key: self._active_tasks.get(k, []) and self._active_tasks[k].remove(t) if t in self._active_tasks.get(k, []) else None)
  • 如果是 /stop , /restart, /status 则优先处理该命令,如果有结果返回,并把该命令的处理结果发送给出站队列
  • 否则使用 asyncio.create_task来创建一个协程任务来异步执行,并按照 session_key记录活跃任务,同时使用add_done_callback方法来增加回调(任务完成后进行活跃任务的清理)

_dispatch方法

1. 并发控制

      lock = self._session_locks.setdefault(msg.session_key, asyncio.Lock())
      gate = self._concurrency_gate or nullcontext()

这里会按照每个session_key 一把锁,保证同一个session的并发资源控制;
全局 asyncio.Semaphore 控制可以同时并发的运行的Session会话(由环境变量 NANOBOT_MAX_CONCURRENT_REQUESTS 控制,默认 3;≤0 为 nullcontext,不限制)

2. 流式输出(可选)
默认 on_stream / on_stream_end 为 None。
若 msg.metadata.get(“_wants_stream”) 为真(例如某频道希望流式),也就是channel配置为 "streaming": true :
on_stream(delta):把模型增量以 OutboundMessage 发出,metadata 带 _stream_delta: True。
on_stream_end(resuming=…):发空内容,metadata 带 _stream_end、_resuming(供 UI 区分是彻底结束还是工具轮次中间暂停)。

3.核心处理_process_message

  • 当是普通用户消息时

    1. 加载对应的session,从目录 workspace/sessions加载当前会话所属的历史消息。

    2. 如果是 /new,/status,/help命令,则直接返回对应的处理结果

    3. prompt token 合并,

      1. 首先是获取对应session的独享锁
      2. 计算 bucket = self.context_window_tokens(65536) - self.max_completion_tokens(4096) - self._SAFETY_BUFFER(1024) = 60416 。
        计算 prompt占用token estimated:
        • 调用 session.get_history方法, 该方法从seesion所有中消息取 第一条 user 裁齐+去掉孤儿 tool 前缀+ 拷贝成只含 role / content / tool 相关键 的列表,
          供 ContextBuilder.build_messages 等拼真实请求使用
        • 调用 _build_messages 拼出一份和真实请求结构相近的 probe_messages(当前消息占位为 [token-probe])
        • 调用 estimate_prompt_tokens_chain 方法, 该方法先调用模型自带的estimate_prompt_tokens方法,如果模型没有对应的方法,则使用 tiktoken中的cl100k_base近似估算
          把各条消息里字符串 content、text 块、tool_calls/reasoning/name/tool_call_id 和 整份 tools JSON 拼成大字串,用 cl100k_base 计数 token,
          再加 4 * 消息条数 的粗开销,得到整段 prompt 的 tiktoken 估计
      3. 如果 estimated < budget:认为不需要合并,打 debug「idle」日志,直接返回,否则进行如下步骤
      4. 调用 pick_consolidation_boundary 获取对应每轮次要进行合并的 messege 边界,最多经过5轮,并调用consolidate_messages使用 LLM + save_memory 工具把这段对话摘要进 HISTORY.md / MEMORY.md文件中:
        这里巧妙的使用了 TOOL参数的方式来更新对应 HISTORY.md / MEMORY.md 文件的内容。
            entry = args["history_entry"]
            update = args["memory_update"]
            ...
            self.append_history(entry)
            ...
            self.write_long_term(update)
        
    4. 给带有路由信息的工具设置上下文

         for name in ("message", "spawn", "cron"):
             if tool := self.tools.get(name):
                 if hasattr(tool, "set_context"):
                     tool.set_context(channel, chat_id, *([message_id] if name == "message" else []))
      

      设置 MessageTool,SpawnTool,CronTool工具的目标channel和 chat_id 为入站信息的channel和 chat_id。让它们发消息、起子代理、建 cron 时路由到当前会话,避免多会话并发时上下文信息错位

    5. 拼发给模型的消息列表

         history = session.get_history(max_messages=0)
         initial_messages = self.context.build_messages(
             history=history,
             current_message=msg.content,
             media=msg.media if msg.media else None,
             channel=msg.channel, chat_id=msg.chat_id,
         )
      

      这里的history只包括未合并的信息,因为合并后的信息在 build_messages中添加进来,这里的build_messages 会包括:

      1. 一条 role: "system":大段 system_prompt(见下文「系统提示的组成」)。
      2. *history:由调用方传入的会话历史(通常为 Session.get_history() 等得到的 user / assistant / tool 消息列表)。
      3. 一条末尾消息:role 为 current_role(默认 "user";子代理回灌等场景可为 "assistant"),content 为 merged(运行时元数据 + 当前用户正文/图片)。
        system_prompt 由 build_system_prompt(skill_names) 生成,各块之间用 \n\n---\n\n 连接,主要包括:
      部分来源方法内容概要
      身份与规范_get_identity()nanobot 身份、运行环境(OS、架构、Python)、工作区路径、MEMORY/HISTORY/skills 路径、Windows/POSIX 策略、工具与通过 message 发文件等指引。
      Bootstrap 文件_load_bootstrap_files()工作区根目录下若存在则加载:AGENTS.md、SOUL.md、USER.md、TOOLS.md。
      长期记忆MemoryStore.get_memory_context()读取 memory/MEMORY.md,有内容则放在 # Memory 下。
      常驻技能get_always_skills + load_skills_for_context有则追加 # Active Skills。
      技能目录build_skills_summary()有则追加 # Skills 及如何阅读 SKILL.md 等说明。
      其中 ~/.nanobot/workspace/
            ├── AGENTS.md       # 代理调度规则与标准作业程序,是代理的工作指南
            ├── HEARTBEAT.md    # 定时执行逻辑与主动任务状态自检,让 代理 具备“自主意识”
            ├── SOUL.md         # 响应语气、行为特征及输出格式配置,是代理的性格、核心价值观和长期指令
            ├── TOOLS.md        # 工具授权注册表及调用参数规范,是代理的技能配置清单,定义了工具准则
            ├── USER.md         # 用户画像数据,包含特定偏好与交互限制配置, 定义了 代理 如何服务你
      

      user_content 为由 "type": "text"或者"type": "image_url"等多模态输入组成,具体参考OpenAI Chat Completions API和ChatCompletionContentPart
      具体的内容可以见 Nanobot的 system_prompt 示例

    6. 跑 Agent 主循环
      这里主要是 调 LLM +(有工具则并发执行并追加结果)+ 再问模型」 直到得到无工具调用的最终文本或错误/步数耗尽,并返回 最终正文、工具名列表、完整 messages 列表
      若 final_content is None 则 置为固定英文一句,避免对外返回空串。

    7. 持久化与后台合并

         self._save_turn(session, all_msgs, 1 + len(history))
         self.sessions.save(session)
      

      对新增的messages进行清洗 user、截断 tool、丢弃有害空 assistant,打上时间戳后 append 到 session.messages,而后续的 sessions.save 直接写到jsonl文件中。

    8. 如果 MessageTool 已发消息 ,则不再返回主回复 ,避免频道里再贴一条重复总结(由 message 工具已发过),否则返回正常的消息

  • 当是由SpawnTool工具执行产生的子代理的消息时,
    总体上处理逻辑和普通用户消息处理逻辑一样, 区别点如下:

    1. current_role = "assistant" if msg.sender_id == "subagent"如果是由 subagent 发送来的消息的话,则 设置 消息role 为 “assistant”,
    2. 没有对 MessageTool 的额外处理
    3. 没有对 /new 命令的处理
      4. 出站处理
   if response is not None:
       await self.bus.publish_outbound(response)
   elif msg.channel == "cli":
       await self.bus.publish_outbound(OutboundMessage(
           channel=msg.channel, chat_id=msg.chat_id,
           content="", metadata=msg.metadata or {},
       ))

如果主流程返回的内容不为空,则直接进行出站处理,否则如果channel是cli(主要是本地CLI命令nanobot agent),则把出站内容置为空。

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。 阅读详情

相关推荐

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

深入解析 nanobot-agent 核心引擎:AgentLoop 代码详解

Nanobot 是一个“极简主义” AI Agent 框架,聚焦于“轻量 + 可研究性”核心功能:支持 11+ LLM 提供商(如 OpenAI、Anthropic)、8+ 聊天平台(如 Telegram、Discord)、内置工具(文件操作、Web 搜索、Shell 执行等)、子 Agent 生成和定时任务。设计哲学:99% 比 OpenClaw 更小巧(核心 ~3,500 行),一配置文件启动,适合研究者和开发者快速原型。AgentLoop 的角色。

m0_57545130的博客 686

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 477

从源码解析AI Agent运行循环:Nanobot框架AgentLoop设计与实现

在人工智能领域,智能体(Agent)是实现自主任务执行的核心架构。其基本原理是通过感知-决策-行动的循环机制,模拟智能行为。这一机制的技术价值在于将大语言模型的推理能力与外部工具执行相结合,实现复杂任务的自动化处理。在工程实践中,一个健壮的运行循环(AgentLoop)是保障系统稳定性和效率的关键,它需要处理状态管理、异步调度、错误恢复等核心问题。本文以热门的Nanobot框架为例,深入剖析其源码中AgentLoop的实现,涵盖状态机设计、处理器管道、工具调用等关键模块。通过理解这些设计,开发者能够更好地应

weixin_28223453的博客 305

非目标代谢组学(untargeted metabolomics)中常用的方法学考察的方法(四)

最早使用的一种方法,从QC样本的总离子流图中选择具有代表性的离子峰(覆盖不同的保留时间,不同的强度),在对QC样本进行重复检测之后,计算这些离子的保留时间以及峰面积的相对标准偏差(RSD),用以考察分析方法的稳定性以及重复性。所有样品检测完之后,收集所有的QC样本的原始数据进行数据预处理,包括(峰提取,排列,归一化等),经过数据过滤(80%规则)之后,计算剩下的峰的峰面积的RSD值。由于QC样本是 等量混合了所有的被检测样本,理论上QC样本包含了所有样本中的代谢物,因此QC样本理论上会。

hlllllllhhhhh的博客 1489

U盘无法识别?一条命令轻松修复,数据不丢失

问题描述 U盘经常会遇到提示:无法识别或者需要重新格式等问题,例如下图 修复方法 WIN+R输入cmd 输入chkdsk+盘符:/F /F是修复的意思 更多内容 U盘无法识别或提示需要格式化?别急着格式化丢失数据!本文教你使用Windows自带的命令快速修复U盘文件系统错误,简单几步就能解决问题,让你的U盘恢复正常使用💾✨

XiaoqiangClub的博客 641

第二篇:俯瞰全局 —— nanobot 源码结构与启动流程

项目采用分层解耦架构,七大模块职责清晰:agent(大脑/推理循环)、bus(消息总线/神经中枢)、channels(多平台适配/五官)、providers(统一LLM接口/语言中枢)、config(配置管理)、session(会话管理)和cli(命令行入口)。 消息处理严格遵循ReAct模式:通过ContextBuilder构建含系统提示、长期记忆(Markdown文件)和对话历史的上下文,LLM推理后判断是否调用工具,形成"思考→行动→观察"循环,最多迭代20次防止死循环。

weixin_53961451的博客 1060

布尔可满足性问题(SAT)深度研究

布尔可满足性问题(Boolean Satisfiability Problem, SAT)是计算机科学和数理逻辑中的一个核心决策问题。其定义为:对于一个给定的布尔逻辑公式,判断是否存在一组对其变量的真值赋值(即,为每个变量指定真 (True) 或假 (False)),使得该公式的最终计算结果为真。如果存在这样的赋值,则称该布尔公式是可满足的 (satisfiable);否则,称其为不可满足的 (unsatisfiable)。

步子哥的博客 497

NanoBot 架构拆解

通道适配器和启动:消息事件和队列:核心循环:系统提示组装:工具系统:调度和心跳。

新缸中之脑 1213

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

专注于编程、AI、人工智能等多个领域内容研究和分析 725

8.30华为OD机试真题 新系统 - 单词搜索计数 (Java/Py/C/C++/Js/Go)

8.30华为OD机试真题 新系统 - 单词搜索计数 (Java/Py/C/C++/Js/Go)

算法大师! 601

nanobot:4000 行代码复刻 OpenClaw 核心能力的极简 AI Agent 框架

2026 年初,OpenClaw 作为现象级 AI Agent 产品引爆全球,但其 43 万行代码的复杂度让许多开发者望而却步。香港大学数据科学实验室推出的 nanobot,仅用约 4000 行 Python 代码就复现了 OpenClaw 的核心智能体能力。本文将深入分析 nanobot 的设计哲学、与 OpenClaw 的对比、以及其精简而强大的架构设计。

玄同765的AI应用开发博客 1001

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【OpenClaw】通过 Nanobot 源码学习架构---(1)总体

通过on_job回调 → MessageBus.publish_inbound() → AgentLoop 处理 → MessageBus.publish_outbound() → ChannelManager 分发:通过on_execute回调 → AgentLoop.process_direct()(内部处理),然后通过on_notify回调 → MessageBus.publish_outbound() → ChannelManager 分发。

罗西的思考 491

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

通过 Nanobot 源码学习架构---(10)Heartbeat

HEARTBEAT.md是一个标记文件,包含需要定期检查的任务列表,文件位于工作空间根目录,可由agent自主更新。这个定义的核心价值是。,其放弃传统的 “硬编码规则解析”,改用 LLM 驱动的智能决策,适配自然语言描述的任务场景;_HEARTBEAT_TOOL 是一个虚拟工具,用于LLM决策跳过或者运行任务,LLM 被要求调用这个工具并返回适当的参数,避免了自由文本解析的不确定性。HeartbeatService 实现了一个周期性的自主唤醒系统,定期检查是否有待处理的任务,无需外部触发。

zsX5Pe0G6的博客 203

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

nanobot 源码阅读笔记:一个 3.5w star 的 AI Agent 框架是怎么跑起来的

nanobot 的代码量不大,但把一个 Agent 系统需要的东西都覆盖到了。MessageBus做解耦(,不到 30 行)AgentLoop跑 ReAct 循环(做记忆管理(其余的 Channel、Provider、Tool、Skill、Cron 都是往这个骨架上挂的扩展模块。如果你想搞清楚 AI Agent 到底是怎么工作的,我觉得读这个项目比读 LangChain 或者 AutoGen 的源码性价比高很多。代码规模小,设计意图清晰,没有过度抽象。

坚持无悔亦无休 916

4000 行代码搞定 AI Agent:NanoBot 架构深度拆解

这个架构证明,有效的 AI Agent 不需要庞大的框架。通过将 Agent 设计精简到基础要素,NanoBot 实现了更快的实验、更容易的调试、更低的资源消耗和更强的执行控制。本文深度拆解了 NanoBot,仅用 4000 行代码实现了完整的 AI Agent 能力,讲解了其最小化架构设计思路,告诉你如何构建真正可控、可读、可改的 AI Agent。如果想构建可控 Agent,这个结构让你以最小成本闭合循环,然后逐步添加多模型路由、更强的记忆检索、更严格的权限边界和更可靠的审计回放。

残星说梦话 531

【OpenClaw】通过Nanobot源码学习架构---(1)总体

OpenRouter、Anthropic (Claude)、OpenAI (GPT)、DeepSeek、Groq、Gemini、MiniMax、AiHubMix、SiliconFlow、VolcEngine、通义千问 (Dashscope)、Moonshot (Kimi)、智谱 (Zhipu)、vLLM、OpenAI Codex、GitHub Copilot。或者说,OpenClaw 是 Agent 中"不是 AI 的部分",而 Agent 的实际"聪明程度"完全取决于背后接入的语言模型。

el81fJoly的博客 220

通过Nanobot源码学习架构---(1)总体

注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。

QI1CJQKbm的博客 173

通过Nanobot源码学习架构---(2)外层控制逻辑

nClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"非常适合学习Agent架构。我们本篇来分析这几个组件(MessageBus不做单独介绍,而是穿插在其它组件中)。注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。

Qi6nQ201e的博客 215

openclaw最强平替之nanobot源码解析(二):深入 agent 命令与极简消息总线设计

nanobot 的设计哲学在agent命令和MessageBus中体现得淋漓尽致:用最简单的 Python 原生工具(如),解决最复杂的解耦问题。理解了这一层,你就已经掌握了 nanobot 跨渠道通信的精髓。下一篇,我们将深入 nanobot 最具特色的部分:Markdown 驱动的记忆系统(Memory System),看看它是如何让 AI “长记性”的!💡nanobot算法上没有什么大的创新,但是其工程思维是需要我们每个agent从业工程师需要学习的!

优快云_Lrcx的博客 616

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 231

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 406

我用 GPUWorks 在 M1 Pro 上搭了个发票识别原型

公司里经常要看电子发票。我想先做个小原型:把 PDF 发给一个自己部署的图文模型,让它提取发票类型、日期、交易双方和金额,再把结果交给同事核对。这个原型不用先接财务系统,先看看从部署到调用要走多少步,模型返回的内容能不能帮上忙。

鸽芷咕的博客 2万+

您您这可以把问小白的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭

第三层是格式编译层。这个决策背后的判断很清晰:一个批量导出工具的价值,不在于“试三次”,而在于你真正用它处理了几十份技术文档、访谈记录或课程讲义之后,它是否值得留在你的工作流里。问小白的会话列表通过分页接口加载,AI导出鸭 在页面运行时建立旁路监听,捕获每一次分页请求返回的完整对话清单,包括会话 ID、标题、时间戳和隐藏的元数据字段。让AI导出回归优雅——这句话说的是:导出不该是体力活,而应该是一次完整的、可预期的文件交付。注意:这里的“批量”指的是左侧列表里的多个独立会话,不是一条会话内的多轮对话。

laoyunsi的博客 250

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 503

河道漂浮物目标检测数据集

目标检测,yolo,河道漂浮物目标检测数据集

DL_data_set的博客 205
上一篇: Nanobot的system_prompt示例
下一篇: Nanobot 从 Channel 消息处理看python协程的使用
鸿乃江边鸟
博客等级 码龄6年 3746粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值