【LangChain】快速上手
个人主页Zfox_系列专栏LangChain-AI 应用开发框架目录一 内容与⽬标二 详细过程三 引出LangChain相关概念 Runnable接⼝ LangChainExpressionLanguage四 共勉一 内容与⽬标对于LangChain它是⼀个⽤于开发由⼤语⾔模型(LLM)驱动的应⽤程序的框架。通过前⼏个章节我们已经说明尽管⼤模型的在某些⽅⾯表现振奋⼈⼼但使⽤原⽣LLM可能会存在⼀些问题例如将其当作搜索引擎去使⽤LLM⽣成的答案可能要⽐其他搜索引擎查到的答案更符合你的预期但要是在复杂的场景下使⽤如将LLM嵌⼊应⽤程序时却遭遇了全新难题简单提⽰词Prompt得到的答案经常出现幻觉提⽰词结构是否可以统⼀规范如何实现开发过程中⼤模型的轻松、灵活切换⼤模型输出是⾮结构化的怎样与要求结构化数据的程序接⼝交互如何克服预训练模型知识陈旧的问题引⼊实时更新如何连接模型与外部⼯具或系统执⾏具体任务…LangChain框架的核⼼⽬标就是应对这些挑战。它通过将⾃然语⾔处理流程拆解为标准化组件让开发者能够⾃由组合并⾼效定制⼯作流。本节⽬标本节主要演⽰如何使⽤LangChain接⼊⼤模型组件以及与⼤模型进⾏简单对话的能⼒。掌握了基本⽤法后将会引出LangChain相关前置概念以便后续深⼊学习LangChain标准化组件。二 详细过程安装OpenAI包pipinstall-Ulangchain-openai定义⼤模型# 定义⼤模型fromlangchain_openaiimportChatOpenAI modelChatOpenAI(modelgpt-5-mini)定义消息列表核⼼代码fromlangchain_core.messagesimportHumanMessage,SystemMessage# 定义消息# 用户消息 HumanMessage# 系统提示消息 SystemMessage 通常作为第一条消息传入# AI 消息 AIMessagemessages[SystemMessage(content请帮我进行翻译由英文翻译成中文),HumanMessage(contentmy name is xiaoming)]参数说明SystemMessage 表⽰ 系统⻆⾊ 消息系统消息通常作为输⼊消息序列中的第⼀条传⼊是⽤来启动AI⾏为的消息。HumanMessage 表⽰ ⽤⼾⻆⾊ 消息是来⾃⽤⼾的、从⽤⼾传递到模型的消息。调⽤⼤模型model 是LangChainRunnable可运⾏接⼝的实例这意味着 model 提供了⼀个标准接⼝供我们与之交互。要简单地调⽤模型我们可以将 消息列表 传递给 .invoke ⽅法。使⽤ .invoke ⽅法进⾏⼤模型调⽤核⼼代码resultmodel.invoke(messages)print(result)输出结果调试可以看⻅result类型为AIMessagecontent你好!additional_kwargs{refusal:None}response_metadata{token_usage:{completion_tokens:2,prompt_tokens:20,total_tokens:22,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_name:gpt-5-mini-2024-07-18,system_fingerprint:fp_560af6e559,id:chatcmpl-C5l29mi6KkQSFO3qaElDJD5Lj9nBn,service_tier:default,finish_reason:stop,logprobs:None}idrun--777ef0be-55c2-411a-a4ab-104a45c22f20-0usage_metadata{input_tokens:20,output_tokens:2,total_tokens:22,input_token_details:{audio:0,cache_read:0},output_token_details:{audio:0,reasoning:0}}输出说明AIMessage 来⾃AI的消息。从聊天模型返回作为对提⽰输⼊的响应。content 消息的内容。additional_kwargs 与消息关联的其他有效负载数据。对于来⾃AI的消息可能包括模型提供程序编码的⼯具调⽤。response_metadata 响应元数据。例如响应标头、logprobs、令牌计数、模型名称。侧重于“响应”本⾝的信息⽐如这次请求的ID、使⽤的模型版本、以及服务提供商返回的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。usage_metadata 消息的使⽤元数据例如令牌计数。侧重于“资源消耗”的量化信息即这次请求消耗了多少Token。它主要⽤于成本计算、监控和预算控制。输出解析若只想输出聊天模型返回的结果字符串可以使⽤ StrOutputParser 输出解析器组件将⼤模型输出结果解析为最可能的字符串。核⼼代码# 定义str字符串输出解析器fromlangchain_core.output_parsersimportStrOutputParser parserStrOutputParser()print(parser.invoke(result))链式执⾏通过上述步骤⽆论是调⽤⼤模型还是输出解析我们发现每次都调⽤了⼀个invoke()⽅法最终才会得到我们想要的结果。对于LangChain它给我们提供了链式执⾏的能⼒即我们只需要定义各个“组件”将它们“链起来”⼀次性执⾏即可得到最终效果。完整代码如下fromlangchain_core.messagesimportHumanMessage,SystemMessagefromlangchain_openaiimportChatOpenAIfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnableSequence# 1. 定义OpenAI模型# 默认从系统环境变量中读取 OPENAI_API_KEYmodelChatOpenAI(model_namegpt-4o-mini,openai_api_basehttps://,openai_api_keysk-****,)# 2. 定义消息# 用户消息 HumanMessage# 系统提示消息 SystemMessage 通常作为第一条消息传入# AI 消息 AIMessagemessages[SystemMessage(content请帮我进行翻译由英文翻译成中文),HumanMessage(contentmy name is xiaoming)]# 3. 调用大模型# result model.invoke(messages)# print(result)# 链式体现在哪里# 4. 定义输出解析器组件parserStrOutputParser()# print(parser.invoke(result))# 5. 定义链# 执行链 上一个Runnable实例组件的执行.invoke结果传输给下一个Runnable实例的输入# 三种方式都可以定义链# chain model | parser# chain RunnableSequence(firstmodel, lastparser)chainmodel.pipe(parser)print(chain.invoke(messages))三 引出LangChain相关概念 Runnable接⼝Runnable接⼝是使⽤LangChainComponents组件的基础。概念说明Components组件⽤来帮助当我们在构建应⽤程序时提供了⼀系列的核⼼构建块例如语⾔模型、输出解析器、检索器、编译的LangGraph图等。Runnable定义了⼀个标准接⼝允许Runnable组件Invoked调⽤:单个输⼊转换为输出。Batched批处理:多个输⼊被有效地转换为输出。Streamed流式传输:输出在⽣成时进⾏流式传输。Inspected检查: 可以访问有关 Runnable 的输⼊、输出和配置的原理图信息。Composed组合:可以组合多个Runnable以使⽤LCEL协同⼯作以创建复杂的管道。所有能⼒参考这里因此在快速上⼿中我们定义的语⾔模型model、输出解析器StrOutputParser都是Runnable接⼝的实例他们都使⽤了Invoked调⽤的能⼒回顾⼀下# 语⾔模型modelmodelChatOpenAI(modelgpt-5-mini)resultmodel.invoke(messages)# 语⾔模型是 Runnable 接⼝实例允许invoke调⽤# 输出解析器StrOutputParserparserStrOutputParser()parser.invoke(result)# 输出解析器是 Runnable 接⼝实例允许invoke调⽤ LangChainExpressionLanguageLangChainExpressionLanguageLCEL采⽤声明性⽅法从现有Runnable对象构建新的Runnable对象。通过LCEL构建出的新的Runnable对象被称为 RunnableSequence 表⽰可运⾏序列。RunnableSequence 就是⼀种 链 参考步骤6。通过调试 步骤6 就能发现chain的类型就是RunnableSequence 。如下所⽰重要的是 RunnableSequence 也是Runnable接⼝的实例它实现了完整的Runnable接⼝因此它可以⽤与任何其他Runnable相同的姿势使⽤。回顾⼀下chainmodel|parser chain.invoke(messages)# 链是 Runnable 接⼝实例允许invoke调⽤可以看到LCEL其实是⼀种编排解决⽅案它使LangChain能够以优化的⽅式处理链的运⾏时执⾏。任何两个Runnable实例都可以“链”在⼀起成序列。上⼀个可运⾏对象的 .invoke 调⽤的输出作为输⼊传递给下⼀个可运⾏对象。⽅法就是使⽤ | 管道/运算符chainmodel|parser除此之外可以使⽤ .pipe ⽅法代替。这也相当于 | 运算符在Unix/Linux系统中 pipe() 系统调⽤和 | 管道操作符都⽤于实现进程间通信这⾥同样也是迁移过来的⽤法。chainmodel.pipe(parser)四 共勉 以上就是我对【LangChain】快速上手的理解, 觉得这篇博客对你有帮助的可以点赞收藏关注支持一波~