自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 把 Agent 的 “Loop Engineering“一次性讲透

本文介绍了两个关于AI Agent核心能力的开源项目: how-ai-agents-remember:拆解5个开源Bot的记忆系统,分析数据流 how-agent-loop-engineering:通过8篇文章讲解Agent如何持续执行任务 核心观点: Loop Engineering设计执行闭环,使Agent能自动推进任务直至完成 有效循环需包含目标、执行、外部状态更新、验证四个关键组件 项目提供历史演进、核心机制、实战案例及避坑指南等内容 建议先学习记忆系统再研究任务循环,两者构成Agent的基础能力

2026-06-26 18:41:57 299

原创 我们把 Hermes Agent 的记忆系统拆开看了:AI Agent 到底该怎么“记住”事情?

GitHub仓库"How AI Agents Remember"深度解析了5个开源AI Agent项目的记忆系统实现,包括OpenClaw、Hermes Agent、nanobot、NullClaw和OpenFang。项目通过逐行源码分析,揭示了不同框架如何设计记忆架构、数据模型和检索管线。 重点剖析的Hermes Agent采用分层记忆架构:用Markdown文件存储常驻事实,SQLite数据库管理会话历史,Memory Provider插件处理外部记忆,ContextEngine负责上下文压缩,Skil

2026-06-18 14:58:15 350

原创 Windows 截图到 WSL 的Codex、OpenCode、ClaudeCode

WSL Snapaste工具解决了Windows截图无法直接粘贴到WSL终端的问题。该项目支持Snipaste、ShareX等主流截图工具,实现截图后直接Ctrl+V粘贴到WSL终端。特别适合在WSL中使用AI编程工具处理截图、报错图的开发者。用户只需从GitHub下载运行即可,支持后台常驻和托盘快捷开关。项目地址:https://github.com/breath57/wsl-snapaste

2026-06-11 22:21:48 375

原创 OpenClaw 那一堆 .md 到底是干嘛的?—— 从源码搞懂 Agent 的人格与记忆系统

OpenClaw 的 Agent 系统通过多个 markdown 文件实现模块化管理,每个文件有明确的定位和功能: 文件分类与作用: IDENTITY.md:结构化存储 Agent 基本信息(名称、表情符号等),由代码直接解析使用 SOUL.md:定义 Agent 的核心价值观和行为准则,直接注入系统提示词 USER.md:记录用户信息和偏好 AGENTS.md:包含详细的操作规范和工作流程 MEMORY.md 和 memory/目录:分别存储近期和长期记忆 设计优势: 信息分层管理,更新互不干扰 不同安全

2026-04-15 23:20:37 602

原创 【钉钉会议 | 日程 Skill】让 Agent 真正帮你「把时间排进钉钉」

钉钉日程协作技能dingtalk-calendar打通企业会议全流程,实现"找人→约时间→订会议室→发会邀→会后跟进"闭环。该技能解决六大痛点:1.快速创建会议并关联钉钉视频会议;2.智能查询参与者空闲时间;3.实时查看会议室可用状态;4.自动推送签到链接;5.支持周期性会议自动排期;6.会后待办事项衔接。作为钉钉协作中枢,可与通讯录、消息、待办等功能联动,真正实现从通知到协作的升级。适用于深度使用钉钉的企业,帮助团队提升会议管理效率。开源项目提供完整安装指南。

2026-04-07 00:40:29 326

原创 我用开源项目把 AI Agent 和钉钉打通了,现在能查人、发消息、管文档

钉钉技能库dingtalk-skills发布v0.4.0版本,新增通讯录技能,目前共支持5个核心场景:知识库管理、AI表格操作、消息发送、待办任务和通讯录查询。该项目基于Anthropic skills规范构建,无需编写代码即可通过对话操作钉钉。各技能可组合使用,实现自动发通知、会议记录归档等复杂场景。提供命令行和ClawHub平台两种安装方式,全部功能通过curl实现,零额外依赖。项目开源在GitHub,计划未来增加审批、日历等更多技能支持。

2026-03-13 17:25:10 983

原创 让 AI 帮你发钉钉消息——dingtalk-message skill开源了

钉钉AI助手dingtalk-message上线,可通过自然语言指令自动发送各类钉钉消息。该工具支持群机器人、企业内部应用机器人(单聊/群聊)和工作通知三种场景,能处理文本、Markdown、卡片等多种消息类型,并支持消息撤回和已读查询。用户只需用自然语言描述需求(如"发Markdown消息到测试群@张三确认"),AI会自动完成JSON拼接等繁琐操作。安装简单,零依赖,可与知识库管理、AI表格等功能组合使用,显著提升办公效率。项目已开源,支持用户反馈和功能建议。

2026-03-11 19:11:14 925

原创 OpenClaw 3.7 最重磅更新:ContextEngine 插件接口源码级拆解 —— AI Agent 上下文管理从此告别硬编码

本文深入解析了OpenClaw 3.7 beta引入的ContextEngine插件接口,揭示了AI Agent框架中上下文管理的关键痛点与创新解决方案。文章通过逆向工程发现旧架构存在逻辑散落、代码重复、策略硬编码等问题,而新接口通过7个生命周期钩子(如ingest、assemble、compact)将核心逻辑与实现解耦,支持灵活替换处理算法。特别值得关注的是其采用绞杀者模式实现零风险升级,通过全局注册表实现插件化扩展。这一设计不仅解决了上下文管理的本质问题,更为AI Agent系统提供了可扩展的架构范式,

2026-03-09 21:01:45 1103

原创 爆肝逆向 OpenClaw | Nanobot | NullClaw | Openfeng 的记忆系统

本文深入分析了4个主流AI Agent框架的记忆系统实现方案: 1. nanobot(Python):极简Markdown存储,LLM自主筛选关键记忆(200行代码) 2. NullClaw(Zig):企业级9阶段检索管线,支持10种存储后端与熔断降级 3. OpenClaw(TypeScript):Markdown为唯一信源,数据库可重建,6种Embedding自动切换 4. OpenFang(Rust):统一SQLite存储,集成知识图谱与置信度衰减机制 核心发现: 所有系统都区分短期/长期记忆 LLM

2026-03-07 22:33:44 672

原创 让 AI Agent 操作钉钉文档、表格的技能(Skill)库

摘要:dingtalk-skills 是一个为AI Agent设计的钉钉技能库,遵循anthropics/skills规范。安装后,AI工具如Claude Code等可直接通过自然语言操作钉钉,实现文档管理、表格查询等办公自动化功能。目前支持钉钉文档/知识库和AI表格的核心操作,无需编码即可完成会议纪要整理、数据查询等任务。用户只需通过npx命令安装技能包,配置应用信息后即可使用。项目计划扩展更多钉钉场景,欢迎开发者参与完善。GitHub地址:github.com/breath57/dingtalk-ski

2026-03-06 20:14:03 1433

原创 都在用Skill,那你知道好的Skill应该长啥样吗?—— 1次Skill优化实录

本文通过一个Git工作流自动化Skill的设计优化案例,探讨了如何设计高质量的Skill。作者最初设计了包含三个脚本的Skill(共335行代码),随后反思发现这些字符串处理任务本可由Agent原生完成。文章深入分析了Skill的三层架构(元数据、指令手册、资源工具),提出"自由度匹配任务脆弱性"原则:精确操作适合脚本,灵活判断应交给Agent。最后提供了Skill质量评估checklist,包括触发机制清晰度、上下文效率、任务分配合理性等维度。该案例展示了从功能实现到架构优化的完整Sk

2026-03-06 14:00:00 862

原创 Vibe Coding:别只追热度,先懂本质再谈落地

Vibe Coding是AI时代的新型编程范式,核心在于重构人机协作模式。开发者负责需求拆解和架构设计,AI处理代码生成等机械工作,形成"人定方向-AI落地"的高效配合。关键要把握四大原则:明确人机边界、快速迭代验证、工具无缝衔接、聚焦业务价值。落地时需分三步走:快速原型、AI迭代、风险兜底,团队使用则需建立规范流程和共享资产。Vibe Coding不是AI代劳或摸鱼工具,而是通过合理分工提升开发效率,让开发者专注创造性工作。后续将推出系列文章详解各技术栈的实操方法。

2026-01-22 09:55:17 929

原创 Go select 底层“注册-唤醒”机制:原来这就是观察者模式

Go 的 select 语句通过观察者模式实现高效通道监听,其底层采用"注册-唤醒"机制:1)编译阶段将select转为runtime结构;2)运行时注册通道事件;3)无就绪事件时挂起goroutine;4)通道就绪时唤醒执行。这种设计融合了观察者模式和反应器模式思想,相比轮询方式具有显著性能优势,是Go并发编程的核心机制之一。

2025-12-03 03:23:36 776

原创 代码执行 + MCP:AI 代理 token 省 98%!

本文详解代码执行 + MCP 优化 AI 代理的实操方案:解决传统 MCP 工具调用的 token 浪费、延迟问题,通过工具代码封装、按需调用,实现省 token、提速度、护隐私,附完整代码与图解,新手也能上手。

2025-11-26 23:15:04 976

原创 【全网首发】深度解析6.3k star 开源多智能体框架 DeepAgents 的提示词工程

DeepAgents是LangChain推出的轻量级多智能体协作框架,提供开箱即用的多智能体协作能力,支持Swarm架构、分布式任务处理等场景。其系统提示采用分层设计,包含基础提示、用户自定义提示和中间件提示(如TodoList、文件系统等)。核心设计强调任务导向性和工具使用,通过记忆优先协议实现知识持久化存储与检索,要求智能体主动检查记忆文件、优先使用存储知识而非通用知识,并遵循简洁直接的交互风格。该框架深度集成LangChain生态,是快速构建LLM多智能体系统的便捷选择。

2025-11-26 15:07:02 1299

原创 事件驱动 vs 传统多线程:以用户下单全流程为例,手把手带你看两种设计的差异与实现

摘要:本文以用户下单支付全流程(7个关键步骤)为案例,对比分析事件驱动与传统多线程两种高并发实现方案。事件驱动模式通过事件总线解耦步骤依赖,实现异步非阻塞处理,适合高并发场景;而多线程模式逻辑直观但资源消耗大。文章提供Python完整代码实现,从耦合度、并发能力等维度进行深度对比,帮助开发者根据业务场景选择合适架构。

2025-11-24 22:36:06 1096

原创 深度剖析 9.6k star 开源项目 Open Deep Research 蕴含的提示词工程设计

Open Deep Research 是 LangChain 团队开源的深度研究工具,通过"主管+研究员"多智能体协同工作,解决传统研究中的信息碎片化问题。其核心在于精心设计的 Prompt 系统,主要包括澄清 Prompt 和转换 Prompt 两类。澄清 Prompt 用于判断是否需要用户澄清,避免重复提问,识别模糊点,并输出结构化 JSON 结果。转换 Prompt 则将用户问题转化为详细研究简报,强调具体性和完整性。该系统支持主流 AI 模型和搜索工具,显著提升科研和市场分析效率

2025-11-19 14:41:44 1073

原创 【首发】深入Weaviate多租户,从用法到存在的意义

摘要: Weaviate多租户功能通过物理隔离实现企业级数据安全,相比Filter过滤具有显著优势:隔离强度更高、检索性能更优(仅访问指定租户分片)、符合GDPR等合规要求。从SaaS平台到多部门协作场景,Weaviate支持租户级资源管理和权限控制,配置过程包含启用多租户实例、创建租户集合、生命周期管理等关键步骤。结合HNSW索引和分词器优化,成为企业AI应用(如知识库、教育平台)向量数据管理的首选方案,尤其适用于金融、医疗等强合规领域。

2025-11-13 00:39:42 833

原创 让Weaviate向量查询性能瞬间提升10倍的简单技巧

摘要:向量归一化是优化Weaviate性能的关键技巧,通过将向量长度统一为1,可以大幅提升查询效率和精度。归一化简化了余弦相似度计算,使运算速度提升10倍以上;优化HNSW索引导航,减少20%漏检率;配合量化技术可降低70%内存占用。实施只需三步:生成向量时立即归一化、配置cosine距离度量、验证归一化效果。实验显示,归一化后百万级数据的查询响应时间从320ms降至28ms,内存占用减少70.4%,检索准确率提升18%。对于语义检索场景,归一化不会损失精度,反而能消除干扰因素。

2025-11-07 18:32:51 927

原创 RAG下的向量库用Weaviate还是用Postgres

摘要: Weaviate与PostgreSQL(搭配向量扩展)是向量检索的热门技术选项,但定位差异显著。PostgreSQL是关系型数据库,通过扩展支持向量检索,适合结构化业务数据与向量一体化存储(千万级以下)。Weaviate是原生向量数据库,擅长大规模向量检索与复杂混合查询(亿级向量仍低延迟)。选型关键: PostgreSQL适用场景:需事务、JOIN查询且向量规模较小(如企业轻量RAG系统)。 Weaviate适用场景:向量为核心、数据量大或需复杂混合检索(如全网文档搜索)。 混合架构:两者结合可兼顾

2025-10-29 00:15:43 966

原创 【大白话讲】A2A协议,即多Agent通信协议

A2A协议通过三大标准化机制实现智能体协作:身份名片(Agent Card)让智能体互相识别能力,统一消息格式确保跨平台通信,结构化任务流程管理协作生命周期。该协议为智能体定义了类似人类社交的交互规则,包括身份声明、标准通信接口和任务状态跟踪机制。示例展示了旅行规划智能体通过查询航班智能体的身份名片,按照标准格式发起请求并获取结构化响应的完整流程,验证了协议在跨智能体协作中的可行性。

2025-10-28 20:55:48 1058

原创 [EvoAgentX]Agent工作流三大自进化算法:TextGrad、MIPRO、AFlow深度解析

在AI Agent开发中,我们经常面临这样的困境:幸运的是,学术界近期提出了三种突破性的自动优化算法:本文将深入解析这三种算法在EvoAgentX框架中的实现细节与应用实践。TextGrad的核心洞察是:既然LLM能理解自然语言反馈,为什么不用文本代替数值梯度?传统深度学习:TextGrad:这种类比听起来抽象,让我们通过实际代码理解。EvoAgentX使用开源的textgrad库,将Agent的提示词包装为对象:关键转换:损失函数不再返回数值,而是返回LLM生成的文本反馈:示例输出:步骤3:反向

2025-10-28 00:33:23 1768

原创 哪些任务是单Agent 无法完成,而多Agent能够完成的呢?

单Agent与多Agent系统的核心差异在于架构设计而非功能边界。单Agent通过集成多工具实现"万能专家",而多Agent通过专业分工构建"协作团队"。多Agent在三大场景具有不可替代性:1) 跨空间实时控制(如分布式物流/电网),解决单Agent的物理延迟瓶颈;2) 开放博弈环境(如拍卖/军事对抗),实现动态策略创新;3) 高可靠系统(如工业质检),通过物理隔离保障安全。决策时应评估任务复杂度、实时性要求及容错需求,遵循"先单后多"原则,仅在

2025-07-08 16:44:44 843

原创 解决 LangChain 中 RAG 检索结果过多导致上下文过长的 6 大策略

优化RAG系统:解决上下文过长问题的实战方案 针对RAG系统中检索文档过多导致LLM输入超限的痛点,本文提出六维度优化方案:1) 检索参数调整(调节k值、MMR算法、元数据过滤);2) 文档分块策略(递归分块、语义分块及上下文增强);3) 结果精筛(摘要压缩、重排序模型);4) 高级检索(多路召回、层级合并);5) 模型适配(选用长上下文LLM或分批处理);6) 性能调优(动态分块、嵌入缓存)。这些方法平衡了信息完整性与上下文长度,经实践验证可显著提升生成效果。

2025-06-03 11:20:14 1744

原创 【这一篇就够】MySQL创建和使用JSON数据的索引

- 创建表 DROP TABLE IF EXISTS ` test `;CREATE TABLE test(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , jchararr JSON NOT NULL COMMENT "元素为char类型的json数组");-- 插入数据 INSERT INTO test(jchararr) VALUES('["1","2","3"]') ,('["1"]') ,('[]') ,('["4","2","3"]');

2023-03-03 16:19:30 7649 9

原创 python import失败原因及解决方案

中,并且其中还包含一些python自带的工具包所处的目录。,以及python核心包的导入没问题的原因.第一个值得关注的点,返回列表的第一个元素为。分析到此为止,很容易得到解决方案,即, 往。肯定能成功,不管在什么目录下都可以导入。因此,我们可知执行的路径会被自动加入。,可以发现这个路径,就是我们执行。因此,该篇内容只讲包的解决方式。中增加需要扫描包的所处目录。这个列表类型的变量中存在。此时有这么一个目录结构。因为这些包的目录进行在。命令时,所处的路径。

2023-01-03 19:12:10 10666 3

原创 electron(vue3+vite+flask+sqlite)构建桌面应用程序 踩坑

全网搜不到,electron(vue3+vite+flask+sqlite + 其它应用的)教程,那只能自己来踩坑了,真的是踩了完完全全一整天,从上午十点到,现在这个凌晨一点,终于完结了,哎要不是有兴趣,给自己的原创程序加个桌面应用版本。当然明天还要继续加上paddle+flask的打包程序!加油!解决:文件中增加分析: 将vite项目打包是的路径变为,若不指定是,nginx可以正常使用,但由于electron是使用形式的路径将无法正常访问。场景:在package.json中配置将该文件导入使

2022-06-27 01:02:16 1764

原创 pyinstaller打包程序, 找不到文件路径的问题

报错内容为: 百度查找, 目前搜到的都是一些和产生的问题, 经过审计代码, 该项目并不存在该问题.于是想到了第一个解决方案1解决方案1: 直接将原先项目中的配置文件拷贝到, 提示缺失文件的路径中.()缺点: 每次 -> 都要进行一次手动的 复制粘贴文件, 很麻烦.配置文件导入的问题, 下方是问题出现的原因分析: 代码的导入是的形式的导入的, 并不会识别出该文件的存在, 只会当作普通的字符串, 导致没有将 两个配置文件进行处理打包.找到了问题的根源, 可以思考为什么其它文件可以被导入?可以猜测是因为模块触

2022-06-23 20:21:26 8610

原创 无法访问Docker的Flask服务

分析:如果设置为或者,容器环境外将无法访问。因为和都是环回地址,也就是只能指代本身,无法提供本机环境之外访问,并且 只是 的别名。而当服务器被告知要监听时,意味着“监听每个可用的网络接口”,当然最后会被替换成本机真实的IP地址,例如:,并且将会同时监听:,也就是说最终flask启动的服务将同时提供本机访问和外部访问。解决:将改为即可。分析:绑定不正确,将无法提供访问。解决:重新创建容器,确保正确。.........

2022-06-21 13:55:32 1280 2

原创 ORM(对象映射模型)理解, 为什么出现ORM这个玩意?

首先, 对象关联映射模型,其实是将数据表关系,然后映射成对象关系概括的来说数据库的表结构映射成面向对象中的类第二,是数据表中的记录映射成面向对象中的对象第三,数据表之间的关系,映射成对象之间的关系模型那么为什么会有对象关联映射这种思想呢?因为目前还没有,面向对象的数据库那么,为了解决这个问题就产生了这种对象关联映射,这种思想将数据库中的实体,把它抽象成类的属性, 然后再次基础上添加行为,也就是说,将数据库中的实体,封装成类于是呢,对于数据库的操作就做完成了对对象的操作这样就可以和应用面向

2021-01-20 21:25:08 762

原创 可移植性和可重用性的区别

前段时间看了软件工程的书, 这两个概念说的区别也不是很清楚, 后来根据经验的个人理解.可重用性: 其实就是复用, 可以应用在多个地方, 或者一个地方可以重复用多次可移植性: 稍微修改以下就可以在另外一个环境中使用, 也就是说可以在两个环境以上使用, 就具备可移植性区别:重用: 强调被使用的次数, 也就是通用性移植: 强调支持的环境的能力, 多个系统环境都可以正常使用, 也就是兼容性...

2021-01-20 21:14:47 4152 2

原创 清晰 明了 玻璃盒测试的六种覆盖

语句覆盖条件结果为 True 全部都执行一次, 不管false的情况判定覆盖每个分支, True 和 Flase 都要执行一次条件覆盖if ( a>3||b<8) a>3 为True的时候一次, False的时候一次, b<8也是一样, 不关注, ( a>3||b<8)的结果是啥, 两次都是 True都无所谓判定/条件if ( a&g...

2020-11-25 13:09:13 298

原创 SKU与SPU(外行人都能看懂)

This官方解释SPU: 标准化产品单元(Standard Product Unit)。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。SKU: 库存保有单位 (Stock keeping Unit)是对每一个产品的唯一标示符(唯一表示符: 就是可以唯一确认一个存在的东西。 例如身份证号, 是一个人的唯一标识,因为每个人的身份证号码不同且唯一)就这说辞, 我当初看十遍...

2019-12-19 17:12:05 3558

原创 大三 sql server 自我总结

use JXGL(1) select sname,age, s.sdept, cname from S join sc on s.sno = sc.sno join c on sc.cno = c.cno select s.sno, sname, cname, grade from S join sc on s.sno = sc.sno join c on sc.cno = c.cno–...

2019-12-17 22:52:37 318

原创 大三-软件工程复习-自我理解后制作

《软件工程》复习大纲文章目录《软件工程》复习大纲@[toc]第1章:软件工程的范畴重点掌握如下的内容:1掌握软件工程、软件危机、生命周期的概念 1%2掌握维护的3种分类并能够结合具体例子进行判断 1%3掌握为什么没有计划、文档和测试阶段 1%4掌握软件工程的传统生命周期模型(瀑布模型)的阶段划分和各阶段的主要任务1%5掌握传统的维护观念与现代的维护观念之间的区别1%了解如下内容:1了解纠错与成......

2019-12-14 22:58:04 901

原创 技术进阶的方法论-讲座记录

给大家分享一些技术进阶的方法论,我相信大家提升技术已经听过很多的方法,但这里我想给大家分享的并不是具体你应该怎么去学习技术,而是超越技术本身,我们在做技术的时候,如何构建一个正确的思维方式。这个思维方式不仅仅适用于前端开发,也适用于任何开发岗位,同时还适合于任何行业的技术从业者。经过一些了解, 基本 80% 以上的同学换工作的原因都是:“当前公司的技术有些局限,感觉没有办法成长了,感觉没人带,感觉需要换一个公司去学习新的技术”。在这里我抛一个问题给大家,大家跳槽的时候,换工作的主要原因是否也是上面的这个原因

2019-09-27 23:12:53 321

原创 tuple 元组 移除和增加元素的方法

python中 tuple 没有 像 List 那样的 append, remove 方法, 我们可以通过以下, 实现增加require_add_element = 5tup = (1,2,3,4)tup = tup + (require_add_element,)print(tup)移除require_remove_element = 3tup = (1,2,3,4)inde...

2019-09-14 20:39:05 8952 2

原创 Numpy常用基础语法

【代码】Numpy常用基础语法。

2019-09-14 20:31:57 268 1

原创 python学习笔记(推荐有其他语言编程经验想学python的人看)

文章目录进制转换身份判断:注意: isinstance() 可以判断父类和子类相等算术符号的优先等级导包的方法导入多个模块变量或者方法__init__.py的用法内置函数注意: 自定义函数名, 不要和 内置函数重名*** 递归调用的次数可以自己设置, 通过sys库返回值类型为多个时的处理方式序列解包参数注意: 关键字参数 和 默认参数 不能和普通参数有交叉, 有混杂的使用的面向对象类定...

2019-09-10 20:44:10 2432

原创 迪米特原则(最少知道原则)-快速理解

定义一个对象应该对其他对象保持最少的了解。狭义的迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一类的某一个方法的话,可以通过第三者转发这个调用。广义的迪米特法则:一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来。一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对...

2019-09-04 10:23:16 4121

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除