news 2026/4/2 23:43:30

python 之 Langchain GenAI 聊天模型集成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 之 Langchain GenAI 聊天模型集成

一、环境准备与初始化

1.1 Gemini开发者API方式
  • from langchain_google_genaiimportChatGoogleGenerativeAI# 推荐做法:提前在环境变量中设置API Key#exportGOOGLE_API_KEY='你的API密钥'# 直接代码中指定API Key也可以 model=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",api_key="你的API密钥")
1.2 Vertex AI后端方式
  • 方式1:API Key模式

    # 在环境变量中填写:GCP项目ID、API Key、激活Vertex后端exportGEMINI_API_KEY='your-api-key'exportGOOGLE_GENAI_USE_VERTEXAI=trueexportGOOGLE_CLOUD_PROJECT='your-project-id'
    model=ChatGoogleGenerativeAI(model="gemini-3-pro-preview")# 或者更明确地配置 model=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",api_key="你的API密钥",project="你的项目ID",vertexai=True,)
  • 方式2:凭证认证(使用Google Application Default Credentials)

    model=ChatGoogleGenerativeAI(model="gemini-2.5-flash",project="你的项目ID",# 不指定api_key会自动使用本地Google ADC)
    from langchain_google_genaiimportChatGoogleGenerativeAISERVICE_ACCOUNT_FILE="service_account.json"os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=SERVICE_ACCOUNT_FILE llm=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",# Vertex AI 模型:gemini-2.0-flash-001project="******",# 你的 GCP 项目 ID location="global",# 区域 us-central1 temperature=0.28,max_output_tokens=1000,vertexai=True,)
    from google.oauth2importservice_accountfrom langchain_google_genaiimportChatGoogleGenerativeAIllm=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",# Vertex AI 模型:gemini-2.0-flash-001project="******",# 你的 GCP 项目 ID location="global",# 区域 us-central1 temperature=0.28,max_output_tokens=1000,credentials=credentials,vertexai=True,)

二、环境变量一览

变量名作用后端类型
GOOGLE_API_KEYAPI主密钥(优先)两者均可
GEMINI_API_KEYAPI备用密钥两者均可
GOOGLE_GENAI_USE_VERTEXAI强制启用Vertex后端Vertex
GOOGLE_CLOUD_PROJECT谷歌云项目IDVertex
GOOGLE_CLOUD_LOCATIONGCP区域(默认central1)Vertex
HTTPS_PROXYHTTP/HTTPS代理配置两者均可
SSL_CERT_FILE自定义SSL证书两者均可

三、代理和网络

#HTTP/HTTPS代理exportHTTPS_PROXY='http://用户名:密码@代理地址:端口'# 可选:自定义SSL证书exportSSL_CERT_FILE='路径/证书.pem'
# 高级代理(如SOCKS5)可用client_args指定 model=ChatGoogleGenerativeAI(model="gemini-2.5-flash",client_args={"proxy":"socks5://user:pass@host:端口"},)

四、模型调用与基础用法

4.1 普通文本对话示例
from langchain_google_genaiimportChatGoogleGenerativeAImodel=ChatGoogleGenerativeAI(model="gemini-3-pro-preview")result=model.invoke("为LangChain写一首抒情诗")print(result)
4.2 多轮消息格式
messages=[("system","请将用户发言翻译成法语。"),("human","我爱编程。"),]model.invoke(messages)
messages=[SystemMessage(content="你是一个乐于助人的助手,擅长数学计算。"),HumanMessage(content="请计算 123.45 + 678.9 等于多少?")]model.invoke(messages)

返回值示例(内容可能包含AI回复内容、响应元数据、用量统计等):

AIMessage(content=[{"type":"text","text":"**J'adore la programmation.**\n\n你也可以说:...","extras":{"signature":"Eq0W..."},}],response_metadata={...},usage_metadata={...},)

五、流式输出(Stream)

forchunk in llm.stream("用一句话介绍自己"):print(chunk.content,end="",flush=True)print()
model=ChatGoogleGenerativeAI(model="gemini-2.5-flash")forchunk in model.stream(messages):print(chunk.content)# 每一小段文本流式输出

六、异步调用

# 单次异步调用 result=await model.ainvoke(messages)# 异步流式输出 asyncforchunkin(await model.astream(messages)):print(chunk.content)# 批量异步 results=await model.abatch([messages])

七、 工具调用(如天气/人口查询)

from pydanticimportBaseModel,Field # 定义天气工具classGetWeather(BaseModel):'''获取指定地点的当前天气'''location:str=Field(...,description="城市和州,例如 San Francisco, CA")# 定义人口工具classGetPopulation(BaseModel):'''获取指定地点的人口数量'''location:str=Field(...,description="城市和州,例如 San Francisco, CA")llm_with_tools=model.bind_tools([GetWeather,GetPopulation])res=llm_with_tools.invoke("今天洛杉矶和纽约哪个城市更热?哪个更大?")print(res.tool_calls)# 查看工具调用情况

八、结构化输出(如笑话生成)

from pydanticimportBaseModel,Field from typingimportOptionalclassJoke(BaseModel):'''笑话结构'''setup:str=Field(description="笑话开场")punchline:str=Field(description="笑话梗")rating:Optional[int]=Field(description="搞笑程度(1~10)")# 推荐方式(gemini原生结构化输出) structured_model=model.with_structured_output(Joke)joke=structured_model.invoke("讲一个猫的笑话")print(joke)

九、多模态输入

9.1 图片输入
importbase64importhttpxfrom langchain.messagesimportHumanMessageimage_url="https://xxx.jpg"image_data=base64.b64encode(httpx.get(image_url).content).decode("utf-8")message=HumanMessage(content=[{"type":"text","text":"描述一下这张图的天气"},{"type":"image_url","image_url":{"url":f"data:image/jpeg;base64,{image_data}"}},])ai_msg=model.invoke([message])print(ai_msg.content)# 打印图片分析结果
9.2 PDF输入
importbase64from langchain.messagesimportHumanMessagepdf_bytes=open("/path/to.pdf","rb").read()pdf_base64=base64.b64encode(pdf_bytes).decode("utf-8")message=HumanMessage(content=[{"type":"text","text":"用一句话描述这份PDF"},{"type":"file","source_type":"base64","mime_type":"application/pdf","data":pdf_base64}])ai_msg=model.invoke([message])print(ai_msg.content)

十、上下文缓存和文件上传

单文件缓存:
from googleimportgenaifrom google.genaiimporttypesimporttimefrom langchain.messagesimportHumanMessageclient=genai.Client()# 上传文件到Google云 file=client.files.upload(file="/path/to/file")whilefile.state.name=="PROCESSING":time.sleep(2)file=client.files.get(name=file.name)# 创建缓存 cache=client.caches.create(model="gemini-3-pro-preview",config=types.CreateCachedContentConfig(display_name="缓存内容描述",system_instruction="你是内容专家,需基于文件回答问题。",contents=[file],ttl="300s",))llm=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",cached_content=cache.name)msg=HumanMessage(content="归纳这一内容的要点")print(llm.invoke([msg]))

十一、安全策略设置

from langchain_google_genaiimport(ChatGoogleGenerativeAI,HarmBlockThreshold,HarmCategory,)# 关闭危险内容阻断 llm=ChatGoogleGenerativeAI(model="gemini-3-pro-preview",safety_settings={HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT:HarmBlockThreshold.BLOCK_NONE,},)

十二、Token用量追踪

res=model.invoke(messages)print(res.usage_metadata)# 打印tokens消耗详情

十三、 响应元数据查看

ai_msg=model.invoke(messages)print(ai_msg.response_metadata)

返回结果如:

{"model_name":"gemini-3-pro-preview","model_provider":"google_genai","prompt_feedback":{"block_reason":0,"safety_ratings":[]},"finish_reason":"STOP","safety_ratings":[...],}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 0:46:17

Arctic Wolf瞄准亚太地区中端市场网络安全缺口

网络安全供应商Arctic Wolf正在扩大其在亚太地区的业务版图,最近在马来西亚推出了全套产品组合,旨在解决市场上不断扩大的安全差距。该公司亚太区业务总监David Hayes在接受Computer Weekly采访时指出,虽然全球网络安全支出在2025年增长了13%…

作者头像 李华
网站建设 2026/3/27 22:42:23

Elasticsearch:交易搜索 - Index search tool

在这篇文章中,我们来展示如何使用 Index search 类型的 tool 来针对交易进行搜索。这篇文章是之前文章 “Elasticsearch:交易搜索 - MCP” 的续篇。我们讲使用 AI Builder 来进行搜索,但是我们创建一个叫做 index search 的 tool 类型。 创建…

作者头像 李华
网站建设 2026/4/1 12:23:12

大卫·德雷曼的对比优势:在市场低迷时逆向而行

大卫德雷曼的对比优势:在市场低迷时逆向而行关键词:大卫德雷曼、对比优势、市场低迷、逆向投资、价值分析摘要:本文深入探讨了大卫德雷曼在市场低迷时逆向而行的投资策略所具有的对比优势。通过介绍相关背景知识,阐述核心概念与联…

作者头像 李华
网站建设 2026/3/28 16:33:55

Android Scoped Storage适配完全指南

Android Scoped Storage适配完全指南关键词:Android、Scoped Storage、适配、存储权限、文件访问摘要:本文将全面介绍Android Scoped Storage的相关知识,从背景出发,详细解释核心概念,阐述其原理和架构,给出…

作者头像 李华
网站建设 2026/4/1 19:36:40

低成本混沌工具:中小企业实施指南

混沌工程在中小企业中的价值在2026年的软件开发生态中,系统复杂性激增,故障成本高昂——据行业报告,中小企业因未预见的系统崩溃年均损失超百万美元。混沌工程通过主动注入故障(如网络延迟、服务中断),帮助…

作者头像 李华