AI大模型应用开发入门-LangChain开发Agent
<h4><span style="font-size: 1em">基于 LangChain 和 GPT-4o-mini 的大模型智能体开发实战</span></h4><p>近年来,大模型能力的持续突破,使得构建智能代理(Agent)系统成为开发者追逐的热点。</p>
<p>本文将以 <code>LangChain</code> 框架为核心,结合 <code>GPT-4o-mini</code> 模型,通过接入工具与消息修剪策略,实现一个具备记忆、调用搜索、执行函数能力的智能体。</p>
<h4>环境准备与模型初始化</h4>
<p>使用 <code>LangChain</code> 需要首先初始化语言模型,这里使用的是 <code>GPT-4o-mini</code>,由 <code>OpenAI</code> 提供。</p>
<pre><code class="language-python"># llm_env.py
from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o-mini", model_provider="openai")
</code></pre>
<p>我们将其封装在 <code>llm_env.py</code> 中供主程序导入。</p>
<h4>主程序结构解析</h4>
<p>主逻辑文件为 <code>main_agent_trim.py</code>,功能包括:</p>
<ul>
<li>
<p>工具集成</p>
</li>
<li>
<p>PostgreSQL 持久化配置</p>
</li>
<li>
<p>消息修剪策略</p>
</li>
<li>
<p>Agent 交互循环</p>
</li>
</ul>
<h4>工具函数与搜索工具接入</h4>
<p>我们首先定义了一个简单的数学函数 <code>add</code>,以及接入了 <code>TavilySearchResults</code> 搜索工具,用于增强智能体外部知识获取能力。</p>
<pre><code class="language-python">def add(a: int, b: int) -> int:
return a + b
search = TavilySearchResults(max_results=5)
tools = </code></pre>
<h4>配置 LangGraph 持久化存储</h4>
<p>我们使用 <code>PostgresSaver</code> 来记录 agent 的状态与历史会话,以支持多轮对话记忆。</p>
<pre><code class="language-python">DB_URI = "postgresql://postgres:123456@localhost:5432/langchaindemo?sslmode=disable"
with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
checkpointer.setup()
</code></pre>
<p>用户输入 <code>thread_id</code>,我们组合当天日期生成唯一标识符,确保每个会话线程独立可追溯。</p>
<h4>消息修剪策略设计</h4>
<p>为了控制模型输入 token 上限,我们引入 <code>trim_messages</code> 方法,在每轮对话前进行修剪:</p>
<pre><code class="language-python">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}
</code></pre>
<p>该策略仅保留最近的用户消息,避免长对话历史超出 token 限制,影响模型响应。</p>
<h4>构建智能体执行器</h4>
<p>借助 <code>create_react_agent</code> 方法创建智能体,传入模型、工具、hook 与 checkpoint。</p>
<pre><code class="language-python">agent_excuter = create_react_agent(
llm_env.llm,
tools,
pre_model_hook=pre_model_hook,
checkpointer=checkpointer,
)</code></pre>
<h4>与智能体交互</h4>
<p>程序进入循环模式,接收用户输入,执行智能体推理,并输出响应内容及工具调用情况。</p>
<pre><code class="language-python">while True:
query = input("你: ")
if query.strip().lower() == "exit":
break
input_messages =
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}")</code></pre>
<h4>示例</h4>
<p><img src="https://img2024.cnblogs.com/blog/1033233/202506/1033233-20250613120725176-1134633239.png" alt="" width="698" height="213" loading="lazy"></p>
<h4>总结</h4>
<p>本文展示了如何基于 LangChain 框架构建一个集搜索、函数执行、消息修剪与状态持久化为一体的智能体系统。通过合理设计 hook 与工具链,我们可以持续扩展其功能边界。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/chenyishi/p/18926783
頁:
[1]