langchain中chain和agent的区别和联系
langchain中,chain和agent是两种常用工具,都可以通过LLM与外部进行交互。chain链相对固定,开发chain类似于编写面向过程的程序,agent则更智能,自动选择执行工具。这里从sql生成和执行的角度分析langchain和agent的作用。
langchain中,chain和agent是两种常用工具,都可以通过LLM与外部进行交互。
chain链相对固定,开发chain类似于编写面向过程的程序,agent则更智能,自动选择执行工具。
这里从sql生成和执行的角度分析langchain和agent的作用。
1 chain
chain是一系列操作组合,一步步地将输入抽取关键信息或向量潜入、转化为sql查询并运行,操作之间维持偏序关系,每一步的输出都作为下一步或后续步骤的输入。
1.1 chain示例
数据库查询中,chain包括多个步骤,比如文本要素提取、sql查询生成、执行sql查询和结果汇总。
通常依赖于一个确定的偏序操作流程,代码示例如下所示。
from langchain_openai import ChatOpenAI
from langchain.chains import create_sql_query_chain
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
query = "What are the names of employee with BirthDate in January?"
ldb = SQLDatabase.from_uri(uri)
llm = ChatOpenAI(model="deepseek-r1")
query = "What are the names of employee with BirthDate in January?"
# 问题转sql
write_query = create_sql_query_chain(llm, ldb)
# sql预处理
def format_query(query):
return query.strip().lstrip("SQLQuery:").rstrip("SQLResult:").strip()
# sql执行
execute_query = QuerySQLDataBaseTool(db=ldb)
# 转sql到运行sql的chain
chain = write_query | format_query | execute_query
res = chain.invoke({"question": query})
print(f"sql results: {res}")
示例参考如下链接。
https://blog.csdn.net/liliang199/article/details/153839198
1.2 chain优点
chain的优点是简单且线性,适用于流程比较固定和简单的任务。
在每个步骤中,可以清晰地看到数据的流动和处理过程。
1.3 chain的缺点
chain的缺点是灵活性相对较低,不适合需要动态决策的场景。
2 agent
agent是一种旨在与现实世界通过交互完成任务的程序。langchain提供的不同类型agent,可以结合客观世界场景的反馈自动执行任务。
2.1 agent示例
agent通常用来执行更复杂的任务,其模型不仅可以生成查询,还会根据上下文进行推理和判断,在运行时决定查询步骤,所以可能需要多次迭代,并动态生成需要查询内容。
在sql查询场景,agent通常结合sql db工具集合,模型根据输入动态选择合适的工具处理任务,比如生成sql查询、调用数据库查询、执行api调用等。
sql agent程序示例如下。
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_openai import ChatOpenAI
# 大模型
llm = ChatOpenAI(model="deepseek-r1")
# db工具集合,假设ldb已创建,具体可参考chain示例
toolkit = SQLDatabaseToolkit(db=ldb, llm=llm)
tools = toolkit.get_tools()
# agent决策逻辑prompt定义
system_prompt = """
You are an agent designed to interact with a SQL database.
Given an input question, create a syntactically correct {dialect} query to run,
then look at the results of the query and return the answer. Unless the user
specifies a specific number of examples they wish to obtain, always limit your
query to at most {top_k} results.
You can order the results by a relevant column to return the most interesting
examples in the database. Never query for all the columns from a specific table,
only ask for the relevant columns given the question.
You MUST double check your query before executing it. If you get an error while
executing a query, rewrite the query and try again.
DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the
database.
To start you should ALWAYS look at the tables in the database to see what you
can query. Do NOT skip this step.
Then you should query the schema of the most relevant tables.
""".format(
dialect=ldb.dialect,
top_k=5,
)
from langgraph.prebuilt import create_react_agent
# 创建agent
agent = create_react_agent(
llm,
tools,
prompt=system_prompt,
name="alice"
)
# 用户问题
question = "Which genre on average has the longest tracks?"
# 运行agent
for step in agent.stream(
{"messages": [{"role": "user", "content": question}]},
stream_mode="values",
):
step["messages"][-1].pretty_print()
print("------------------------")
示例参考如下链接。
https://blog.csdn.net/liliang199/article/details/154007162
2.2 agent优点
agent优点是灵活性,可以适应复杂的任务,根据上下文动态调整查询和行动步骤。
2.3 agent缺点
agent缺点是需要更多的计算资源和时间,对于复杂任务这些计算资源和时间投入是合适的,但对于简单任务,agent可能显得过于冗余和运行成本过高。
3 chain与agent
chain适合任务流程固定、逻辑简单的情况,模型按顺序执行操作,生成sql查询并调用工具执行。
agent适合复杂的任务,模型根据输入选择工具,并根据工具运行反馈,决策继续选择工具运行或结束工具调用,整个过程需要进行多轮的推理和决策。
在这里,chain和agent都依赖prompt实现核心工具。设计逻辑清晰的prompt模版能帮助llm更好的理解问题,决策合适的工具调用、辅助llm生成更合理的sql代码、协助agent处理复杂任务。
reference
---
LangChain Agents vs Chains: Understanding the Key Differences
https://dev-kit.io/blog/ai/lang-chain-agents-vs-chains-understanding-the-key-differences
LangChain中用Chain和Agent来查询数据库,这两种方式有什么异同?
https://juejin.cn/post/7442704577991163913
langchain将用户问题转sql查询探索
https://blog.csdn.net/liliang199/article/details/153839198
langchain agent将用户问题转sql并运行sql查询
更多推荐



所有评论(0)