LangChain零基础入门02
文章目录一、先搞懂基础Model I/O 是什么1.1 核心定位1.2 LangChain的三类模型别搞混二、为什么选LangChain原生SDK不香吗2.1 原生SDK的痛点换模型重写代码2.2 LangChain的核心价值统一接口一次学会到处用三、基础入门ChatOpenAI 核心用法3.1 最简调用示例3.2 核心参数详解1temperature 怎么选2Token到底是什么四、对话基础消息类型与传入方式三种消息传入方式方式1直接传字符串最简单方式2传消息列表最常用方式3元组/字典格式最灵活五、四种调用方式覆盖所有开发场景5.1 同步调用 invoke()最常用5.2 异步调用 ainvoke()高并发5.3 流式调用 stream()打字机效果5.4 批量调用 batch()并行处理六、多平台模型接入实战拿来就能用6.1 DeepSeek 直连6.2 硅基流动开源模型免费玩6.3 不兼容OpenAI格式的平台各平台接入速查表七、零成本学习本地模型Ollama接入7.1 Ollama安装7.2 下载运行模型7.3 LangChain调用本地模型八、新手必知的进阶实用特性8.1 Token用量追踪8.2 速率限制8.3 多模态图片输入九、总结一、先搞懂基础Model I/O 是什么1.1 核心定位Model I/O 是LangChain中与大语言模型交互的核心流程本质上解决一个最基础的问题怎么把问题喂给模型并拿到有用的结果。它由三个环环相扣的核心环节组成覆盖了从输入到输出的完整流程环节核心作用Prompts提示词模板将用户输入、系统指令格式化成模型能理解的标准消息Models模型调用用统一接口调用不同平台的大模型OpenAI、DeepSeek、本地模型等Output Parsers输出解析把模型返回的纯文本转换成JSON、Pydantic对象等结构化数据1.2 LangChain的三类模型别搞混LangChain里有三种完全不同用途的“模型”新手最容易混淆先做好明确区分模型类型定位输入输出适用场景Chat Models对话型当前主流本文重点消息列表 → AI消息对话、生成、问答等绝大多数大模型应用LLMs补全型已过时字符串 → 字符串早期文本补全场景现在基本不用Embeddings向量型功能型模型文本 → 数字向量RAG检索、语义搜索不生成文本内容划重点本文所有提到的“模型调用”默认都是指Chat Models也是GPT-4o、DeepSeek、Claude、Qwen等现代大模型的主流形态。二、为什么选LangChain原生SDK不香吗2.1 原生SDK的痛点换模型重写代码OpenAI的SDK确实是行业事实标准大部分模型都兼容它的格式但只要你需要多模型对比、跨平台切换痛点立刻就会显现兼容OpenAI格式的平台要手动修改base_url、api_key、模型名不兼容的平台比如Anthropic Claude整套客户端、返回值取值方式都要重写流式输出、批量调用、错误重试每个平台的实现逻辑都不一样三个模型就要写三套代码功能叠加得越多代码量就会爆炸式增长。2.2 LangChain的核心价值统一接口一次学会到处用LangChain把所有模型的调用逻辑都做了标准化封装不管你用哪家模型初始化只改一行调用代码完全不动# OpenAI 模型fromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini)# 切换DeepSeek仅修改初始化参数llmChatOpenAI(modeldeepseek-chat,api_key你的DeepSeek密钥,base_urlhttps://api.deepseek.com/v1,)# 切换Claude仅替换类fromlangchain_anthropicimportChatAnthropic llmChatAnthropic(modelclaude-sonnet-4-20250514)# 调用方式永远统一responsellm.invoke(用一句话解释量子计算)print(response.content)核心差异对比一目了然维度原生SDKLangChain切换模型改客户端、改参数甚至重写代码仅修改初始化配置调用方式各平台接口不统一统一llm.invoke()取值方式不同平台返回结构不同统一.content取文本内容流式/批量调用各平台写法不同统一stream()/batch()扩展功能记忆、RAG、工具全部从零实现框架内置直接组合使用三、基础入门ChatOpenAI 核心用法ChatOpenAI是LangChain中最常用的类90%的开发场景都用它所有兼容OpenAI格式的平台都能直接适配。3.1 最简调用示例新手也能直接跑通的单轮问答代码# 安装依赖pip install langchain-openai python-dotenvfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv# 加载.env文件中的API密钥和base_urlload_dotenv()# 初始化模型llmChatOpenAI(modelgpt-4o-mini)# 同步调用模型responsellm.invoke(你好介绍一下LangChain)# 注意返回的是AIMessage对象不是纯字符串print(type(response))# class langchain_core.messages.ai.AIMessageprint(response.content)# 模型返回的文本内容print(response.response_metadata)# 模型名、token消耗等元信息3.2 核心参数详解初始化模型时几个高频参数一定要掌握llmChatOpenAI(modelgpt-4o-mini,# 模型名称必填temperature0.7,# 输出随机性0确定性输出1高创意max_tokens1000,# 最大输出token长度timeout60,# 请求超时时间秒max_retries2# 请求失败自动重试次数)1temperature 怎么选它控制模型输出的创造力数值越高结果越随机发散越低越稳定精准。场景推荐值原因代码生成、数据提取、翻译0 ~ 0.3需要准确、稳定的输出避免发散问答、摘要、内容分析0.3 ~ 0.7兼顾准确性和流畅度创意写作、头脑风暴、起名0.7 ~ 1.0需要多样性和创意性2Token到底是什么很多新手以为token就是字数其实不是。Token是大模型处理文本的最小单位可能是一个字、半个词、一个单词甚至一个标点。中文1个Token ≈ 1~1.8个汉字英文1个Token ≈ 3~4个字母注意不同模型的分词器不同同一段文本的token数也会有差异。大模型按token计费总消耗输入token 输出token上下文越长单次调用成本越高。四、对话基础消息类型与传入方式要给AI设定人设、做多轮对话就要先搞懂LangChain的四种标准消息类型消息类型类名用途示例系统消息SystemMessage设定AI的角色、行为规则“你是专业的Python编程助手”用户消息HumanMessage用户的输入内容“什么是Python装饰器”AI消息AIMessageAI的回复用于保存对话历史“装饰器是…”工具消息ToolMessage外部工具的执行结果函数调用的返回值记忆口诀系统定规则用户提问题AI给回复工具报结果。三种消息传入方式根据不同场景有三种传入方式按需选择即可方式1直接传字符串最简单单轮问答、快速测试用代码最简洁responsellm.invoke(你好介绍一下LangChain)print(response.content)优点一行搞定最简洁局限不能设置系统提示词不能保留对话历史方式2传消息列表最常用需要设定角色、保留对话历史的场景90%的对话场景都用这个fromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessage# 构建多轮对话历史conversation[SystemMessage(content你是一个专业的Python编程助手回答要简洁准确),HumanMessage(content什么是LangChain),AIMessage(contentLangChain是一个用于开发大模型应用的框架。),HumanMessage(content它有哪些核心组件)]responsellm.invoke(conversation)print(response.content)方式3元组/字典格式最灵活动态构建消息、从配置/数据库读取模板时使用适合程序动态生成# 元组格式(角色, 内容)tuple_messages[(system,你是专业的翻译助手),(user,把你好世界翻译成英语)]# 字典格式dict_messages[{role:system,content:你是专业的翻译助手},{role:user,content:把你好世界翻译成英语}]responsellm.invoke(tuple_messages)print(response.content)五、四种调用方式覆盖所有开发场景LangChain提供了4种核心调用方式对应不同的业务场景新手逐个掌握即可5.1 同步调用 invoke()最常用最基础的调用方式发送请求后等待结果返回适合绝大多数单轮问答场景responsellm.invoke(什么是LangChain)print(response.content)适用场景单次问答、简单文本生成、原型开发。5.2 异步调用 ainvoke()高并发异步调用适合高并发场景核心是等待网络响应时不阻塞CPU多个请求并行执行。用一个通俗的类比理解同步invoke排队买奶茶点一杯等一杯5杯要等5次的总时长异步ainvoke扫码同时点5杯总耗时≈最慢的那一杯的制作时间基础用法importasynciofromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini)asyncdefmain():# 同时创建多个请求任务tasks[llm.ainvoke(用一句话介绍北京),llm.ainvoke(用一句话介绍上海),llm.ainvoke(用一句话介绍广州)]# 并行等待所有请求返回结果resultsawaitasyncio.gather(*tasks)forresinresults:print(res.content)# 普通.py文件用 asyncio.run(main())# Jupyter环境直接 await main()asyncio.run(main())注意单独逐个await ainvoke和同步效果一样慢必须配合asyncio.gather才能实现并行调用。适用场景批量调用、Web API接口、高并发服务。5.3 流式调用 stream()打字机效果实现聊天软件里的打字机逐字输出效果长文本生成时大幅提升用户体验print(AI回答,end)full_messageNoneforchunkinllm.stream(请写一首关于春天的七言绝句):full_messagechunkiffull_messageisNoneelsefull_messagechunkprint(chunk.content,end,flushTrue)print(\n\n完整内容,full_message.content)适用场景聊天机器人、长文本生成、实时对话应用。5.4 批量调用 batch()并行处理一次性处理多个独立的请求框架自动帮你做并发管理questions[什么是Python,什么是JavaScript,什么是Go语言]responsesllm.batch(questions)forq,rinzip(questions,responses):print(f问{q}\n答{r.content}\n)适用场景批量内容生成、数据分析、批量文本处理。六、多平台模型接入实战拿来就能用现在主流大模型平台只要兼容OpenAI格式都能用ChatOpenAI直接调用给大家整理了常用平台的接入方式新手直接抄配置即可。6.1 DeepSeek 直连importosfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv load_dotenv()llmChatOpenAI(modeldeepseek-chat,api_keyos.getenv(DEEPSEEK_API_KEY),base_urlos.getenv(DEEPSEEK_BASE_URL),# https://api.deepseek.com/v1)responsellm.invoke(用一句话解释大语言模型)print(response.content)6.2 硅基流动开源模型免费玩硅基流动聚合了Qwen、DeepSeek等50开源模型新用户送免费Token部分模型完全免费非常适合学习阶段使用llmChatOpenAI(modelQwen/Qwen3-8B,api_keyos.getenv(SILICONFLOW_API_KEY),base_urlos.getenv(SILICONFLOW_BASE_URL),# https://api.siliconflow.cn/v1)6.3 不兼容OpenAI格式的平台像Claude、Gemini这类有独立API规范的平台可以用init_chat_model统一管理一个函数切换所有提供商fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv()# 不同平台统一初始化逻辑llm_openaiinit_chat_model(gpt-4o-mini,model_provideropenai)llm_claudeinit_chat_model(claude-sonnet-4-20250514,model_provideranthropic)llm_geminiinit_chat_model(gemini-2.5-flash,model_providergoogle_genai)# 调用方式完全一致forname,llmin[(OpenAI,llm_openai),(Claude,llm_claude),(Gemini,llm_gemini)]:responsellm.invoke(用一句话介绍你自己)print(f{name}:{response.content})各平台接入速查表平台调用类核心环境变量OpenAI/CloseAI代理ChatOpenAIOPENAI_API_KEY OPENAI_BASE_URLDeepSeekChatOpenAIDEEPSEEK_API_KEY DEEPSEEK_BASE_URL硅基流动ChatOpenAISILICONFLOW_API_KEY SILICONFLOW_BASE_URLAnthropic ClaudeChatAnthropicANTHROPIC_API_KEYGoogle GeminiChatGoogleGenerativeAIGOOGLE_API_KEYOllama本地模型ChatOllama无需API Key七、零成本学习本地模型Ollama接入不想花钱买API用Ollama就能在本地跑开源大模型完全免费适合学习测试和隐私敏感场景。7.1 Ollama安装Windows访问官网https://ollama.com/download 下载exe安装包Linux执行一键安装命令curl -fsSL https://ollama.com/install.sh | sh7.2 下载运行模型终端执行命令首次运行会自动下载模型# 下载并运行Qwen3.5 4B模型ollama run qwen3.5:4b# 查看已下载的所有模型ollama list7.3 LangChain调用本地模型# 安装依赖pip install langchain-ollamafromlangchain_ollamaimportChatOllama ollama_llmChatOllama(modelqwen3.5:4b,base_urlhttp://localhost:11434)responseollama_llm.invoke(你好介绍一下你自己)print(response.content)本地模型和在线模型调用方式完全一致后续切换到在线模型无需修改业务代码。八、新手必知的进阶实用特性8.1 Token用量追踪想知道每次调用消耗了多少Token用内置回调直接统计总用量fromlangchain_core.callbacksimportget_usage_metadata_callbackwithget_usage_metadata_callback()ascb:llm.invoke(你好)llm.invoke(再见)print(cb.usage_metadata)# 输出总输入、输出、总Token数8.2 速率限制避免触发平台的API频率限制用内置限流器控制请求速度fromlangchain_core.rate_limitersimportInMemoryRateLimiter rate_limiterInMemoryRateLimiter(requests_per_second0.1,# 每10秒最多1个请求check_every_n_seconds0.1)llmChatOpenAI(modelgpt-4o-mini,rate_limiterrate_limiter)8.3 多模态图片输入支持视觉能力的模型比如gpt-4o可以直接传入图片识别内容importbase64fromlangchain_core.messagesimportHumanMessage llmChatOpenAI(modelgpt-4o)# 读取本地图片转base64withopen(image.jpg,rb)asf:image_dataf.read()messageHumanMessage(content[{type:text,text:描述一下这张图片的内容},{type:image_url,image_url:{url:fdata:image/jpeg;base64,{base64.b64encode(image_data).decode()}}}])responsellm.invoke([message])print(response.content)九、总结本文完整梳理了LangChain Model I/O中模型调用的全部核心内容从基础概念到实战落地新手掌握这些就足够入门大模型应用开发了核心概念Model I/O三环节、三类模型区分Chat Models是当前绝对主流核心优势统一接口切换模型仅需修改初始化大幅降低开发成本基础用法ChatOpenAI参数配置、四种消息类型、四种核心调用方式实战落地多平台模型接入、本地Ollama部署、常用进阶特性

相关新闻