spring-ai-alibaba-deepresearch 学习(八)——源码学习之InformationNode

本篇为spring-ai-alibaba学习系列第三十四篇

前面介绍 planner 节点下一节点是 information 节点

该节点比较简单,没有调用大模型,仅仅是将大模型的返回结果转化为 Plan 类型

使用方法

max_plan_iterations:最大计划迭代次数,控制重新生成计划的次数

auto_accepted_plan:决定下一节点为人工还是研究组

节点产出

current_plan:Plan类型的研究计划

源码跟踪

跟踪:在 DeepResearchConfiguration 中,information 节点是一个 InformationNode 类型的节点,创建时无需参数,内部会创建一个 BeanOutputConverter<Plan> 的转换器 converter

研究:InformationNode 的 apply 方法整体流程如下:

1)获取前一节点 planner 的结果 planner_content

2)尝试将其转化为 Plan 类型,若失败则返回 planner 节点重新生成计划(有最大次数限制,达到限制后直接到 END 节点)

3)转化成功后,将其放入current_plan

4)根据 auto_accepted_plan 判断是否允许自动接受计划,若为 false,则需要人工介入,转入 human_feedback 节点,若为 true,则直接进入 research_team 节点

总结:该节点将大模型的返回结果转化为 Plan 类型并支持在转化失败时重试,然后根据 auto_accepted_plan 取值进入不同节点

附InformationNode 的 apply 方法源码

    public Map<String, Object> apply(OverAllState state) {
		String result = state.value("planner_content", "");
		logger.info("planner_content: {}", result);
		assert Strings.isNotBlank(result);

		Plan curPlan = null;
		String nextStep = "research_team";
		Map<String, Object> updated = new HashMap<>();
		try {
			curPlan = converter.convert(result);
			logger.info("反序列成功,convert: {}", curPlan);
		}
		catch (Exception e) {
			// 2.2 反序列化失败,尝试重新生成计划
			logger.error("反序列化失败");
			if (StateUtil.getPlanIterations(state) < StateUtil.getPlanMaxIterations(state)) {
				// 尝试重新生成计划
				updated.put("plan_iterations", StateUtil.getPlanIterations(state) + 1);
				nextStep = "planner";
				updated.put("information_next_node", nextStep);
				logger.info("information node -> {} node", nextStep);
				return updated;
			}
			else {
				nextStep = END;
				updated.put("information_next_node", nextStep);
				logger.warn("information node -> {} node", nextStep);
				return updated;
			}
		}
		// 2.3 上下文不足,跳转到human_feedback节点
		if (!StateUtil.getAutoAcceptedPlan(state)) {
			nextStep = "human_feedback";
		}
		else {
			nextStep = "research_team";
			updated.put("plan_iterations", StateUtil.getPlanIterations(state) + 1);
		}
		updated.put("current_plan", curPlan);
		updated.put("information_next_node", nextStep);
		logger.info("information node -> {} node", nextStep);
		return updated;
	}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值