news 2026/6/9 17:44:38

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/6/9 17:43:30

微软二月补丁日修复六个零日漏洞

微软在2026年2月的月度补丁日发布了针对六个新分类零日通用漏洞披露(CVE)的修复程序,此次发布涵盖了微软产品套件中的50多个漏洞。 尽管漏洞总数比1月份的大量漏洞减少了约一半,但趋势科技零日倡议(ZDI)的达…

作者头像 李华
网站建设 2026/6/9 17:44:47

大数据环境下Doris架构设计全解析

大数据环境下Doris架构设计全解析 关键词:Apache Doris、MPP架构、实时分析、列式存储、分区分桶 摘要:在大数据时代,企业对实时分析的需求日益迫切。Apache Doris作为一款高性能、易扩展的分析型数据库,凭借其MPP(大规…

作者头像 李华
网站建设 2026/6/9 17:45:45

Python量化交易:玩转Pandas:金融数据清洗与时间序列分析实战

Python量化交易:玩转Pandas:金融数据清洗与时间序列分析实战 玩转Pandas:金融数据清洗与时间序列分析实战 第一部分:Pandas金融核心——时间序列的基石 1.1 时间索引的力量 1.2 Resample:重采样的艺术 1.3 Rolling:滑动窗口与趋势捕捉 第二部分:金融数据的脏活累活——清…

作者头像 李华
网站建设 2026/6/9 17:44:42

小白程序员转行大模型:AI时代新风口与学习资料免费领!程序员转行大模型,真的是新时代的选择吗?

文章指出,在AI技术飞速发展的今天,程序员面临技能升级转型需求。大模型技术因其市场需求旺盛、薪资待遇优厚及技能提升价值,成为程序员转行的热门选择。文章详细阐述了学习大模型的途径,包括掌握基础知识、实践项目及关注行业动态…

作者头像 李华
网站建设 2026/6/9 17:43:42

USB插口类型typecHDMI等常见接口检测数据集VOC+YOLO格式222张18类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):222标注数量(xml文件个数):222标注数量(txt文件个数):222标注类别数&…

作者头像 李华
网站建设 2026/6/9 18:41:12

太空-生物计算融合人才白皮书:软件测试从业者的转型蓝图

融合时代的测试新纪元太空-生物计算融合(Space-Biocomputing Convergence, SBC)正重塑技术格局,结合太空探索的数据密集型环境与生物计算的仿生算法,催生边缘计算、医疗AI和智能农业等创新领域。2026年,全球市场规模预…

作者头像 李华