llm-call节点调用大语言模型对每行数据进行智能处理,支持Prompt模板渲染、模型选择和输出格式解析,可实现AI评估、AI标注、AI合成、AI过滤等任务。
处理流程与适用场景
llm-call是Pipeline中所有LLM处理任务的基础节点。该节点对数据集中的每行数据独立执行LLM推理,仅增加新列,不删除原有列,不改变行数。
处理流程:
提取:从输入行中提取
fields指定的字段值。渲染:将字段值填入Prompt模板的
{{列名}}占位符,生成完整Prompt。调用:调用指定LLM模型执行推理。
解析:按
format指定的格式解析LLM输出,将结果存储为新列。
适用场景:
AI评估:对问答对进行多维度质量评分(JSON输出)。
AI标注:对文本进行分类、实体标注(JSON输出)。
AI合成:基于原始数据生成改写、扩展、翻译等合成数据。
AI过滤:通过LLM判断数据质量,配合下游
where节点过滤低质数据。通用任务:摘要、分类、实体抽取等任意Prompt可定义的任务。
节点配置
基本配置结构:
{
"id": "node_1",
"type": "llm-call",
"parameters": {
"prompt": "<Prompt模板或模板引用>",
"fields": "<参与渲染的列名列表>",
"format": "raw | json",
"model": "<模型标识>",
"as": "<输出列名>",
"output": "<输出列列表>"
}
}参数说明
参数 | 类型 | 必填 | 默认值 | 说明 |
| String | 是 | 无 | Prompt模板,使用 |
| String | 是 | 无 | 参与渲染的输入列名,多个列名以逗号分隔。每个列名必须在Prompt中有对应的 |
| String | 否 |
| 输出解析格式。 |
| String | 否 | 系统默认模型 | LLM模型标识,例如 |
| String | 否 |
| 输出列名,LLM推理结果存储到该列中。 |
| String | 否 |
| 节点输出列,多个列名以逗号分隔。 |
Prompt编写指南
占位符使用
{{列名}}语法,列名与fields中声明的一致。系统自动校验:Prompt中的所有
{{列名}}必须在fields中声明,反之亦然。需要JSON输出时,在Prompt中明确要求输出JSON格式,并设置
format: "json"。超长Prompt建议注册为命名模板,通过
@<path>引用,例如@eval/需求理解_v1.md。
模板引用格式
prompt值 | 说明 |
| 引用已注册的评估类命名模板。 |
| 引用已注册的标注类命名模板。 |
| 内联Prompt文本,直接在参数中编写。 |
输入与输出
输入要求
接收上游节点输出的任意列数据。
输入数据必须包含
fields中声明的所有列。
输出列
列名 | 类型 | 来源 | 说明 |
| -- | 透传/新增 |
|
| varchar或json | 新增 |
|
format=json输出保证
当format设置为json时,系统保证输出列的值始终为合法JSON:
LLM返回情况 | {as}列值 |
成功且返回合法JSON | 原样返回,例如 |
成功但返回非法JSON |
|
调用失败 |
|
format=raw输出
LLM返回情况 | {as}列值 |
成功 | LLM输出原文。 |
调用失败 | 错误描述文本。 |
行数变化
M到N(M = N)。1:1变换,每行独立调用LLM,不增减行数。
效果预览
处理前(3条数据):
question | output |
什么是机器学习? | 机器学习是人工智能的一个重要分支领域 |
如何学习Python? | 推荐从官方教程开始,然后做项目实践 |
1+1=? | 2 |
处理后(3条数据):配置prompt = "请评估..."、fields = "question,output"、format = "json"、as = "eval"。
question | output | eval |
什么是机器学习? | 机器学习是人工智能的... |
|
如何学习Python? | 推荐从官方教程开始... |
|
1+1=? | 2 |
|
行数不变(3到3),每行新增eval列。format = "json"保证输出永远为合法JSON。可结合where节点按分数过滤。
使用示例
示例1:AI质量评估(JSON输出)
{
"id": "n7",
"type": "llm-call",
"parameters": {
"prompt": "请评估以下问答对。问题:{{question}} 回答:{{output}} 输出JSON:{\"score\":分数,\"reason\":\"理由\"} 只输出纯JSON。",
"fields": "question,output",
"format": "json",
"as": "eval"
}
}评估结果存入eval列,适用于对问答对进行质量打分和原因分析。
示例2:AI标注(命名模板 + 指定模型)
{
"id": "n7",
"type": "llm-call",
"parameters": {
"prompt": "@anno/template_v1.md",
"fields": "output",
"format": "json",
"model": "qwen-plus",
"as": "anno"
}
}引用预注册的Prompt模板,使用qwen-plus模型,标注结果存入anno列。
示例3:文本翻译(raw模式)
{
"id": "n7",
"type": "llm-call",
"parameters": {
"prompt": "请将以下内容翻译为英文:{{content}}",
"fields": "content",
"as": "translation"
}
}未指定format时默认为raw,翻译结果存入translation列。
示例4:完整管道(去重 + 采样 + 评估 + 标注)
{
"nodes": [
{ "id": "n1", "type": "project", "parameters": { "question": "a", "input": "b", "output": "c" } },
{ "id": "n2", "type": "dedup-exact", "parameters": { "field": "question" } },
{ "id": "n3", "type": "dedup-semantic", "parameters": { "field": "question", "threshold": "0.1" } },
{ "id": "n4", "type": "semantic-cluster", "parameters": { "field": "__dedup_emb", "n": 100 } },
{ "id": "n5", "type": "sample", "parameters": { "by": "__cluster_id", "n": 3 } },
{ "id": "n6", "type": "llm-call", "parameters": { "prompt": "@eval/prompt.md", "fields": "question,input,output", "format": "json", "as": "eval" } },
{ "id": "n7", "type": "llm-call", "parameters": { "prompt": "@anno/prompt.md", "fields": "output", "format": "json", "model": "qwen-plus", "as": "anno" } }
]
}该管道依次执行精确去重、语义去重、聚类采样,大幅降低数据量后再进行LLM调用(评估 + 标注),有效控制调用成本。
使用建议
降低成本
在去重 + 采样之后使用。LLM调用延迟高(通常数秒/行)且按Token计费,前置降量可减少90%以上成本。
推荐管道顺序:去重 > 聚类采样 >
llm-call。同一
llm-call节点通过不同Prompt可实现评估、标注、合成、过滤等多种任务。
Prompt与结果处理
Prompt设计:需要JSON输出时,在Prompt末尾添加"只输出纯JSON"约束,并设置
format = "json"。模板复用:超长Prompt建议注册为命名模板(如
@eval/prompt.md),便于版本管理和多处复用。结果提取:
format = "json"保证输出永远合法JSON,可通过extend节点配合json_extract提取字段,再配合where节点过滤。幂等性:同一输入的LLM输出不保证完全一致(受temperature等参数影响)。
边界与异常
场景 | 行为 |
| 校验失败,Pipeline无法启动。 |
| 校验失败,Pipeline无法启动。 |
| 运行时报错。 |
| 校验失败,Pipeline无法启动。 |
命名模板( | 运行时报错。 |
列值为NULL | LLM可能返回不完整结果。 |
LLM调用超时 |
|