应用流开发

LangStudio 提供了一个直观、高效的集成开发环境,可在此构建、调试和优化由大语言模型、Python节点及其他工具组成的应用流。

快速开始

步骤一:创建对话型应用流

  1. 进入LangStudio,选择工作空间后,在应用流页签单击新建应用流

  2. 新建方式中,选择按类型新建 > 对话型,配置参数如下。

    • 名称:为应用流命名。系统会自动生成,也可以自定义修改。

    • 选择运行时:运行时用于应用流的开发调试,故将在步骤三调试时创建并绑定运行时。

    • 工作路径建议选择工作空间的默认存储路径。

      说明

      如选择了运行时,会自动加载运行时的工作路径。

  3. 单击确定,会创建一个由开始节点、大模型节点和结束节点组成的简单应用流。

更多新建方式请参见创建方式说明

步骤二:配置节点

完成创建后,将进入应用流开发界面。在画布上可以添加、删除和配置节点。

  1. 单击新添加的大模型节点,右侧将展开节点配置区域

  2. 模型设置中,选择一个模型服务连接。此处选择已配置好的百炼模型服务连接。

    说明

    连接用于安全地存储和管理访问外部服务(如大模型 API)所需的凭证。如尚未配置,需新建连接,详情请参见连接配置

可添加其他节点满足复杂场景需求,更多节点参见预置组件说明

步骤三:调试应用流

此步骤的目标是准备计算环境并执行应用流,以验证其输出结果。

  1. 为应用流绑定一个新建的运行时。

    1. 在应用流名称旁选择运行时,无选项时,单击新建运行时

    2. 在弹出的创建页中填写运行时名称运行时工作路径会默认填充该应用流的工作路径。其他参数保持默认,然后单击确定。

    重要

    运行时一旦启动即会产生费用。调试完成后,请务必前往运行时页面对运行时实例进行停止或删除操作,以避免产生不必要的费用。更多运行时使用请参见运行时管理

  2. 待运行时启动成功后,单击右上角的运行。输入对话内容并发送。

  3. 查看链路/错误日志。单击生成答案下的查看链路查看日志,查看链路(Trace详情、拓扑视图)或运行日志。

image

创建方式说明

  • 从模板新建:提供多场景的应用模板快速搭建AI应用。

  • 按类型新建

    • 标准型:适用于通用应用程序开发。利用大语言模型的强大功能、定制的Python代码等来打造您的定制化应用流。

    • 对话型:适用于对话型应用程序开发。在标准型的基础上,对话型提供对话历史、输入、输出的管理,以及对话框形式的测试界面。

  • OSS导入:选择待导入的应用流ZIP压缩包文件或应用流OSS路径,该路径必须直接包含应用流的flow.dag.yaml及其他Code文件

    • 可通过LangStudio应用流列表操作列的导出功能将应用流导出,分享给他人导入使用。

    • DifyDSL文件转换LangStudio应用流格式后,可通过该方式导入。详情请参见DifyLangStudio迁移实践指南

环境变量配置

在 LangStudio 中,您可以添加应用流运行时所需的环境变量,系统会在应用流执行前自动加载这些变量,供 Python 节点、工具调用或自定义逻辑使用。

适用场景

  • 敏感信息管理:存储 API 密钥、认证令牌等,避免硬编码在代码中。

  • 配置参数化:灵活设置模型地址、超时时间等运行参数。

配置与使用

  1. 打开应用流后,单击控制台右上角全局配置,添加环境变量。

    image

  2. Python节点中,可通过标准 Python 的 os.environ访问已配置的环境变量:

    import os
    
    # 示例:获取 API 密钥
    api_key = os.environ["OPENAI_API_KEY"]

预置组件说明

开始(Start)

说明

一个应用流中只能有一个开始节点。

开始节点用于标识应用流的运行起始状态,并可以配置应用流的输入参数。

  • 对于对话型应用流,系统会默认提供对话历史和对话输入两个默认字段,您可以根据需求添加自定义变量(支持定义类型为File的输入变量,用于接收用户上传的文件,详见文件类型输入输出)。

    image

  • 在运行应用流时,通过对话面板配置当前会话的输入参数。

    image

大模型(LLM)

LLM节点是应用流的核心组件,专门用于调用大语言模型以处理自然语言任务。通过此节点,用户可以获得智能的文本响应,帮助回答问题或处理复杂的自然语言输入。此外,LLM节点还提供灵活的配置选项,允许用户调整模型参数、管理对话历史以及自定义提示词,以优化响应质量和准确性。

  • 应用场景

    • 文本生成:根据主题、关键词生成文本内容。

    • 内容分类:自动分类邮件类型(咨询/投诉/垃圾邮件)。

    • 文本转换:将文本翻译成指定语言。

    • RAG:结合检索到的知识回答用户问题。

  • 配置界面

    image

  • 输入(Input)

    • 模型设置:支持使用从ModelGallery部署或其他自定义部署的模型服务,以及Dashscope、DeepSeek等模型提供商提供的模型。如果关注效果,建议选择能力较强的模型。支持配置以下模型参数:

      • 温度:通常是一个介于01之间的值,用于控制模型输出的随机性。温度越接近0,结果越确定和一致;温度越接近1,结果则越随机和多样化。

      • Top P:用于控制结果的多样性。模型会从候选词中选择,确保选择的词的累积概率不超过设定的阈值P,从而影响输出的多样性。

      • Top K:用于控制模型的输出。它限定了模型在生成结果时可以选择的候选词数量。具体来说,Top K设定一个数值K,模型只会从概率最高的前K个词中进行选择。这种方法可以减少生成结果中的随机性,使输出更加集中在可能性较高的词汇上。相比于Top P,Top K更加直接地限制了候选词的数量,而不是基于累积概率。

      • 存在惩罚:用于减少模型重复生成相同的实体或信息。通过对已生成的内容施加惩罚,模型更倾向于生成新的或不同的内容。随着参数值的增加,模型对已经生成过的内容施加更大的惩罚,从而降低重复生成的可能性。

      • 频率惩罚:用于减少过于频繁出现的词或短语的生成概率。随着参数值的增加,对这些常见词或短语施加更大的惩罚,从而降低其出现频率。较高的频率惩罚参数值有助于提升文本的词汇多样性。

      • 最大标记:用于设定模型在单次生成中可以输出的最大长度。设定较低的最大标记值可能会导致生成的文本较短或被截断,而较高的值则允许更长的输出,从而帮助控制生成内容的规模和复杂度,确保结果符合预期的长度要求。

      • 种子:当指定种子值时,模型会尽量进行确定性采样,使得相同种子和参数的重复请求应产生相同的结果。然而,不能保证完全的确定性,建议您参考system_fingerprint(可能需要代理才能访问)响应参数来监控可能的变化。

      • 停止序列:最多4个停止序列,用于指示模型在生成文本时停止进一步输出。当模型检测到其中任意一个停止序列时,它将停止生成更多的tokens,并且返回的文本将不包含该停止序列本身。

    • 对话历史:配置打开后,会自动地在提示词中插入应用流的聊天历史记录。

    • 输入变量:变量中可以引用本节点前置所有节点的输出。

    • 提示词:自定义系统(SYSTEM)/用户(USER)/助手(ASSISTANT)的提示词内容,提示词是jinja2模板,模板中可以通过两个双引号{{}}的方式引用输入变量。

  • 输出(Output)

    节点默认输出String类型的数据,也可以根据需求配置为JSON类型数据。JSON类型支持自定义添加输出变量,大模型会根据变量名称的含义进行输出。

  • 使用案例

Python开发(Python

应用流支持自定义Python代码的节点,可以实现复杂的数据处理逻辑,支持流式输入和流式输出。配置界面如下:

image

只需填写Python代码,输入输出会根据代码自动解析。注意以下事项:

  • 执行入口函数需要被@tool装饰,才可以被加载为一个节点。

    说明

    当需要Python节点支持输入流时,必须配置 @tool(properties={"streaming_pass_through": True}),否则给到Python节点的LLM等输入都会是完整的输出文本。

  • 函数支持的输入/输出类型:int、float、bool、str、dict、TypedDict、dataclass(只支持输出)、list、File。

  • 入口函数的入参会被动态解析成节点的输入,输出会被放到output字典中,可以被其他节点引用。

    重要

    Python节点的输入/输出参数的自动解析,依赖于运行时。在没有启动运行时的情况下,无法配置节点的输入/输出信息。

  • 如果Python代码需要安装相应的依赖,在画布右上方,选择安装依赖,填写依赖包。requirements.txt文件会同应用流一起保存,在启动运行时,或是部署服务时安装依赖到对应的环境里。

    image

    image

使用案例1:在代码区域输入以下代码,代码会被映射为节点的输入和输出:

from langstudio.core import tool
from dataclasses import dataclass

@dataclass
class Result:
    output1: str
    output2: int

@tool
def invoke(foo: str, bar: int) -> Result:    
    return Result(
        output1="hello" + foo,
        output2=bar + 10
    )

image

使用案例2流式输入输出。使用Python节点对大模型/Agent等节点输出的包含思考过程的文本流进行裁剪,丢弃<think>\n\n<think>部分思考内容,可获得一个最终结果文本输出流。示例代码如下:

import re
from typing import Iterator
from langstudio.core import tool

@tool(properties={"streaming_pass_through": True})
def strip_think(
    stream: Iterator[str],
) -> Iterator[str]:  # 输入为流式字符串迭代器,输出为过滤后的流式字符串迭代器
    # 匹配 <think>\n...\n</think> 结构,并捕获结束标签后的文本
    pattern = re.compile(r"<think>\n[\s\S]*\n</think>(.*)")
    in_thinking = True  # 标记当前是否处于 <think> 块内部
    think_buf = ""      # 缓冲区,用于存储未处理完的内容

    for chunk in stream:
        if in_thinking:
            think_buf += chunk
            m = pattern.search(think_buf)  # 检查缓冲区是否含完整的思考块
            if m:
                in_thinking = False
                result_part = m.groups()[0]
                if result_part:
                    yield result_part  # 若结果文本存在,立即输出
        else:
            yield chunk  # 已经脱离思考块,直接输出后续所有chunk

条件分支(Condition

该节点主要用于流程控制。主要实现if-else逻辑,若设定的条件成立则仅运行对应的分支,若均不成立则运行else分支。需搭配变量聚合(Variable Aggregate)节点使用。

  • 配置界面

    image

  • 输入(Input)

    配置分支条件时,需注意:

    • 每个分支代表一个执行路线,最后一个分支为else分支,代表没有匹配到任何分支,不可编辑。

    • 每个分支可包含多个条件,条件之间支持and/or聚合。

    • 注意上游节点输出、匹配符(如=为空不包括等)以及匹配值,以确保条件的准确性和有效性。

  • 输出(Output)

    无输出。

  • 使用案例

    在连接条件分支组件与下游节点时,每个分支在组件上都有一个对应的连线端口。当某个分支条件被触发时,该分支将执行连接的下游节点,而其他分支节点则会被跳过。之后,可以通过变量聚合(Variable Aggregate)组件收集各个条件分支的执行结果(即下游节点的输出)。

    image

变量聚合(Variable Aggregate

该节点负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变量,避免下游节点重复定义。

  • 配置界面

    image.png

  • 输入(Input)

    配置变量分组时,需注意:

    • 上游一般是条件分支(Condition)/意图识别(Intent Recognition)产生的多个执行分支。

    • 同一分组中变量必须同类型,第一个非空输出值即为该组的输出。

    • 由于条件分支/意图识别仅会触发一个分支,所以每组有且仅有一个非空值,通过变量聚合节点即可提取出该值,方便下游使用。

    • 如果每个条件分支/意图识别的分支有多个需要的输出,可以添加多个分组,分别提取对应输出值。

  • 输出(Output)

    输出变量会根据所添加的分组进行动态调整。如果存在多个分组,节点将输出多个键值对(Key-Value),其中,Key为组名,Value为组内第一个非空的变量值。

  • 使用案例

    请参见条件分支(Condition)组件的使用案例。

意图识别(Intent Recognition

主要用于流程控制。通过大语言模型分析用户输入的意图,并根据识别结果执行相应的分支。支持多意图配置和对话历史。

  • 配置界面

    image.png

  • 输入(Input)

    • 用户输入:选择用户输入,用于识别意图。

    • 多意图配置:按需设置意图,确保每个意图的描述都清晰明确,并且不同意图之间不存在语义重叠。最后一个意图默认为“其他意图”,代表没有匹配到任何其他意图,不可编辑。

    • 模型设置:配置意图识别需要的大语言模型,如果关注效果,请选择能力较强的模型,如qwen-max等。

    • 对话历史:配置打开后,大模型推理时会自动地在提示词中插入应用流的聊天历史记录。

    • 额外提示:输入的内容将会被追加到系统提示词中,帮助模型更好的完成意图识别。

  • 输出(Output)

    无输出。

  • 使用案例

    在连接意图识别组件与下游节点时,每个意图分支在组件上都有一个对应的连线端口。当某个意图被识别时,该分支将执行连接的下游节点,而其他分支节点则会被跳过。之后,可以通过变量聚合(Variable Aggregate)组件收集各个条件分支的执行结果(即下游节点的输出)。

    image.png

知识库检索(Index Lookup

知识库中检索与用户问题相关的文本内容,以便将其用作下游LLM节点的上下文。

  • 配置界面

    image

  • 输入(Input)

    • 知识库索引名称:选择在LangStudio上已注册可用的知识库,详情请参见知识库管理

    • 检索关键词:选择希望在知识库中检索的关键信息,需要引用上游节点的输出参数,格式为String。

    • Top K:知识库索引检索时,系统返回的与检索关键词最相关的前K项结果。

  • 输出(Output)

    检索输出变量result, 类型为List[Dict],其中DictKey包含以下字段:

    Key

    说明

    content

    检索到的文档分片的内容。这个内容是从知识库中提取出来的文本片段,通常与输入的查询相关。

    score

    文档分片与输入查询的相似度得分,即文档分片与查询的匹配程度。得分越高,说明该文档分片与查询的相关性越强。

    以下为输出示例,表示返回结果包含得分最高的top_k条记录:

    [
      {
        "score": 0.8057173490524292,
        "content": "受疫情带来的不确定性影响,xx银行根据经济走势及中国或中国内地环境预判,主动\n加大了贷款和垫款、非信贷资产减值损失的计提力度,加大\n不良资产核销处置力度,提升拨备覆盖率,2020 年实现净利\n289.28亿元,同比增长 2.6%,盈利能力逐步改善。\n(人民币百万元) 2020年 2019年 变动(%)\n经营成果与盈利\n营业收入 153,542 137,958 11.3\n减值损失前营业利润 107,327 95,816 12.0\n净利润 28,928 28,195 2.6\n成本收入比(1)(%) 29.11 29.61下降 0.50个\n百分点\n平均总资产收益率 (%) 0.69 0.77下降 0.08个\n百分点\n加权平均净资产收益率 (%) 9.58 11.30下降 1.72个\n百分点\n净息差(2)(%) 2.53 2.62下降 0.09个\n百分点\n注: (1) 成本收入比 =业务及管理费/营业收入。",
        "id": "49f04c4cb1d48cbad130647bd0d75f***1cf07c4aeb7a5d9a1f3bda950a6b86e",
        "metadata": {
          "page_label": "40",
          "file_name": "2021-02-04_中国xx保险集团股份有限公司_xx_中国xx_2020年__年度报告.pdf",
          "file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf",
          "file_type": "application/pdf",
          "file_size": 7982999,
          "creation_date": "2024-10-10",
          "last_modified_date": "2024-10-10"
        }
      },
      {
        "score": 0.7708036303520203,
        "content": "72亿元,同比增长 5.2%。\n2020年\n(人民币百万元)寿险及\n健康险业务财产保险\n业务 银行业务 信托业务 证券业务其他资产\n管理业务 科技业务其他业务\n及合并抵消 集团合并\n归属于母公司股东的净利润 95,018 16,083 16,766 2,476 2,959 5,737 7,936 (3,876) 143,099\n少数股东损益 1,054 76 12,162 3 143 974 1,567 281 16,260\n净利润 (A) 96,072 16,159 28,928 2,479 3,102 6,711 9,503 (3,595) 159,359\n剔除项目 :\n 短期投资波动(1)(B) 10,308 – – – – – – – 10,308\n 折现率变动影响 (C) (7,902) – – – – – – – (7,902)\n 管 理层认为不属于  \n日常营运收支而剔除的  \n一次性重大项目及其他 (D) – – – – – – 1,282 – 1,282\n营运利润 (E=A-B-C-D) 93,666 16,159 28,928 2,479 3,102 6,711 8,221 (3,595) 155,670\n归属于母公司股东的营运利润 92,672 16,",
        "id": "8066c16048bd722d030a85ee8b1***36d5f31624b28f1c0c15943855c5ae5c9f",
        "metadata": {
          "page_label": "19",
          "file_name": "2021-02-04_中国xx保险集团股份有限公司_xxx_中国xx__2020年__年度报告.pdf",
          "file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf",
          "file_type": "application/pdf",
          "file_size": 7982999,
          "creation_date": "2024-10-10",
          "last_modified_date": "2024-10-10"
        }
      }
    ]
  • 使用案例

Agent(Agent)

Agent节点是LangStudio应用流中基于自主性智能体开发的节点组件。该节点支持推理(Reasoning)策略和Tools Use等能力,可通过集成不同的推理策略(目前支持FunctionCallingReAct策略),实现自主调用模型上下文协议(MCP)工具,从而使得大语言模型(LLM)能够在运行时动态选择并执行工具(Tools),实现自主性多步推理能力。

配置节点参数

  • Agent策略:选择所需的Agent推理策略,目前支持FunctionCallingReAct策略。

    FunctionCalling

    基于 OpenAI Chat API 中定义的结构化 tool call 定义(JSON format),实现大语言模型(LLM)与外部工具的交互。LLM 会基于用户自然语言指令,自动识别意图、选择合适的工具并提取参数,系统随后调用对应工具并返回结果供模型继续推理生成最终答案。

    应用场景与优势:

    • 结构化调用,兼容性强:使用结构化数据明确工具名称及调用参数,适配所有支持 tool calling 的模型。

    • 性能稳定:适合目标明确、步骤清晰的任务(如查天气、搜索信息、数据查询等)。

    ReAct

    ReAct(Reasoning + Acting)策略是一种更自由的推理方式,通过提示词引导模型显式生成 Thought 和 Action,从而实现多步推理与工具调用的闭环。该策略通常使用自然语言描述调用过程,通过输出类似“Action=xxx, Action Input=xxx”的文本触发后端工具执行,并将结果再次注入模型推理链中。无需 API-level 的 tool_calls,适用于更通用模型及框架。

    应用场景与优势:

    • 更强推理能力:引导模型逐步思考,每一步都能显式表达推理逻辑。

    • 策略透明:适合调试、可解释性强的 Agent 应用。

    • 无需 Tool Calling 支持:不支持结构化输出的模型也可使用。

  • 模型设置:FunctionCalling策略使用OpenAI APITool Call方式传递Tools信息,因此模型需要原生支持Tool Calling功能。ReAct策略则无此限制,建议选择推理能力较强的模型。

  • 对话历史:启用对话历史,可以为Agent提供对话上下文记忆能力。系统会自动的将对话历史消息填充到提示词中,这使得Agent能够理解和引用之前的对话内容,从而提供连贯的上下文相关的回答。例如,当用户在新的消息中使用代词(如“他”、“这里”、“那一天”等)时,开启了对话历史的Agent能够理解这些代词所指代的前文实体,而无需用户重复指定完整信息。

  • 任务规划:启用后,系统将自动将内置write_todos工具添加到Agent的可用工具中;对于用户的复杂问题,Agent会自动调用write_todos工具规划复杂任务并逐步执行,过程中会根据最新数据信息动态更新计划。

  • MCP工具:支持两种配置方式:通过选择MCP连接或自定义地填写表单。目前支持SSEStreamable HTTP通信方式的MCP Server。一个 MCP 服务通常会提供多个工具(Tools)。

    • 通过工具范围选项,可以控制哪些工具对大模型可见。

    • 对于具有敏感操作(如修改用户数据)的工具,可以通过 “审批工具” 功能进行保护。当工作流执行到这些工具时,节点会自动暂停,并等待人工确认;审批通过后,工作流才会继续执行。

  • 工具:配置Agent可以使用的非MCP工具,目前支持自定义工具(OpenAPI工具)和Python工具。对于选中工具,支持在Agent节点上具体的编辑该工具的描述、输出参数(例如配置某个参数为模型不可见并配置默认值)、是否“需要审批”通过人工介入保证安全性。

  • 提示词配置

    • 输入变量:当您希望在提示词中引用应用流上游节点的变量时,需要在本节点中定义相应的输入变量,并将其值设置为上游节点变量的引用。随后,在下面提示词中,您可以通过Jinja2模板语法(通过两个双引号{{}}的方式)引用这些已定义的输入变量,以实现动态数据传递。

    • 系统提示词:用于明确指定 Agent 的任务目标和上下文信息,为模型提供必要的背景,以指导其生成符合预期的响应。对于ReAct策略,非必须。

    • 用户提示词:接收用户的输入或查询,作为模型生成响应的基础。

  • 循环次数:设置Agent执行的最大循环次数,范围为1~99。Agent将根据循环次数重复执行任务以生成响应,直到满足以下任一条件:

    • LLM判断已通过调用工具获取足够的信息以生成完整的结果

    • 达到设定的最大循环次数

    请注意,设置合理的循环次数有助于在响应完整性与执行效率之间取得平衡。若打开了任务规划,建议使用默认最大循环次数,以确保模型能够按照计划完整地执行所有步骤并解决问题。

  • 输出变量

    • intermediate_steps:Agent执行的中间过程,String类型。

    • text:Agent的最终输出,String类型。

查看链路/日志

在应用流页面右上角单击运行后,您可以在弹出的对话框中运行结果下方查看链路或日志。

  • 查看中间输出:点击工作流中的Agent节点右上角的运行状态图标,在下方抽屉中找到Output里的intermediate_steps,查看agent的推理过程。

  • 查看链路:查看当前运行的Trace信息,了解Agent在每次请求模型时的输入、模型的输出(包括工具调用及请求参数)、token开销、耗时等信息。

  • 查看日志当应用流运行错误时,可以查看当前的运行日志,获取节点执行过程中的更多细节。

此外,您还可以通过在应用流页面右上角单击更多 > 运行历史,选择指定运行记录,查看链路或日志。

循环(Loop)

循环节点用于执行需要依赖前一轮结果的重复任务,直至满足退出条件或达到预设的最大循环次数。在循环节点内,可以配置一个子流程,系统会根据循环变量重复执行子流程中的逻辑,直到触发终止条件或达到执行次数上限。

  • 配置界面

    image

  • 输入(Input)

    • 循环变量:用于在循环的各个轮次间传递数据,并在循环结束后继续供下游节点使用。支持配置多个循环变量,其值可以手动输入或从上游节点的输出中选择。

    • 循环退出条件:可基于循环变量进行配置,当指定的循环变量满足预设条件时,循环将终止。

    • 最大循环次数:用于限制循环的最大执行次数,以防止出现无限循环。

  • 输出(Output)

    节点输出为当前循环执行之后循环变量的值。只有通过变量赋值节点才能更新循环变量,如果没有该节点,经过N轮循环后,循环节点的输出将仍然保持为初始输入。

  • 相关节点

    循环相关的节点仅限在循环内使用。您可以通过单击循环内指定节点右侧的“+”来添加以下相关节点:

    • 退出循环(Break Loop)

      退出循环,上游一般是条件分支(Condition)节点。

    • 变量赋值(Variable Assigner)

      将循环内子节点输出结果赋值给循环变量。

    image

SerpAPI-联网搜索(SerpAPI-GenericSearch

使用SerpApi进行网络搜索,支持多个搜索引擎(如Bing、Google、Baidu、Yahoo以及自定义),可配置搜索位置和结果数量。

  • 配置界面

    image

  • 输入(Input)

    • SerpApi连接:选择在LangStudio上已创建的SerpApi连接,详情请参见创建SerpApi连接

    • 搜索关键词:选择希望进行网络搜索的关键信息,需要引用上游节点的输出参数,格式为String。

    • 搜索引擎:支持bing、google、baiduyahoo搜索,也支持自定义的输入。

    • 位置:搜索所在位置。如需使用,建议具体到城市,如Shanghai, China

    • 搜索结果数量:返回的查询结果数量。

  • 输出(Output)

    联网搜索输出变量output, 类型为List[Dict],其中DictKey包含以下字段:

    Key

    说明

    title

    搜索结果的标题,通常是网页或文档的标题,简要概括了内容的主题。

    link

    搜索结果的链接,即URL。用户可以通过这个链接访问完整的内容。

    summary

    搜索结果的摘要,通常是对内容的简要介绍或概括,帮助用户快速了解内容的核心信息。

  • 使用案例

    基于LangStudio&DeepSeekRAG及联网搜索聊天机器人解决方案

阿里云IQS-联网搜索(IQS-GenericSearch

使用阿里云信息查询服务进行标准搜索,支持时间范围筛选。

  • 配置界面

    image

  • 输入(Input)

    • 搜索关键词:选择希望进行联网搜索的关键信息。长度必须在2100个字符之间,若超过100个字符,将被截断至100个字符;若少于2个字符,则会引发错误。

    • 时间范围:选择搜索数据的时间范围,支持选择NoLimit、OneDay、OneWeek、OneMonthOneYear。

    • IQS连接:如果启动时没有配置有权限的角色,可选择已配置的IQS连接。关于如何配置IQS连接,请参见服务连接配置-自定义连接,并将键和值分别配置为api_key和相应的值,相应的值可通过信息查询服务-凭证管理查看。关于IQS连接使用详情,请参见基于LangStudio&阿里云信息查询服务搭建DeepSeek联网搜索应用流

  • 输出(Output)

    • output:联网搜索输出变量output, 类型为List[Dict],其中DictKey包含以下字段:

      Key

      说明

      title

      搜索结果的标题,通常是网页或文档的标题,简要概括了内容的主题。

      link

      搜索结果的链接,即URL。用户可以通过这个链接访问完整的内容。

      summary

      搜索结果的摘要,通常是对内容的简要介绍或概括,帮助用户快速了解内容的核心信息。

      content

      搜索结果的完整内容或正文,包含详细的信息。由于数据量可能很大,通常不在摘要中展示。

      markdown_text

      Markdown格式的搜索内容,可能返回为空。

      score

      搜索结果的评分,通常是一个数值,用于表示结果的相关性或质量。评分越高,结果通常越符合搜索意图。

      publish_time

      内容的发布时间,通常是一个时间戳或日期,帮助用户了解信息的时效性。

      host_logo

      内容来源网站的标志或图标,通常是一个图片URL,帮助用户识别信息来源。

      hostname

      内容来源网站的主机名或域名,指示信息的来源网站。

      site_label

      内容来源网站的标签或分类,用于指示网站的主题或类别,帮助用户了解信息的背景。

    • scene_items:用于增强搜索结果的辅助信息,在大多数通用搜索中,scene_items通常为空。然而,当通用搜索无法准确满足用户的需求时,尤其是涉及特定场景(如时间、天气、日历等)时,系统会尝试返回scene_items作为补充,确保用户在特定情境下能获取到更精确和有用的信息,详情请参见场景化调用SceneItem概览

  • 使用案例

    基于LangStudio&阿里云信息查询服务搭建DeepSeek联网搜索应用流

直接输出

直接输出节点可以通过输出模板配置直接回复的消息内容,它支持使用 {{node.variable}} 语法引用上游节点的输出,支持流式输出。

使用示例:在大模型节点前,增加直接输出节点,先返回一条消息给用户。

image

image

文档解析

支持使用系统内置的智能文档解析工具和AI搜索开放平台的文档解析服务。

  • 内置解析工具:可提取文档中的结构化内容与元数据信息,支持多种主流文档格式,包括:PDF、DOCX、PPTX、TXT、HTML、CSV、XLSX、XLS、JSONL 和 MD。

  • AI搜索开放平台:实现高精度的结构化文档解析,支持提取标题、段落等逻辑层级信息,以及文本、表格和图片等内容,可提升文档提取的效果与准确性,需先配置 AI搜索开放平台模型服务连接。支持的文件格式包括:PDF、DOCX、PPTX、TXT 和 HTML。

该工具支持后续用于 RAG、摘要、问答等场景。配置界面如下:image.png

  • 文档文件:输入单个文档文件进行智能解析,提取结构化内容。选择来自上游的文件类型字段。

  • 模型设置:(可选)选择在LangStudio上已创建的 AI搜索开放平台模型服务连接。若未配置,系统将默认使用内置的基础解析方法处理上传的文件。

  • 输出结果:

    • file_id:输入文件的唯一标识符

    • content:解析出的结构化文本内容,包含标题、段落等层级信息

    • status:解析状态,可能值为 SUCCESS 或 FAIL

    • metadata:文档的元数据信息和解析详情

      • file_name:文件名

      • file_type:文件类型

      • source_uri:文件原始 URI

      • download_url:文件可下载 URL

      • analysis_method:使用的解析方法。"opensearch" 表示使用AI搜索开放平台的结构化解析,"builtin" 表示使用内置的基础解析方法。

下游使用示例:在下游节点按需引用文档解析节点的结果字段,如果要在LLM节点中使用文档解析结果,可以参考如下方式在用户提示词中引入文档解析后的内容:

image.png

语音识别

使用语音识别工具将音频或视频文件转换为文本。支持多种音频格式和语言识别。

输入

  • 模型设置:配置语音识别模型,当前支持阿里云百炼提供的语音识别服务。推荐使用 paraformer-v2以获得更优识别效果及多语言支持。

  • 音视频文件:选择需要识别的音频或视频文件。支持的格式详见文件类型输入输出

  • 识别语言:指定音频识别时的语言类型,支持中文、英文、日语、粤语、韩语、德语、法语、俄语或自动检测。注意:该功能仅paraformer-v2模型支持,其他模型将默认使用自动语言检测。

输出

  • file_id:输入文件的唯一标识符。

  • status:识别状态,可能值为 SUCCESSFAIL

  • content:转录的文本内容。

  • segments:句子片段信息列表,包含时间戳、文本片段等详细信息。

  • metadata:文件的元数据信息,包含:

    • file_name:文件名

    • file_type:文件类型

    • source_uri:文件URI

    • download_url:文件下载URL

HTTP请求

通过 HTTP 请求工具,可以便捷地调用外部 API 接口,支持多种 HTTP 方法、认证方式和请求体格式,满足各类集成需求。

输入

  • 请求方法:HTTP 请求方法,支持GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。

  • URL:请求的目标地址。

  • 请求头:自定义 HTTP 请求头。每行为一个header,填入对应的键值。

  • 请求参数:查询字符串参数。每行一个参数,填入对应的键值。

  • 鉴权:默认关闭,即不进行鉴权;开启后可选择标准认证方式(Bearer 或 Basic)。

    • Bearer:使用 Bearer Token 认证,填入时无需添加Bearer前缀

    • Basic:使用基础认证,输入用户名和密码,系统将自动转换为 Base64 编码的凭证

    • 如需自定义认证方式,请手动配置请求头

  • 请求体:支持以下请求体格式。

    • none:无请求体

    • JSON:发送JSON格式数据

    • form-data:发送multipart/form-data格式数据,支持文件上传

    • x-www-form-urlencoded:发送URL编码的表单数据

    • raw-text:发送纯文本数据

    • binary:发送二进制文件数据,支持文件上传

  • SSL验证:默认开启,选择是否验证服务器SSL证书,生产环境建议保持开启。

  • 超时时间:请求超时时间,范围1-600秒,默认10秒。

  • 重试配置:默认关闭,选择是否在请求失败时自动重试。

    • 最大重试次数:最多重试次数,范围0-10

    • 重试间隔:两次重试之间的间隔时间,范围100-10000毫秒

输出

  • body:响应文本内容。当响应为文件时,此字段为空字符串。

  • status_code:HTTP响应状态码,如200、404、500等。

  • headers:HTTP响应头,以键值对形式返回。

  • file:文件对象(当响应为文件时)。

模板转换

模板转换工具允许借助 Jinja2 模板语法,实现灵活的文本格式化和数据转换。

输入

转换模式支持Jinja2模式节点引用模式。

  • Jinja2 模式:使用完整的 Jinja2 模板语法自定义输出格式。适用于复杂的结构化输出、条件判断、循环渲染等。

    • 模板变量:定义模板中使用的变量。

      重要

      变量名不能使用Python内建方法名,如itemskeysvalues等。建议使用明确的字段名,如item_listproduct_list等。

    • 模板内容:使用Jinja2语法编写的模板字符串。支持变量替换{{ variable }}、循环{% for %}、条件判断{% if %}、过滤器{{ value | filter }}等完整语法。

      重要

      模板中引用的所有变量必须在变量列表中定义,否则会报错。

  • 节点引用模式:直接引用上游节点输出,自动拼接为字符串。适用于简单的文本组合场景。

    • 模板内容:选择上游节点的输出字段,系统自动按顺序拼接。

输出

output:模板渲染后的文本结果。注意:输入输出模板内容长度均限制为100000字符,超出部分将被截断。

使用示例

示例1:订单确认邮件生成

变量配置:

变量名

变量值

customer_name

"张三"

order_id

"ORD-2025-001"

products

[{"name": "笔记本电脑", "price": 8999}, {"name": "无线鼠标", "price": 199}]

total

9198

模板内容:

尊敬的 {{ customer_name }}:

您的订单 {{ order_id }} 已确认,详情如下:

{% for product in products %}
- {{ product.name }}: ¥{{ product.price }}
{% endfor %}

总计: ¥{{ total }}

感谢您的购买!

输出结果:

尊敬的 张三:

您的订单 ORD-2025-001 已确认,详情如下:

- 笔记本电脑: ¥8999
- 无线鼠标: ¥199

总计: ¥9198

感谢您的购买!

示例2:知识库检索结果格式化

变量配置:

变量名

变量值

chunks

[{"title": "产品介绍", "content": "这是产品的详细介绍...", "score": 0.95}]

模板内容:

{% for chunk in chunks %}
### 相关度: {{ "%.2f" % chunk.score }}
#### {{ chunk.title }}
{{ chunk.content }}
---
{% endfor %}

输出结果:

### 相关度: 0.95
#### 产品介绍
这是产品的详细介绍...
---

列表操作

通过列表操作工具,可以对各类列表数据执行灵活的过滤与排序操作,实现数据的精细化处理与筛选。

输入

  • 列表输入:需要处理的列表数据。支持任意子类型(字符串、数字、布尔值、文件对象、字典)。

  • 操作:按顺序执行的链式操作序列。支持过滤、排序两种操作类型。

    • 过滤操作(filter):过滤操作根据输入列表的类型,动态提供不同的过滤方式。注意:各项过滤操作均对大小写敏感。

      过滤键

      说明

      适用范围

      索引

      基于元素在列表中的位置过滤

      适用于所有列表类型

      元素值

      基于元素本身的值进行过滤

      适用于所有列表类型

      自定义属性

      基于自定义的属性进行过滤

      仅适用于字典类型列表

      文件属性

      基于文件的属性进行过滤

      仅适用于文件类型列表

      可选属性:

      • file_id:文件id

      • file_name:文件名

      • file_type:文件MIME类型

      • source_uri:文件URI

      • download_url:文件下载URL

      • category:文件分类,可选值:documentimageaudiovideo

      • extension:文件后缀,如.jpg

    • 排序操作(sort):排序操作根据输入列表的类型,提供不同的排序方式。

      排序键

      说明

      适用范围

      元素值

      基于元素本身的值进行排序

      仅适用于字符串、数字、布尔值列表类型

      自定义属性

      基于自定义的属性进行排序

      仅适用于字典类型列表

      文件属性

      基于文件的属性进行排序

      仅适用于文件类型列表,可选属性与过滤操作一致

输出

  • result:处理后的列表结果。

  • first_item:结果列表的第一个元素,如果列表为空则为None。

  • last_item:结果列表的最后一个元素,如果列表为空则为None。

使用示例

示例1:文件分类处理 - 筛选图片文件并按大小排序取前3

场景:用户上传了包含各类文件的混合列表,需要筛选出图片文件,按文件名长度排序,并只保留前3个用于后续的图像识别处理。

操作配置:

操作1 - 过滤(按文件分类):
  过滤键: item.category
  过滤操作符: 等于
  过滤值: image

操作2 - 排序(按文件名长度):
  排序键: item.file_name
  排序方向: asc

操作3 - 过滤(取前3个):
  过滤键: index
  过滤操作符: 小于
  过滤值: 3

image.png

示例2:数据分析 - 筛选高分用户并获取 Top 5

场景:从用户评分列表中筛选出分数大于等于80分的用户,按分数降序排列,取前5名。

输入列表:

[
  {"name": "张三", "score": 95, "department": "技术部"},
  {"name": "李四", "score": 72, "department": "市场部"},
  {"name": "王五", "score": 88, "department": "技术部"},
  {"name": "赵六", "score": 91, "department": "产品部"},
  {"name": "钱七", "score": 65, "department": "市场部"},
  {"name": "孙八", "score": 98, "department": "技术部"}
]

操作配置:

操作1 - 过滤(筛选高分用户):
  过滤键: item.score
  过滤操作符: 大于等于
  过滤值: 80

操作2 - 排序(按分数降序):
  排序键: item.score
  排序方向: desc

操作3 - 过滤(取前5名):
  过滤键: index
  过滤操作符: 小于
  过滤值: 5

image.png

输出结果:

[
  {"name": "孙八", "score": 98, "department": "技术部"},
  {"name": "张三", "score": 95, "department": "技术部"},
  {"name": "赵六", "score": 91, "department": "产品部"},
  {"name": "王五", "score": 88, "department": "技术部"}
]

注意事项:

  • 若工具输入引用 Python 节点自定义的list类型输出变量,建议在 Python 节点中定义出明确的列表元素类型,如list[str],从而在列表操作节点中获得更准确的操作符匹配。

结束(End)

结束节点用于标识应用流(Workflow)的运行结束状态,以及应用流的输出参数。一个应用流Workflow中只能有一个结束节点。

  • 输出参数配置

    应用流输出可以引用所有上游节点产生的输出,作为应用流执行结果。例如,以下示例中应用流的answer输出使用了大模型节点的输出,search_results则是使用了搜索节点的输出。

    image

    说明
    • 对话型应用流默认有一个Chat输出字段,用于作为应用流的对话输出。

    • 应用流程必须包含开始节点和结束节点,且只有连接在这两个节点之间的节点才会被执行,游离的节点则不会执行。

下一步

在完成应用流的开发和调试后,您可以对应用流进行评测,待满足业务需求后,您可以将应用流部署至模型在线服务PAI-EAS中供生产使用。