跳到主要内容

创建能够处理文件的聊天机器人

本教程将向您展示如何构建一个能够读取和回答您上传的文件内容问题的聊天机器人,例如会议记录或求职申请。

例如,您可以上传一份合同并询问:"这份协议中的终止条款是什么?"或者上传一份简历并询问:"这位候选人是否有营销分析方面的经验?"

本教程的主要重点是向您展示如何将文件作为输入提供给 Langflow 流程,使您的聊天机器人能够在其响应中使用这些文件的内容。

前提条件​

本教程使用 OpenAI LLM。如果您想使用不同的提供商,您需要该提供商的有效凭据。

创建接受文件输入的流程​

要处理文件,您的流程必须有一个 File 组件连接到接收输入的组件,例如 Prompt 或 Agent 组件。

以下步骤修改 基础提示 模板以接受文件输入:

  1. 在 Langflow 中,点击 New Flow,然后选择 Basic prompting 模板。

  2. 在 Language Model 组件中,输入您的 OpenAI API 密钥。

    如果您想使用不同的提供商或模型,请相应地编辑 Model Provider、Model Name 和 API Key 字段。

  3. 要验证您的 API 密钥是否有效,请点击 Playground,然后向 LLM 提出问题。 LLM 应该根据 Prompt 组件的 Template 字段中的规范进行响应。

  4. 退出 Playground,然后修改 Prompt 组件以接受文件输入和聊天输入。 为此,请编辑 Template 字段,然后用以下文本替换默认提示:


    _10
    ChatInput:
    _10
    {chat-input}
    _10
    File:
    _10
    {file}

    Prompt 组件为花括号中的每个值获得一个新的输入端口。此时,您的 Prompt 组件应该有 chat-input 和 file 输入端口。

    提示

    在花括号内,您可以使用任何您喜欢的端口名称。在本教程中,端口以连接到它们的组件命名。

  5. 向流程添加一个 File 组件,然后将 Raw Content 输出端口连接到 Prompt 组件的 file 输入端口。 要连接端口,请从一个端口点击并拖拽到另一个端口。

    您可以直接向文件组件添加文件以在运行流程之前预加载输入,或者您可以在运行时加载文件。本教程的下一部分涵盖运行时文件上传。

    此时您的流程有五个组件。Chat Input 和 File 组件连接到 Prompt 组件的输入端口。然后,Prompt 组件的输出端口连接到 Language Model 组件的输入端口。最后,Language Model 组件的输出端口连接到 Chat Output 组件,该组件向用户返回最终响应。

    File loader chat flow

从 Python 应用程序向您的流程发送请求​

本教程的这一部分演示了如何从应用程序向流程发送文件输入。

为此,您的应用程序必须向您的 Langflow 服务器发送 POST /run 请求,包含您想要上传的文件和文本提示。 结果包括流程运行的结果和 LLM 的响应。

此示例使用本地 Langflow 实例,并要求 LLM 评估示例简历。 如果您手头没有简历,可以下载 fake-resume.txt。

提示

有关在 Python、JavaScript 和 curl 中构建文件上传请求的帮助,请参阅 Langflow File Upload Utility。

  1. 要构建请求,请收集以下信息:

    • LANGFLOW_SERVER_ADDRESS:您的 Langflow 服务器域名。默认值为 127.0.0.1:7860。您可以从流程的 API access 面板 上的代码片段中获取此值。
    • FLOW_ID:您的流程的 UUID 或自定义端点名称。您可以从流程的 API access 面板 上的代码片段中获取此值。
    • FILE_COMPONENT_ID:流程中 File 组件的 UUID,例如 File-KZP68。要找到组件 ID,请在 Langflow 中打开您的流程,点击 File 组件,然后点击 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 密钥。要创建 API 密钥,请参阅 API keys。
  2. 将以下脚本复制到 Python 文件中,然后用您在上一步中收集的信息替换占位符:


    _51
    # Python example using requests
    _51
    import requests
    _51
    import json
    _51
    _51
    # 1. Set the upload URL
    _51
    url = "http://LANGFLOW_SERVER_ADDRESS/api/v2/files/"
    _51
    _51
    # 2. Prepare the file and payload
    _51
    payload = {}
    _51
    files = [
    _51
    ('file', ('FILE_PATH', open('FILE_NAME', 'rb'), 'application/octet-stream'))
    _51
    ]
    _51
    headers = {
    _51
    'Accept': 'application/json',
    _51
    'x-api-key': 'LANGFLOW_API_KEY'
    _51
    }
    _51
    _51
    # 3. Upload the file to Langflow
    _51
    response = requests.request("POST", url, headers=headers, data=payload, files=files)
    _51
    print(response.text)
    _51
    _51
    # 4. Get the uploaded file path from the response
    _51
    uploaded_data = response.json()
    _51
    uploaded_path = uploaded_data.get('path')
    _51
    _51
    # 5. Call the Langflow run endpoint with the uploaded file path
    _51
    run_url = "http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID"
    _51
    run_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
    }
    _51
    run_headers = {
    _51
    'Content-Type': 'application/json',
    _51
    'Accept': 'application/json',
    _51
    'x-api-key': 'LANGFLOW_API_KEY'
    _51
    }
    _51
    run_response = requests.post(run_url, headers=run_headers, data=json.dumps(run_payload))
    _51
    langflow_data = run_response.json()
    _51
    # Output only the message
    _51
    message = None
    _51
    try:
    _51
    message = langflow_data['outputs'][0]['outputs'][0]['results']['message']['data']['text']
    _51
    except (KeyError, IndexError, TypeError):
    _51
    pass
    _51
    print(message)

    此脚本包含两个请求。

    第一个请求将文件(如 fake-resume.txt)上传到您的 Langflow 服务器的 /v2/files 端点。此请求返回一个文件路径,可在后续的 Langflow 请求中引用,例如 02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt

    第二个请求在 /v1/run/ 端点向 Langflow 流程发送聊天消息。 tweaks 参数将上传文件的路径作为变量 uploaded_path 包含在内,并将此文件直接发送到 File 组件。

  3. 保存并运行脚本以发送请求并测试流程。

    初始输出包含来自文件上传端点的 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}
    _23
    The 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:
    _23
    1. **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
    _23
    2. **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
    _23
    3. **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
    _23
    4. **Educational Background**: Her MBA and a Bachelor's degree in Marketing provide a strong academic foundation, which is often valued in marketing roles.
    _23
    _23
    5. **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:
    _23
    1. **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
    _23
    2. **References**: While stating that references are available upon request is standard, including a couple of testimonials or notable endorsements could enhance credibility.
    _23
    _23
    3. **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:
    _23
    Overall, 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.

下一步​

要继续基于本教程进行构建,请尝试以下步骤。

处理在运行时加载的多个文件​

要在单次流程运行中处理多个文件,请为每个要摄取的文件添加单独的 File 组件。然后,修改您的脚本以上传每个文件,检索每个返回的文件路径,然后将唯一的文件路径传递给每个 File 组件 ID。

例如,您可以修改 tweaks 以接受多个文件组件。 以下代码仅是示例;它不是工作代码:


_13
## set multiple file paths
_13
file_paths = {
_13
FILE_COMPONENT_1: uploaded_path_1,
_13
FILE_COMPONENT_2: uploaded_path_2
_13
}
_13
_13
def 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 文件管理 中选择文件来预加载文件到文件组件。

例如,您可以为提示模板预加载指令文件,或者您可以使用要在检索增强生成 (RAG) 流程中查询的文档预加载向量存储。

有关 File 组件和其他数据加载组件的更多信息,请参阅 数据组件。

Search