项目简介
Langflow 提供可视化构建界面与内置 API/MCP 服务器,用于创建和部署 AI 智能体。支持主流大语言模型、向量数据库及多智能体编排,具备企业级安全与可观测性。
README 预览
\n\n\n \n \n\n\n[](https://github.com/langflow-ai/langflow/releases)\n[](https://opensource.org/licenses/MIT)\n[](https://pypistats.org/packages/langflow)\n[](https://twitter.com/langflow_ai)\n[](https://www.youtube.com/@Langflow)\n[](https://discord.gg/EqksyE2EX9)\n[](https://deepwiki.com/langflow-ai/langflow)\n\n[Langflow](https://langflow.org) is a powerful platform for building and deploying AI-powered agents and workflows. It provides developers with both a visual authoring experience and built-in API and MCP servers that turn every workflow into a tool that can be integrated into applications built on any framework or stack. Langflow comes with batteries included and supports all major LLMs, vector databases and a growing library of AI tools.\n\n## ✨ Highlight features\n\n- **Visual builder interface** to quickly get started and iterate.\n- **Source code access** lets you customize any component using Python.\n- **Interactive playground** to immediately test and refine your flows with step-by-step control.\n- **Multi-agent orchestration** with conversation management and retrieval.\n- **Deploy as an API** or export as JSON for Python apps.\n- **Deploy as an MCP server** and turn your flows into tools for MCP clients.\n- **Observability** with LangSmith, LangFuse and other integrations.\n- **Enterprise-ready** security and scalability.\n\n## 🖥️ Langflow Desktop\n\nLangflow Desktop is the easiest way to get started with Langflow. All dependencies are included, so you don't need to manage Python environments or install packages manually.\nAvailable for Windows and macOS.\n\n[📥 Download Langflow Desktop](https://www.langflow.org/desktop)\n\n## ⚡️ Quickstart\n\n### Install locally (recommended)\n\nRequires Python 3.10–3.14 and [uv](https://docs.astral.sh/uv/getting-started/installation/) (recommended package manager).\n\n#### Install\n\nFrom a fresh directory, run:\n```shell\nuv pip install langflow -U\n```\n\nThe latest Langflow package is installed.\nFor mor
常见问题 (5)
故障排除如何修复在 LFX SplitText 中使用非字符串列标签时出现的 "AttributeError: 'int' object has no attribute 'lower'" 错误?
此问题出现在 LFX 1.13.0 中,因为 Table.smart_column_order() 会对每个列标签调用 .lower() 和 .startswith(),即使 Pandas 标签是整数、元组或 None。
已合并的修复仅对字符串标签应用内容/系统列规则;非字符串标签仍作为普通的元数据列处理。请升级到包含 PR fix: handle non-string labels in smart column ordering 的 LFX 版本。
如果无法升级,请在运行 SplitTextComponent 之前将非字符串列重命名为字符串,之后再将其改回:
# 假设 `pdf` 是底层的 pandas DataFrame
label_map = {
c: str(c)
for c in pdf.columns
if not isinstance(c, str)
}
pdf = pdf.rename(columns=label_map)
component.set(
data_inputs=DataFrame(pdf),
text_key="text",
separator="\n",
chunk_size=6,
chunk_overlap=0,
keep_separator="False",
clean_output=False,
)
component.split_text()
# 如有需要,恢复原始的非字符串标签
result = result.rename(columns={v: k for k, v in label_map.items()})
请确保生成的字符串名称不会与现有列名冲突。
故障排除如何修复已取消的 Langflow Memory Base 摄取任务被记录为已完成的问题?
升级到包含内存摄取取消修复的版本,或应用相应的补丁。出现此问题的原因是 ingest_memory_task 在协作式取消后返回了普通字典,导致 execute_with_status 将任务视为成功并持久化 COMPLETED。
在 ingest_memory_task 的两条取消路径中,先执行所需的部分写入清理,然后传播任务包装器可识别的取消异常,而不是返回结果:
raise CancelledError("LANGFLOW_USER_CANCELLED")
在抛出此异常之前,不要为消息打标记,也不要推进摄取元数据/游标。execute_with_status 已经会将此异常映射为 CANCELLED 并保留完成时间戳。该 bug 已在 main 的 df9711c 和 release-1.13.0 的 33cedec 上复现;回归测试使用真实的 SQLite 事务,验证在写入前或写入过程中取消、清理操作以及游标保持不变。
故障排除如何修复 Langflow 1.13 中 pgvector 知识库数据摄取在 PgBouncer 后出现挂起或死锁的问题?
应用 PR #15614 中的修复,或升级到包含该修复的 Langflow 版本。该补丁会在每个进程中缓存已验证的 pgvector 表,在缓存未命中时检查系统目录,并且仅针对正在创建的特定表获取咨询锁,而不是使用数据库范围的 _ADVISORY_LOCK_KEY。这消除了全局引导锁队列,该队列此前与每个知识库的 _remote_lock 叠加,共同耗尽了 PgBouncer 连接。部署后,重启所有 Langflow 实例,以清除现有的 idle in transaction 会话。如果无法立即应用补丁,请重启停滞的实例,减少并发摄取任务,并按每个活动摄取任务最多占用两个服务器连接(一个租约连接和一个写入连接)来为 PgBouncer/PostgreSQL 规划容量,此外还需为健康检查预留余量。在 PgBouncer 连接数上限为 75 的情况下,应用补丁前应将活动摄取并发数保持在 30 或更低。只有同时增大 PostgreSQL 的 max_connections,增大 PgBouncer 的 default_pool_size/reserve_pool_size 才会有帮助。对同一共享知识库的并发写入仍会被串行化;请减少对该知识库的写入者数量,以避免 30 秒锁超时失败。
故障排除为什么 lfx Table Merge 会丢弃以 `_right` 结尾的列,或抛出错误 "'Table' object has no attribute 'dtype'"?
这是一个合并(merge)后缀处理的 bug:该操作会把所有以 _right 结尾的输出列都当作 Pandas 生成的临时重复列来处理,即使它原本是源数据中的原始列。
作为临时解决方案,在合并前将以 _right 结尾的用户列重命名(连接键除外),并在合并后恢复它们的名称:
merge_keys = {"id"}
renames = {
c: f"__orig_{c}"
for c in left_dataframe.columns
if c.endswith("_right") and c not in merge_keys
}
left_dataframe = left_dataframe.rename(columns=renames)
# Run the Merge operation, then restore names:
result = result.rename(columns={v: k for k, v in renames.items()})
对于重现用例,在合并前将 value_right 重命名为诸如 value_right_source 之类的名称。这还可以避免当两个表都包含 value 时,与 Pandas 生成的 value_right 列发生冲突——正是该冲突导致了 AttributeError: 'Table' object has no attribute 'dtype' 崩溃。
永久修复方案仅将右侧重叠的非键列重命名为无冲突的临时名称,保留显式的"原始列名到临时列名"映射,并且只合并/删除这些临时列。该修复必须同时应用于当前的 Operations 合并实现,以及已保存流程所使用的旧版 Table Operations 实现。
故障排除为什么已排队的工作流作业在启动恢复未能将其重新入队后,仍然持有活动租约并一直处于卡住状态?
此问题发生在 BackgroundExecutionService.sweep_orphans_on_startup() 中:当 claim_queued_lease() 和请求重建都成功,但 _enqueue() 抛出异常时,该异常会被静默吞掉,且未调用 release_queued_lease(),导致该行保持在 QUEUED 状态,并带有新的 owner 和 heartbeat,尽管该任务从未被提交给 executor。
修复方案会记录 enqueue 失败日志,并使用该 lease 对应的 owner 和 heartbeat token 精确释放它,同时保留 compare-and-swap 所有权检查,使过期的 claim 方无法清除更新的 lease。请升级到包含 PR fix(background): release queued lease when startup enqueue fails 的已修复 1.13.x 版本。
针对默认的进程内 backend 的临时解决方法:等待该 lease 过期,然后重启进程,使一次性的启动清理能够回收该任务。如果手动修改队列存储,仅释放与记录的 owner 和 heartbeat token 匹配的 lease;不要无条件地清空 lease 相关列。