news 2026/7/9 1:41:33

#100DaysOfAgent Day 5

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
#100DaysOfAgent Day 5

#100DaysOfAgent Day 5

今天学习了 LangGraph 工具系统进阶,重点掌握了 Reducer 机制、工具错误处理、并行工具调用与循环保护。

收获

1. Reducer 的真正绑定方式

Reducer 是告诉 LangGraph「字段更新时该怎么合并」的函数,必须通过Annotated显式绑定才会生效。

# ❌ 03 的问题:定义了 merge_stats 函数,但没绑定,实际行为还是"覆盖"task_stats:dict[str,int]=Field(default_factory=dict)# ✅ 04 的修复:用 Annotated 第二个参数绑定,每次更新都会触发累加task_stats:Annotated[dict[str,int],merge_stats]=Field(default_factory=dict)

merge_stats的逻辑是按 key 累加,例如:

{"search": 1} + {"search": 2, "weather": 1} => {"search": 3, "weather": 1}

类比 Django 的aggregate(Sum('views')),把分散的值累加到一起,而不是每次都覆盖。

2. 节点返回 dict vs 返回 State 实例的区别

节点函数有两种返回方式,语义完全不同:

返回方式语义类比
返回dict部分更新,只更新 dict 里的 key,其他字段保持不变Django.update({"name": "Alex"})
返回State实例全量替换,其他字段会被默认值覆盖整条记录覆盖写入

工程上几乎总是返回 dict,避免意外清空其他字段。

3. @tool 装饰器的本质

@tool不只是普通装饰器,它会把函数替换成一个StructuredTool对象:

@tooldefsearch_docs(query:str)->str:"""Search internal documentation for a query keyword."""...

装饰后search_docs拥有.invoke()/.name/.description等属性,可以被model.bind_tools()识别并传给 LLM 使用。调用时.invoke(tc["args"])会自动把 dict 参数解包成命名参数,并做类型校验。类比 Django 的@login_required,把原函数包裹成带额外能力的新 callable。

4. 工具错误处理:不让图崩溃

tool_node对每个工具调用加了try/except,工具报错时把错误信息作为ToolMessage回传给 LLM,让 LLM 自主决定如何应对,而不是让整张图直接崩溃:

try:observation=fn.invoke(tc["args"])exceptExceptionase:observation=f"Tool error ({type(e).__name__}):{e}"results.append(ToolMessage(content=str(observation),tool_call_id=tc["id"]))

例如100 / 0会触发ZeroDivisionError,LLM 收到错误提示后会告知用户无法计算,而不是程序崩溃。

5. recursion_limit 循环保护

LLM 有可能陷入「调用工具 → 得到结果 → 继续调用同一工具」的死循环,recursion_limit是图级别的硬上限:

config={"configurable":{"thread_id":"demo-04"},"recursion_limit":15,# 默认值是 25,超过抛 GraphRecursionError}

类比 Django 的MAX_REQUEST_SIZE,防止无限资源消耗。工程上通常根据业务复杂度设置,简单问答场景 10-15 步足够。

6. 图的整体结构

START ↓ llm_call ──有工具调用──→ tool_node ↑ | └──────────────────────────┘ │ └──无工具调用──→ to_output → END
  • should_continue是条件路由函数,检查最后一条消息是否有tool_calls
  • to_output节点负责从 messages 里提取最终答案,输出给OutputState
  • OutputState屏蔽了messages字段,外部调用者只看到干净的结构化输出
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 1:41:17

2026年全国智慧太阳能路灯选购指南:3招教你挑对靠谱产品

核心速览预算充足,追求高品质与多功能,推荐高靓照明太阳能路灯,价格虽高但品质、技术、服务一流,有400余项专利与122项权威认证,适配复杂场景。 预算中等,想要稳定性能,可选择大厂常规款太阳能路…

作者头像 李华
网站建设 2026/7/9 1:41:14

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析1. 工业硅提纯的技术挑战与西门子法原理半导体工业对硅材料纯度的要求近乎苛刻——当光伏行业满足于6个9(99.9999%)纯度时,芯片制造需要的是11个9(99.99999…

作者头像 李华
网站建设 2026/7/9 1:40:35

Magpie终极指南:免费开源让老旧窗口瞬间高清化的完美解决方案

Magpie终极指南:免费开源让老旧窗口瞬间高清化的完美解决方案 【免费下载链接】Magpie A general-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 你是否曾为老旧游戏在4K屏幕上模糊不清而烦恼&#xff1…

作者头像 李华
网站建设 2026/7/9 1:40:21

基于大数据爬虫+Hadoop咖啡商品推荐与可视化平台

一、课题研究背景 随着新式茶饮与精品咖啡消费市场的快速崛起,线上咖啡商品交易数据、用户消费行为数据、商品评价数据、品类热度数据持续增长,形成了海量的咖啡行业大数据。咖啡商品品类丰富,涵盖速溶咖啡、挂耳咖啡、现磨咖啡豆、浓缩咖啡液…

作者头像 李华
网站建设 2026/7/9 1:40:06

技术速递|我们如何打造一款内部智能数据分析助手

作者:Matteo Vasirani & Cynthia Joseph 排版:Alan Wang Qubot 是我们内部基于 GitHub Copilot 打造的智能数据分析助手,它允许任何 GitHub 员工使用自然语言直接查询公司的数据。本文将分享我们在构建 Qubot 过程中积累的实践经验与思考…

作者头像 李华