文章目录
- 1. LangChain 快速上手
- 1.1 核心概念
- 1.2 聊天模型核心能力
- 1.2.1 通过 API 定义聊天模型
- 1.2.2 通过本地部署的 LLM 定义聊天模型
1. LangChain 快速上手
定义模型->定义消息-> 调用大模型->用输出解析器 或者 定义链(模型+解析器)+执行链
eg:fromlangchain_core.messagesimportHumanMessage,SystemMessagefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnableSequencefromlangchain_openaiimportChatOpenAI# 1. 定义OpenAI模型# 默认从系统环境变量中读取 OPENAI_API_KEYmodel=ChatOpenAI(model="gpt-4o-mini")# 2. 定义消息# 用户消息 HumanMessage# 系统提示消息 SystemMessage 通常作为第一条消息传入# AI 消息 AIMessagemessages=[SystemMessage(content="请帮我进行翻译,由英文翻译成中文!"),HumanMessage(content="my name is xiaoming")]# 3. 调用大模型# result = model.invoke(messages)# 4. 用输出解析器# print(parser.invoke(result))# 定义链+执行链parser=StrOutputParser()chain=model|parser# chain = RunnableSequence(first=model, last=parser)# chain = model.pipe(parser)# 上面这三种方法都是等价的print(chain.invoke(messages))
1.1 核心概念
是LangChain 强制规定的一个统一标准。只要一个组件说自己是
Runnable,它就必须具备一套标准的“动作”标准动作有:
Invoke(调用): 最基础的“一问一答”。你给它一个输入,它立马处理完给你一个输出。
Batched(批处理): 批量干活。你一次性给它 10 个问题,它高效率地打包处理,给你 10 个答案。
Streamed(流式传输): 像打字机一样输出。不用等模型把整整一段话全想好再发给你,而是想出一个字就往外蹦一个字
Inspected(检查): 查看它的“说明书”。你可以随时查询这个组件到底需要什么样格式的输入,以及会吐出什么格式的输出。
Composed(组合): 可以用一条流水线(LCEL语法)把多个组件无缝衔接起来。比如:输入 -> 检索器 -> 大模型 -> 解析器 -> 输出。
LangChain Expression Language(LCEL):采用声明性方法,从现有Runnable对象构建新的Runnable对象
通过LCEL构建出的新的Runnable对象,被称为RunnableSequence(也是Runnable接口的实例)
LCEL其实就是一种编排解决方案,使LangChain能够以优化的方式处理链运行时的执行
任何俩个Runnable实例都可以链在一起成序列
–就是通过俩个Runnable对象去创建一个RunnableSequence
方法一:使用|chain=model|parser 其实就相当于chain=RunnableSequence(first=model,last=parser)方法二:用.pipe方法代替 chain=model.pipe(parser)效果跟上面的一样
关于Token:Token是文本的基本单位
–对于英文:1个token相当于4个字符
–对于中文:1个汉字约等于1.5-2个token
1.2 聊天模型核心能力
使用不同的模型提供方,要记得安装各自的包以及设置各自的API Key环境变量
1.2.1 通过 API 定义聊天模型
class langchain_openai.chat_models.base.ChatOpenAI是 LangChain 为 OpenAI 的聊天模型(如gpt-5,gpt-5-mini)提供的具体实现类ChatOpenAI常用初始化参数:
参数名 参数描述 model要使用的 OpenAI 模型的名称 temperature采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。 max_tokens要生成的最大令牌数 timeout请求超时时间 max_retries最大重试次数 openai_api_key/api_keyOpenAI API 密钥。如果未传入,将从环境变量中读取 OPENAI_API_KEY。(推荐写到环境变量中去)base_urlAPI 请求的基本 URL。 organizationOpenAI 组织 ID。如果未传入,将从环境变量 OPENAI_ORG_ID中读取。…… (其他参数) fromlangchain_openaiimportChatOpenAI model=ChatOpenAI(model="gpt-5-mini",temperature=0,max_tokens=None,timeout=None,max_retries=2,# api_key="...",# base_url="...",# organization="...",# other params...)如果使用其他与OpenAI兼容的大模型,比如deepseek,则可以用下面的方式进行定义
–也就
base_urlapi_key和model要改改,其他的跟上面的接口搞法一样importos OPENAI_API_KEY=os.getenv('OPENAI_API_KEY')# 从电脑的「环境变量」里,取出名为 OPENAI_API_KEY 的密钥fromlangchain_openaiimportChatOpenAI model=ChatOpenAI(base_url="https://api.deepseek.com/v1",openai_api_key=OPENAI_API_KEY,model="deepseek-chat",# ...)
引申:
invoke()调用:这个也属于Runnable接口,这个方法是将单个输入转换为对应的输出
invoke()方法的定义:abstractmethod invoke(input:Input,# 必须:输入数据(比如你的问题、对话历史)config:RunnableConfig|None=None,# 可选:运行配置(比如回调、超时)**kwargs:Any,# 额外的关键字参数)->Output 返回值是一个Runnable实例上面的
config参数,类型就是RunnableConfigclasslangchain_core.runnables.config.RunnableConfig 常用参数说明 参数名 参数描述 configurable 通过.configurable_fields()在此 Runnable 或子 Runnable 上配置的属性的运行时值。 run_id 针对此调用运行的跟踪器的唯一标识符。如果未提供,将生成新的 UUID。 run_name 此调用的跟踪器运行的名称。默认为类的名称。 metadata 此次调用和任何子调用的元数据。键是字符串,值是 JSON。类型:dict[str,Any]
方式二:
init_chat_model上面的
ChatOpenAI用于明确创建 OpenAI 聊天模型的实例。而init_chat_model()是一个工厂函数,它可以初始化多种支持的聊天模型(如 OpenAI、Anthropic、FireworksAI 等),不仅仅是 OpenAI 的聊天模型init_chat_model()函数的定义:langchain.chat_models.base.init_chat_model(model:str,*,model_provider:str|None=None,configurable_fields:Literal[None]=None,config_prefix:str|None=None,**kwargs:Any,)->BaseChatModel 返回值就是一个Runnable实例
init_chat_model()常用参数说明:
参数名 参数描述 model要使用的模型的名称 model_provider模型提供方。支持的 model_provider值和相应的集成包有:
-openai→langchain-openai
-anthropic→langchain-anthropic
-google_genai→langchain-google-genai
-ollama→langchain-ollama
-deepseek→langchain-deepseek
- …
如果未指定,将尝试从模型推断model_provider。configurable_fields设置哪些模型参数是可配置的。若配置为:
-None: 没有可配置的字段。
-'any': 所有字段都是可配置的,类似api_key、base_url等可以在运行时更改。
-Union[List[str], Tuple[str, ...]]: 指定的字段是可配置的。config_prefix- 配置为非空字符串,则模型将在运行时通过查找 config["configurable"]["{config_prefix}_{param}"]字段设置配置项。
- 配置为空字符串,那么模型将可以通过config["configurable"]["{param}"]字段设置配置项。temperature采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。 max_tokens要生成的最大令牌数 timeout请求超时时间 max_retries最大重试次数 openai_api_key/api_keyOpenAI API 密钥。如果未传入,将从环境变量中读取 OPENAI_API_KEY。base_urlAPI 请求的基本 URL。 …… 其他参数 用法eg:
gpt_model=init_chat_model("gpt-5-mini",model_provider="openai",temperature=0)print("gpt-5-mini: "+gpt_model.invoke("what's your name").content+"\n")这是可配置的模型 configurable_model_1=init_chat_model(temperature=0)# 动态修改配置,初始化模型并调用configurable_result_1=configurable_model_1.invoke("what's your name",config={"configurable":{"model":"gpt-5-mini"}})print("configurable1: "+configurable_result_1.content+"\n")这是具有默认值的可配置模型# 可配置模型模拟器configurable_model_2=init_chat_model(model="gpt-5-mini",temperature=0,configurable_fields=("model","model_provider","temperature","max_tokens"),config_prefix="first",)# 动态修改配置,初始化模型并调用configurable_result_2=configurable_model_2.invoke("what's your name?",config={"configurable":{"first_model":"deepseek-chat","first_temperature":0.5,"first_max_tokens":100,}},)print("configurable2: "+configurable_result_2.content+"\n")
1.2.2 通过本地部署的 LLM 定义聊天模型
安装这个Ollama的方法:
pip install -U langchain_ollama
class langchain_ollama.chat_models.base.ChatOllama是LangChain 为通过 Ollama 部署的聊天模型提供的具体实现类,同样实现了标准的 Runnable 接口ChatOllama常用初始化参数说明:
参数名 参数描述 model要使用的 Ollama 模型的名称 temperature采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。 timeout请求超时时间 base_urlAPI 请求的基本 URL。 num_ctx设置用于生成下一个令牌的上下文窗口的大小。(默认值:2048) num_gpu要使用的 GPU 数量。在 macOS 上,默认为 1 表示启用金属支持,默认为 0 表示禁用。 …… …… fromlangchain_ollamaimportChatOllama ollama_model=ChatOllama(model="deepseek-r1:70b",base_url='http://192.168.100.220:11434')result=ollama_model.invoke("what's your name?")print(result)