微信扫码
添加专属顾问
我要投稿
掌握Langflow构建多工具AI代理的高级技巧,为客服领域带来革命性的效率提升。 核心内容: 1. 构建多工具Langflow代理的基础知识和应用场景 2. RAG与Text2SQL技术在客户支持中的应用 3. 开发自定义组件和Streamlit网络应用的实战指南
这次,我们将构建一个由多个工具驱动的 Langflow 代理,非常适合客户支持聊天机器人。在本指南结束时,您将知道如何:
想象一下一个客户支持助手,可以:
让我们一步一步来!
我们正在构建一个由多个工具协同工作的超级增强型 Langflow Agent:
这个语音代理工具使用 Olivya API,Olivya 是我们重视的客户之一。Olivya 专注于通过处理如接听来电、解答询问、预订餐厅和检查订单状态等任务来改造客户服务。通过与 CRM 等系统无缝集成,他们旨在通过自然、类人沟通来自动化和改善客户互动。
4. Streamlit 网络应用 — 界面很重要 我们将所有内容包装在一个干净、互动的 Streamlit 网络应用中。
RAG将您的聊天机器人转变为知识向导。以下是如何连接它:
我们正在将内部支持的常见问题解答文档加载到Astra集合中。这些文档被拆分后,使用OpenAI的text-embedding-3-small模型加载到rag_demo
集合中。
在这个例子中,我们正在使用配备RAG作为工具的单个Agent。一旦文件加载到我们Astra集合中的rag_demo
表中,我们可以根据文档内容提问。
“您的软件与Mac OS Ventura兼容吗?”
现在您的机器人已准备好实时搜索知识库!
没有SQL?没问题!Text2SQL让您的机器人使用自然语言查询数据库。
工作原理:
为每个人提供数据洞察——无需SQL专业知识。
让我们开始创建一个包含工单详情的模拟数据库来进行操作:
现在我们可以查询工单状态和详情。虽然我在聊天中直接提供了我的customer_id
,但它也可以在用户的个人资料中设置,并在应用程序端初始化聊天时进行调整。
“我的客户ID是1008。我的工单状态和工单详情是什么?”
到目前为止,我们已经用我们的Agent测试了两个工具。它正确地遵循了指示,并选择了适合任务的正确工具。
让我们超越标准工具。这个自定义组件将直接拨打客户电话以处理关键问题。
我们将使用 Langflow,这是一个开源可视化框架,使构建生产就绪的 AI 应用程序变得简单。无论您是在处理多代理系统还是 RAG 解决方案,Langflow 都提供了创建可扩展工作流所需的灵活性和控制。它是用 Python 构建的,完全可定制,并且可以与任何 LLM 或向量存储配合使用,使其成为 AI 开发的理想选择。
在 Langflow 中创建自定义组件就像为您的工作流赋予超能力。Python 在后台运行,因此您可以利用整个库的宇宙,例如 Pandas 进行数据处理,Scikit-learn 进行机器学习,或 NumPy 进行数字运算。
秘诀是什么?确保您的输出具有正确的类型注释(例如,list[int]
)。Langflow 依赖这些来保持一切顺利运行。
让我们将其分解为更小的步骤。
首先,前往“自定义组件 > 新组件”在 Langflow 中。一个新的组件将出现在画布上,您可以点击组件中的代码。在那里,您将看到一个代码编辑器,您可以在其中导入您的 Python 依赖项并定义您的组件所需的一切。
以下是一个入门示例:
import requests
import json
from langflow.custom import Component
from langflow.io import MessageTextInput, Output
from langflow.schema import Data
import logging
classOlivyaComponent(Component):
display_name = "创建外呼"
description = "一个用于创建外呼请求的组件。"
icon = "code"
inputs = [
MessageTextInput(
name="api_key",
display_name="API 密钥",
info="用于身份验证的 API 密钥",
required=True,
),
MessageTextInput(
name="from_number",
display_name="发件号码",
info="代理的电话号码",
required=True,
),
MessageTextInput(
name="to_number",
display_name="收件号码",
info="客户的电话号码",
required=True,
),
MessageTextInput(
name="first_message",
display_name="第一条消息",
info="代理应该先说什么?",
tool_mode=True,
),
MessageTextInput(
name="system_prompt",
display_name="系统提示",
info="指导语音通话的可选指令",
required=False,
),
]
outputs = [
Output(name="output", display_name="输出", method="build_output"),
]
defbuild_output(self) -> Data:
logging.basicConfig(level=logging.INFO)
self.log("开始语音代理通话...")
self.log("通话成功发起!")
return Data(message="通话已完成。")
打开组件的代码编辑器,粘贴此代码并点击 检查并保存。
让我们分解关键点:
这是魔法发生的地方。您的输出方法定义了组件如何处理数据并交付结果。
def build_output(self) -> Data:
logging.basicConfig(level=logging.INFO)
self.log("Starting Voice Agent call...")
self.log("Call initiated successfully!")
return Data(message="Call completed.")
想要访问输入?只需使用 self.<input_name>
。
首先,我们需要确保我们的自定义组件与代理无缝协作。为此,我们将启用工具模式。
工具模式是让你的自定义组件成为代理最佳伙伴的关键。通过在任何输入上切换“tool_mode”,你在向代理发出信号,表示可以调用该组件来处理特定任务。例如,我们的语音代理中的“first_message”字段设置为tool_mode=True。
这意味着你的代理可以在需要拨打电话时决定将文本传递到该字段。
工具模式允许你直接与Langflow代理内部的各个工具进行交互。这在你希望将任何组件用作Langflow中的工具时特别有用。
启用工具模式后,所有字段的tool_mode=True将不可点击。并且将出现一个新按钮编辑工具。在这里,你可以查看所有组件输出,并调整工具名称和工具描述,这就是你的代理实际“看到”的内容:
现在,你的机器人可以接电话并拨打客户的电话!我们现在有三个工具准备好供我们的代理使用。让我们问一下支持代理是否可以打电话给我们以帮助取消订单:
“我想取消一个订单。你能给我打电话吗?”
这是与语音代理Paula的对话。
Langflow 对类型要求严格(以积极的方式!)。始终正确注释您的方法。例如:
def build_output(self) -> Data:
return Data()
迟早,你需要进行调试。以下是一些快速提示,以帮助你避免挫败感:
通过遵循这些提示,你应该能够有效地调试你的组件并更快地解决问题。
self.log("Hit this point!")
from_number
或 api_key
丢失,请执行:self.log(f"From Number is: {self.from_number}")
try:
response = requests.post("https://some-api-url", data={…})
except Exception as e:
self.log(f"Error in request: {e}")
通过这些步骤,您将能够快速诊断大多数问题,并使您的组件顺利运行。
您快到了!在 Langflow 界面中点击 检查和保存 以验证您的新组件。如果一切看起来都不错,它就可以使用了!
就这样,您在 Langflow 中创建了一个自定义组件!无论您是在构建 API 集成、处理数据,还是创建新的工作流程,前途无量。
让我们通过一个简单的 web 应用让这个聊天机器人焕发光彩!
在这里,我们通过 API 获取 Langflow 代码,并将其与我们的 Streamlit 代码集成。
我们通过使用 requests 调用 Langflow API,将 Langflow 连接到我们的 Streamlit 应用。
为了简化设置,argparse
被移除,转而采用使用 Streamlit 接口的网络友好方法。虽然 argparse
适用于命令行输入,但 requests
处理 API 通信,使得在应用中直接发送数据和接收响应变得更加容易。
以下是一个示例代码实现,演示如何使用 Streamlit:
import streamlit as st
import requests
BASE_API_URL = "http://127.0.0.1:7862"
FLOW_ID = "ef498ebb-2b6b-4d6e-aaa3-6ebb2c7331e2"
TWEAKS = {
"SQLiteDatabaseTool-4E7TY": {},
"ChatOutput-hEGbz": {},
"OpenAIEmbeddings-Vc3fd": {},
"File-15yvK": {},
"SplitText-8Bxte": {},
"OpenAIEmbeddings-MA3vd": {},
"SQLiteDatabaseTool-XB5YP": {},
"ChatInput-yuJEL": {},
"Agent-C0gNO": {},
"VectoreStoreQuery-XqTqT": {},
"AstraDB-Qe9l6": {},
"AstraDB-1iPbu": {},
"OlivyaComponent-U6d3Z": {}
}
defrun_flow_api(message: str):
"""将消息发送到 Langflow API,并返回聊天机器人的响应。"""
api_url = f"{BASE_API_URL}/api/v1/run/{FLOW_ID}"
payload = {
"input_value": message,
"output_type": "chat",
"input_type": "chat",
"tweaks": TWEAKS
}
response = requests.post(api_url, json=payload)
response_json = response.json()
text_output = response_json.get("outputs", [{}])[0].get("outputs", [{}])[0].get("results", {}).get("message", {}).get("text", "未收到响应。")
return text_output
defdesign_ui():
"""设置 Streamlit 用户界面。"""
st.set_page_config(page_title="支持代理界面", layout="centered")
st.title("支持代理")
st.image("/Users/betuloreilly/langflow/support_bot/supportbot.png", width=80)
user_input = st.text_area("在此输入您的消息:", placeholder="在此输入您的消息...", height=120)
run_button = st.button("运行聊天机器人")
return user_input, run_button
defprocess_chatbot_flow(user_input):
"""处理用户输入,通过聊天机器人流程并显示结果。"""
if user_input:
try:
result = run_flow_api(user_input)
st.markdown(f"<div class='support-response'>支持代理:{result}</div>", unsafe_allow_html=True)
st.markdown("<div class='feedback-container'>", unsafe_allow_html=True)
col1, col2 = st.columns(2)
with col1:
if st.button("?"):
st.success("感谢您的积极反馈!")
st.experimental_rerun()
with col2:
if st.button("?"):
st.warning("感谢您的反馈!我们会努力改进我们的服务。")
st.experimental_rerun()
st.markdown("</div>", unsafe_allow_html=True)
except Exception as e:
st.error(f"运行流程时出错:{e}")
else:
st.warning("请输入一条消息。")
defmain():
"""主函数以协调应用流程。"""
user_input, run_button = design_ui()
if run_button:
process_chatbot_flow(user_input)
if __name__ == "__main__":
main()
让我们仔细看看这段代码的关键组件,使得这个聊天机器人能够顺利高效地工作:
TWEAKS
提供了对组件行为的精细控制。它们让您可以微调每个组件的行为,无论是发送会话 ID、数据库的搜索条件,还是共享用户特定的上下文信息,如联系信息或偏好。这些调整使您能够创建一个更智能、更高效、量身定制的设置。run_flow_api()
— 处理与 Langflow API 的交互。它发送用户的消息并检索响应。design_ui()
— 设置一个用户友好的 Streamlit 界面,以便与聊天机器人进行交互。您的聊天机器人现在在一个干净的网络用户界面上运行!您可以通过改进用户体验设计,使其在视觉上更具吸引力。
我们现在可以使用这个用户界面无缝运行 Agent 流程:
你刚刚创建了一个强大的支持聊天机器人,功能强大,支持以下功能:
最棒的是什么?你在 Langflow 中构建了一个自定义组件,为独特的 AI 工作流打开了无尽的可能性。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-05
Agent 最全 Playbook:场景、记忆和交互创新
2025-03-05
基于LangGraph的智能文章生成Agent架构设计思路
2025-03-02
LangGraph全新4大预构建Agents框架登场
2025-03-01
极简LangChain智能体开发入门指南
2025-02-28
用 LangGraph 构建 Agent 逐步指南
2025-02-28
刚刚,LangGraph官方开源Ultra版本,多智能体能力提升10倍!
2025-02-25
AI Agent 开发框架巡礼:流行度、案例与理性选择
2025-02-22
手把手教你使用Qwen-Agent开发智能体应用实战教程
2024-10-10
2024-04-08
2024-07-13
2024-06-03
2024-09-04
2024-08-18
2024-04-08
2024-06-24
2024-07-10
2024-03-28
2025-02-05
2024-12-02
2024-11-25
2024-10-30
2024-10-11
2024-08-18
2024-08-16
2024-08-04