langchain开发-LC初识与模型调用
LC初识与模型调用
一、LangChain

1 | https://www.langchain.com/ |
1.LangSmith
调试/观测/评估平台

2.LangSmith Fleet

类似coze一种智能体平台,可以直接开发部署agent
3.frameworks

二、Agent
1.智能体
LLM与Agent本质区别

就是会自行多次迭代,调用工具,具备分析与执行能力,制作结果
2.Agent开发
传统 LLM 在询问具体天气的时候,无法正常使用
但是Agent,可以直接调用工具,进而加载具体天气
LangChain开发
配置依赖
1 | langchain依赖配置 |
2.1、加载环境变量
1 | from dotenv import load_dotenv |
会自动加载.env文件中的环境变量
2.2、定义工具
LangChain 中的 @tool 装饰器
装饰后,这个函数自动获得几个属性:
1 | print(get_weather.name) # "get_weather" —— 工具名称 |
LLM 实际上看到的是这样一份描述,它根据这个来决定要不要调用:
1 | Tool: get_weather |
1 | # 2.定义工具 |
2.3、创建Agent
1 | # 3.创建Agent |
2.4、调用
3.Agent执行流程
执行流程如上
工具调用过程
工具的具体调用
在发起请求时添加 tool 参数
三、Langchain实现
1.初始化模型
Langchain目前提供俩种初始化模型的方式
1.1、init_chat_model 函数
1 | https://docs.langchain.com/oss/python/integrations/providers/overview |
官方文档如上
LangChain 提供的统一入口,自动根据模型名推断用哪个 provider
1 | from langchain.chat_models import init_chat_model |
调用init_chat_model函数初始化模型,参数model用来指定模型名称,Langchain会根据模型名字自动设定base_url,并从环境变量中获取api_key
但是,这个方式,只是支持部分主流AI模型
于是通过
1 | # 我们收到加载环境变量中的base_url和api_key |
额外参数也可以调
1.2、使用Model类
适配于某些大模型不支持 openai 格式,社区版中通常有解决办法
首先,需要安装依赖
LangChain社区依赖:
1 | uv add langchain-community |
阿里云百炼依赖:
1 | uv add dashscope |
1 | from langchain_community.chat_models.tongyi import ChatTongyi |
2.模型的调用
2.1、invoke — 同步阻塞调用
1 | # 最简单的调用 |
2.2、stream — 流式调用
1 | # stream 返回一个生成器,逐块迭代 |
2.3、在智能体中使用
1 | from langchain.agents import create_agent |
调用
1 | response = agent.invoke({ |
1 | # 通过stream方法实现流式访问 |
3.Message
LangChain 把所有与模型交互的消息统一抽象为 BaseMessage 基类,不同角色的消息对应不同的子类,这样做的好处是:屏蔽了不同模型厂商的 API 差异,用同一套消息格式,就能驱动 OpenAI、Anthropic、通义等所有模型
3.1、SystemMessage
1 | from langchain_core.messages import SystemMessage |
- 对应原始 API 的
role: "system" - 用于设定模型的角色、行为规范、背景知识
- 通常放在消息列表的第一条
- 模型不会把它当作”对话内容”,而是当作”行为指令”
3.2、HumanMessage
1 | from langchain_core.messages import HumanMessage |
- 对应原始 API 的
role: "user" - 代表用户说的话,是每轮对话的输入
- 也可以包含图片等多模态内容(传 list)
3.3、AIMessage
1 | from langchain_core.messages import AIMessage |
- 对应原始 API 的
role: "assistant" - 代表模型返回的内容
model.invoke()的返回值就是这个类型- 多轮对话时,需要把历史的 AIMessage 手动保存进消息列表,模型才能”记住”上文
3.4、ToolMessage
1 | from langchain_core.messages import ToolMessage |
- 对应原始 API 的
role: "tool" - 当模型调用了外部工具(如搜索、计算器)后,工具执行结果通过这个消息类型回传给模型
tool_call_id用于关联是哪次工具调用的结果
1 | from langchain_openai import ChatOpenAI |
为什么要把 AIMessage 放进去?
因为模型本身是无状态的,它看不到上一次说了什么。你必须把完整的对话历史拼进请求里,它才能理解上下文、保持角色一致。
3.5、优质打印
1 | for message in response['messages']: |

4.多模态
1 | https://docs.langchain.com/oss/python/langchain/messages#multimodal |
官方文档
只有支持多模态的模型才能识别图片
1 | from langchain.chat_models import init_chat_model |
远程图片
1 | # 准备多模态消息 |
本地图片
1 | # 读取图片,转为base64字符串 |

本质就是将上传图片转为base64编码
