PROD欧洲主权BaaS平台打开仪表板 →

原生人工智能 · 9 最小读取值

Postgres 代理的 LangChain 与 LlamaIndex

Affane Daylami · Fondateur · 2026年3月24日

返回博客

LangChain 和 LlamaIndex 并没有回答同样的初始问题。 LangChain 是作为一个通用工具包诞生的,用于链接对 LLM、工具和内存的调用。 LlamaIndex 是作为一个数据框架诞生的,旨在将法学硕士连接到结构化或非结构化来源。此后两者已经融合:代理、RAG 和 SQL 连接现在双方都存在。选择取决于最适合您的代理的架构,而不是取决于某一方面缺乏的功能。

该英文文本是根据法文原文自动生成的,尚未经过审查。
该页面已自动翻译。英文版具有权威性。

这篇文章是 Aurabase 的 原生 AI 全景的一部分。这两个框架都没有提供与数据库的专有连接器:在这两种情况下,与 Postgres 的连接都是通过通用 SQL 驱动程序(Python 端的 SQLAlchemy)和标准连接字符串进行的。对于 Aurabase 和任何托管 Postgres 都是如此。

要点
  • LangChain:通用LLM编排框架(链、工具、内存)。如今,代理是通过 LangGraph构建的,SQL 被视为其中之一的工具包。
  • LlamaIndex:为 RAG 和查询结构化源而生的数据框架。本机 SQL 引擎 (NLSQLTableQueryEngine),通过其 Workflows引擎进行代理。
  • CrewAI 和 AutoGen 不是 LangChain/LlamaIndex 的替代品:它们是多代理编排层,放置在两者之一(或内部 Python 函数)之上。
  • LangChain 和 LlamaIndex 都不提供专有的 Postgres 连接器:两者都使用 SQLAlchemy,与任何托管 Postgres(包括 Aurabase)兼容。
  • 迄今为止,这些框架还没有 Aurabase 打包集成。连接是通过每个项目公开的标准 Postgres 连接字符串进行的。
#
概述

为不同需求而生的两个框架

LangChain和LlamaIndex是在2022年底ChatGPT发布后同一时期出现的,两者的出发点明显不同。 LangChain 将 LLM 应用程序建模为一系列可组合步骤:提示、模型调用、工具、内存,所有这些都通过 LCEL 或 LangGraph图组装。

LlamaIndex 首先对数据进行建模:文档、节点、索引、查询引擎。 VectorStoreIndex 或 SQLDatabase 是一等公民,而不是添加到通用代理的工具。两者都是开源的(MIT 许可证),可在 Python 和 TypeScript 中使用,并且目前涵盖了大部分重叠的范围:代理、RAG、工具调用、SQL 连接。

这种融合使得架构上的比较比功能列表上的比较更有用:两者几乎可以做同样的事情。改变的是如何改变。

#
数据库连接

每个人如何在没有打包集成的情况下插入 Postgres

在LangChain端,langchain_community.utilities.SQLDatabase模块封装了一个SQLAlchemy引擎。然后 create_sql_agent 代理将其公开为一组工具:列出表、描述模式、执行查询、在执行前检查查询。

langchain_sql_agent.pypython
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import create_sql_agent
from langchain_openai import ChatOpenAI

# 通道从 Studio → 设置 → 连接获取。
# search_path 到项目模式的路径(请参阅 SQLAlchemy/psycopg 文档
# “选项”参数的确切编码取决于所使用的驱动程序)。
db = SQLDatabase.from_uri(
    "postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"
)

llm = ChatOpenAI(model="gpt-4o-mini")
agent = create_sql_agent(llm=llm, db=db, agent_type="tool-calling")

agent.invoke({"input": "Combien de commandes la semaine dernière ?"})

在 LlamaIndex 方面,等效的抽象是 llama_index.core.SQLDatabase,也是基于 SQLAlchemy 引擎构建的。 NLSQLTableQueryEngine 查询引擎将自然语言问题转换为 SQL 查询,执行它,然后将结果重新表述为响应。

llamaindex_sql_query_engine.pypython
from sqlalchemy import create_engine
from llama_index.core import SQLDatabase
from llama_index.core.query_engine import NLSQLTableQueryEngine
from llama_index.llms.openai import OpenAI

engine = create_engine(
    "postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"
)
sql_database = SQLDatabase(engine, include_tables=["orders", "customers"])

query_engine = NLSQLTableQueryEngine(
    sql_database=sql_database, llm=OpenAI(model="gpt-4o-mini"),
)
response = query_engine.query("Combien de commandes la semaine dernière ?")

两种提取物都依赖于 Aurabase。 SQLAlchemy 驱动程序和标准 Postgres 连接字符串就足够了,就像 Supabase、RDS 或自托管实例一样。

#
代理商

LangGraph 与工作流:编排代理的两种方法

LangChain首先提出了经典的代理循环(AgentExecutor,ReAct模式)。此后,该项目将其代理集中到 LangGraph:代理被表示为节点和边的显式图,在两个阶段之间设有检查点和可能的人工干预。

LlamaIndex 以其 Workflows进行响应:一个事件驱动的编排,其中每个步骤都会发出并消耗类型化事件。 SQL 或向量查询引擎作为一个步骤直接插入,无需额外的适配层,因为这些引擎已经是框架的本机基元。

对于查询 Postgres 的代理来说,实际的区别是:LangGraph 提供对 SQL 调用的分支和重试的细粒度控制。当问题首先涉及框架已索引的数据时,LlamaIndex 需要较少的链接代码。

更深入:Postgres 代理的函数调用教程

#
检索和 RAG

LlamaIndex 向前迈出了历史性的一步

LlamaIndex 从一开始就被设计为将法学硕士连接到数据源,并根据内容类型提供连接器目录 (LlamaHub) 和专门索引。 RAG 仍然是该框架最直接的用例,而不是事后添加的功能。

LangChain 通过其 retrievers 和 fetch 链满足了相同的需求,并同样成熟地集成到 LangGraph 生态系统中。区别不在于容量,而在于业务逻辑所在:在 LlamaIndex 端集成到索引中,在 LangChain 端显式组装在链中。

两者都知道如何使用 pgvector 作为向量基:LlamaIndex 端的 llama-index-vector-stores-postgres,LangChain 端的 langchain-postgres 包的 PGVector 类。在 Aurabase 项目中,pgvector 0.8.6 已存在于 Postgres 租户映像中:两个包都使用相同的连接字符串连接到它,无需单独的激活步骤。

深入挖掘:构建 Postgres/pgvector RAG 管道

#
多代理

CrewAI 和 AutoGen:当单个代理不再足够时

CrewAI 为每个角色协调多个代理:每个代理接收一个目标、上下文 (backstory) 和工具,并分组到 Crew 中,并按顺序或根据层次结构执行 Task 。它是一个成熟的编排框架,而不是LangChain的扩展。

AutoGen 是 Microsoft 研究项目,采用了不同的方法:代理相互通信(AssistantAgent、 UserProxyAgent、 GroupChat),并且能够在隔离环境中执行代码。协调看起来像一个对话,而不是像 LangGraph 这样的显式状态图。

两者都不会取代数据连接层。需要读取 Postgres 的 CrewAI 或 AutoGen 代理实际上会调用使用 LangChain 或 LlamaIndex 构建的 SQL 工具,或者围绕 psycopg2的简单 Python 函数。 CrewAI 和 AutoGen 回答“谁做什么、按什么顺序”,而不是“如何读取数据库”。

#
限制

Postgres 数据库本身不具备什么功能

create_sql_agent 和 NLSQLTableQueryEngine 针对提供的连接执行模型生成的查询。既不限制默认返回的行数,也不阻止写入请求:实际的防护是连接字符串中使用的 Postgres 角色,而不是框架选项。

这是与 Aurabase 原生 NL2SQL 的结构差异,后者在服务器端将问题转换为 SQL,验证生成的查询(SQL 解析,拒绝欺骗服务器字段)并在执行前限制 LIMIT。这不是同一块砖:NL2SQL 端点在一轮中响应,平台安装了护栏; LangChain 或 LlamaIndex 代理分几个阶段进行推理,并提供自行组装的保障措施。

在实践中,这两种方法相互补充而不是相互排斥:用于向最终用户公开的简单问题的有界 NL2SQL 端点,以及结合了 SQL 之外的多种工具的多步骤推理代理。

另请参阅:Postgres 与 Aurabase 的 NL2SQL 教程

#
比较

LangChain、LlamaIndex、CrewAI、AutoGen 尽在一张表中

主要目标多面手LLM编排数据框架/RAG按角色进行多代理编排对话式多代理编排
原始代理LangGraph(状态图)工作流程(事件步骤)人员/任务/流程助理座席/群聊
本机 SQL 连接SQL数据库 + create_sql_agentSQL数据库 + NLSQLTableQueryEngine无(外部工具)无(外部工具)
pg向量支持langchain-postgres (PGVector)骆驼索引矢量存储 postgres没有本地人没有本地人
原生多代理否(多节点 LangGraph)否(单代理流程)是的是的
许可证麻省理工学院麻省理工学院麻省理工学院麻省理工学院(微软研究项目)
浪链拉曼指数克鲁瓦伊奥托金
#
实用

将 LangChain 或 LlamaIndex 插入标准 Postgres 后端

无论选择什么框架,三个步骤就足够了,并且它们不依赖于任何特定于平台的连接器。

terminalbash
# 1. 检索项目的Postgres连接字符串
#    (Studio → 设置 → 连接,或任何托管的 Postgres)
export AURA_DB_URL="postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"

# 2. 安装 SQL 驱动程序和所选框架
pip install langchain langchain-community langchain-openai psycopg2-binary
# 或者,在 LlamaIndex 一侧:
pip install llama-index llama-index-llms-openai psycopg2-binary

# 3. 创建一个专用的 Postgres 角色,如果代理只应轮询,则该角色为只读
CREATE ROLE agent_readonly LOGIN PASSWORD '***';
GRANT SELECT ON ALL TABLES IN SCHEMA project_<id> TO agent_readonly;

第三步比框架的选择更重要。仅限于真正必要的权限的 Postgres 角色仍然是针对生成的超出其范围的请求的唯一可靠的保护措施,无论代理执行该请求如何。请参阅 AI 文档,了解可在代理端使用的 Aurabase 原生 LLM 提供程序(OpenAI、Anthropic、Gemini)的配置。

#
决定

根据您的项目选择哪一种

对于连接到 Postgres 的代理来说,这两个框架都不是绝对优越的。项目的起始背景比功能列表更具决定性。

  • LangChain:如果代理必须结合多个异构工具(SQL、外部 API、网络搜索)并通过 LangGraph 对流程进行精细控制,并且团队是否重视市场上最广泛的集成生态系统。
  • LlamaIndex:如果项目的核心是 RAG 或已索引数据的查询,强烈需要源连接器和直接适合用例的索引/查询模型。
  • CrewAI 或 AutoGen 另外:一旦单个代理不再足够,工作必须在两个数据框架中的一个或另一个之上的几个专门角色之间分配。

两者也可以在同一个项目中共存:LlamaIndex 查询引擎作为 LangGraph 代理中的工具公开是一种常见模式。维护两个框架确实会带来复杂性成本,需要在默认采用之前权衡其收益。

#
常见问题解答

常见问题解答

LangChain和LlamaIndex可以修改Postgres数据(INSERT、UPDATE、DELETE)吗?+
是的,默认情况下,如果连接字符串中使用的数据库角色具有写入权限。 LangChain 端的 create_sql_agent 和 LlamaIndex 端的 NLSQLTableQueryEngine 本身都不限制只读查询。真正的保障措施出现在 Postgres 级别:一个专用的应用程序角色,其 GRANT 仅限于 SELECT。另请参阅有关保护 NL2SQL 免受 SQL 注入攻击的指南。
您应该在 LangChain 和 LlamaIndex 之间进行选择,还是可以将它们结合起来?+
两者可以共存于同一个项目中:LlamaIndex 查询引擎可以作为 LangGraph 代理中的工具公开,反之亦然。这是一个真正的技术选项,而不是默认建议:维护两个框架会增加额外的依赖项和配置表面来证明其合理性。
CrewAI 或 AutoGen 会取代 LangChain 和 LlamaIndex 吗?+
不会。CrewAI 和 AutoGen 在它们之间编排多个代理(角色分配、对话、任务委托),但不提供数据连接层。在查询 Postgres 的项目中,他们依赖于使用 LangChain、LlamaIndex 或自制 Python 函数构建的 SQL 工具。
LangChain 或 LlamaIndex 是否有官方 Aurabase 集成?+
不,到目前为止。 Aurabase 端不存在这些框架的封装连接器。连接是通过每个项目公开的标准 Postgres 连接字符串以及通用 SQL 驱动程序 (SQLAlchemy) 建立的,与任何托管 Postgres 完全相同。

准备好部署了吗?

五分钟内完成您的后端。

无需信用卡 · 500 MB 免费 · 50,000 MAU