安爸-超级家庭

Dify工作流中的LLM节点总结

安爸 发布于

本文使用Dify v1.4.0版本,主要对LLMNode类的方法,以及方法执行流程进行了总结。

一.LLMNode类的方法总结

函数名称 功能 输入参数和类型 输出参数和类型
__init__ 初始化LLM节点 id: str, config: Mapping[str, Any], graph_init_params: GraphInitParams, graph: Graph, graph_runtime_state: GraphRuntimeState, previous_node_id: Optional[str], thread_pool_id: Optional[str], llm_file_saver: LLMFileSaver | None None
_run 运行LLM节点的主要逻辑 Generator[NodeEvent | InNodeEvent, None, None]
_invoke_llm 调用LLM模型 node_data_model: ModelConfig, model_instance: ModelInstance, prompt_messages: Sequence[PromptMessage], stop: Optional[Sequence[str]] Generator[NodeEvent, None, None]
_handle_invoke_result 处理LLM调用结果 invoke_result: LLMResult | Generator[LLMResultChunk, None, None] Generator[NodeEvent, None, None]
_image_file_to_markdown 将图像文件转换为Markdown格式 file: File str
_transform_chat_messages 转换聊天消息格式 messages: Sequence[LLMNodeChatModelMessage] | LLMNodeCompletionModelPromptTemplate Sequence[LLMNodeChatModelMessage] | LLMNodeCompletionModelPromptTemplate
_fetch_jinja_inputs 获取Jinja模板输入 node_data: LLMNodeData dict[str, str]
_fetch_inputs 获取节点输入变量 node_data: LLMNodeData dict[str, Any]
_fetch_files 获取文件输入 selector: Sequence[str] Sequence[File]
_fetch_context 获取上下文内容 node_data: LLMNodeData Generator
_convert_to_original_retriever_resource 转换上下文字典为原始检索资源 context_dict: dict Optional[dict]
_fetch_model_config 获取模型配置 node_data_model: ModelConfig tuple[ModelInstance, ModelConfigWithCredentialsEntity]
_fetch_memory 获取内存实例 node_data_memory: Optional[MemoryConfig], model_instance: ModelInstance Optional[TokenBufferMemory]
_fetch_prompt_messages 获取提示消息 多个参数(sys_query, sys_files, context等) tuple[Sequence[PromptMessage], Optional[Sequence[str]]]
_parse_structured_output 解析结构化输出 result_text: str dict[str, Any]
deduct_llm_quota 扣除LLM配额(类方法) tenant_id: str, model_instance: ModelInstance, usage: LLMUsage None
_extract_variable_selector_to_variable_mapping 提取变量选择器到变量映射(类方法) graph_config: Mapping[str, Any], node_id: str, node_data: LLMNodeData Mapping[str, Sequence[str]]
get_default_config 获取默认配置(类方法) filters: Optional[dict] dict
_handle_list_messages 处理消息列表 messages, context, jinja2_variables, variable_pool等 Sequence[PromptMessage]
_handle_blocking_result 处理阻塞式调用结果 invoke_result: LLMResult ModelInvokeCompletedEvent
_save_multimodal_image_output 保存多模态图像输出 content: ImagePromptMessageContent File
_handle_native_json_schema 处理原生JSON Schema model_parameters: dict, rules: list[ParameterRule] dict
_handle_prompt_based_schema 处理基于提示的Schema prompt_messages: Sequence[PromptMessage] list[PromptMessage]
_set_response_format 设置响应格式 model_parameters: dict, rules: list None
_prepare_schema_for_model 为模型准备Schema schema: dict dict
_fetch_model_schema 获取模型Schema provider: str AIModelEntity | None
_fetch_structured_output_schema 获取结构化输出Schema dict[str, Any]
_check_model_structured_output_support 检查模型结构化输出支持状态 SupportStructuredOutputStatus
_save_multimodal_output_and_convert_result_to_markdown 保存多模态输出并转换为Markdown contents: str | list[PromptMessageContentUnionTypes] None Generator[str, None, None]

二.LLMNode类的方法的执行流程

方法名称 执行流程
__init__ 初始化LLM节点,设置文件输出列表和文件保存器
_run 主执行流程:转换提示模板 → 获取变量输入 → 获取文件和上下文 → 配置模型 → 创建提示消息 → 调用LLM → 处理结果 → 返回运行完成事件
_invoke_llm 调用LLM模型:关闭数据库会话 → 使用模型实例调用LLM → 处理调用结果
_handle_invoke_result 处理LLM结果:区分阻塞模式和流式模式 → 处理结果块 → 收集完整文本和元数据 → 返回事件
_image_file_to_markdown 将图像文件链接转换为Markdown格式
_transform_chat_messages 转换聊天消息格式:处理Jinja2模板 → 应用模板文本 → 返回转换后的消息
_fetch_jinja_inputs 获取Jinja模板变量:从变量池获取值 → 处理不同类型变量(数组、对象等) → 返回变量字典
_fetch_inputs 获取提示模板变量:提取变量选择器 → 从变量池获取值 → 处理内存和查询变量 → 返回输入字典
_fetch_files 获取文件输入:根据选择器从变量池获取 → 处理单个文件或文件数组 → 返回文件序列
_fetch_context 获取上下文数据:检查是否启用 → 获取变量值 → 处理字符串或数组类型 → 生成检索资源事件
_convert_to_original_retriever_resource 转换上下文字典为检索资源:检查元数据结构 → 提取字段 → 返回资源字典
_fetch_model_config 获取模型配置:获取模型实例 → 验证模型状态 → 处理参数 → 返回模型实例和配置
_fetch_memory 获取对话内存:获取会话ID → 获取会话实例 → 创建令牌缓冲内存 → 返回内存对象
_fetch_prompt_messages 构建提示消息:处理不同模型类型 → 获取内存消息 → 添加系统查询 → 处理文件和上下文 → 过滤不支持内容 → 返回最终消息
_parse_structured_output 解析结构化输出:尝试JSON解析 → 处理解析错误 → 尝试修复无效JSON → 返回结构化数据
_handle_blocking_result 处理阻塞调用结果:保存多模态输出 → 转换为Markdown → 返回完成事件
_save_multimodal_image_output 保存多模态图像:处理URL或Base64数据 → 保存到存储 → 返回文件对象
_handle_native_json_schema 处理原生JSON Schema:获取Schema → 准备模型特定格式 → 设置响应格式 → 返回更新参数
_handle_prompt_based_schema 处理基于提示的Schema:获取Schema字符串 → 合并到系统提示 → 重组提示消息序列
_set_response_format 设置响应格式:检查模型规则 → 选择合适的JSON格式类型
_prepare_schema_for_model 为模型准备Schema:复制并处理Schema → 根据模型类型应用特定转换 → 返回处理后的Schema
_fetch_model_schema 获取模型Schema:获取模型实例 → 获取模型类型实例 → 返回模型Schema
_fetch_structured_output_schema 获取结构化输出Schema:验证Schema存在性 → 解析JSON → 验证格式 → 返回Schema字典
_check_model_structured_output_support 检查模型结构化输出支持:检查节点配置 → 获取模型Schema → 检查特性支持 → 返回支持状态
_save_multimodal_output_and_convert_result_to_markdown 保存多模态输出并转换:处理文本或内容列表 → 保存非文本内容 → 生成Markdown表示 → 逐步生成结果
_handle_list_messages 处理消息列表:处理Jinja2模板 → 处理基本模板 → 提取文件内容 → 生成提示消息
deduct_llm_quota 扣除配额:获取配额单位 → 计算使用量 → 更新数据库 → 提交事务
_extract_variable_selector_to_variable_mapping 提取变量映射:解析提示模板 → 提取变量选择器 → 添加系统变量 → 返回变量映射
get_default_config 获取默认配置:返回包含默认聊天模型和完成模型配置的字典

参考文献

[1] Dify工作流中的LLM节点总结:https://z0yrmerhgi8.feishu.cn/wiki/BZiowAjCXi4ahPkwmtocqzn8nqO

[2] LLMNode类:https://github.com/langgenius/dify/blob/1.4.0/api/core/workflow/nodes/llm/node.py


知识星球服务内容:Dify源码剖析及答疑,Dify对话系统源码,NLP电子书籍报告下载,公众号所有付费资料。加微信buxingtianxia21进NLP工程化资料群

(文:NLP工程化)

Dify工作流中的LLM节点总结最先出现在每时AI


扫描二维码,在手机上阅读