阜新市网站建设_网站建设公司_轮播图_seo优化
2025/12/21 1:46:55 网站建设 项目流程

本文介绍Langchain如何接入chat模型和embedding模型。

一、如何接入Chat模型?

1、使用ChatOpenAI接入

ChatOpenAI - LangChain 提供的文档 --- ChatOpenAI - Docs by LangChainhttps://docs.langchain.com/oss/python/integrations/chat/openai

(1)如何接入

① 首先你得先安装库

pip install langchain-openai

② 使用invoke方法来调用chat model

# 从 langchain_openai 模块导入 ChatOpenAI 类 # 这是 LangChain 官方提供的、用于调用 OpenAI 兼容接口 from langchain_openai import ChatOpenAI # 从 dotenv 模块导入 load_dotenv 函数,用于加载 .env 文件中的环境变量 from dotenv import load_dotenv # 导入 os 模块,用于读取操作系统环境变量 import os # 加载当前目录下的 .env 文件中的环境变量 # override=True 表示如果环境中已存在同名变量,则用 .env 中的值覆盖它 # 这样可以确保 OPENAI_API_KEY 和 OPENAI_BASE_URL 被正确设置 load_dotenv(override=True) # 创建一个 ChatOpenAI 模型实例 model = ChatOpenAI( model="gpt-4.1-nano", # 指定要使用的模型名称 base_url=os.getenv("OPENAI_BASE_URL"), # 指定 API 请求的基地址 # 若使用官方 OpenAI,通常可省略此参数;若使用代理或国产平台(如阿里、智谱的 OpenAI 兼容接口),则必须指定 api_key=os.getenv("OPENAI_API_KEY") # 从环境变量中读取 API 密钥,用于身份认证 # 安全提示:切勿将 API Key 写死在代码中,应始终通过环境变量管理 ) # 调用模型进行单轮对话推理(同步调用) # 输入是一个字符串 "你好",LangChain 会自动将其包装为 HumanMessage # 返回一个 AIMessage 对象,包含模型生成的回复内容及元数据 resp1 = model.invoke("你好") # 注意:此时 resp1 是一个 AIMessage 实例 print(resp1.content) # 打印 AI 回复的纯文本 print(resp1.response_metadata) # 查看 token 使用、完成原因等元信息

③ 使用stream来流式输出

# 流式输出 for chunk in model.stream("你好,给我写一篇500字的关于冬天的散文。"): print(chunk.text, end="")

(2)参数介绍

model = ChatOpenAI( model="gpt-4.1-nano", # 指定在线大模型的名字 base_url=os.getenv("OPENAI_BASE_URL"), # 在线大模型的API服务提供商所指定的访问地址 api_key=os.getenv("OPENAI_API_KEY"), # API密钥 temperature=0.8, # 采样温度 max_tokens=256, # 最大回复token数量 timeout=30, # 最大请求超时等待时间 max_retries=2 # 如果超时或请求失败了最大重试次数 ) resp2 = model.invoke("给我写一篇关于家乡的散文,要求字数500字")

(3)模型返回的AIMessage长什么样子?

在 LangChain 中,AIMessage是表示由语言模型生成的响应消息的核心类之一,属于langchain_core.messages模块。它是BaseMessage的子类,专门用于封装 AI 的输出内容。核心字段说明:

字段名类型说明
contentstrList[Union[str, dict]]AI 生成的主要文本内容。对于多模态模型,可能是包含文本和媒体信息的列表。
additional_kwargsdict额外的任意关键字参数,通常用于传递模型特定的元数据(如拒绝理由refusal)。
response_metadatadict包含与本次响应相关的详细元数据,例如 token 使用情况、模型名称、完成原因等。
idOptional[str]消息的唯一标识符(可选),可用于追踪或调试。
nameOptional[str]可选名称,用于在多智能体对话中标记发言者(在 AIMessage 中较少使用)。
usage_metadataOptional[dict]结构化的 token 使用统计信息(输入/输出 tokens 等),是response_metadata中 token 信息的简化版。
AIMessage( content='我的家乡,位于江南水乡的心脏地带,是一片被江水环绕、充满诗意的土地。这里山清水秀,四季如画,每一处角落都藏着属于它的故事与温暖。每当我闭上眼睛,脑海中便浮现出那熟悉的景色,心中涌动着浓浓的乡愁。\n\n春天的家乡,万物复苏。嫩绿的柳枝在微风中轻轻摇曳,河畔的桃花如云似霞,飘散着淡淡的香气。田野里,油菜花金灿灿一片,蜜蜂忙碌,蝴蝶翩翩,为大地增添了无限生机。村庄的小路边,孩子们在嬉戏追逐,笑声在空气中回荡。春天,是希望的季节,也是我心中最温暖的时光。\n\n夏日的家乡,绿意盎然。河水清澈见底,倒映着蓝天白云。人们喜欢在河边纳凉,划', additional_kwargs={'refusal': None}, response_metadata={ 'token_usage': { 'completion_tokens': 256, 'prompt_tokens': 24, 'total_tokens': 280, 'completion_tokens_details': { 'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0 }, 'prompt_tokens_details': { 'audio_tokens': 0, 'cached_tokens': 0 } }, 'model_provider': 'openai', 'model_name': 'gpt-4.1-nano-2025-04-14', 'system_fingerprint': 'fp_7f8eb7d1f9', 'id': 'chatcmpl-ConOLfngFphclu2S4GwHcjKCBjRAB', 'service_tier': 'default', 'finish_reason': 'length', 'logprobs': None }, id='lc_run--019b3b0d-79ea-7701-978b-3ba0843e8aa6-0', usage_metadata={ 'input_tokens': 24, 'output_tokens': 256, 'total_tokens': 280, 'input_token_details': { 'audio': 0, 'cache_read': 0 }, 'output_token_details': { 'audio': 0, 'reasoning': 0 } } )
# 美化输出 resp2.pretty_print()

===================== Ai Message ================

我的家乡,位于江南水乡的心脏地带,是一片被江水环绕、充满诗意的土地。这里山清水秀,四季如画,每一处角落都藏着属于它的故事与温暖。每当我闭上眼睛,脑海中便浮现出那熟悉的景色,心中涌动着浓浓的乡愁。 春天的家乡,万物复苏。嫩绿的柳枝在微风中轻轻摇曳,河畔的桃花如云似霞,飘散着淡淡的香气。田野里,油菜花金灿灿一片,蜜蜂忙碌,蝴蝶翩翩,为大地增添了无限生机。村庄的小路边,孩子们在嬉戏追逐,笑声在空气中回荡。春天,是希望的季节,也是我心中最温暖的时光。 夏日的家乡,绿意盎然。河水清澈见底,倒映着蓝天白云。人们喜欢在河边纳凉,划

2、使用Langchain为各个模型供应商开发的Chat模型类来接入

(1)ChatZhipuAI

ZHIPU AI - Docs by LangChainhttps://docs.langchain.com/oss/python/integrations/chat/zhipuai① 首先得安装必要的包

pip install langchain-community pip install -U httpx httpx-sse PyJWT

② 使用方法

# 导入 LangChain 中用于调用智谱 AI(ZhipuAI)聊天模型的封装类 from langchain_community.chat_models import ChatZhipuAI # 导入 dotenv 模块,用于从 .env 文件加载环境变量(如 API 密钥) # 注意:原代码中未显式导入,这里补充完整以确保可运行 from dotenv import load_dotenv import os # 可选,但推荐用于环境变量操作 # 从当前目录下的 .env 文件中加载环境变量,并覆盖已存在的同名环境变量 # 这样做可以确保 ZHIPUAI_API_KEY 被正确读取(LangChain 会自动读取该变量名) load_dotenv(override=True) # 初始化智谱 AI 的聊天模型实例 # 指定使用 "glm-4.5-flash" 模型(这是智谱推出的高性能、低延迟的轻量级大模型) model = ChatZhipuAI( model="glm-4.5-flash" # 指定模型名称 # 注意:API Key 无需手动传入,LangChain 会自动从环境变量 ZHIPUAI_API_KEY 中读取 ) # 构建对话消息列表,采用 (role, content) 元组格式 # LangChain 会自动将其转换为内部 Message 对象(如 SystemMessage、HumanMessage) messages = [ # 系统消息:设定 AI 的角色和行为规范 ("system", "你是一个翻译官,擅长英汉互译,输出原文以及对照的译文。"), # 用户消息:提供待翻译的中文诗句 ("user", "春眠不觉晓。") ] # 调用模型进行推理(同步调用),传入消息列表,返回一个 AIMessage 对象 resp3 = model.invoke(messages) # 打印模型生成的回复内容(仅文本部分,不含元数据) # resp3 是 AIMessage 类型,其 .content 属性包含 AI 生成的字符串 print(resp3.content)

(2)ChatOllama

ChatOllama - Docs by LangChainhttps://docs.langchain.com/oss/python/integrations/chat/ollama① 一样的要安装必要的包

pip install langchain-ollama

② 使用说明

前提条件

  • 你的系统必须已安装并运行 Ollama(默认监听http://localhost:11434)。
  • 必须已拉取指定模型
from langchain_ollama import ChatOllama model = ChatOllama( model="qwen3:4b" ) resp4 = model.invoke("你好")

二、如何接入Embedding模型?

Embedding models - Docs by LangChainhttps://docs.langchain.com/oss/python/integrations/text_embedding

1、使用OpenAIEmbeddings接入

(1)如何接入嵌入模型

# 从 langchain_openai 模块导入 OpenAIEmbeddings 类 # 尽管名字含 "OpenAI",但它实际上支持任何兼容 OpenAI Embedding API 协议的服务 from langchain_openai import OpenAIEmbeddings # 导入 dotenv 的 load_dotenv 函数,用于从 .env 文件加载环境变量 from dotenv import load_dotenv # 导入 os 模块,用于读取操作系统环境变量 import os # 加载 .env 文件中的环境变量,并覆盖系统中已存在的同名变量 # 这样可以安全地管理敏感信息(如 API Key),避免硬编码在代码中 load_dotenv(override=True) # 创建一个文本嵌入(embedding)模型实例 # 该实例可用于将文本转换为高维向量(常用于语义搜索、RAG、聚类等任务) embeddings = OpenAIEmbeddings( model="BAAI/bge-m3", # 指定要使用的嵌入模型名称 # BGE-M3 是由北京智源研究院(BAAI)开发的多语言、多功能嵌入模型 # 支持稠密向量(dense)、稀疏向量(sparse)和多向量(multi-vector)检索 # 注意:此处模型名需与服务提供商(如硅基流动)支持的名称一致 base_url=os.getenv("SILICONFLOW_BASE_URL"), # 指定 Embedding API 的服务地址 # 硅基流动(SiliconFlow)提供了兼容 OpenAI API 的接口 # 其 base_url 通常形如:https://api.siliconflow.cn/v1 # 若使用官方 OpenAI,则无需此参数;但此处调用的是第三方服务,必须指定 api_key=os.getenv("SILICONFLOW_API_KEY") # 从环境变量中读取硅基流动平台的 API 密钥 # 用于身份认证,确保有权限调用其 Embedding 服务 # 安全提示:切勿将 API Key 写死在代码中! )

(2)如何使用嵌入模型

# ======================== # 1. 准备原始文档数据 # ======================== # 定义一个包含多个简短文本的文档列表,用于后续向量化和检索 documents = [ "俄罗斯和乌克兰冲突", # 文档 0:涉及俄乌战争 "巴勒斯坦和以色列打仗", # 文档 1:涉及巴以冲突 "中国全面建成小康社会" # 文档 2:关于中国社会发展成就 ] # ======================== # 2. 使用嵌入模型对文档进行向量化 # ======================== # 调用 embeddings.embed_documents() 方法,将整个文档列表批量转换为向量列表 # 每个文档对应一个高维向量(例如 BGE-M3 输出 1024 维) vector_list = embeddings.embed_documents(texts=documents) # 打印第一个文档向量的维度,验证嵌入是否成功 # 例如 BGE-M3 默认输出 1024 维,若打印 1024 则说明正常 print("单个向量的维度:", len(vector_list[0])) # ======================== # 3. 对单个查询(query)进行向量化 # ======================== # 将用户输入的查询语句(如“巴以冲突”)转换为与文档相同空间的向量 # 用于后续计算相似度(如余弦相似度) vector = embeddings.embed_query(text="巴以冲突") print("查询向量维度:", len(vector)) # 应与文档向量维度一致 # ======================== # 4. 构建内存向量数据库并实现语义检索 # ======================== # 从 langchain_core 导入 InMemoryVectorStore # 这是一个轻量级、纯内存的向量存储,适合演示或小规模应用(不适用于生产级大数据) from langchain_core.vectorstores import InMemoryVectorStore # 使用 from_texts 类方法,直接从文本列表创建向量数据库 # 内部会自动调用 embeddings 对每条文本进行向量化,并建立索引 vector_store = InMemoryVectorStore.from_texts( texts=documents, # 原始文本列表 embedding=embeddings # 使用的嵌入模型实例(必须与后续查询使用同一模型) ) # 从向量库创建一个检索器(Retriever) # Retriever 是 LangChain 中用于“根据 query 检索相关文档”的标准接口 retriever = vector_store.as_retriever() # 使用检索器查找与查询“俄乌冲突”最相似的文档 # 默认返回 top-k=4 条结果(但本例只有 3 条文档),按相似度排序 retrieved_documents = retriever.invoke("俄乌冲突") # 打印检索结果 # 返回的是 Document 对象列表,每个包含 page_content 和 metadata print("\n检索结果(与'俄乌冲突'最相关的文档):") for i, doc in enumerate(retrieved_documents): print(f"{i+1}. {doc.page_content}")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询