微信扫码
添加专属顾问
掌握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+中大型企业
2026-06-26
拆解Agent Harness的11大核心组件与工程实践(附下载)
2026-06-05
让 Agent 快速上生产:基于 OceanBase 和 LangChain 打造的智能体系统解决方案发布
2026-05-19
90% 的 Agent 失败,不是框架不行,而是卡在 5 个工程问题
2026-05-14
用两行代码将 AgentRun 集成到你的应用
2026-05-06
LangChain 深度智能体(Deep Agents)入门
2026-04-19
万字讲透Agent Harness的十二大模块
2026-04-08
同一个模型,换个Harness排名跳了25位:智能体基础设施完全解剖
2026-03-28
LangChain的DeepAgents子代理实战:复杂任务为什么一定要交给 SubAgent
2026-04-19
2026-04-08
2026-05-06
2026-05-19
2026-05-14
2026-06-05
2026-06-26
2026-03-26
2025-11-03
2025-10-29
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。