参数提取器节点
参数提取器节点可以利用 LLM 从自然语言推理并提取结构化参数,用于后置的工具调用或 HTTP 请求。
参数提取器节点设置页如下:
模型:参数提取器的提取依靠的是 LLM 的推理和结构化生成能力,这里指定使用的模型。
输入变量:一般为用于提取参数的变量输入,一般为上游节点输出内容。如上游节点为开始 节点,这里可以是sys.query。
视觉:开启视觉功能允许模型输入图片,并根据图像内容的理解回答用户问题。
提取参数:可以手动添加需要提取的参数,也可以从已有工具中快捷导入。
高级设置:可以设置推理模式和记忆。关于推理模式,部分模型同时支持两种推理模式,通
过函数/工具调用(Function/Tool Calling)或是纯提示词(Prompt)的方式实现参数提 取,在指令遵循能力上有所差别。例如某些模型在函数调用效果欠佳的情况下可以切换成提 示词推理。关于记忆,开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
案例七:创建chatflow,对用户输入内容进行参数提取并输出。
1) 创建开始及参数提取器节点
以上第4步骤中,参数设置为Array类型因为用户输入的内容包含多个人员的工资信息。 指定内容可以帮助参数提取器理解如何提取参数,内容如下:
从用户输入/sys.query的信息中,提取每个员工对应的薪资及薪资明细查询地址
2) 创建直接回复节点输出结果
3) 测试并发布chatflow
预览测试:
输入内容:
根据公司最新薪酬方案:
李明的月薪为人民币15,000元,详情请查阅: https://salary.example.com/view/liming9823
王芳的月薪为人民币18,000元,详情请查阅: https://salary.example.com/view/wangfang7045 张伟的月薪为人民币12,000元,详情请查阅: https://salary.example.com/view/zhangwei5617
发布使用:
迭代节点
迭代节点可以对数组中的元素依次执行相同的操作,直至输出所有结果,可以理解为任务批处理 器。迭代节点通常配合数组变量使用。
例如在长文翻译迭代节点内,如果将所有内容输入至 LLM 节点,有可能会达到单次对话限制。上 游节点可以先将长文拆分为了多个片段,配合迭代节点对各个片段执行批量翻译,以避免达到
LLM 单次对话的消息限制。
迭代节点的设置页如下:
迭代节点的结构通常包含输入变量、迭代工作流、输出变量三个功能单元。
输入变量: 仅接受 Array 数组变量类型数据。
迭代工作流: 你可以在迭代节点中使用多个工作流节点,编排不同的任务步骤。
输出变量: 仅支持输出数组变量 Array[List]。
迭代节点原理图如下:
案例八:创建chatflow,根据用户输入的技术完成该技术3章节内容输出。
1) 创建开始及LLM节点
开始节点后创建LLM节点,该LLM节点实现根据用户输入的技术标题,给出3个子标题。 LLM节点 命名为“标题生成子标题”。
SYSTEM提示词内容如下:
你对AI技术非常了解,根据用户输入的技术标题/sys.query给我生成关于该技术内容相关的3个子标题,不需要给出
2) 创建参数提取器节点,实现提取子标题到数组操作
将参数提取器节点改名为“提取子标题到数组”,并设置提取的标题放入subject参数中(Array 类型)。
3) 创建迭代节点并配置
创建迭代节点实现对子标题遍历,在迭代节点中设置LLM节点和直接回复节点,实现对每个子标 题内容的扩写并将结果直接输出。
其中,第11步骤中的内容如下:
请生成关于{{上下文}}技术的/item章节内容,要求不超过100字。 输出格式为:/item加粗,然后给出该子章节内容
4) 测试并发布chatflow
预览测试:
发布使用:
Http请求节点
Http请求节点允许通过 HTTP 协议发送服务器请求,适用于获取外部数据、webhook、生成图 片、下载文件等情景。它让你能够向指定的网络地址发送定制化的 HTTP 请求,实现与各种外部 服务的互联互通。
该节点支持常见的 HTTP 请求方法:
GET:用于请求服务器发送某个资源。
POST:用于向服务器提交数据,通常用于提交表单或上传文件。
PATCH:用于在请求-响应链上的每个节点获取传输路径。
PUT:用于向服务器上传资源,通常用于更新已存在的资源或创建新的资源。
DELETE:用于请求服务器删除指定的资源。
Http请求节点设置页如下:
案例九:创建chatflow,使用Http请求节点进行Get/Post/文件上传/下载操作。
1) 编写Python 代码构建Web服务
这里使用Flask框架构建简单的Web服务,后续可以进行Http Get/Post/文件上传/下载请求服 务。
python_service.py (使用Flask框架构建Web服务),该代码中Get/Post请求都需要对应的 user_id和comment字段内容。
## 安装如下依赖
## pip install Flask==3.1.0
## pip install flask-cors==5.0.1 # 允许跨域请求
from flask import Flask, request, send_file, jsonify
from io import BytesIO
from flask_cors import CORS import os
app = Flask(__name__)
# 启用 CORS 支持,允许所有来源(origin)访问您的 Flask 后端 CORS(app)
# 用于存储上传的文件,键为文件名,值为文件内容 file_storage = {}
@app.route('/feedback', methods=['GET', 'POST'])
def feedback():
if request.method == 'GET':
user_id = request.args.get('user_id')
comment = request.args.get('comment')
if not user_id or not comment:
return jsonify({'error': '缺少 user_id 或 comment 参数'}), 400
return jsonify({'message': '收到 GET 请求', 'user_id': user_id, 'comment': comment})
elif request.method == 'POST':
data = request.json
if not data or 'user_id' not in data or 'comment' not in data:
return jsonify({'error': '缺少 user_id 或 comment 参数'}), 400
user_id = data['user_id']
comment = data['comment']
return jsonify({'message': '收到 POST 请求', 'user_id': user_id, 'comment': comment})
@app.route('/upload', methods=['PUT'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': '未找到文件部分'}), 400
file = request.files['file'] if file.filename == '':
return jsonify({'error': '未选择文件'}), 400
# 保存文件到服务器的指定路径
upload_path = os.path.join('uploads', file.filename)
file.save(upload_path)
file_storage[file.filename] = upload_path
return jsonify({'message': '文件上传成功', 'filename': file.filename})
@app.route('/download/<filename>', methods=['GET'])
def download_file(filename):
if filename not in file_storage:
return jsonify({'error': '文件未找到'}), 404
file_path = file_storage[filename]
return send_file(file_path, as_attachment=True)
if __name__ == '__main__':
# 确保上传目录存在
os.makedirs('uploads', exist_ok=True)
app.run(host='0.0.0.0', port=15050, debug=True)
以上代码启动后,通过运行“test_python_service.py”代码进行测试。 test_python_service.py(测试Get/POST/文件上传/下载服务):
## 安装如下依赖
## pip install requests==2.32.3
import requests import os
# 定义服务的基础 URL
BASE_URL = 'http://192.168.1.105:15050'
# 测试 GET 请求
def test_get_feedback(user_id, comment):
params = {'user_id': user_id, 'comment': comment}
response = requests.get(f'{BASE_URL}/feedback', params=params) print('GET /feedback 响应:', response.json())
# 测试 POST 请求
def test_post_feedback(user_id, comment):
data = {'user_id': user_id, 'comment': comment}
response = requests.post(f'{BASE_URL}/feedback', json=data)
print('POST /feedback 响应:', response.json())
# 测试文件上传(使用 PUT 请求)
def test_upload_file(file_path):
with open(file_path, 'rb') as file:
files = {'file': (os.path.basename(file.name), file)}
response = requests.put(f'{BASE_URL}/upload', files=files) print('PUT /upload 响应:', response.json())
return response.json().get('filename')
# 测试文件下载
def test_download_file(filename):
response = requests.get(f'{BASE_URL}/download/{filename}')
if response.status_code == 200:
local_filename = f'downloaded_{os.path.basename(filename)}'
with open(local_filename, 'wb') as file:
file.write(response.content)
print(f'文件下载成功,保存为:{local_filename}') else:
try:
print('下载失败:', response.json())
except Exception:
print(f'下载失败(非 JSON 响应),状态码: {response.status_code}')
# 示例调用
if __name__ == '__main__':
test_get_feedback('123', '这是一个测试评价')
test_post_feedback('123', '这是另一个测试评价')
uploaded_filename = test_upload_file('./data/img.jpg')
if uploaded_filename:
test_download_file(uploaded_filename)
此外,这里还可以通过“Flask服务测试.html”(详见资料)在页面中测试Get/POST/文件上传/ 下载服务。
2) 创建开始节点,设置输入字段
输入字段中user_id和comment字段为文本类型,file为单文件类型,文件类型支持本地上传文档 和图片。
3) 创建“问题分类器”节点
问题分类器节点根据用户输入的内容通过LLM理解并分类,执行到下游响应的Http请求。
4) 创建Http请求节点并配置
Get请求( http://192.168.1.105/feedback ),配置PARAMS参数。
Post请求(需要配置Body,内容为:{"user_id": "/user_id","comment": "/comment"}):
上传文件请求( http://192.168.1.105/upload ),配置BODY。
下载文件请求( http://192.168.1.105/download/要下载的文件名):
5) 对GET/POST/上传文件Http请求节点设置LLM节点
GET/POST/上传文件Http请求后返回的数据默认是Unicode 转义序列格式,这里在后面跟上 LLM大模型节点对这种格式转换成对应的字符。
SYSTEM提示词如下:
将 {{xxx}}中Unicode 转义序列转换成对应字符,直接输出转换后的结果即可,不要输出多余内容。
以上xxx 替换为对应的请求输出的body,需要手动一个个设置。
6) 设置直接回复节点
特别注意:下载文件请求中,直接回复节点中获取files字段就是下载的文件。
7) 测试并发布chatflow
启动“python_service.py”代码,将web服务启动起来。 预览测试:
发布使用: