当前位置: 首页 > news >正文

spring-ai-alibaba 学习(二十五)——graph之内置节点

前面文章中说过,spring-ai-alibaba-graph 可以通过实现 NodeAction 来自定义节点

但是不想自定义的话,spring-ai-alibaba-graph 针对日常常用的场景,也封装了一批常用节点,例如大语言模型节点、工具节点等,方便直接使用

内置节点列表

内置节点作用
LlmNode根据输入的模板及参数调用大语言模型
ToolNode获取OverAllState中的大语言模型回复并调用对应工具
HttpNode执行http请求
HumanNode人工干预的节点,支持条件中断和总是中断两种策略
McpNode调用Mcp服务器

QuestionClassifierNode

文本分类

DocumentExtractorNode

从不同格式的文件中提取文本内容

KnowledgeRetrievalNode

从向量存储中检索内容
。。。其他还有若干内置节点,感兴趣可以参考开源仓库

以LlmNode和ToolNode 为例来看两种节点的使用和执行过程(其他节点的样例可以参考官方示例spring-ai-alibaba-examples/spring-ai-alibaba-graph-example at main · springaialibaba/spring-ai-alibaba-examples)

大语言模型节点 LlmNode

样例

使用方式

        LlmNode llmNode = LlmNode.builder().chatClient(chatClient).systemPromptTemplate("你是客服助手,请基于以下信息撰写回复:").userPromptTemplateKey("http_response").messagesKey("user_prompt").outputKey("llm_response").build();graph.addNode("invokeLLM", AsyncNodeAction.node_async(llmNode));

LlmNode 提供了4个key字段和默认实现

key默认实现
systemPromptKeysystemPrompt
userPromptKeyuserPrompt
paramsKeyparams
messagesKeymessages

ps:Builder中部分字段带有Template

以上四种属性 LlmNode 优先从 OverAllState 中以key获取,获取不到则取默认实现:

state.value(xxxKey).orElse(xxx)

除此之外还有拦截器 advisors,工具 toolCallbacks,输出key outputKey,聊天客户端 chatClient,流式标志 stream等字段

执行过程:以 param 渲染用户提示词,然后根据流式标志调用 stream 或 call 方法,结果放入 OverAllState 的 outputKey 对应槽位中,outputKey 为空则默认放入 messages中

工具节点 ToolNode

样例

使用方式

        ToolNode toolNode = ToolNode.builder().llmResponseKey("llm_response").outputKey("tool_result").toolCallbackResolver(toolCallbackResolver).toolNames(List.of("sendEmail", "updateCRM")).build();graph.addNode("invokeTool", AsyncNodeAction.node_async(toolNode));

ToolNode 包含一个输入key llmResponseKey,一个输出key outputKey,两个工具提供者 toolCallbacks 和 toolCallbackResolver

执行过程

1)获取大模型回复:ToolNode 首先根据 llmResponseKey 从 OverAllState 获取,llmResponseKey 未设置则默认取key为 “llm_response”,若未取到则取 OverAllState 的 messages 的最后一条

2)获取工具:从大模型回复中获取工具列表,然后从 toolCallbacks 中匹配同名工具,若未找到则由 toolCallbackResolver 根据工具名获取

3)执行工具:从大模型回复中获取工具对应参数,连同 OverAllState 一起传入工具,获得工具调用结果

4)封装结果:结果会放入结果Map,key为 messages 和 输出key 

注意:有些内置节点会根据传入的OverAllState更新内部成员变量,在多用户并发请求时可能会存在覆盖的问题

http://www.dtcms.com/a/332445.html

相关文章:

  • Linux815 shell:while
  • Spring Boot接口签名校验设计与实现
  • 设计模式(Design Patterns)
  • WEB安全--Java安全--Servlet内存马
  • DzzOffice 开发手册之系统的配置
  • 短剧小程序系统开发:打造个性化娱乐新体验
  • 【反序列化基本介绍】
  • 25.Linux 聚合链路与软件网桥
  • 【中微半导体】BAT32G139GK48FA 定时器B输入捕获测速(寄存器TBSR/TBIER/TB/TBGRA/TBGRC)
  • Struts文件泄露漏洞分析与修复方案
  • 企业级Spring事务管理:从单体应用到微服务分布式事务完整方案
  • Baumer高防护相机如何通过YoloV8深度学习模型实现驾驶员疲劳的检测识别(C#代码UI界面版)
  • MySQL 主键详解:作用与使用方法
  • 搭建前端开发环境 安装nvm nodejs pnpm 配置环境变量
  • MySQL、PolarDB、PolarDB-X、TableStore、MongoDB、TiDB、ClickHouse选型
  • 融合开源AI智能名片与链动2+1模式的微商新零售转型研究——基于S2B2C商城小程序的实践探索
  • 戴永红×数图:重构零售空间价值,让陈列创造效益!
  • HTML5新增属性
  • 鸿蒙任务调度机制深度解析:优先级、时间片、多核与分布式的流畅秘密
  • 什么是国产化防爆平板?有哪些功能特点?应用在什么场景?
  • 【iOS】多线程原理
  • AI生成内容版权争议:当算法创作撞上法律边界
  • Python入门第2课:变量、数据类型与输入输出
  • Java Maven更换国内源
  • 企业网盘、NAS、移动硬盘、同步盘都是什么意思?
  • 个人博客系统测试文档
  • Python复杂元素排序:从基础到高阶
  • 以太网转换器实现:S7-300通过MPI转以太网连接多类工业设备
  • Java锁机制深度解析:从synchronized到StampedLock
  • Linux网络基础(一)