当前位置: 首页 > news >正文

Langchain-快速入门篇

1.认识LangChain

LangChain是智能体开发平台,包含一套各种帮助开发、测试、评估智能体的框架。核心包括:

  • LangChain:用于快速构建智能体,可兼容任何模型提供商。
  • LangGraph:从底层一步步控制智能体的构建,包括记忆(Memory)、人机协同(HITL)等
  • Deep Agents:用于构建复杂的、处理多步骤的任务的智能体
  • LangSmith:用于测试、观察、评估、部署智能体

2.什么是Agent

在人工智能领域,Agent(通常翻译为智能体代理是指一种能够感知环境、进行推理、自主决策并采取行动以实现特定目标的智能系统。如果说大模型(LLM)是“大脑”,那么 Agent 就是“拥有手脚和思维逻辑的独立个体”。它不再只是被动地回答问题,而是能主动拆解任务并调用各种工具来完成工作。

特性

传统聊天机器人/LLM

AI Agent

交互模式

被动响应,问一句答一句

主动规划,以目标为导向

执行力

停留在文本生成层面

能操作软件、发送邮件、分析数据

自主性

需要人类给出详细步骤

只需给定最终目标,自主寻找路径

总结如下:

  • LLM = 聪明的大脑
  • Agent = 聪明的大脑 + 手脚

当然,Agent的模式也是在不断演进的:

  • 阶段一:ReAct + Tool Calling
  • 阶段二:Reflection + Long Memory
  • 阶段三:Multi Agent System,MAS

快速入门

导入对应的依赖,直接通过pycharm进行安装即可

import os from dotenv import load_dotenv from langchain.agents import create_agent from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain_core.prompts import PromptTemplate # 这个也换了!

Langchain提供了create_agent方法用来快速创建Agent,我们只需要提供好Agent所需的模型(Models)工具(Tools)即可。

定义工具

# 用 @tool 装饰器快速定义工具,Agent 会自动识别使用 @tool def calculator(expression: str) -> str: """ 计算器工具,用于计算数学表达式 :param expression: 数学表达式字符串,例如 "2+3*5" :return: 计算结果 """ try: # 安全计算简单数学公式 result = eval(expression, {"__builtins__": None}, {}) return f"计算结果:{result}" except Exception as e: return f"计算失败:{str(e)}" # 把工具打包成列表 tools = [calculator]

创建大模型

llm = ChatOpenAI( model="qwen-plus", # 可替换为国产模型:deepseek-chat/qwen-turbo 等 api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"), # 国内模型需改此地址 temperature=0 # 0 让回答更稳定、更适合做工具调用 )

创建agent并调用

# 创建 ReAct Agent agent = create_agent(llm, tools) # Agent 执行器(负责运行 Agent、管理工具调用、处理循环) # agent_executor = AgentExecutor( # agent=agent, # tools=tools, # verbose=True, # 打印思考过程(非常重要!能看到 Agent 怎么思考) # handle_parsing_errors=True # 自动处理解析错误 # ) # ---------------------- 4. 测试你的 Agent ---------------------- if __name__ == "__main__": # 测试问题:需要计算的问题,Agent 会自动调用计算器 question = "3的5次方加上100等于多少?" # 运行 Agent response = agent.invoke({ "messages": [ {"role": "user", "content": question} ] }) # 输出最终答案 print("\n===== Agent 最终回答 =====") print(response["messages"])

Agent的工作流程

传统的LLM应用都是一问一答的形式,模型只能根据自己的训练数据来回答,流程非常简单:

而智能体则可以调用工具与外界交互,获取实时信息,工作流程则要复杂很多,是这样的:

  • 用户提问(Input):杭州今天天气如何?
  • 模型分析(Reasoning):用户询问杭州天气,我不知道,需要调用查询天气的工具get_weather
  • 调用工具(Action):调用工具,get_weather,传入城市"杭州"
  • 分析结果(Observation):工具返回结果,模型分析结果,判断是否足以回答用户问题
  • 是:整理生成响应结果
  • 否:重复前面步骤
  • 生成结果(Output):根据工具的结果生成响应给用户

工具

在大模型提供的API接口中,有一个tools参数,描述了工具的详细信息,LangChain会帮助我们把tool的信息封装为此tool参数,与message一起发送给大模型,大模型就了解tool的详细信息,根据用户需求判断是否需要调用tool,需要调用哪个tool。

模型不能直接调用tool,只能返回字符串。但是它可以把要调用的tool信息、参数信息都以Json格式返回,LangChain就会帮我们解析响应结果中的Function信息,也就是tool信息,就知道了要调用哪个函数,以及参数是什么了。LangChain就会执行该函数,再把得到的结果再次发送给大模型。

Agent中最重要的两个部分,就是:

  • Model:负责推理分析、思考,相当于Agent的大脑
  • Tools:负责执行任务,相当于Agent与外界交互的手脚

模型

完整叫法是大语言模型(LLM)。它能够理解人类语言,使用人类语言生成内容、翻译、提取摘要、回答问题等。不仅如此,现在大多数的模型还有一些特别能力:

  • Tool calling - 调用外部工具(例如查询数据库或调用 API),并在其回复中使用这些工具返回的结果。
  • Structured output - 将模型的响应结果约束为遵循已定义的格式,例如:json
  • Multimodality - 可以处理和返回文本以外的数据,如图像、音频和视频。
  • Reasoning - 模型可以执行多步推理来得出结论。

使用Model类初始化模型

llm = ChatOpenAI( model="qwen-plus", # 可替换为国产模型:deepseek-chat/qwen-turbo 等 api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"), # 国内模型需改此地址 temperature=0 # 0 让回答更稳定、更适合做工具调用 )

消息

在调用模型时,发送给LLM的消息、LLM返回的消息都包含以下几部分内容:

  • role:消息所属角色,可以是system、user、assistant
  • content:消息的内容
  • metadata(可选):消息的元数据,例如:消息的ID、消耗的token等

消息类型

在LangChain中,我们并不需要自己创建BaseMessage对象,LangChain已经把常见消息根据角色(Role)创建了对应的BaseMessage的子类:

  • SystemMessage:role是system,代表系统消息,用于设定模型角色和交互背景
  • HumanMessage:role是user,代表用户输入的消息
  • AIMessage:role是assistant,代表LLM生成的响应,包含:文本、工具调用、元数据
  • ToolMessage:role是tool,代表工具调用时产生的结果

采用对象封装的方式来传递消息,框架自动解析是用户消息还是其他

from langchain.messages import HumanMessage, AIMessage from langchain.agents import create_agent # 创建Agent agent = create_agent(model="deepseek-chat") # 调用Agent,发送消息 response = agent.invoke({ "messages": [ HumanMessage(content="你好,我是虎哥"), AIMessage(content="你好,虎哥,很高兴认识你。"), HumanMessage(content="我的名字是什么?") ] }) print(response)
http://www.jsqmd.com/news/973196/

相关文章:

  • SAP MM配置避坑指南:BP转供应商时,为什么必须勾选‘相同号码’?一个真实案例引发的思考
  • 人力资源AI应用落地
  • CH32V307开发板串口服务器实战:基于RT-Thread和LWIP的UART转TCP通信
  • TOML、JSON、YAML、INI 配置文件格式总结
  • 解决高并发多模态任务下的“状态漂移”:基于分布式任务管理的状态收敛实录
  • 遗传算法Python实战:N皇后问题从原理到稳定收敛
  • 多维聚合中的数据操纵:从GROUP BY到OLAP立方体的四次空间变换
  • AI 回答又臭又长?原因竟然在于 Markdown
  • 代码比对神器Beyond Compare的隐藏技巧:用一行命令过滤掉所有垃圾文件
  • AI 数据分析:智能可视化工具如何重塑数据分析工作流
  • 信用分配的范式跃迁:当稀疏奖励遭遇百万 Token 长廊
  • 别再到处找图标了!手把手教你用Bootstrap Icons 1.7.2搞定前端项目
  • MIMO-OFDM链路级仿真MATLAB工具包:含可调信道建模、空时编码与SNR评估功能
  • Vertex AI自定义Docker镜像构建实战指南
  • BackTrader本地实操包:A股日线数据+7步策略回测脚本,开箱即跑
  • Cursor 第三方 API 配置与使用教程
  • 别再只会用Excel了!手把手教你用Weka 3.8导入CSV、TXT和UCI数据集(附格式转换技巧)
  • 水质监测新趋势:在线光谱仪实时守护碧水蓝天
  • dotPeek不只是反编译:手把手教你搭建私有NuGet包的源码调试环境
  • 别再只盯着PCB了:用Python+示波器自动化你的EFT/ESD抗扰度测试流程
  • Uber的OED实验智能系统:用贝叶斯优化替代p值决策
  • [特殊字符] Agentic RL 的隐形天花板:一场关于「功劳算谁的」的豪赌
  • 告别CAN的奢侈:一文搞懂LIN总线如何用UART接口搞定汽车低速通信
  • 从本地 RAG 到 Modular RAG 设计(一)
  • 网页正文抽取接口接入实践:基于文本密度的新闻博客内容解析方案
  • 保姆级教程:在Ubuntu 20.04上搞定STM32MP157双核开发环境(A7+M4,含SDK和CubeIDE避坑指南)
  • mysql之udf提权
  • OPRD:蒸馏不只学答案,还要偷看老师的“脑内活动“
  • mvc---- 前端校验
  • 计算机界的“高考“:软考高项是一场持久战