
精品专栏
文章平均质量分 88
限时免费观看精品专栏
泰山AI
优快云博客专家、阿里云博客专家,华为云博客专家、掘金优秀作者、开源项目累计1000+star作者,精通JAVA、python和AI智能体开发,致力于帮助开发者快速提升技术能力,解决各种技术问题!购买付费专栏的用户,如果文章对你没有解决你的问题,可以在评论区留言或者私信我,如果还能解决,可私信我退款!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【开源项目】MaxKB4J基于java开发的工作流和 RAG智能体的知识库问答系统
MaxKB4J是一款基于Java开发的RAG知识库问答系统,整合了MaxKB和FastGPT的优势,提供开箱即用的智能问答解决方案。系统支持文档上传/自动爬取、文本向量化和检索增强生成,减少大模型幻觉。具备模型中立特性,兼容多种本地及云端大模型,并内置工作流引擎实现复杂业务编排。技术栈采用Java17/SpringBoot3、Vue.js、PostgreSQL等,支持MCP协议实现代码上下文感知。适用于智能客服、企业知识库等场景,提供简单部署方式(java -jar启动)和可视化UI界面。项目已开源,地址:原创 2025-06-06 09:06:03 · 507 阅读 · 2 评论 -
仅用十几行代码实现 OpenManus,Spring AI Alibaba Graph 快速预览
Spring AI Alibaba Graph 即将发布正式版本,为开发者提供灵活的工作流和多智能体开发能力。本文通过三个示例展示其核心功能:1)基于工作流编排的客户评价处理系统,实现自动分类和解决方案;2)基于ReAct Agent的天气预报查询系统,通过Agent-Tool循环处理用户请求;3)基于Supervisor多智能体的OpenManus实现,相比原版本减少80%代码量。该系统包含Planning、Supervisor和Executor三个核心Agent协作完成任务,大幅简化了复杂智能体系统的开原创 2025-05-29 16:33:30 · 665 阅读 · 0 评论 -
Spring AI 智能体代理模式(Agent Agentic Patterns)
摘要:《构建高效代理》研究报告提出了利用大语言模型(LLM)构建智能系统的五种核心模式。工作流模式(链式/并行化/路由)适合确定性任务,提供可预测性;代理模式(协调者-执行者/评估者-优化者)则适用于需要动态决策的场景。Spring AI实现表明,简单架构往往比复杂框架更有效,开发者应根据任务特性选择合适模式——工作流保证可靠性,代理提供灵活性。该研究为企业级AI应用提供了兼顾效率与可控性的架构指南。原创 2025-05-26 09:59:08 · 1177 阅读 · 0 评论 -
Java开发基于Spring AI Alibaba玩转MCP:从发布、调用到 Claude 集成
本文介绍了模型上下文协议(MCP)及其在Spring AI中的应用。MCP是Anthropic公司推出的标准化AI工具对接协议,通过搭建AI与各类工具间的桥梁,简化开发流程。文章首先演示了如何在Claude Desktop中集成GitHub MCP服务,随后详细解析了MCP架构,包括客户端(如Claude、Spring AI应用)和服务端(连接数据源)的协作机制。重点讲解了Spring AI MCP的两种服务实现方式:基于stdio的轻量级本地服务和基于SSE的远程服务,并提供了天气服务示例代码,展示如何通原创 2025-05-26 09:42:57 · 859 阅读 · 0 评论 -
Spring AI 源码解析:Tool Calling链路调用流程及示例
文章摘要: Tool工具系统通过API集成扩展了AI模型的功能,主要用于信息检索和执行特定操作(如发送邮件、触发工作流等)。其核心流程包括:定义工具参数→模型调用工具→应用程序执行→结果反馈→生成最终响应。系统采用注解式开发,通过@Tool标注方法定义工具属性,ToolDefinition接口规范工具名称、描述和输入模式。实践代码基于Spring-AI项目最新源码,演示了工具调用的完整链路,包括DefaultChatClient的多工具注册方式和参数校验机制。原创 2025-05-24 21:48:48 · 972 阅读 · 0 评论 -
Java 版 Manus 实现来了,Spring AI Alibaba 发布开源 OpenManus 实现
摘要:Spring AI Alibaba推出OpenManus多智能体框架,支持Java开发者构建AI应用。该框架通过Planning Agent分解任务,多个Manus Agent协作执行,最终由Summary Agent汇总,实现复杂任务处理。演示案例包括股价查询、旅行规划、文档翻译等功能。当前版本存在流程编排复杂、工具覆盖有限等问题,未来计划推出强化版OpenManus和可视化评估平台,代码量预计减少70%以上,并接入更成熟的MCP工具提升性能。 (149字)原创 2025-05-24 21:19:40 · 997 阅读 · 0 评论 -
构建智能 Web Search 应用:使用 Spring AI Alibaba 构建大模型联网搜索应用
本文介绍了如何使用 Spring AI Alibaba 构建大模型联网搜索应用,结合模块化 RAG(Retrieval-Augmented Generation)架构和信息检索服务(IQS)来增强大模型的能力。Spring AI 的模块化 RAG 架构分为四个主要步骤:Pre-Retrieval、Retrieval、Post-Retrieval 和生成。Pre-Retrieval 阶段通过查询增强、改写和扩展来优化用户输入;Retrieval 阶段从多种数据源中检索相关文档;Post-Retrieval 阶原创 2025-05-23 10:22:02 · 708 阅读 · 0 评论 -
使用 Ollama 本地模型与 Spring AI Alibaba 的强强结合,打造下一代 RAG 应用
本文介绍了如何搭建一个基于RAG(Retrieval-Augmented Generation)架构的应用。核心组件包括Spring AI、Ollama、Spring AI Alibaba和Elasticsearch,分别用于AI开发、本地大模型运行、大模型应用构建和向量数据存储。模型选型包括用于文本向量化的nomic-embed-text和生成答案的deepseek-r1:8b。环境准备部分详细说明了如何通过Docker Compose启动Ollama和Elasticsearch服务,并下载所需模型。项目原创 2025-05-23 10:05:18 · 931 阅读 · 0 评论 -
支持40+插件,Spring Ai Alibaba 让智能体私域数据集成更简单
在AI智能体开发中,RAG(Retrieval-Augmented Generation)和Tool Calling是两种关键模式。RAG通过结合检索技术和生成模型,使智能体能够实时从外部数据源获取信息,增强其知识深度和推理能力,适用于复杂任务。Tool Calling则允许智能体调用外部工具,如天气预报、地图导航等,扩展其应用范围,提升任务执行效率。目前,开源社区已集成超过20种RAG数据源和20多种工具调用接口,涵盖PDF文件、语雀、飞书、云OSS、网页爬虫等数据源,以及天气预报、地图导航、钉钉、金融数原创 2025-05-22 09:38:15 · 1383 阅读 · 0 评论 -
手把手教你使用 Spring AI 开发 AI 智能体调用 DeepSeek 本地模型
今年春节期间,开源大模型领域迎来了一系列重要更新,DeepSeek和Qwen等“国货之光”发布了多个新版本,性能对标OpenAI的收费服务。DeepSeek R1在数学、代码和自然语言推理任务上表现出色,Qwen2.5系列则在长上下文任务和多模态理解上超越GPT-4o。开源大模型不再仅仅是追随者,而是开始主导AI发展方向。本文详细介绍了如何在本地部署DeepSeek模型,并通过Spring AI Alibaba开发应用,调用大模型能力。本地部署的优势在于免除算力和Token调用费用,同时确保敏感数据不离开本原创 2025-05-22 09:23:59 · 1536 阅读 · 0 评论 -
Spring AI 智能体通过 MCP 集成本地文件数据
模型上下文协议(MCP)是一个开放协议,旨在规范应用程序如何向大型语言模型(LLM)提供上下文,并统一集成方式。Spring AI MCP 为 MCP 提供了 Java 和 Spring 框架的集成,支持同步和异步通信模式,使 Spring AI 应用程序能够通过标准化接口与不同数据源和工具交互。通过一个示例,展示了如何使用 MCP 将 Spring AI 与本地文件系统集成,构建智能体应用。示例中,Spring AI 通过 McpFunctionCallback 将函数调用委托给 MCP,实现与本地文件系原创 2025-05-21 10:36:52 · 1087 阅读 · 0 评论 -
阿里云开源 Spring AI Alibaba,加码 Java AI 生态建设
Spring AI Alibaba 是一个专为 Spring 和 Java 开发者设计的智能体开发框架,旨在简化生成式 AI 应用的开发。随着生成式 AI 和大模型的快速发展,开发者需要更便捷的工具来接入 AI 能力。Spring AI Alibaba 基于 Spring AI 框架,并与阿里云通义系列大模型深度集成,提供了从模型接入到应用部署的全套解决方案。该框架抽象了 AI 应用的通用开发范式,如对话模型接入、提示词模板、函数调用等,并支持多模态输入输出。此外,Spring AI Alibaba 还提供原创 2025-05-21 10:26:29 · 1048 阅读 · 0 评论 -
Windows系统部署MongoDB数据库图文教程
本文详细介绍了在Windows服务器上部署MongoDB数据库的过程,覆盖了从下载、安装到配置用户密码访问的完整步骤。首先,用户需从MongoDB官网下载适合的Windows版本。安装过程中,建议选择自定义安装以便指定安装路径,并配置服务名称以便区分多个MongoDB实例。安装完成后,默认情况下MongoDB是无用户鉴权状态。接着,通过MongoDB的bin文件夹中的mongod.exe启动mongo命令窗口,执行命令创建管理员用户并设置密码。最后,通过修改mongod.cfg配置文件开启权限验证,并在Wi原创 2025-05-17 21:16:18 · 516 阅读 · 0 评论 -
借助 Assistant API 构建具备自动规划能力的 Multi Agent 系统
本文介绍了如何通过百炼平台的Assistant API构建一个无需提前定义、可自动规划任务流程的Multi Agent系统,用于查询阿里云资源信息。Multi Agent系统由多个Agent协作完成,通过明确每个Agent的角色和职责,提升任务执行的准确性和效率。系统包括PlannerAssistant、ChatAssistant、AliyunInfoAssistant、InstanceTypeDetailAssistant和SummaryAssistant,分别负责任务规划、信息查询和结果汇总。文章还提供原创 2025-05-12 09:21:38 · 930 阅读 · 0 评论 -
如何利用大模型构建能主动提问的智能导购系统
该方案展示了如何通过阿里云百炼的Assistant API构建一个Multi-Agent架构的智能导购应用。应用的核心包括规划助理(Router Agent)和多个商品导购助理(如手机、冰箱、电视导购)。规划助理根据用户输入和历史对话,决定调用哪个商品导购助理。每个导购助理负责收集用户对特定商品的偏好信息,并通过知识库或数据库进行商品推荐。代码示例展示了如何实现这些助理的功能,包括意图分类、参数收集和商品推荐。最终,应用可以根据用户需求进行智能商品检索和推荐,提升购物体验。原创 2025-05-09 17:49:47 · 740 阅读 · 0 评论 -
LangChain4j 搭配 Kotlin:以协程、流式交互赋能语言模型开发
本文深入解析 LangChain4j 对 Kotlin 的支持,涵盖异步操作、流式交互等技术亮点。从配置到高级功能,详细阐述如何利用 Kotlin 协程提升性能,实现高效、响应式的语言模型应用,为开发者提供全面指导。原创 2025-04-22 11:18:42 · 660 阅读 · 0 评论 -
基于 LangChain4j 的情感分类系统:Java 实现与应用指南
LangChain4j 情感分类系统为 Java 开发者提供了一种高效且精准的情感分析解决方案。通过集成 OpenAI 模型,开发者可以轻松实现文本情感分类,将文本精确地归为积极、中性或消极类别。本篇文章深入解析了情感分类的实现原理、代码示例以及在客户反馈分析、社交媒体监控等多场景的应用,助力开发者快速上手并优化业务流程,提升文本分析效率。原创 2025-04-22 09:38:47 · 511 阅读 · 0 评论 -
LangChain4j 工具调用详解:从基础到高级的实战指南
本文深入解析 LangChain4j 中的工具调用(Tools/Function Calling)功能,帮助开发者扩展大型语言模型(LLM)的能力。通过工具调用,LLM 可以触发外部操作,如数学计算、网页搜索或 API 调用,从而解决复杂任务。文章详解了工具的定义、参数描述、异常处理及动态加载方法,并提供了从低级 API 到高级注解的实现方式。通过实际案例(如数学工具和动态工具加载),展示了如何利用工具调用提升模型的实用性。无论您是初学者还是资深开发者,本文都能帮助您掌握 LangChain4j 工具调用的原创 2025-04-16 11:12:34 · 1378 阅读 · 1 评论 -
深入浅出:Seata 分布式事务管理器的部署与安装实战指南
本文详细介绍Seata分布式事务管理器的部署与安装过程,适合希望在微服务架构中解决数据一致性问题的技术人员。文章首先介绍了Seata的基本概念及其重要性,随后详细讲解了如何搭建Seata服务器,包括环境准备、配置文件修改等步骤。接着,通过实际案例演示如何将Seata集成到现有项目中,实现AT、TCC等多种模式的分布式事务控制。最后总结了常见问题及解决方案,为读者提供全面的操作指南和宝贵的经验参考。原创 2025-04-14 14:35:35 · 365 阅读 · 0 评论 -
LangChain4j 中的 Model Context Protocol (MCP):实现 AI 模型与工具的高效集成
本文深入探讨了 LangChain4j 中的 Model Context Protocol (MCP),详细介绍了如何通过 MCP 实现 AI 模型与外部工具的高效集成。MCP 支持 HTTP 和 stdio 两种传输方式,能够帮助开发者轻松地将 AI 模型与各种工具桥接,从而扩展模型的功能。文章还提供了实际的代码示例,展示了如何使用 MCP 与 GitHub 交互,获取并总结公共 GitHub 存储库的最新提交。通过这些示例,开发者可以更好地理解 MCP 的工作原理和应用场景,为构建更强大的 AI 应用提原创 2025-03-27 11:07:37 · 2351 阅读 · 1 评论 -
SpringBoot-配置文件中敏感信息的加密保姆级教程
公司安全部门检查,要求系统配置文件中的敏感信息如数据库密码等,进行加密处理,否则将受到公司的安全处罚,无奈只要按照公司要求,对springboot项目配置文件的敏感信息进行加密和解密处理。详细教程如下。原创 2025-03-25 16:24:37 · 693 阅读 · 0 评论 -
Sringboot整合webflux实现响应式编程的详细教程
Spring WebFlux 是 Spring 5 引入的一个新的响应式框架,提供了与 Spring MVC 类似的功能,但基于非阻塞操作并使用 Reactor 项目作为其核心库。WebFlux 支持两种编程风格:注解路由(类似于 MVC)和函数式路由。首先,我们需要定义一个实体类User,包含用户的 id、name 等信息。原创 2025-03-21 17:05:23 · 1136 阅读 · 0 评论 -
深入解析:如何通过Spring Boot启动器无缝集成LangChain4j实现AI服务自动化
探索如何利用Spring Boot启动器无缝集成LangChain4j,以实现AI服务的自动化配置和高效管理。本文详细介绍了通过langchain4j-{integration-name}-spring-boot-starter依赖快速集成OpenAI、Ollama等模型的方法,并展示了如何在application.properties文件中配置模型参数。您还将学习到如何使用@AiService注解定义AI服务接口,自动装配各种组件如ChatLanguageModel和StreamingChatLangua原创 2025-03-10 20:24:04 · 1115 阅读 · 0 评论 -
LangChain4j 提取用户提问信息结构化输出 | LangChain4j
在请求发送给 LLM 时,指定了单个工具,并且工具参数描述了所需输出的结构。在使用提示模式时,需要在系统或用户消息中以自由文本形式指定所需输出的格式,并希望 LLM 能够遵守。这种方法相当不可靠。请注意,JSON Schema 是在请求中的专用属性中指定的,不需要在提示中包含任何自由形式的指令(例如系统或用户消息)。那么,基于指定的返回类型,ResponseFormat 将自动生成带有 JsonSchema 的格式。当在请求中指定 JSON Schema 时,LLM 应生成符合此 Schema 的输出。原创 2025-03-03 18:00:50 · 1708 阅读 · 0 评论 -
【2025年最新】掌握响应流技术:提升LLM应用性能与用户体验 | LangChain4j教程
想了解如何通过响应流技术优化大语言模型(LLM)的应用性能吗?本文基于LangChain4j框架,深入浅出地讲解了StreamingChatLanguageModel和StreamingResponseHandler的使用方法。通过逐个token实时传输生成内容,大幅提升用户交互体验,减少等待时间。无论您是开发者还是技术爱好者,都能从中掌握实用技巧,让您的应用更高效、更流畅!立即阅读,解锁LLM流式传输的奥秘吧!原创 2025-02-28 18:11:14 · 682 阅读 · 0 评论 -
高效部署:Windows 系统下 Sentinel 安装与配置全攻略
本文详细介绍了在Windows系统上安装和配置阿里巴巴开源的Sentinel流量控制与系统防护框架的完整流程。从环境准备到具体安装步骤,再到功能测试与高级扩展,内容覆盖全面,适合初学者及进阶开发者学习。通过本文,您将掌握如何在微服务架构中利用Sentinel实现流量控制、熔断降级等功能,提升系统的稳定性和高可用性。文章还提供了常见问题的解决方法,帮助读者快速定位并解决问题。无论您是希望保护系统免受高并发冲击,还是优化微服务治理,本文都能为您提供实用的指导。原创 2025-02-27 10:29:00 · 1536 阅读 · 0 评论 -
Windows环境下Nacos安装与部署全攻略:从零开始的详细教程
本文详细介绍了在Windows系统上安装和部署Nacos的全流程,涵盖环境准备、下载与安装、配置以及启动等关键步骤。首先,确保系统已安装JDK并正确配置环境变量,同时可选安装MySQL以支持持久化存储。接着,从Nacos官方GitHub页面下载最新版本压缩包并解压至目标目录。通过修改`application.properties`文件完成数据库连接和日志路径配置,并根据硬件性能调整JVM参数。使用`startup.cmd -m standalone`命令以单机模式启动Nacos服务原创 2025-02-27 09:40:12 · 6237 阅读 · 4 评论 -
LangChain4j 模型参数详解:灵活调整生成内容的创造力与确定性
模型的输出生成内容(文本、图像等)的创造性或确定性水平。生成内容的数量等。连接性基础URL、授权密钥、超时时间、重试机制、日志记录等。通常,您可以在模型提供商的网站上找到所有参数及其含义。例如,OpenAI API 的参数可以在OpenAI 官方文档参数名称描述类型modelName使用的模型名称(例如 gpt-4、gpt-4o-mini 等)。String使用的采样温度,范围为 0 到 2。更高的值(如 0.8)会使输出更随机,而较低的值(如 0.2)会使输出更集中和确定性更强。原创 2025-02-21 17:20:13 · 923 阅读 · 0 评论 -
LangChain4j 快速上手指南:集成 OpenAI 与高级 AI 服务的详细步骤
LangChain4j 提供了与许多大语言模型(LLM)提供商的集成。每个集成都有其自己的 Maven 依赖项。:如果你没有自己的 OpenAI API 密钥,不用担心。你可以暂时使用我们提供的演示密钥,免费用于演示目的。以上是该页面的主要内容翻译。如果有具体需求或进一步问题,请告诉我!建议将你的 API 密钥存储在环境变量中,以降低公开暴露的风险。原创 2025-02-21 17:12:35 · 968 阅读 · 0 评论 -
Chat Memory 聊天会话记忆 | LangChain4j
目前,LangChain4j 仅提供“记忆”,而不提供“历史记录”。如果需要保留完整的对话历史记录,请手动完成。可以单独存储(例如,每条消息对应一条记录/行/对象),也可以一起存储(例如,整个。可以作为一个独立的低级组件使用,也可以作为高级组件(如 AI 服务)的一部分。方法应更新与给定 memory ID 相关的所有消息。方法应返回与给定 memory ID 相关的所有消息。方法会被调用,传入的消息列表中不包括被淘汰的消息。请注意,“记忆”和“历史记录”是相似但不同的概念。存储在您选择的任何持久存储中。原创 2025-02-20 12:25:54 · 1322 阅读 · 1 评论 -
深入解析LangChain4j中的ChatLanguageModel API:从基础到高级应用
本页描述的是低级别的 LLM API。有关高级 LLM API,请参见 AI Services。原创 2025-02-18 20:30:14 · 1507 阅读 · 0 评论 -
mongodb 如何开启用户权限验证
在 MongoDB 中开启验证(即启用身份验证)是保护数据库安全的重要步骤。adminmyPassword完成以上步骤后,MongoDB 的身份验证就成功启用了!运行以下命令,列出admin这将显示所有用户的详细信息,包括用户名、角色等。运行以下命令,查询admin这将显示所有用户的详细信息,包括用户名、角色等。如果你只想修改用户的密码或角色,可以使用命令。如果你只想修改用户的密码或角色,可以使用命令。原创 2025-02-18 07:00:00 · 1025 阅读 · 0 评论 -
JAVA AI 框架LangChain4j 入门教程
是一个基于 Java 的轻量级框架,旨在简化大型语言模型(LLM)在 Java 应用中的集成。模型集成:支持 OpenAI、HuggingFace、本地模型(如 Ollama)等。提示工程:通过模板化提示(Prompt Templates)优化与模型的交互。链式调用:将多个步骤(模型调用、工具执行)组合成可复用的流程。记忆管理:支持短期/长期记忆(如对话历史记录)。数据增强:通过检索增强生成(RAG)扩展模型知识库。工具扩展:允许自定义工具(如搜索、数据库查询)扩展模型能力。原创 2025-02-14 18:21:36 · 2072 阅读 · 1 评论 -
maven-compiler-plugin和spring-boot-maven-plugin的区别
出现“程序包不存在”的问题是因为某些依赖引用了已被移除的内部 API。更严格地暴露了这些问题,而可能暂时掩盖了它们。建议优先升级相关依赖或引入替代库,以确保项目的兼容性和稳定性。特性主要功能编译 Java 源代码构建和打包 Spring Boot 应用适用范围所有 Maven 项目仅限 Spring Boot 项目核心任务编译源代码和测试代码打包可执行文件、运行应用配置复杂度简单,通常只设置 JDK 版本较复杂,涉及 Spring Boot 配置如果用户需要同时使用两者,通常会在同一个。原创 2025-02-14 16:39:57 · 1399 阅读 · 0 评论 -
Redis 代码执行漏洞--怎么设置禁用lua脚本
Redis,作为一款使用ANSI C编写的开源、支持网络、基于内存的键值对存储数据库,因其出色的性能和灵活性而被广泛应用。然而,最近发现的一个安全漏洞(CVE-2024-46981)揭示了Redis在处理Lua脚本引擎内存管理时存在潜在风险。具体来说,经过身份验证的用户可以通过精心构造的Lua脚本操纵内存回收机制,并通过EVAL或EVALSHA命令执行该恶意脚本,从而可能在Redis服务器上执行任意代码。原创 2025-02-08 17:33:50 · 1974 阅读 · 0 评论 -
突破网络限制:高效获取HuggingFace模型的五大技巧
通过专业网络检测工具验证,国内访问HuggingFace的节点均显示异常状态(图示检测结果可见原文档)。针对这一普遍性问题,本文整理出五套经过验证的解决方案,适用于不同使用场景和技术背景的开发者。建议优先尝试镜像平台方案,对技术要求较高的用户可探索多线程下载与混合策略组合方案,以获得最佳下载体验。平台时普遍遭遇连接障碍,通过IP检测工具验证发现,境内节点均无法正常连通该平台。执行克隆命令时需输入平台账号及访问令牌,下载过程示意图可参考原文档。参数说明:-x 16(分块数),-j 8(并行线程数)原创 2025-02-08 17:33:18 · 870 阅读 · 0 评论 -
Mybatis-Plus字段类型处理器(处理JSON字段存储读取示例)
在 MyBatis-Plus 中,除了使用内置的类型处理器外,开发者还可以根据需要自定义类型处理器。例如,当使用 PostgreSQL 数据库时,可能会遇到 JSONB 类型的字段,这时可以创建一个自定义的类型处理器来处理 JSONB 数据。以下是一个自定义的 JSONB 类型处理器的示例:示例工程:👉 mybatis-plus-sample-jsonb} // 自3.5.6版本开始支持泛型,需要加上此构造. public JsonbTypeHandler(Class原创 2024-12-31 17:00:35 · 1531 阅读 · 0 评论 -
最新版本开发对接飞书网页应用免登录接口教程
本文介绍如何实现网页应用在飞书客户端内的免登操作,在用户打开网页应用时,弹出授权登录页面,授权通过后直接完成登录操作。通过本教程你可以了解到网页应用授权登录的完整流程。原创 2024-12-18 15:55:41 · 2087 阅读 · 2 评论