以LangChain与GPT - 4o - mini构建大模型智能体开发实战
在最近一段时间里,大模型所具备的能力一直在持续取得突破,这使得构建智能代理(Agent)系统成为了开发者们积极追逐的热点领域。
本文将会以LangChain框架作为核心,结合GPT - 4o - mini模型,通过接入工具以及运用消息修剪策略,来实现一个拥有记忆功能、能够调用搜索以及执行函数能力的智能体。
环境筹备与模型初始化
使用LangChain的时候,首先需要对语言模型进行初始化操作,这里所采用的是由OpenAI提供的GPT - 4o - mini模型。
# llm_env.py
from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o-mini", model_provider="openai")
我们会把它封装在llm_env.py文件中,以便主程序进行导入。
主程序结构剖析
主逻辑文件是main_agent_trim.py,它具备以下功能:
- 工具的整合
- PostgreSQL持久化配置
- 消息修剪策略
- Agent交互循环
工具函数与搜索工具接入
我们首先定义了一个简单的数学函数add,同时接入了TavilySearchResults搜索工具,以此来增强智能体获取外部知识的能力。
def add(a: int, b: int) -> int:
return a + b
search = TavilySearchResults(max_results=5)
tools = [add, search]
配置LangGraph持久化存储
我们运用PostgresSaver来记录agent的状态以及历史会话,从而支持多轮对话的记忆功能。
DB_URI = "postgresql://postgres:123456@localhost:5432/langchaindemo?sslmode=disable"
with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
checkpointer.setup()
用户输入thread_id时,我们会组合当天的日期来生成唯一的标识符,以确保每个会话线程都能够独立追溯。
消息修剪策略设计
为了把控模型输入token的上限,我们引入了trim_messages方法,在每一轮对话之前进行修剪操作:
def pre_model_hook(state):
trimmer = trim_messages(
max_tokens=65,
strategy="last",
token_counter=llm_env.llm,
include_system=True,
allow_partial=False,
start_on="human",
)
trimmed_messages = trimmer.invoke(state["messages"])
return {"llm_input_messages": trimmed_messages}
该策略仅仅保留最近的用户消息,避免长对话历史超出token限制,进而影响模型的响应。
构建智能体执行器
借助create_react_agent方法来创建智能体,传入模型、工具、hook以及checkpoint。
agent_excuter = create_react_agent(
llm_env.llm,
tools,
pre_model_hook=pre_model_hook,
checkpointer=checkpointer,
)
与智能体交互
程序进入循环模式,接收用户输入,执行智能体的推理过程,并输出响应内容以及工具调用情况。
while True:
query = input("你: ")
if query.strip().lower() == "exit":
break
input_messages = [HumanMessage(query)]
response = agent_excuter.invoke({"messages": input_messages}, config=config)
for message in response["messages"]:
if hasattr(message, "content") and message.content:
print(f"{message.type}:{message.content}")
if hasattr(message, "tool_calls") and message.tool_calls:
print(f"{message.type}:{message.tool_calls}")
示例
总结
本文展示了如何基于LangChain框架构建一个集合了搜索、函数执行、消息修剪以及状态持久化为一体的智能体系统。通过合理设计hook以及工具链,我们能够持续拓展其功能范畴。
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12611.html