AI助手升级实践:基于LangChain构建现代化工具与智能体

前言

本篇将进一步“**剖解内核**”,逐模块阐述LangChain的**核心组件**,带你理解它是如何构建起整个**智能体**工作流运行机制。

人逢喜事精神爽。

不行经过了简单大模型的初尝试,感觉学习智能体还是很简单的,信心倍增开启智能体开发之路。正想着,老师的头像亮了,赶紧打招呼。

不行:

老师,我最近在写智能体,用 LangChain 搭建过程比想象中简单,我照文档写了几个小例子,跟大模型对话挺顺畅的。

林觉:

哦?前几天还在发牢骚呢,这么快态度就好了?小心后面一旦遇到难点,你又暴躁了。

不行尴尬地笑了笑,继续敲字:

不行:

老师还别说,刚接触不久,您就发现了我的一个缺点。我也知道不该轻易烦躁,可有时候真的控制不住。顺利时心情舒畅,一遇到困难就想爆炸。

林觉:

人生不如意之事,十之八九。如果每次都用烦躁来应对,你这一生不就得一直痛苦?你要学会的,是不管成功还是挫折,都能保持喜悦、平静。

不行看着这句话,陷入短暂的迷茫。

不行:

听着很有道理,可真做起来很难啊老师。怎么才能在困难里也保持开心?

林觉:
修心。

成功的第一步不是技能,而是心。心没修到位,你能做的小目标永远只是小目标,达不到真正的高度。

所谓修心——就是返璞归真,让自己简单起来;遇事不慌;情绪由你掌控,而不是被环境牵着走。

读到这里,不行愣住了。他把老师的话来来回回读了好几遍。忽然回想起这些年的经历:急躁、没耐心、遇事慌乱,正因为心不稳,很多事情做到一半就半途而废。

不行:

老师,我好像明白了。我的成长不仅仅在写代码、学框架,更在于我这个人的修炼。谢谢您,我会继续努力的。

结束对话后,不行陷入了沉思。老师到底在教我什么?

技能上给了路线图,但总感觉话里话外,好像更多是在教我做人、做事、做心。

修心,成功前的必修课——修心比修技能重要,掌控情绪比掌握框架更难,而也更关键。

一个能处理复杂智能体系统的人,首先得成为一个能处理好“自己”的人。

旁白

智能体初体验

上一期,我们通过LangChain搭建了一个简单的大模型对话功能,里面包含:

  1. deepseek模型接入LangChain参数初始化
  2. 模型设定角色
  3. 模型添加记忆能力

本期在这个基础上,添加:工具、Agent

01

环境安装

langchain==1.0.7
langchain-community==0.3.29
langchain-core==1.0.5
langchain-openai==1.0.3
langchain-text-splitters==0.3.11
langdetect==1.0.9
langgraph==1.0.3
langgraph-checkpoint==2.1.1
langgraph-prebuilt==1.0.4
langgraph-sdk==0.2.8
langsmith==0.4.29

02

添加工具

我们添加了3个工具,获取天气的、获取当前时间的、计算器。

@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气信息
Args:
city: 城市名称
Returns:
天气信息字符串
"""
actureCity = query({"input":{"input_text_0":city}})['data']['result']['output_text_0']
area_code = get_area_code(actureCity)
result = get_weather_info(area_code,actureCity)
return result['showapi_res_body']
@tool
def calculate(expression: str) -> str:
"""计算数学表达式
Args:
expression: 数学表达式
Returns:
计算结果
"""
try:
result = eval(expression)
return f"{expression} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@tool
def get_current_time() -> str:
"""获取当前时间
Returns:
当前时间字符串
"""
return f"当前时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"

03

添加Agent

在工具创建好以后,我们添加Agent,让大模型判断是调用工具还是直接返回答案。

# 初始化DeepSeek模型
self.llm = ChatOpenAI(
model="deepseek-chat",
api_key=self.api_key,
base_url=self.base_url,
temperature=0.7
)
# 创建React Agent
self.agent = create_react_agent(
model=self.llm,
tools=available_tools
)
# 构造客服端请求大模型方法
def chat(self, message: str) -> dict:
"""处理用户消息并返回响应"""
try:
# 构建消息列表
messages = self.chat_history + [HumanMessage(content=message)]
# 执行agent
result = self.agent.invoke({"messages": messages})
# 获取最后的AI消息
ai_message = result["messages"][-1]
response_content = ai_message.content
# 更新聊天历史
self.chat_history.extend([
HumanMessage(content=message),
AIMessage(content=response_content)
])
return {
"success": True,
"response": response_content
}
except Exception as e:
return {
"success": False,
"error": str(e),
"response": "抱歉,处理您的请求时出现了错误。"
}

04

客服端调用

# 测试对话
test_messages = [
"你好,请介绍一下你自己",
"北京今天天气怎么样?",
"帮我计算 25 * 4 + 10",
"现在几点了?"
]
for message in test_messages:
print(f"用户: {message}")
result = service.chat(message)
if result["success"]:
print(f"助手: {result['response']}")
else:
print(f"错误: {result['error']}")
print("-" * 50)

运行结果:

从结果可以看出,工具的调用并不依赖我们手写if/else逻辑,而是由大模型在推理过程中自动决定。

  当模型理解到某一步需要外部能力时,它会自主选择并触发**对应的工具**。这意味着我们不再需要为复杂流程设计条件分支,而是把“决策权”交给模型,让其在语义与上下文中完成判断,从而实现更灵活、更智能的任务执行方式。

总结

本篇在基础对话之上,引入了工具与 Agent,让大模型具备了“自主决策”能力。也能看出智能体的核心不是堆代码,而是让模型与工具形成协作系统。在未来的业务构建中,最重要的是如何掌握大模型如何切换调用工具,以及工具承载的业务能力有哪些,怎么抽象出来这些工具能力,才能真正从“写功能”迈向“构建智能”的秘籍。

最近这几年,经济形式下行,IT行业面临经济周期波动与AI产业结构调整的双重压力,很多人都迫于无奈,要么被裁,要么被降薪苦不堪言。但我想说的是一个行业下行那必然会有上行行业,目前AI大模型的趋势就很不错,大家应该也经常听说大模型,也知道这是趋势,但苦于没有入门的契机,现在他来了,我在本平台找到了一个非常适合新手学习大模型的资源。大家想学习和了解大模型的,可以**点击这里前往查看**

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐