创建一个可以摄取文件的聊天机器人 (Create a chatbot that can ingest files)
本教程向您展示如何构建一个可以读取并回答有关您上传的文件(如会议记录或工作申请)问题的聊天机器人。
例如,您可以上传一份合同并询问:“该协议中的终止条款是什么?”或者上传一份简历并询问:“这位候选人有营销分析方面的经验吗?”
本教程的主要重点是向您展示如何将文件作为输入提供给 Langflow 流,以便您的聊天机器人可以在其响应中使用这些文件的内容。
前提条件
本教程使用 OpenAI LLM。如果您想使用其他提供商,则需要该提供商的有效凭据。
创建一个接受文件输入的流
要摄取文件,您的流必须有一个连接到接收输入组件(如 提示模板 (Prompt Template) 或 代理 (Agent) 组件)的 读取文件 (Read File) 组件。
以下步骤修改 基本提示 (Basic Prompting) 模板以接受文件输入:
-
在 Langflow 中,点击 新建流 (New Flow),然后选择 基本提示 (Basic Prompting) 模板。
-
在 语言模型 (Language Model) 组件中,输入您的 OpenAI API 密钥。
如果您想使用不同的提供商或模型,请相应地编辑 模型提供商 (Model Provider)、模型名称 (Model Name) 和 API 密钥 (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 和连接 读取文件 (Read File) 组件的 file。
-
将一个 读取文件 (Read File) 组件 添加到流中,然后将 原始内容 (Raw Content) 输出端口连接到 提示模板 (Prompt Template) 组件的 file 输入端口。 要连接端口,请点击并从一个端口拖动到另一个端口。
您可以直接向 读取文件 (Read File) 组件添加文件,以便在运行流之前预加载输入,也可以在运行时加载文件。本教程的下一部分将介绍运行时文件上传。
此时,您的流有五个组件。聊天输入 (Chat Input) 和 读取文件 (Read 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:流中 读取文件 (Read File) 组件的 UUID,例如File-KZP68。要查找组件 ID,请在 Langflow 中打开您的流,点击 读取文件 (Read File) 组件,然后点击 控制 (Controls)。组件 ID 位于 控制 (Controls) 面板的顶部。CHAT_INPUT:您要发送到流的聊天输入的消息,例如评估这份简历,看是否适合我市场部门的职位空缺。FILE_NAME和FILE_PATH:您要发送到流的本地文件的名称和路径。LANGFLOW_API_KEY:有效的 Langflow API 密钥。
-
将以下脚本复制到 Python 文件中,然后将占位符替换为您在上一步中收集的信息:
_51# 使用 requests 的 Python 示例_51import requests_51import json_51_51# 1. 设置上传 URL_51url = "http://LANGFLOW_SERVER_ADDRESS/api/v2/files/"_51_51# 2. 准备文件和负载_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. 将文件上传到 Langflow_51response = requests.request("POST", url, headers=headers, data=payload, files=files)_51print(response.text)_51_51# 4. 从响应中获取上传的文件路径_51uploaded_data = response.json()_51uploaded_path = uploaded_data.get('path')_51_51# 5. 使用上传的文件路径调用 Langflow 运行端点_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# 仅输出消息_51message = None_51try:_51message = langflow_data['outputs'][0]['outputs'][0]['results']['message']['data']['text']_51except (KeyError, IndexError, TypeError):_51pass_51print(message)该脚本包含两个请求。
第一个请求向 Langflow 服务器的
/v2/files端点上传一个文件(例如fake-resume.txt)。此请求返回一个文件路径,可在后续的 Langflow 请求中引用,例如02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt。第二个请求向 Langflow 流的
/v1/run/端点发送一条聊天消息。tweaks参数将上传文件的路径作为变量uploaded_path包含在内,并将此文件直接发送到 读取文件 (Read File) 组件。 -
保存并运行脚本以发送请求并测试流。
初始输出包含来自文件上传端点的 JSON 响应对象,包括 Langflow 存储文件的内部路径。 然后,LLM 检索该文件并评估其内容,在本例中是评估简历是否适合某个职位。
结果
以下是本教程流的一个示例响应。由于 LLM 的特性以及输入的不同,您的响应可能会有所不同。
_23{"id":"793ba3d8-5e7a-4499-8b89-d9a7b6325fee","name":"fake-resume (1)","path":"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt","size":1779,"provider":null}_23The resume for Emily J. Wilson presents a strong candidate for a position in your Marketing department. Here are some key points to consider:_23_23### Strengths:_231. **Experience**: With over 8 years in marketing, Emily has held progressively responsible positions, culminating in her current role as Marketing Director. This indicates a solid foundation in the field._23_232. **Quantifiable Achievements**: The resume highlights specific accomplishments, such as a 25% increase in brand recognition and a 30% sales increase after launching new product lines. These metrics demonstrate her ability to drive results._23_233. **Diverse Skill Set**: Emily's skills encompass various aspects of marketing, including strategy development, team management, social media marketing, event planning, and data analysis. This versatility can be beneficial in a dynamic marketing environment._23_234. **Educational Background**: Her MBA and a Bachelor's degree in Marketing provide a strong academic foundation, which is often valued in marketing roles._23_235. **Certifications**: The Certified Marketing Professional (CMP) and Google Analytics Certification indicate a commitment to professional development and staying current with industry standards._23_23### Areas for Improvement:_231. **Specificity in Skills**: While the skills listed are relevant, providing examples of how she has applied these skills in her previous roles could strengthen her resume further._23_232. **References**: While stating that references are available upon request is standard, including a couple of testimonials or notable endorsements could enhance credibility._23_233. **Formatting**: Ensure that the resume is visually appealing and easy to read. Clear headings and bullet points help in quickly identifying key information._23_23### Conclusion:_23Overall, Emily J. Wilson's resume reflects a well-rounded marketing professional with a proven track record of success. If her experience aligns with the specific needs of your Marketing department, she could be a valuable addition to your team. Consider inviting her for an interview to further assess her fit for the role.
下一步
要继续完善本教程,请尝试以下后续步骤。
处理运行时加载的多个文件
要在单次流运行中处理多个文件,请为您想要摄取的每个文件添加一个单独的 读取文件 (Read File) 组件。然后,修改您的脚本以上传每个文件,检索每个返回的文件路径,然后将唯一的文件路径传递给每个 读取文件 (Read File) 组件 ID。
例如,您可以修改 tweaks 以接受多个 读取文件 (Read File) 组件。
以下代码仅为示例,并非可运行的代码:
_13## 设置多个文件路径_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 """比较这两个文件的内容。"""_13 run_url = f"{LANGFLOW_SERVER_ADDRESS}/api/v1/run/{FLOW_ID}"_13 # 准备带有两个文件路径的 tweaks_13 tweaks = {}_13 for component_id, file_path in file_paths.items():_13 tweaks[component_id] = {"path": file_path}
您还可以使用 目录 (Directory) 组件 加载目录中的所有文件,或将存档文件传递给 读取文件 (Read File) 组件。
运行时上传外部文件
要从非本地环境的其他机器上传文件,您的 Langflow 服务器必须首先可以通过互联网访问。然后,经过身份验证的用户可以将文件上传到您的公共 Langflow 服务器的 /v2/files/ 端点,如本教程所示。有关更多信息,请参阅 Langflow 部署概述。
在聊天会话之外预加载文件
您可以在流中的任何位置使用 读取文件 (Read File) 组件来加载文件,而不仅仅是在聊天会话中。
在可视化编辑器中,您可以通过从本地机器或 Langflow 文件管理 中选择文件,将其预加载到 读取文件 (Read File) 组件中。
例如,您可以为提示模板预加载一个指令文件,或者在您想要在检索增强生成 (RAG) 流中查询的向量库中预加载文档。
有关 读取文件 (Read File) 组件和其他数据加载组件的更多信息,请参阅 读取文件 (Read File) 组件。