使用langchain的LCEL构建智能体
tool"""用于搜索最新信息的工具"""# 这里可以实现实际的搜索逻辑return f"关于from langchain . tools import tool @tool def search(query : str) - > str : """用于搜索最新信息的工具""" # 这里可以实现实际的搜索逻辑 return f"关于 {
·
使用LangChain的LCEL构建智能体
LangChain Expression Language (LCEL)是LangChain提供的一种声明式方法来构建链和智能体。下面我将介绍如何使用LCEL构建一个智能体(Agent)。
基本概念
LCEL允许你通过管道操作符(|)将组件连接起来,构建复杂的处理流程。智能体通常由以下几个核心组件组成:
- 工具(Tools): 智能体可以调用的函数
- 智能体(Agent): 决定调用哪个工具的逻辑
- 记忆(Memory): 存储对话历史
- 执行器(Executor): 协调智能体的运行
构建智能体的步骤
1. 定义工具
首先,我们需要定义智能体可以使用的工具:
from langchain.tools import tool
@tool
def search(query: str) -> str:
"""用于搜索最新信息的工具"""
# 这里可以实现实际的搜索逻辑
return f"关于 {query} 的搜索结果"
@tool
def calculator(expression: str) -> str:
"""用于计算数学表达式的工具"""
try:
result = eval(expression)
return f"计算结果: {result}"
except:
return "无法计算该表达式"
tools = [search, calculator]
2. 创建提示模板
定义智能体的提示模板,指导其行为:
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手。尽可能准确地回答问题。"),
MessagesPlaceholder("chat_history", optional=True),
("human", "{input}"),
MessagesPlaceholder("agent_scratchpad"),
])
3. 选择LLM并绑定工具
选择一个语言模型并将工具绑定到它:
from langchain.chat_models import ChatOpenAI
# 使用gpt-3.5-turbo模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 将工具绑定到LLM
llm_with_tools = llm.bind_tools(tools)
4. 创建智能体
使用LCEL组合这些组件:
from langchain.agents import create_openai_tools_agent
agent = create_openai_tools_agent(llm_with_tools, tools, prompt)
5. 创建执行器
创建智能体执行器,可以添加记忆功能:
from langchain.agents import AgentExecutor
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True # 显示详细执行过程
)
6. 使用智能体
现在可以运行智能体了:
response = agent_executor.invoke({"input": "3的平方加上4的平方等于多少?"})
print(response["output"])
response = agent_executor.invoke({"input": "搜索最新的AI新闻"})
print(response["output"])
完整示例代码
from langchain.tools import tool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chat_models import ChatOpenAI
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
# 1. 定义工具
@tool
def search(query: str) -> str:
"""用于搜索最新信息的工具"""
return f"关于 {query} 的搜索结果"
@tool
def calculator(expression: str) -> str:
"""用于计算数学表达式的工具"""
try:
result = eval(expression)
return f"计算结果: {result}"
except:
return "无法计算该表达式"
tools = [search, calculator]
# 2. 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手。尽可能准确地回答问题。"),
MessagesPlaceholder("chat_history", optional=True),
("human", "{input}"),
MessagesPlaceholder("agent_scratchpad"),
])
# 3. 选择LLM并绑定工具
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
llm_with_tools = llm.bind_tools(tools)
# 4. 创建智能体
agent = create_openai_tools_agent(llm_with_tools, tools, prompt)
# 5. 创建执行器
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True
)
# 6. 使用智能体
response = agent_executor.invoke({"input": "3的平方加上4的平方等于多少?"})
print(response["output"])
response = agent_executor.invoke({"input": "搜索最新的AI新闻"})
print(response["output"])
高级用法
自定义输出解析
你可以自定义智能体的输出处理:
from langchain.schema.runnable import RunnablePassthrough
def parse_output(output):
# 自定义输出处理逻辑
return f"处理后的结果: {output}"
agent_with_parsing = agent_executor | parse_output
添加中间步骤
在LCEL中,你可以轻松添加中间处理步骤:
from langchain.schema.runnable import RunnableLambda
def preprocess_input(input_dict):
input_dict["input"] = input_dict["input"].upper()
return input_dict
full_chain = (
RunnableLambda(preprocess_input)
| agent_executor
)
流式输出
LCEL支持流式输出:
for chunk in agent_executor.stream({"input": "3的平方加上4的平方等于多少?"}):
print(chunk)
通过LCEL构建智能体,你可以获得高度模块化和可组合的架构,便于调试和维护。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)