创建一个可以处理文件的聊天机器人
本教程向您展示如何构建一个可以读取并回答您上传文件问题的聊天机器人,例如会议记录或求职申请。
例如,您可以上传一份合同并询问:"这份协议中的终止条款是什么?"或者上传一份简历并询问:"这位候选人有营销分析方面的经验吗?"
本教程的主要重点是向您展示如何将文件作为输入提供给 Langflow 流程,以便您的聊天机器人可以在其响应中使用这些文件的内容。
前提条件
- 安装并启动 Langflow
- 创建一个 Langflow API 密钥
- 创建一个 OpenAI API 密钥
本教程使用 OpenAI LLM。如果您想使用其他提供商,您需要该提供商的有效凭据。
创建接受文件输入的流程
要处理文件,您的流程必须有一个 File 组件附加到接收输入的组件上,例如 Prompt Template 或 Agent 组件。
以下步骤修改 Basic Prompting 模板以接受文件输入:
-
在 Langflow 中,点击 New Flow,然后选择 Basic Prompting 模板。
-
在 Language Model 组件中,输入您的 OpenAI API 密钥。
如果您想使用不同的提 供商或模型,请相应地编辑 Model Provider、Model Name 和 API Key 字段。
-
要验证您的 API 密钥是否有效,点击 Playground,然后向 LLM 提问。 LLM 应该根据 Prompt Template 组件的 Template 字段中的规范进行响应。
-
退出 Playground,然后修改 Prompt Template 组件以接受文件输入以及聊天输入。 为此,编辑 Template 字段,然后将默认提示替换为以下文本:
_10ChatInput:_10{chat-input}_10File:_10{file}提示您可以使用任何字符串来命名模板变量。 这些字符串会成为 Prompt Template 组件上字段(输入端口)的名称。
对于本教程,变量根据连接到它们的组件命名:chat-input 用于 Chat Input 组件,file 用于 File 组件。
-
向流程中添加一个 File 组件,然后将 Raw Content 输出端口连接到 Prompt Template 组件的 file 输入端口。 要连接端口,请从一个端口点击并拖动到另一个端口。
您可以直接向 File 组件添加文件以在运行流程前预加载输入,也可以在运行时加载文件。本教程的下一部分将介绍运行时文件上传。
此时,您的流程有五个组件。Chat Input 和 File 组件连接到 Prompt Template 组件的输入端口。然后,Prompt Template 组件的输出端口连接到 Language Model 组件的输入端口。最后,Language Model 组件的输出端口连接到 Chat Output 组件,该组件将最终响应返回给用户。
从Python 应用程序向您的流程发送请求
本教程的这一部分演示了如何从应用程序向流程发送文件输入。
为此,您的应用程序必须向Langflow服务器发送一个POST /run
请求,包含您要上传的文件和文本提示。
结果包括流程运行的输出和LLM的响应。
此示例使用本地Langflow实例,并要求LLM评估一份示例简历。 如果您手头没有简历,可以下载fake-resume.txt。
有关如何在Python、JavaScript和curl中构建文件上传请求的帮助,请参阅Langflow文件上传工具。
-
要构建请求,请收集以下信息:
LANGFLOW_SERVER_ADDRESS
: 您的Langflow服务器的域名。默认值为127.0.0.1:7860
。您可以从流程的API访 问面板中的代码片段获取此值。FLOW_ID
: 您流程的UUID或自定义端点名称。您可以从流程的API访问面板中的代码片段获取此值。FILE_COMPONENT_ID
: 您流程中File组件的UUID,例如File-KZP68
。要查找组件ID,请在Langflow中打开您的流程,点击File组件,然后点击Controls。组件ID位于Controls面板的顶部。CHAT_INPUT
: 您要发送到流程的Chat Input的消息,例如Evaluate this resume for a job opening in my Marketing department.
FILE_NAME
和FILE_PATH
: 您要发送到流程的本地文件的名称和路径。LANGFLOW_API_KEY
: 有效的Langflow API密钥。
-
将以下脚本Replicate到Python文件中,然后用您在上一步中收集的信息替换占位符:
_51# Python example using requests_51import requests_51import json_51_51# 1. Set the upload URL_51url = "http://LANGFLOW_SERVER_ADDRESS/api/v2/files/"_51_51# 2. Prepare the file and payload_51payload = {}_51files = [_51('file', ('FILE_PATH', open('FILE_NAME', 'rb'), 'application/octet-stream'))_51]_51headers = {_51'Accept': 'application/json',_51'x-api-key': 'LANGFLOW_API_KEY'_51}_51_51# 3. Upload the file to Langflow_51response = requests.request("POST", url, headers=headers, data=payload, files=files)_51print(response.text)_51_51# 4. Get the uploaded file path from the response_51uploaded_data = response.json()_51uploaded_path = uploaded_data.get('path')_51_51# 5. Call the Langflow run endpoint with the uploaded file path_51run_url = "http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID"_51run_payload = {_51"input_value": "CHAT_INPUT",_51"output_type": "chat",_51"input_type": "chat",_51"tweaks": {_51"FILE_COMPONENT_ID": {_51"path": uploaded_path_51}_51}_51}_51run_headers = {_51'Content-Type': 'application/json',_51'Accept': 'application/json',_51'x-api-key': 'LANGFLOW_API_KEY'_51}_51run_response = requests.post(run_url, headers=run_headers, data=json.dumps(run_payload))_51langflow_data = run_response.json()_51# Output only the message_51message = None_51try:_51message = langflow_data['outputs'][0]['outputs'][0]['results']['message']['data']['text']_51except (KeyError, IndexError, TypeError):_51pass_51print(message)此脚本包含两个请求。
第一个请求将文件(如
fake-resume.txt
)上传到Langflow服务器的/v2/files
端点。此请求返回一个文件路径,可以在后续的Langflow请求中引用,例如02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt
第二个请求向Langflow流程的
/v1/run/
端点发送聊天消息。tweaks
参数将上传文件的路径作为 变量uploaded_path
包含在内,并将此文件直接发送到File组件。 -
保存并运行脚本以发送请求并测试流程。
初始输出包含文件上传端点的JSON响应对象,包括Langflow存储文件的内部路径。 然后,LLM检索文件并评估其内容,在这种情况下是简历对职位的适合性。
Result
_24以下是本教程流程的示例响应。由于LLM的性质和输入的变化,您的响应可能会有所不同。```_24{"id":"793ba3d8-5e7a-4499-8b89-d9a7b6325fee","name":"fake-resume (1)","path":"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt","size":1779,"provider":null}_24Emily J. Wilson的简历为您市场部门的职位提供了一个强有力的候选人。以下是值得考虑的几个要点:_24_24### 优势:_241. **经验**:Emily拥有超过8年的市场营销经 验,曾担任过责任逐步加重的职位,目前担任市场总监一职。这表明她在该领域有坚实的基础。_24_242. **可量化的成就**:简历突出了具体的成就,例如品牌知名度提升25%以及推出新产品线后销售额增长30%。这些指标展示了她推动结果的能力。_24_243. **多样化的技能组合**:Emily的技能涵盖了市场营销的各个方面,包括战略制定、团队管理、社交媒体营销、活动策划和数据分析。这种多才多艺在动态的市场环境中可能很有益。_24_244. **教育背景**:她的MBA学位和市场营销学士学位提供了坚实的学术基础,这在市场营销职位中通常很受重视。_24_245. **认证**:认证营销专业人员(CMP)和Google Analytics认证表明她致力于专业发展并紧跟行业标准。_24_24### 需要改进的方面:_241. **技能的具体性**:虽然列出的技能是相关的,但提供她在以往职位中如何应用这些技能的例子可以进一步加强她的简历。_24_242. **推荐人**:虽然表示推荐人可根据要求提供是标准做法,但包含一些推荐信或重要背书可以增强可信度。_24_243. **格式**:确保简历在视觉上吸引人且易于阅读。清晰的标题和项目符号有助于快速识别关键信息。_24_24### 结论:_24总体而言,Emily J. Wilson的简历反映了一位全面发展的营销专业人士,拥有成功的 proven 记录。如果她的经验与您市场部门的具体需求相符,她可能成为团队中宝贵的成员。考虑邀请她参加面试,以进一步评估她对该职位的适合度。
下一步
要继续基于本教程进行构建,请尝试以下后续步骤。
处理运行时加载的多个文件
要在单个流程运行中处理多个文件,为您想要摄取的每个文件添加一个单独的 File 组件。然后修改您的脚本以上传每个文件,检索每个返回的文件路径,然后将唯一的文件路径传递给每个 File 组件 ID。
例如,您可以修改 tweaks
以接受多个 File 组件。
以下代码仅作为示例,它并不是可运行的代码:
_13## set multiple file paths_13file_paths = {_13 FILE_COMPONENT_1: uploaded_path_1,_13 FILE_COMPONENT_2: uploaded_path_2_13}_13_13def chat_with_flow(input_message, file_paths):_13 """Compare the contents of these two files."""_13 run_url = f"{LANGFLOW_SERVER_ADDRESS}/api/v1/run/{FLOW_ID}"_13 # Prepare tweaks with both file paths_13 tweaks = {}_13 for component_id, file_path in file_paths.items():_13 tweaks[component_id] = {"path": file_path}
您还可以使用 Directory 组件 来加载目录中的所有文件,或将存档文件传递给 File 组件。
在运行时上传外部文件
要从不是您本地环境的另一台机器上传文件,您的 Langflow 服务器必须首先可以通过互联网访 问。然后,经过身份验证的用户可以将文件上传到您的公共 Langflow 服务器的 /v2/files/
端点,如教程中所示。有关更多信息,请参阅 Langflow 部署概述。
在聊天会话外预加载文件
您可以在流程中的任何位置使用 File 组件来加载文件,而不仅仅是在聊天会话中。
在可视化编辑器中,您可以通过从本地计算机或 Langflow 文件管理 中选择文件来预加载文件到 File 组件。
例如,您可以预加载提示模板的说明文件,或者预加载一个包含您想在检索增强生成(RAG)流程中查询的文档的向量存储。
有关 File 组件和其他数据加载组件的更多信息,请参阅 数据 组件。