deer-flow前端分析

在threads/hooks.ts中增加日志打印:

css 复制代码
onLangChainEvent(event) {
console.log('onLangChainEvent received:', event);

onUpdateEvent(data) {
console.log('onUpdateEvent received:', data);


    onCustomEvent(event: unknown) {
      console.log('onCustomEvent received:', event);

    onFinish(state) {
      console.log('onFinish received:', state);

使用的是默认模式,包含了UI需要的信息

如需要修改为其他模式,可使用

html 复制代码
const thread = useStream<AgentThreadState>({
  client: getAPIClient(isMock),
  assistantId: "lead_agent",
  threadId: onStreamThreadId,
  streamMode: ["values", "messages", "events"], // <--- 在这里设置
  // ... 其他参数
});

stream-mode中支持的类型如下:

输入查看今天深圳天气,整个分析如下:

1、lead_agent/start

注意:整个会话以on_chain_start/lead_agent开头

2、ThreadDataMiddleware中间件

如上

3、UploadsMiddleware

4、SandboxMiddleware

5、SummarizationMiddleware

6、模型思考

展示思考过程,调用链路如下:

on_chain_start/model

on_chat_model_start/PatchedDeepSeek

on_chat_model_stream/PatchedDeepSeek

...

on_chat_model_end/PatchedChatDeepSeek

on_chain_stream/model

on_chain_end/model

7、loopdetection

8、标题中间件

9、web fetch 工具调用

这里是展示的卡片,分别为标题和链接,点击后可以跳转。不展示调用结果。

相关代码在frontend/src/components/workspace/messages/message-group.tsx

可以看到定义了这些工具对应的卡片:

/web_search/image_search/web_fetch/ls/read_file/write_file|str_replace/bash/ask_clarification/write_todos,其中web_fetch工具卡片代码如下:

被workspace/chats/page.tsx->message-list->message-group调用,message-list包含了流式,markdown内容支持,消息样式等支持:

调用流程如下:

(1)on_chain_start tools/tools:返回工具调用名称、工具参数,前端需要展示相关信息,事件内容见下方

(2)on_tool_start/web_fetch:返回工具调用结果

(3)on_chain_stream/tools:返回工具调用结果流式内容

(4)on_chain_end/tools:将工具调用链路内容封装为messages

on_chain_start tools/tools事件内容如下:

css 复制代码
{
    "event": "on_chain_start",
    "data": {
        "input": {
            "__type": "tool_call_with_context",
            "tool_call": {
                "name": "web_fetch",
                "args": {
                    "url": "https://www.weather.com.cn/weather/101280601.shtml"
                },
                "id": "call_00_KT3HgoXkonZzCwTsznxzMulN",
                "type": "tool_call"
            },
            "state": {
                "messages": [
                    {
                        "content": [
                            {
                                "type": "text",
                                "text": "查看今天深圳天气"
                            }
                        ],
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "human",
                        "name": null,
                        "id": "18b0ff18-da5c-480f-ad7f-70b327a6605b"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "用户想要查看深圳今天的天气。这是一个直接的请求,需要获取实时天气信息。我需要先搜索深圳今天的天气情况。\n\n我应该使用中文搜索词,比如"深圳 今天 天气"。现在去搜索。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb31-c839-7081-ae2f-3ee24a56ab99",
                        "tool_calls": [
                            {
                                "name": "web_search",
                                "args": {
                                    "query": "深圳 今天 天气"
                                },
                                "id": "call_00_5rBhi89XuUPo8Owd7zCxjN73",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 8007,
                            "output_tokens": 91,
                            "total_tokens": 8098,
                            "input_token_details": {
                                "cache_read": 1280
                            },
                            "output_token_details": {
                                "reasoning": 43
                            }
                        }
                    },
                    {
                        "content": "Error: Tool 'web_search' failed with MissingAPIKeyError: No API key provided. Please provide the api_key attribute or set the TAVILY_API_KEY environment variable.. Continue with available context, or choose an alternative tool.",
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "tool",
                        "name": "web_search",
                        "id": "64603145-896f-4343-b529-b430f9a3756f",
                        "tool_call_id": "call_00_5rBhi89XuUPo8Owd7zCxjN73",
                        "artifact": null,
                        "status": "error"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "搜索工具由于缺少API密钥而失败。我需要尝试另一种方法。也许可以使用网络抓取或查找其他来源。我可以尝试直接获取一个已知的天气预报网站。让我试试中国天气网(weather.com.cn)或类似的网站。不过,我手头没有具体的URL。我可以尝试搜索"深圳天气",但搜索工具用不了。\n\n或者,我可以尝试使用一个公开的天气API,但同样需要知道URL。让我尝试一个通用的天气预报网站,比如"weather.com",但针对深圳的页面可能是"https://weather.com/zh-CN/weather/today/l/Shenzhen"。我可以尝试抓取这个页面。先试试看。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb31-e328-7860-a279-d8a9d110c961",
                        "tool_calls": [
                            {
                                "name": "web_fetch",
                                "args": {
                                    "url": "https://weather.com/zh-CN/weather/today/l/Shenzhen"
                                },
                                "id": "call_00_x94cRCYlZNVD6cI0W6cjHCSz",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 8161,
                            "output_tokens": 194,
                            "total_tokens": 8355,
                            "input_token_details": {
                                "cache_read": 8000
                            },
                            "output_token_details": {
                                "reasoning": 134
                            }
                        }
                    },
                    {
                        "content": "# Untitled\n\nError: Jina API returned status 451: {\"data\":null,\"code\":451,\"name\":\"SecurityCompromiseError\",\"status\":45102,\"message\":\"Anonymous access to domain weather.com blocked until Tue Mar 17 2026 10:15:02 GMT+0000 (Coordinated Universal Time) due to previous abuse found on https://weather.com/zh-CN/weather/hourbyhour/l/Nadi+Western+Fiji?placeId=9c4e11f33bf563346bf580e72e6c877716d4b5f5b671498b792e75b4e62d59c1: DDoS attack suspected: Too many requests\",\"readableMessage\":\"SecurityCompromiseError: Anonymous access to domain weather.com blocked until Tue Mar 17 2026 10:15:02 GMT+0000 (Coordinated Universal Time) due to previous abuse found on https://weather.com/zh-CN/weather/hourbyhour/l/Nadi+Western+Fiji?placeId=9c4e11f33bf563346bf580e72e6c877716d4b5f5b671498b792e75b4e62d59c1: DDoS attack suspected: Too many requests\"}",
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "tool",
                        "name": "web_fetch",
                        "id": "714e3933-663f-4058-b64a-47bd6adbb82e",
                        "tool_call_id": "call_00_x94cRCYlZNVD6cI0W6cjHCSz",
                        "artifact": null,
                        "status": "success"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "weather.com 被屏蔽了。尝试另一个网站,比如中国天气网(weather.com.cn)。试试这个URL:https://www.weather.com.cn/weather/101280601.shtml(深圳的代码可能是101280601)。先试试看。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb32-060b-7121-b17c-1508fb4796b2",
                        "tool_calls": [
                            {
                                "name": "web_fetch",
                                "args": {
                                    "url": "https://www.weather.com.cn/weather/101280601.shtml"
                                },
                                "id": "call_00_sktdpG1wPc0ySFLtOqEAajSr",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 8640,
                            "output_tokens": 111,
                            "total_tokens": 8751,
                            "input_token_details": {
                                "cache_read": 8128
                            },
                            "output_token_details": {
                                "reasoning": 52
                            }
                        }
                    },
                    {
                        "content": "# 深圳天气预报,深圳7天天气预报,深圳15天天气预报,深圳天气查询\n\n深圳天气预报,深圳7天天气预报,深圳15天天气预报,深圳天气查询\n\n首页 预报 预警 雷达 云图 天气地图 专业产品 资讯 视频 节气 我的天空\n\n更多\n\n台风路径 空间天气 图片 专题 环境 旅游 碳中和 气象科普 一带一路 产创平台\n\n国内 本地 国际\n\n热门城市\n\n:   北京 上海 成都 杭州 南京 天津 深圳 重庆 西安 广州 青岛 武汉\n\n热门景点\n\n:   故宫 阳朔漓江 龙门石窟 野三坡 颐和园 九寨沟 东方明珠 凤凰古城 秦始皇陵 桃花源\n\n选择省市\n\n高球\n:   佘山 春城湖畔 华彬庄园 观澜湖 依必朗 旭宝 博鳌 玉龙雪山 番禺南沙 东方明珠\n\n<<返回 全国\n\n河北下辖区域\n\n周边城市\n\n周边景点\n\n本地乡镇\n\n热门城市\n\n:   曼谷 东京 首尔 吉隆坡 新加坡 巴黎 罗马 伦敦 雅典 柏林 纽约 温哥华 墨西哥城 哈瓦那 圣何塞 巴西利亚 布宜诺斯艾利斯 圣地亚哥 利马 基多 悉尼 墨尔本 惠灵顿 奥克兰 苏瓦 开罗 内罗毕 开普敦 维多利亚 拉巴特\n\n选择洲际\n\n:   亚洲 欧洲 北美洲 南美洲 非洲 大洋洲\n\n全国> 广东 > 深圳> 城区\n\n* 今天\n* 7天\n* 8-15天\n* 40天\n* 雷达图\n\n* 17日(今天)\n  =======\n\n  多云\n\n  18°C\n\n  <3级\n* 18日(明天)\n  =======\n\n  多云\n\n  26°C/19°C\n\n  <3级\n* 19日(后天)\n  =======\n\n  多云\n\n  26°C/21°C\n\n  <3级\n* 20日(周五)\n  =======\n\n  多云\n\n  25°C/20°C\n\n  <3级\n* 21日(周六)\n  =======\n\n  多云\n\n  25°C/20°C\n\n  <3级\n* 22日(周日)\n  =======\n\n  多云\n\n  26°C/20°C\n\n  <3级\n* 23日(周一)\n  =======\n\n  多云\n\n  25°C/20°C\n\n  <3级\n\n分时段预报 生活指数\n\n蓝天预报\n\n### 蓝天预报综合天气现象、能见度、空气质量等因子,预测未来一周的天空状况。\n\n* 天空蔚蓝 可见透彻蓝天,或有蓝天白云美景。\n* 天空淡蓝 天空不够清澈,以浅蓝色为主。\n* 天空阴沉 阴天或有雨雪,天空灰暗。\n* 天空灰霾 出现霾或沙尘,天空灰蒙浑浊。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 舒适 穿衣指数\n\n  建议穿长袖衬衫单裤等服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 很强 紫外线指数\n\n  涂擦SPF20以上,PA++护肤品,避强光。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 热 穿衣指数\n\n  适合穿T恤、短薄外套等夏季服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 很强 紫外线指数\n\n  涂擦SPF20以上,PA++护肤品,避强光。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 热 穿衣指数\n\n  适合穿T恤、短薄外套等夏季服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 很强 紫外线指数\n\n  涂擦SPF20以上,PA++护肤品,避强光。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 舒适 穿衣指数\n\n  建议穿长袖衬衫单裤等服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 最弱 紫外线指数\n\n  辐射弱,涂擦SPF8-12防晒护肤品。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 舒适 穿衣指数\n\n  建议穿长袖衬衫单裤等服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 很强 紫外线指数\n\n  涂擦SPF20以上,PA++护肤品,避强光。\n\n* 少发 感冒指数\n\n  无明显降温,感冒机率较低。\n* 适宜 运动指数\n\n  天气较好,尽情感受运动的快乐吧。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 舒适 穿衣指数\n\n  建议穿长袖衬衫单裤等服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 弱 紫外线指数\n\n  辐射较弱,涂擦SPF12-15、PA+护肤品。\n\n* 少发 感冒指数\n\n  感冒机率较低,避免长期处于空调屋中。\n* 较适宜 运动指数\n\n  请适当降低运动强度,并及时补充水分。\n* 易发 过敏指数\n\n  应减少外出,外出需采取防护措施。\n* 热 穿衣指数\n\n  适合穿T恤、短薄外套等夏季服装。\n* 适宜 洗车指数\n\n  天气较好,适合擦洗汽车。\n* 很强 紫外线指数\n\n  涂擦SPF20以上,PA++护肤品,避强光。\n\n天气资讯\n====\n\n:   四川西北部今夜到后天雨雪频繁 攀西地区天气干燥需注意防火 中国天气网 2026-03-17 16:46\n\n:   未来一周江南及贵州等地有持续阴雨 春耕春播短暂受阻 中国天气网 2026-03-17 16:35\n\n:   河南汝州细雨绵绵 雨润长街草木新 中国天气网 2026-03-17 15:33\n\n:   湖北今天阴雨持续局地现大雨 明后天降雨减少气温迅速回升 中国天气网 2026-03-17 15:35\n\n:   青海黄南出现降雪 银装素裹冬韵十足 中国天气网青海站 2026-03-17 11:37\n\n周边地区 | 周边景点 2026-03-17 18:00更新\n==============================\n\n* 佛山\n\n  /\n\n  19/26°C\n* 珠海\n\n  /\n\n  20/25°C\n* 香港\n\n  /\n\n  21/26°C\n* 肇庆\n\n  /\n\n  17/26°C\n* 汕尾\n\n  /\n\n  19/25°C\n* 清远\n\n  /\n\n  17/27°C\n* 澳门\n\n  /\n\n  20/25°C\n* 河源\n\n  /\n\n  15/27°C\n* 广州\n\n  /\n\n  16/27°C\n* 惠州\n\n  /\n\n  18/27°C\n* 中山\n\n  /\n\n  17/27°C\n* 东莞\n\n  /\n\n  18/27°C\n\n周边地区 | 周边景点 2026-03-17 18:00更新\n==============================\n\n* 明思克航母世界\n\n  /\n\n  18/24°C\n* 观澜湖高尔夫球会·深圳\n\n  /\n\n  19/27°C\n* 仙湖植物园\n\n  /\n\n  18/26°C\n* 锦绣中华-西樵山\n\n  /\n\n  18/27°C\n* 海上田园\n\n  /\n\n  19/26°C\n\n高清图集\n====\n\n青海黄南出现降雪 银装素裹冬韵十足 赏花去!北京北海阐福寺桃花正盛 河南汝州细雨绵绵 雨润长街草木新 北京现日晕景观 太阳自带光环 植树节:河南汝州开展植树活动 建设绿色家园\n\n重大天气事件\n======\n\n* 3月17日\n\n  新一股冷空气启程!北方气温将现波动 南方阴雨模式持续\n  --------------------------\n\n  今天(3月17日)北方大部气温继续回升,新一股冷空气今天将给西北地区东部、内蒙古带来降温。西南地区至长江中下游一带阴雨模式持续。\n* 3月16日\n\n  江南等地维持阴雨模式气温低迷 17日新一股冷空气将影响北方\n  -----------------------------\n\n  今后三天(3月16日至18日),南方多阴雨天气,气温难有起色,维持偏低状态。今天,北方大部地区持续回暖,但明天将有一股新冷空气登场。\n* 3月15日\n\n  南方阴雨持续北方雨雪暂歇 贵州湖南等地降温可超10°C\n  ---------------------------\n\n  今天(3月15日)降温核心区域将向南转移,贵州东部、湖南西北部、湖北一带多地降温或超10°C,北方则以晴朗升温为主。\n* 3月14日\n\n  陕西山西等地局地仍有强降雪 长江中下游将进入连阴雨模式\n  ---------------------------\n\n  今天降雪范围进一步向东推进,明天,北方雨雪会告一段落,降水重心将转移至西南地区东部到长江中下游一带。\n* 3月13日\n\n  北方降雪加强甘肃宁夏等地有暴雪 西南等地湿凉感加重\n  -------------------------\n\n  随着冷暖空气交汇,今明天将进入本轮雨雪过程的最强时段,青海、甘肃、宁夏、陕西等地部分地区有大到暴雪。\n* 3月12日\n\n  北方多地大到暴雪来袭 西北等地冷暖反差大\n  --------------------\n\n  今起四天,较强冷空气继续向东推进,雨雪也会随之发展,明后天将为此轮过程最强降雪时段,注意防范。\n* 3月11日\n\n  我国大部今日晴暖格局延续 明起大范围雨雪降温来袭\n  ------------------------\n\n  今天我国大部仍将维持晴朗升温的天气格局,南方大部气温将升至20°C以上,西北部分地区会暖得同期少见,明天起大范围降水上线。\n* 3月10日\n\n  今明天全国晴多雨少气温回升 冷空",
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "tool",
                        "name": "web_fetch",
                        "id": "e4a6f52b-1a7a-477f-ae27-6e9540d58559",
                        "tool_call_id": "call_00_sktdpG1wPc0ySFLtOqEAajSr",
                        "artifact": null,
                        "status": "success"
                    },
                    {
                        "content": "根据中国天气网(2026-03-17 18:00更新)的数据,今天(3月17日)深圳的天气情况如下:\n\n**🌤️ 天气状况:** 多云  \n**🌡️ 气温:** 18°C  \n**💨 风力:** <3级  \n**📅 日期:** 2026年3月17日(星期二)\n\n**生活指数参考:**\n- **感冒指数:** 少发(无明显降温,感冒机率较低)\n- **运动指数:** 适宜(天气较好,适合运动)\n- **穿衣指数:** 舒适(建议穿长袖衬衫、单裤等服装)\n- **紫外线指数:** 很强(建议涂擦SPF20以上防晒护肤品)\n\n整体来看,今天深圳天气较为舒适,多云无强风,适合户外活动和出行。需要提醒的是紫外线较强,请注意防晒。",
                        "additional_kwargs": {
                            "reasoning_content": "页面抓取成功,显示的是深圳的天气预报。今天是3月17日,页面显示"17日(今天)",天气"多云",温度"18°C",风向"<3级"。我需要提取这些信息,并用中文呈现给用户。\n\n我还看到页面的更新时间是"2026-03-17 18:00更新"。所以数据是最新的。\n\n现在,我将用中文总结今天深圳的天气情况,并提供一个简短的概述。然后,我可以建议用户是否需要更多细节,比如未来几天的预报。但用户只问了"今天深圳天气",所以我应该主要回答今天的天气情况。\n\n现在开始回复。"
                        },
                        "response_metadata": {
                            "finish_reason": "stop",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb32-2a09-7353-bfea-1bff65885817",
                        "tool_calls": [],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 11257,
                            "output_tokens": 324,
                            "total_tokens": 11581,
                            "input_token_details": {
                                "cache_read": 8576
                            },
                            "output_token_details": {
                                "reasoning": 131
                            }
                        }
                    },
                    {
                        "content": [
                            {
                                "type": "text",
                                "text": "查看今天深圳天气"
                            }
                        ],
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "human",
                        "name": null,
                        "id": "4a2f4c45-878f-464b-8956-23669acccb11"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "用户再次询问\"查看今天深圳天气\",和刚才一样的问题。我已经从中国天气网获取了2026年3月17日18:00更新的深圳天气信息,并给出了详细的回答。用户可能是想再次确认或没有看到之前的回答。\n\n但为了提供最新信息,我可以再次获取当前时间(考虑到现在是3月17日)的天气。由于无法使用web_search,我需要尝试其他天气网站。可以尝试用web_fetch获取其他网站的天气信息。让我尝试百度天气或者其他中国天气网站。\n\n尝试:https://tianqi.baidu.com/shenzhen,这是百度天气深圳页面。如果被屏蔽,可以尝试其他中国网站。\n\n我需要调用web_fetch工具。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb32-b1cc-7162-ac2a-87c4afd90b49",
                        "tool_calls": [
                            {
                                "name": "web_fetch",
                                "args": {
                                    "url": "https://tianqi.baidu.com/shenzhen"
                                },
                                "id": "call_00_vxCAhQJMxJekCMU3GYHWBRez",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 11225,
                            "output_tokens": 199,
                            "total_tokens": 11424,
                            "input_token_details": {
                                "cache_read": 8000
                            },
                            "output_token_details": {
                                "reasoning": 144
                            }
                        }
                    },
                    {
                        "content": "# Untitled\n\nError: Jina API returned status 400: {\"data\":null,\"path\":\"url\",\"code\":400,\"name\":\"ParamValidationError\",\"status\":40001,\"message\":\"Domain 'tianqi.baidu.com' could not be resolved\",\"readableMessage\":\"ParamValidationError(url): Domain 'tianqi.baidu.com' could not be resolved\"}",
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "tool",
                        "name": "web_fetch",
                        "id": "fea30b67-424b-4936-bf7e-068359954e92",
                        "tool_call_id": "call_00_vxCAhQJMxJekCMU3GYHWBRez",
                        "artifact": null,
                        "status": "success"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "百度天气域名解析失败。尝试另一个网站:https://weather.sina.com.cn/shenzhen。或者再次尝试中国天气网的不同页面。刚才的页面是https://www.weather.com.cn/weather/101280601.shtml,这个页面成功了,但可能用户想要更简短的天气信息。我可以重新获取同一页面确认信息是否更新。\n\n再次获取同一页面,或者尝试其他页面。让我尝试:https://www.weather.com.cn/weather1d/101280601.shtml 或者 https://weather.sina.com.cn/shenzhen。\n\n先尝试新浪天气。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb32-d356-7d60-a283-835fcfc4f3d0",
                        "tool_calls": [
                            {
                                "name": "web_fetch",
                                "args": {
                                    "url": "https://weather.sina.com.cn/shenzhen"
                                },
                                "id": "call_00_C33IM1VxmopJazIanoDoLZSb",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 11518,
                            "output_tokens": 176,
                            "total_tokens": 11694,
                            "input_token_details": {
                                "cache_read": 11200
                            },
                            "output_token_details": {
                                "reasoning": 122
                            }
                        }
                    },
                    {
                        "content": "Error: Tool 'web_fetch' failed with IndexError: list index out of range. Continue with available context, or choose an alternative tool.",
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "tool",
                        "name": "web_fetch",
                        "id": "4180acec-4a83-4e5c-96da-83e516009b99",
                        "tool_call_id": "call_00_C33IM1VxmopJazIanoDoLZSb",
                        "artifact": null,
                        "status": "error"
                    },
                    {
                        "content": "根据最新获取的天气信息(2026年3月17日 18:00更新):\n\n## 深圳今日天气 🌤️\n\n**天气状况:** 多云  \n**当前气温:** 18°C  \n**风力等级:** <3级(微风)  \n**更新时间:** 2026年3月17日 18:00\n\n## 生活指数参考 📊\n\n- **感冒指数:** 少发(无明显降温,感冒机率较低)\n- **运动指数:** 适宜(天气较好,适合户外活动)\n- **穿衣指数:** 舒适(建议穿长袖衬衫、单裤等服装)\n- **紫外线指数:** 很强(需涂擦SPF20以上防晒护肤品)\n\n今天深圳天气舒适,多云微风,适合外出。由于紫外线较强,外出时建议做好防晒措施。",
                        "additional_kwargs": {
                            "reasoning_content": "web_fetch失败了。我可以再次获取之前成功的中国天气网页面,然后给用户一个更简洁的天气摘要。既然之前的回答已经提供了详细信息,我可以再次呈现这些信息。\n\n但用户可能想要不同的格式。我可以从之前的回答中提取核心信息,用更简洁的方式呈现。\n\n考虑到我之前已经从中国天气网获取了信息,我可以重新整理一下:\n\n根据中国天气网(2026-03-17 18:00更新):\n- 天气:多云\n- 温度:18°C\n- 风力:<3级\n- 生活指数:感冒少发,运动适宜,紫外线很强\n\n就这样回答。直接给出简洁的天气信息。"
                        },
                        "response_metadata": {
                            "finish_reason": "stop",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb32-f50e-74e1-9018-484b27414561",
                        "tool_calls": [],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 11740,
                            "output_tokens": 320,
                            "total_tokens": 12060,
                            "input_token_details": {
                                "cache_read": 11456
                            },
                            "output_token_details": {
                                "reasoning": 140
                            }
                        }
                    },
                    {
                        "content": [
                            {
                                "type": "text",
                                "text": "查看今天深圳天气"
                            }
                        ],
                        "additional_kwargs": {},
                        "response_metadata": {},
                        "type": "human",
                        "name": null,
                        "id": "bca3b1d2-49f8-4e96-99ab-17611c7dfdcf"
                    },
                    {
                        "content": "",
                        "additional_kwargs": {
                            "reasoning_content": "用户再次请求查看今天深圳天气。虽然我刚提供了天气信息,但用户可能想要最新数据或确认信息。我应该再查询一下,但要注意避免重复搜索同一网站可能导致的问题。让我尝试其他天气网站。\n\n首先,我应该再次查询中国天气网(weather.com.cn),因为这是最可靠的中文天气信息来源。但需要处理可能的重定向或更新。让我先搜索一下\"深圳天气 2026-03-17\"。或者直接访问中国天气网的其他页面。\n\n不过根据之前的经验,weather.com被屏蔽了,但weather.com.cn是正常可访问的。让我尝试一个更具体的深圳天气页面。使用web_fetch访问深圳天气的官方页面。中国天气网的深圳天气页面是:https://www.weather.com.cn/weather/101280601.shtml\n\n我已经从这个页面获取了信息,但为了确保最新,可以再次访问同一页面。虽然内容可能一样,但可以显示最新的更新时间。让我重新获取这个页面。"
                        },
                        "response_metadata": {
                            "finish_reason": "tool_calls",
                            "model_name": "deepseek-reasoner",
                            "system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache",
                            "model_provider": "deepseek"
                        },
                        "type": "ai",
                        "name": null,
                        "id": "lc_run--019cfb33-b0c5-7d53-af62-12dc1ff7ad70",
                        "tool_calls": [
                            {
                                "name": "web_fetch",
                                "args": {
                                    "url": "https://www.weather.com.cn/weather/101280601.shtml"
                                },
                                "id": "call_00_KT3HgoXkonZzCwTsznxzMulN",
                                "type": "tool_call"
                            }
                        ],
                        "invalid_tool_calls": [],
                        "usage_metadata": {
                            "input_tokens": 11680,
                            "output_tokens": 259,
                            "total_tokens": 11939,
                            "input_token_details": {
                                "cache_read": 1472
                            },
                            "output_token_details": {
                                "reasoning": 200
                            }
                        }
                    }
                ],
                "thread_data": {
                    "workspace_path": "D:\\projects\\2026\\deer-flow2\\deer-flow\\backend\\.deer-flow\\threads\\54020de7-bacb-4d4c-be31-adf8f6dad813\\user-data\\workspace",
                    "uploads_path": "D:\\projects\\2026\\deer-flow2\\deer-flow\\backend\\.deer-flow\\threads\\54020de7-bacb-4d4c-be31-adf8f6dad813\\user-data\\uploads",
                    "outputs_path": "D:\\projects\\2026\\deer-flow2\\deer-flow\\backend\\.deer-flow\\threads\\54020de7-bacb-4d4c-be31-adf8f6dad813\\user-data\\outputs"
                },
                "title": "深圳今日天气查询",
                "artifacts": [],
                "viewed_images": {}
            }
        }
    },
    "name": "tools",
    "tags": [
        "graph:step:55"
    ],
    "run_id": "019cfb33-d4df-7cf3-962d-78574638d5b4",
    "metadata": {
        "created_by": "system",
        "graph_id": "lead_agent",
        "assistant_id": "bee7d354-5df5-5f26-a978-10ea053f620d",
        "thinking_enabled": true,
        "is_plan_mode": false,
        "subagent_enabled": false,
        "thread_id": "54020de7-bacb-4d4c-be31-adf8f6dad813",
        "checkpoint_id": "1f121e68-f502-6625-802d-16cc3e092344",
        "checkpoint_ns": "",
        "langgraph_auth_user_id": "",
        "langgraph_request_id": "74ef9076-1b46-4cc2-9e4c-a852b64c7843",
        "run_id": "019cfb33-a803-7aa3-8a43-6dd31688a7c7",
        "user_id": "",
        "agent_name": "default",
        "model_name": "deepseek-v3",
        "reasoning_effort": null,
        "run_attempt": 1,
        "langgraph_version": "1.0.10",
        "langgraph_api_version": "0.7.65",
        "langgraph_plan": "enterprise",
        "langgraph_host": "self-hosted",
        "langgraph_api_url": "http://127.0.0.1:2024",
        "langgraph_step": 55,
        "langgraph_node": "tools",
        "langgraph_triggers": [
            "__pregel_push"
        ],
        "langgraph_path": [
            "__pregel_push",
            0,
            false
        ],
        "langgraph_checkpoint_ns": "tools:6ea8d27a-fd9c-f0ac-2d0b-4fba07812d81"
    },
    "parent_ids": [
        "019cfb33-a803-7aa3-8a43-6dd31688a7c7"
    ]
}

各阶段参数如下

流式接口会返回工具调用结果信息。

工具调用开始和结束会输出tool_id

10、SummarizationMiddleware

11、模型思考

调用链路,同第6点。

on_chain_start/model

on_chat_model_start/PatchedChatDeepSeek

...

模型的输入messages内容含上下文

先通过reasoning_content输出思考过程

...

事件数据:

css 复制代码
{
    "event": "on_chat_model_stream",
    "data": {
        "chunk": {
            "content": "",
            "additional_kwargs": {
                "reasoning_content": "根据"
            },
            "response_metadata": {
                "model_provider": "deepseek"
            },
            "type": "AIMessageChunk",
            "name": null,
            "id": "lc_run--019cfb33-e341-7061-8c35-9b9c906996a7",
            "tool_calls": [],
            "invalid_tool_calls": [],
            "usage_metadata": null,
            "tool_call_chunks": [],
            "chunk_position": null
        }
    },
    "run_id": "019cfb33-e341-7061-8c35-9b9c906996a7",
    "name": "PatchedChatDeepSeek",
    "tags": [
        "seq:step:1"
    ],
    "metadata": {
        "created_by": "system",
        "graph_id": "lead_agent",
        "assistant_id": "bee7d354-5df5-5f26-a978-10ea053f620d",
        "thinking_enabled": true,
        "is_plan_mode": false,
        "subagent_enabled": false,
        "thread_id": "54020de7-bacb-4d4c-be31-adf8f6dad813",
        "checkpoint_id": "1f121e68-f502-6625-802d-16cc3e092344",
        "checkpoint_ns": "",
        "langgraph_auth_user_id": "",
        "langgraph_request_id": "74ef9076-1b46-4cc2-9e4c-a852b64c7843",
        "run_id": "019cfb33-a803-7aa3-8a43-6dd31688a7c7",
        "user_id": "",
        "agent_name": "default",
        "model_name": "deepseek-v3",
        "reasoning_effort": null,
        "run_attempt": 1,
        "langgraph_version": "1.0.10",
        "langgraph_api_version": "0.7.65",
        "langgraph_plan": "enterprise",
        "langgraph_host": "self-hosted",
        "langgraph_api_url": "http://127.0.0.1:2024",
        "langgraph_step": 57,
        "langgraph_node": "model",
        "langgraph_triggers": [
            "branch:to:model"
        ],
        "langgraph_path": [
            "__pregel_pull",
            "model"
        ],
        "langgraph_checkpoint_ns": "model:af696501-c7a6-38b2-f631-260c4f2b4405",
        "ls_provider": "deepseek",
        "ls_model_name": "deepseek-reasoner",
        "ls_model_type": "chat",
        "ls_temperature": null,
        "ls_max_tokens": 8192
    },
    "parent_ids": [
        "019cfb33-a803-7aa3-8a43-6dd31688a7c7",
        "019cfb33-e326-72e3-8e3e-db96579b7c01"
    ]
}

12、模型回复

注意,是在同一个流式事件中,可以看到"。"后面就是"根据"。但前端需要在另外的地方打印消息。

13、LoopDetectionMiddleware

14、TitleMiddleware

15、MemoryMiddleware

16、SandboxMiddleware

17、lead_agent/end

相关推荐
刘宇琪2 小时前
Vite 生产环境代码分割与懒加载优化
前端
恋猫de小郭2 小时前
让你的 OpenClaw 带你学习,清华开源 AI 私人导师 OpenMAIC
前端·人工智能·ai编程
石小石Orz2 小时前
AI焦虑下,前端该何去何从
前端
何中应2 小时前
<el-tree>标签问题
前端·vue.js·elementui
坚持学习前端日记2 小时前
ComfyUI模型管理与集成方案
前端·人工智能·python
En^_^Joy2 小时前
JavaScript Web API:DOM操作全解析
开发语言·前端·javascript
咸鱼老弟2 小时前
AI时代,告别焦虑,前端工程师的心态转变
前端·程序员
UXbot2 小时前
APP原型生成工具测评
android·前端·人工智能·低代码·ios·开发·app原型
刘宇琪2 小时前
如何在大型前端项目中有效管理 TypeScript 的类型复用与共享?
前端