- 博客(592)
- 收藏
- 关注
原创 浅谈 Jackson 的 TypeReference:它是如何绕过 Java 泛型擦除的?
Jackson 通过 TypeReference 匿名子类解决泛型擦除问题,保留类型信息实现安全反序列化。核心是利用子类继承时的泛型参数捕获,通过反射获取真实类型,使 JSON 能正确映射为带泛型的对象,避免手动类型转换。类似思路也见于 Guava 的 TypeToken 等框架。
2025-08-22 00:18:27
710
原创 浅谈 Python 正则表达式中的 groups()
本文介绍了Python中正则表达式re模块的groups()方法。通过解析智能体动作指令的实例,展示了如何使用正则表达式捕获字符串的不同部分:group(n)获取单个捕获组,而groups()返回所有捕获组组成的元组。该方法特别适用于拆分工具名和输入参数,使智能体开发、日志分析等场景的文本解析更简洁高效。文章包含代码示例和直观图解,帮助理解groups()的实际应用价值。
2025-08-18 23:24:45
411
原创 用 Python 实现一个“小型 ReAct 智能体”:思维链 + 工具调用 + 环境交互
摘要(149字): 本文介绍如何通过Python实现一个基于ReAct模式的智能体(Agent),使大语言模型(LLM)具备动态调用外部工具的能力。核心方案包括:1)设计严格交互格式的Prompt,强制模型按“思考-动作-暂停-观察”循环运作;2)通过正则匹配工具调用指令,集成Wikipedia查询、计算器和博客搜索API;3)利用消息上下文管理实现多轮交互。代码演示了模型如何自主选择工具(如搜索“法国首都”时调用Wikipedia)并整合结果生成最终答案,展现了LLM从被动生成转向主动交互的扩展性。
2025-08-18 22:40:14
1148
原创 Portkey-AI gateway 的一次“假压缩头”翻车的完整排障记:由 httpx 解压异常引发的根因分析
摘要:本文记录了作者在本地搭建Portkey AI Gateway时遇到的gzip解码错误问题。测试发现网关能接收请求但Python程序报"incorrect header check"错误,经排查发现网关返回了"Content-Encoding: gzip"头部但实际响应是明文JSON。作者通过使用httpx.stream().iter_raw()方法绕过自动解压直接获取原始字节,成功定位到问题根源在于网关返回了不匹配的压缩头部。文章详细记录了问题复现过程,包括使用
2025-08-17 22:54:30
699
原创 模型路由相关论文速览——《Universal Model Routing for Efficient LLM inference》
传统“模型路由”多数假设一个的候选 LLM 池(static pool),路由器只需要在这组已知模型里挑选最便宜且“够用”的模型;但现实中模型池经常变化:新模型不断上线,旧模型下线。每当模型池变化,重新标注训练数据、重训路由都很费时费钱。这篇论文()关注:测试时出现的新 LLM,如何在路由器的前提下把请求路到合适的新模型上。作者提出了这种新的解决方式:把“每个 LLM”表示成一个,路由器学会基于这些“LLM 特征”做决策,从而泛化至未见过的 LLM。论文在公共基准上验证了能在中有效路由。
2025-08-13 23:02:34
709
原创 AI Agent——基于 LangGraph 的多智能体任务路由与执行系统实战
摘要 本文介绍了一个基于LangGraph的多智能体任务路由系统,通过模块化设计实现对话助手功能。系统核心包括五个节点:任务分类器(supervisor_node)负责识别用户意图;旅游规划(travel_node)调用MCP工具接口;笑话生成(joke_node)使用LLM直接响应;对联生成(couplet_node)结合Redis向量检索;兜底节点(other_node)处理其他请求。系统采用TypedDict定义状态对象,通过LangGraph实现可视化流程编排,具有低耦合、易扩展的特点。关键技术包括
2025-08-12 23:00:06
859
原创 浅谈 LangGraph 子图流式执行(subgraphs=True/False)模式
摘要: 本文演示了如何在LangGraph中使用subgraphs=True参数实现嵌套工作流。通过构建包含子图(research)的父图流程,展示了子图封装与命名空间追踪功能。关键点包括:1) 子图作为独立模块处理特定任务;2) 不同stream_mode下输出带命名空间标识,便于调试;3) 提供了完整代码示例,对比了subgraphs启用前后的流式输出差异。该模式适用于复杂AI工作流(如多智能体协作),能清晰追踪子流程执行路径。
2025-08-11 22:12:54
952
原创 LangGraph 之 stream_mode 解析——values(完整状态)、updates(增量更新)与 [“updates“, “values“] 混合模式
文章摘要: 本文介绍了LangGraph工作流中三种stream_mode的用法差异。"values"模式输出完整状态流,展示每一步执行后的全局状态;"updates"模式仅输出节点增量更新,适合实时推送;混合模式可同时获取两种数据。通过一个包含"润色主题"和"生成笑话"两个节点的简单工作流示例,对比演示了不同模式下的输出效果,并总结了各自适用场景。最后补充了直接获取最终结果的invoke方法,帮助开发者根据需要选择合适的执行方
2025-08-11 21:44:28
396
原创 LangGraph 历史追溯 & 人机协同(Human-in-the-loop,HITL)
本文介绍了如何利用get_state_history、update_state和interrupt实现可回退、可修补且支持人工干预的工作流系统。通过一个完整示例,展示了关键功能:历史追溯(get_state_history)、时间旅行恢复(从特定检查点继续)、分叉管理(检查点/命名空间)、历史修改(update_state)、人机交互(interrupt+恢复命令)以及调试机制。系统核心包含三个概念:全局状态(State)、检查点(Checkpoint)和历史分叉管理。其中检查点机制支持历史追溯和恢复,而所
2025-08-11 21:28:00
378
原创 浅谈 A2A SDK 核心组件
A2A协议的SDK为智能体服务端开发提供了一套稳定可扩展的框架,其核心组件包括:1) AgentExecutor作为业务执行引擎,负责任务执行与取消;2) EventQueue作为事件缓冲与分发中心,实现流式响应;3) DefaultRequestHandler处理协议到业务的适配;4) A2AStarletteApplication构建协议服务端容器;5) AgentCard和AgentSkill定义智能体的元信息与能力。这些组件协同工作,通过事件驱动机制解耦业务逻辑与传输层,支持流式响应和任务管理,为开
2025-08-10 16:39:23
632
原创 浅谈 A2A 协议——面向多智能体的开放通信标准
A2A协议旨在解决异构智能体之间的互操作与协作问题,支持不同厂商、语言和框架构建的智能体安全通信。其核心目标包括互操作性、动态发现、多模式交互和安全通信。协议围绕A2A Client、Server、Agent Card等关键概念,通过任务(Task)作为基本工作单元,管理有状态交互的生命周期。支持JSON-RPC、gRPC和REST三种传输协议,并依托HTTPS实现安全认证。该协议适用于需要多个智能体协作完成复杂任务的场景,通过标准化交互模型实现"黑箱"式集成。
2025-08-10 15:21:30
1195
原创 浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络
摘要:桥接模式是虚拟化环境中虚拟机与外部网络通信的一种方式,通过虚拟交换机(vSwitch)将虚拟网卡和物理网卡桥接,使虚拟机直接接入局域网,拥有独立MAC地址、IP地址和协议栈。其优点包括完全接入局域网、独立身份和兼容性强,但也存在安全风险高、依赖DHCP等缺点。桥接模式适用于需要对外服务、模拟真实网络或与局域网设备交互的场景,核心在于理解二层转发机制和主机/虚拟机协议栈的隔离关系。
2025-08-09 12:50:54
1060
原创 LLM——浅谈 LangGraph 中断式工作流:构建一个可交互的问答流程
本文介绍了如何利用LangGraph实现智能体的中断-恢复工作流,通过一个对话机器人示例详细解析了其实现原理与代码逻辑。文章首先阐述了中断式工作流的需求场景,随后从State定义、节点函数编写、StateGraph构建、Checkpointer配置到核心执行流程进行了系统讲解。重点分析了中断机制的工作原理,包括如何通过interrupt()暂停执行、等待用户输入,再使用Command对象恢复流程继续执行。这种模式使得智能体能够在保持上下文状态的同时,灵活应对需要人工干预的场景,为开发交互式AI应用提供了强大
2025-08-06 23:03:43
904
原创 浅谈 Python 中的 next() 函数 —— 迭代器的驱动引擎
本文深入解析了 Python 中的 next() 函数,包括其基本语法、典型用法和底层原理。next() 用于从迭代器中获取下一个元素,耗尽时会抛出 StopIteration 异常,可通过默认值参数避免。文章揭示了 for 循环本质上是通过不断调用 next() 实现的,并通过字节码分析验证了这一机制。还介绍了 next() 与 iter(callable, sentinel) 配合的高级用法,如动态生成序列和流式数据读取。最后总结了 next() 的常见使用场景,包括手动控制迭代、文件读取等。
2025-08-04 20:24:35
1196
原创 浅谈Python中的os.environ:环境变量交互机制
os.environ 是 Python 中用于访问和操作环境变量的字典对象,由 os 模块提供。它包含当前进程从操作系统继承的所有环境变量,表现为键值对形式。通过它可以读取、设置或删除环境变量,但这些修改仅对当前 Python 进程有效,不会影响系统全局环境变量。常见用途包括获取系统路径、动态配置程序参数等,但需注意其对进程的局部性限制。
2025-08-04 00:07:36
568
原创 Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
本文深入解析Python模块导入的核心机制,重点探讨了sys.path和PYTHONPATH的关系。sys.path是Python解释器运行时维护的模块搜索路径列表,其初始化顺序包括当前脚本目录、PYTHONPATH环境变量、标准库路径等。文章详细讲解了如何动态修改sys.path,区分了运行时路径修改与环境变量配置的差异,并指出常见误区。通过实际案例展示了多级目录项目中如何正确添加父级路径到搜索路径。最后总结了最佳实践:项目内部使用sys.path.append(),全局配置使用PYTHONPATH或.p
2025-08-03 23:51:29
1038
原创 Python 实例属性与方法命名冲突:一次隐藏的Bug引发的思考
摘要:本文探讨了Python开发中实例属性与方法同名导致的命名空间冲突问题。通过Calculator链式调用示例,分析了Python查找顺序(MRO)导致实例属性遮蔽方法的现象,验证了属性覆盖方法的工作原理。文章指出del操作无法根本解决此问题,并提出了三种最佳实践:1)避免属性与方法重名;2)使用@property装饰器设计安全访问;3)链式调用返回self时保持属性只读。最后总结了属性与方法重名的陷阱与解决原则,强调合理的命名空间管理是Python开发的关键能力。
2025-08-03 23:08:30
650
原创 LLM——基于LangChain与LangGraph实现的长篇文章自动写作工作流
本文介绍了一个基于LangChain和LangGraph的长篇文章自动写作系统。该系统能将简单的写作指令智能拆解为结构化写作计划,并逐段生成符合人类写作风格的内容,最终输出为Markdown文档。系统主要包含三大功能模块:写作计划拆解模块(plan_chain.py)负责将用户指令转化为段落级子任务;段落写作模块(write_chain.py)结合上下文逐段生成内容;保存模块将最终文章保存为Markdown文件。通过LangGraph的工作流编排,实现了"规划→写作→保存"的完整自动化写
2025-08-03 00:28:13
1071
原创 LLM——使用 LangGraph 构建 ReAct 智能体:多轮对话 + 工具调用 + 可视化流程图
本文介绍了如何构建一个具备ReAct能力的多轮智能体系统。该系统整合了LangChain工具调用、OpenAI/通义千问大模型和LangGraph状态管理,适用于旅行规划、业务辅助等场景。核心架构包含:1)通过@tool装饰器定义可调用工具;2)创建具备工具绑定能力的智能体;3)使用LangGraph构建状态图实现ReAct循环(推理→行动→观察);4)自动生成流程图可视化交互流程。系统能够处理多轮工具调用,直到输出最终答案,并通过条件路由实现动态流程控制。
2025-07-31 21:23:25
1541
1
原创 LLM综合实战——基于 MCP 和 OpenAI Function Calling 构建本地知识库智能问答助手
企业级智能问答系统实践方案 本文介绍了一个结合大语言模型与企业知识库的智能问答系统解决方案,主要特点包括: 技术架构: 使用MCP协议作为工具服务通信标准 集成OpenAI Function Calling实现自动工具调用 本地知识库kb.json存储结构化问答数据 核心功能: 模型自动判断是否需要调用知识库查询工具 通过MCP服务端获取结构化知识数据 生成格式良好的自然语言回答 系统优势: 相比传统API,MCP提供自动schema生成和流式通信支持 实现"理解问题→调用工具→生成回答"
2025-07-31 00:19:31
728
原创 LLM—— 基于 MCP 协议(Streamable HTTP 模式)的工具调用实践
本文介绍了MCP协议的Streamable HTTP模式工具调用实践。该模式是对HTTP+SSE的标准化升级,支持单一接口处理所有消息、流式响应和会话管理。文章通过Python示例展示了服务端工具注册和客户端调用的完整流程,对比了有状态(stateless_http=False)和无状态(stateless_http=True)两种模式的区别。Streamable HTTP模式结合了HTTP标准化、SSE流能力和JSON-RPC结构表达,为开发者提供了高效的工具调用方式、可扩展架构和可靠通信保障,是构建智能
2025-07-30 23:30:33
748
原创 LLM—— 基于 MCP 协议(SSE 模式)的工具调用实践
本文介绍了基于MCP协议SSE模式的工具调用实践。MCP提供统一工具注册和调用机制,结合SSE实现服务器向客户端的单向事件推送。文章通过Python示例展示服务端工具注册和客户端远程调用流程,说明如何使用HTTP+SSE长连接实现跨网络工具调用。该方案支持分布式架构,适用于构建远程智能体、插件化平台等场景,为跨网络工具执行系统提供安全解耦的底层能力。
2025-07-30 22:08:44
1168
原创 LLM—— 基于 MCP 协议(Stdio 模式)的工具调用实践
本文介绍了MCP(Message Control Protocol)这一轻量级通信协议,它为解决大语言模型调用外部工具的问题提供了底层架构支持。MCP支持跨语言交互、工具解耦和动态注册调用,并通过Stdio、SSE等多种传输机制实现灵活通信。文章重点演示了基于Stdio模式的本地实现方案,包含服务端工具注册和客户端调用示例,展示了其进程隔离、低延迟等优势。与OpenAI Function Calling相比,MCP更加底层通用,适合构建模块化的智能体系统。最后指出MCP可扩展应用于本地LLM代理、多语言插件
2025-07-30 21:28:13
1441
原创 基于 OpenAI Function Calling 的工具调用实践解析交互流程
本文介绍了OpenAI Function Calling功能,它使大语言模型(LLM)能够与外部函数和API协同工作。文章通过天气查询的完整示例,详细讲解了Function Calling的实现流程:首先定义工具函数和JSON Schema参数结构,然后让模型判断是否调用函数并生成结构化参数,最后执行真实函数并返回结果给模型生成自然回复。Function Calling拓展了LLM的实用性,使其从仅能"说话"升级为能"动手做事",是构建智能体(AI Agent)的核心
2025-07-30 19:37:26
1104
原创 高效管理多个异步上下文:初识 Python 中的 AsyncExitStack
AsyncExitStack 是 Python 异步编程中用于动态管理多个异步资源的工具,它比固定嵌套的 async with 更灵活安全。主要特点:1)支持运行时动态注册任意数量的异步上下文管理器;2)自动按逆序清理所有资源,确保异常时也能释放;3)避免深层嵌套,提升代码可读性。适用于不确定资源数量、需要统一清理等场景,如管理多个数据库连接或WebSocket会话。通过 enter_async_context() 注册资源,并支持用 push_async_callback() 清理非标准异步资源。它是实现
2025-07-29 20:39:22
887
原创 使用JSON Schema 的 dependencies 实现 LLM 工具调用的参数约束
本文探讨了如何利用JSON Schema的dependencies机制规范大语言模型(LLM)工具调用的参数组合。通过一个浏览器控制工具示例,展示了当不同动作(如go_to_url、click_element等)需要不同参数时,如何用dependencies强制约束参数依赖关系,避免模型生成无效请求。该方案兼容OpenAI、Qwen等主流框架,能显著提升工具调用的准确性和健壮性。建议为多功能工具定义清晰的参数依赖,并搭配描述字段以优化模型理解。
2025-07-29 19:32:00
289
原创 浅谈 Python 中的 @property 与 @cached_property
Python属性控制:四大装饰器详解 本文介绍了Python中控制属性的四个关键装饰器:@property可将方法转为只读属性,@x.setter和@x.deleter分别控制属性的写入和删除逻辑,@cached_property实现懒加载和缓存功能。@property让接口更简洁,setter/deleter可添加校验逻辑,cached_property则在首次计算后缓存结果。文章还剖析了cached_property的实现原理,包括通过__set_name__自动获取属性名的机制,解释了它如何动态识别属
2025-07-29 00:57:45
994
原创 初识 Python 中的装饰器
Python 装饰器详解 装饰器是 Python 中用于增强函数或类功能的语法特性,本质是一个接收函数并返回新函数的闭包。文章从基础到进阶全面介绍了装饰器: 核心概念:展示了基本装饰器结构,通过闭包机制实现功能增强 实现原理:解释了函数作为一等对象和闭包机制,分析__closure__属性 高阶用法:包括带参数的装饰器(三层嵌套)、functools.wraps保持元信息、类装饰器实现 执行顺序:详细解析了多个装饰器的执行顺序(从下往上包裹,从外到内执行) 应用场景:列举了权限控制、缓存、计时等8种常见应用
2025-07-27 15:40:18
777
原创 浅谈Python中的 “__call__“ 方法
Python中的__call__方法可以将类实例变成可调用对象,实现类似函数的行为。核心要点是:当类实现__call__方法后,其实例可以像函数一样被调用(obj()等价于obj.call())。主要应用场景包括:1)封装带状态的函数;2)作为策略或回调函数传递;3)机器学习框架中的模型调用;4)构建DSL和工具链。通过返回self可以实现链式调用,形成流畅API风格。这种技术广泛应用于函数封装、数据处理流水线、链式调用等领域,是Python面向对象编程的重要特性之一。
2025-07-27 14:26:33
382
原创 浅谈Python装饰器中常用的functools.wraps
摘要:functools.wraps是Python装饰器开发中的关键工具,用于保留被装饰函数的元信息(如名称、文档、注解等)。不使用wraps会导致函数元信息丢失,影响调试、文档生成和反射等功能。通过@wraps(func)装饰器,可以正确复制原函数属性到包装函数上。底层原理是调用update_wrapper,复制__module__、__name__、__doc__等关键属性。常见应用场景包括调试、文档生成、缓存和单元测试等。最佳实践是每个装饰器的wrapper函数都应添加@wraps(func)装饰器。
2025-07-27 13:32:22
532
原创 LangChain实战——实现多轮对话 + Function Calling
本文介绍了如何利用LangChain框架实现大语言模型的函数调用(Function Calling)功能。通过一个完整示例,演示了定义工具函数、绑定工具到模型、构建多轮对话流以及自动调用工具完成任务的完整流程。文章详细解析了使用@tool装饰器注册工具函数、初始化Qwen模型、处理工具调用响应等关键步骤,并展示了天气查询和加法运算的实际运行效果。该方案支持多轮对话上下文记忆,模型可自动识别工具调用需求,并将工具结果融入后续推理,为开发者提供了扩展模型功能的有效途径。
2025-07-27 11:54:55
950
原创 python—— 柯里化 & 部分应用函数
Python中的functools.partial和lambda实现了函数的部分应用(Partial Application),而非严格意义上的柯里化(Currying)。柯里化将多参数函数转换为单参数函数链式调用(如f(x)(y)(z)),而部分应用则直接固定部分参数生成新函数(如partial(f, x))。两者功能类似但实现方式不同,Python更倾向于使用partial和lambda进行参数绑定,因其更简洁实用,而不像Haskell等函数式语言需要完整实现柯里化。项目中采用的partial(agen
2025-07-26 01:09:09
581
原创 浅谈 python 中的 functools.partial
摘要:functools.partial是Python标准库中用于"部分函数应用"的工具,通过预绑定部分参数生成新函数。核心功能包括:1)固定函数的部分参数;2)支持位置/关键字参数绑定;3)适用于回调绑定、高阶函数配合等场景。相比lambda,优势在于可读性强、支持参数自省、可复用,但语法较冗长且不适合复杂逻辑。典型应用包括函数适配、工具链封装和回调注入,工程实践中建议与lambda分工使用,前者用于参数绑定,后者处理简单匿名逻辑。(149字)
2025-07-26 00:43:17
392
原创 浅谈 Python 中的 lambda 表达式
Python中的lambda用于创建匿名函数,适用于函数式编程场景。其语法为lambda 参数: 表达式,特点是简洁但不支持多行语句。常见应用包括排序、映射、过滤等操作。 lambda支持闭包、默认参数和可变参数,但调试困难且不适合复杂逻辑。与普通函数相比,lambda在字节码层面本质相同,只是没有函数名。 实际开发中,简单逻辑可使用lambda,复杂逻辑建议用def定义函数。lambda在GUI回调、函数组合等场景中非常实用。
2025-07-26 00:18:19
861
原创 浅谈Python 中的 @contextmanager:资源管理与状态切换的最佳实践
摘要:Python的@contextmanager装饰器提供了一种简洁优雅的方式来管理资源生命周期。它通过将带有yield的函数转换为上下文管理器,自动处理资源申请、异常处理和释放逻辑。相比传统手动实现__enter__和__exit__方法,代码更简洁直观。yield语句将上下文分为初始化和清理两个阶段,支持异常处理,适用于文件操作、数据库连接、状态切换等场景。该特性是Python中实现with语句的语法糖,能帮助开发者编写更健壮的代码。
2025-07-23 19:55:41
784
原创 Python 中的上下文管理器:@asynccontextmanager 解析与实战案例
是 Python 标准库contextlib提供的装饰器,用于将一个带有yield的async def协程函数转化为支持async with的异步上下文管理器。它的作用:简化异步资源/状态管理。# yield 之前:准备资源 / 设置状态# yield:将控制权交给上下文体# yield 之后:清理资源 / 恢复状态 / 捕获异常是异步时代 Python 的上下文管理利器,它将繁琐的资源管理逻辑变得清晰、可控且异常安全,是编写健壮异步程序不可或缺的组件。
2025-07-23 19:46:41
794
原创 浅谈 Python 中的 yield——yield的返回值与send()的关系
本文深入解析Python中yield与send()的交互机制。关键点包括:1) send(x)会将x赋值给上一个yield表达式;2) 不使用send()时,yield表达式默认返回None;3) 通过三段式协程对话示例,展示了yield+send()实现的双向通信模式。文章还提供了对比总结表,说明两种操作方式的区别。这种机制是构建Python协程通信的基础,广泛应用于调度器、LLM代理等系统。
2025-07-13 00:04:13
502
原创 浅谈 Python 中的 yield——生成器对象与函数调用的区别
Python生成器对象示例分析:greeter()函数调用返回生成器对象而非函数本身。通过yield实现协程式交互,next()启动生成器,send()传递值继续执行。关键区别在于g=greeter赋值函数对象,而g=greeter()调用函数返回生成器对象,类型分别为function和generator。该机制是构建异步任务调度器的核心基础。
2025-07-12 23:51:15
390
原创 浅谈 Pydantic v2 的 RootModel 与联合类型——构建多请求结构的统一入口模型
摘要:Pydantic v2的RootModel结合联合类型(Union)为现代Web应用和智能系统提供了统一请求入口的优雅解决方案。该方法通过定义单一模型接收多种结构化请求(如ping、initialize等),自动路由到对应子模型,简化了API、WebSocket等接口设计。文章展示了从模型定义、请求分发到FastAPI集成的完整流程,特别适用于LLM智能体、LangGraph节点调度等多类型请求场景,显著提升了代码可维护性。
2025-07-12 16:23:09
582
原创 使用SpringAOP自定义权限控制注解
本文通过自定义注解对 Controller 层的方法实现访问控制,其核心原理是基于 Spring AOP 的面向切面编程机制。系统在运行时由 Spring 生成目标类的动态代理对象,在方法执行前织入权限校验逻辑,从而实现对用户访问权限的统一拦截与验证,确保接口调用符合预设的安全规则。
2025-07-10 20:55:32
551
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人