python 之 Langchain GenAI 聊天模型集成
一、环境准备与初始化1.1 Gemini开发者API方式from langchain_google_genaiimportChatGoogleGenerativeAI# 推荐做法提前在环境变量中设置API Key#exportGOOGLE_API_KEY你的API密钥# 直接代码中指定API Key也可以 modelChatGoogleGenerativeAI(modelgemini-3-pro-preview,api_key你的API密钥)1.2 Vertex AI后端方式方式1API Key模式# 在环境变量中填写GCP项目ID、API Key、激活Vertex后端exportGEMINI_API_KEYyour-api-keyexportGOOGLE_GENAI_USE_VERTEXAItrueexportGOOGLE_CLOUD_PROJECTyour-project-idmodelChatGoogleGenerativeAI(modelgemini-3-pro-preview)# 或者更明确地配置 modelChatGoogleGenerativeAI(modelgemini-3-pro-preview,api_key你的API密钥,project你的项目ID,vertexaiTrue,)方式2凭证认证使用Google Application Default CredentialsmodelChatGoogleGenerativeAI(modelgemini-2.5-flash,project你的项目ID,# 不指定api_key会自动使用本地Google ADC)from langchain_google_genaiimportChatGoogleGenerativeAISERVICE_ACCOUNT_FILEservice_account.jsonos.environ[GOOGLE_APPLICATION_CREDENTIALS]SERVICE_ACCOUNT_FILE llmChatGoogleGenerativeAI(modelgemini-3-pro-preview,# Vertex AI 模型:gemini-2.0-flash-001project******,# 你的 GCP 项目 ID locationglobal,# 区域 us-central1 temperature0.28,max_output_tokens1000,vertexaiTrue,)from google.oauth2importservice_accountfrom langchain_google_genaiimportChatGoogleGenerativeAIllmChatGoogleGenerativeAI(modelgemini-3-pro-preview,# Vertex AI 模型:gemini-2.0-flash-001project******,# 你的 GCP 项目 ID locationglobal,# 区域 us-central1 temperature0.28,max_output_tokens1000,credentialscredentials,vertexaiTrue,)二、环境变量一览变量名作用后端类型GOOGLE_API_KEYAPI主密钥优先两者均可GEMINI_API_KEYAPI备用密钥两者均可GOOGLE_GENAI_USE_VERTEXAI强制启用Vertex后端VertexGOOGLE_CLOUD_PROJECT谷歌云项目IDVertexGOOGLE_CLOUD_LOCATIONGCP区域默认central1VertexHTTPS_PROXYHTTP/HTTPS代理配置两者均可SSL_CERT_FILE自定义SSL证书两者均可三、代理和网络#HTTP/HTTPS代理exportHTTPS_PROXYhttp://用户名:密码代理地址:端口# 可选自定义SSL证书exportSSL_CERT_FILE路径/证书.pem# 高级代理如SOCKS5可用client_args指定 modelChatGoogleGenerativeAI(modelgemini-2.5-flash,client_args{proxy:socks5://user:passhost:端口},)四、模型调用与基础用法4.1 普通文本对话示例from langchain_google_genaiimportChatGoogleGenerativeAImodelChatGoogleGenerativeAI(modelgemini-3-pro-preview)resultmodel.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:**Jadore la programmation.**\n\n你也可以说:...,extras:{signature:Eq0W...},}],response_metadata{...},usage_metadata{...},)五、流式输出Streamforchunk in llm.stream(用一句话介绍自己):print(chunk.content,end,flushTrue)print()modelChatGoogleGenerativeAI(modelgemini-2.5-flash)forchunk in model.stream(messages):print(chunk.content)# 每一小段文本流式输出六、异步调用# 单次异步调用 resultawait model.ainvoke(messages)# 异步流式输出 asyncforchunkin(await model.astream(messages)):print(chunk.content)# 批量异步 resultsawait model.abatch([messages])七、 工具调用如天气/人口查询from pydanticimportBaseModel,Field # 定义天气工具classGetWeather(BaseModel):获取指定地点的当前天气location:strField(...,description城市和州例如 San Francisco, CA)# 定义人口工具classGetPopulation(BaseModel):获取指定地点的人口数量location:strField(...,description城市和州例如 San Francisco, CA)llm_with_toolsmodel.bind_tools([GetWeather,GetPopulation])resllm_with_tools.invoke(今天洛杉矶和纽约哪个城市更热哪个更大)print(res.tool_calls)# 查看工具调用情况八、结构化输出如笑话生成from pydanticimportBaseModel,Field from typingimportOptionalclassJoke(BaseModel):笑话结构setup:strField(description笑话开场)punchline:strField(description笑话梗)rating:Optional[int]Field(description搞笑程度1~10)# 推荐方式gemini原生结构化输出 structured_modelmodel.with_structured_output(Joke)jokestructured_model.invoke(讲一个猫的笑话)print(joke)九、多模态输入9.1 图片输入importbase64importhttpxfrom langchain.messagesimportHumanMessageimage_urlhttps://xxx.jpgimage_database64.b64encode(httpx.get(image_url).content).decode(utf-8)messageHumanMessage(content[{type:text,text:描述一下这张图的天气},{type:image_url,image_url:{url:fdata:image/jpeg;base64,{image_data}}},])ai_msgmodel.invoke([message])print(ai_msg.content)# 打印图片分析结果9.2 PDF输入importbase64from langchain.messagesimportHumanMessagepdf_bytesopen(/path/to.pdf,rb).read()pdf_base64base64.b64encode(pdf_bytes).decode(utf-8)messageHumanMessage(content[{type:text,text:用一句话描述这份PDF},{type:file,source_type:base64,mime_type:application/pdf,data:pdf_base64}])ai_msgmodel.invoke([message])print(ai_msg.content)十、上下文缓存和文件上传单文件缓存from googleimportgenaifrom google.genaiimporttypesimporttimefrom langchain.messagesimportHumanMessageclientgenai.Client()# 上传文件到Google云 fileclient.files.upload(file/path/to/file)whilefile.state.namePROCESSING:time.sleep(2)fileclient.files.get(namefile.name)# 创建缓存 cacheclient.caches.create(modelgemini-3-pro-preview,configtypes.CreateCachedContentConfig(display_name缓存内容描述,system_instruction你是内容专家需基于文件回答问题。,contents[file],ttl300s,))llmChatGoogleGenerativeAI(modelgemini-3-pro-preview,cached_contentcache.name)msgHumanMessage(content归纳这一内容的要点)print(llm.invoke([msg]))十一、安全策略设置from langchain_google_genaiimport(ChatGoogleGenerativeAI,HarmBlockThreshold,HarmCategory,)# 关闭危险内容阻断 llmChatGoogleGenerativeAI(modelgemini-3-pro-preview,safety_settings{HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT:HarmBlockThreshold.BLOCK_NONE,},)十二、Token用量追踪resmodel.invoke(messages)print(res.usage_metadata)# 打印tokens消耗详情十三、 响应元数据查看ai_msgmodel.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:[...],}

相关新闻

开放计算项目与IOWN合作设计分布式数据中心

开放计算项目与IOWN合作设计分布式数据中心

开放计算项目(OCP)希望开发分布式数据中心规范,并决定采用全光网络创新光学与无线网络(IOWN)技术栈来实现这一目标。OCP将这项新计划称为"AI计算连续体",希望提供"从集中式到边缘部署的无缝…

2026/7/6 6:37:23 阅读更多 →
欧盟与印度自贸协定开启IT服务新时代

欧盟与印度自贸协定开启IT服务新时代

欧盟与印度达成的首个自由贸易协定可能推动印度IT服务提供商在欧洲大陆扩展业务,为其打开大量未开发的市场机遇。虽然北欧和比荷卢地区等较小经济体集群已经成为印度IT服务公司的成功市场,但在一些更大的经济体中,这些公司仍有巨大的增长空间…

2026/7/4 2:21:39 阅读更多 →
Arctic Wolf瞄准亚太地区中端市场网络安全缺口

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

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

2026/7/3 1:11:49 阅读更多 →

最新新闻

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南 【免费下载链接】Open-Shell-Menu Classic Shell Reborn. 项目地址: https://gitcode.com/gh_mirrors/op/Open-Shell-Menu 想要找回经典的Windows开始菜单体验吗?Open-Sh…

2026/7/6 19:57:18 阅读更多 →
社会洗牌的变化创造了过去不存在的可能性。

社会洗牌的变化创造了过去不存在的可能性。

它揭示的是社会系统如何运行,而不是一句励志口号。“社会洗牌的变化创造了过去不存在的可能性。”很多人容易理解成:变化一定带来机会。其实,这种理解并不准确。 更准确地说应该是:变化会改变"可能性空间"(P…

2026/7/6 19:57:18 阅读更多 →
如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南

如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南

如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南 【免费下载链接】syzkaller syzkaller is an unsupervised coverage-guided kernel fuzzer 项目地址: https://gitcode.com/gh_mirrors/sy/syzkaller 你是否曾经想为开源内核安全项目做贡献&…

2026/7/6 19:55:17 阅读更多 →
EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案

EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案

EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案 EhViewer是一个基于Material Design 2设计语言的开源Android漫画浏览应用,为E-Hentai平台用户提供了优雅、高效的内容浏览体验。这个项目不仅解决了漫画爱好者在移动设备上访问和浏览…

2026/7/6 19:55:17 阅读更多 →
FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧

FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧

FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧 【免费下载链接】FancySelect A better select for discerning web developers everywhere. 项目地址: https://gitcode.com/gh_mirrors/fa/FancySelect FancySelect是一个为挑剔的Web开发者精心打造的选…

2026/7/6 19:53:14 阅读更多 →
为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来

为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来

为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来 【免费下载链接】docuseal Open source DocuSign alternative. Create, fill, and sign digital documents ✍️ 项目地址: https://gitcode.com/GitHub_Trending/do/docuseal 想象一下…

2026/7/6 19:53:14 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻