【Agent】LangChain快速上手
发布时间:2026/9/26 15:59:38来源:尧图网络
这里就正式进入LangChain的详细解析了感兴趣可以持续关注。1. 内容与目标LangChain它是一个用于开发由大语言模型 (LLM) 驱动的应用程序的框架。通过前几篇我们已经说明尽管大模型在某些方面表现振奋人心但使用原生 LLM 可能会存在一些问题。例如将其当作搜索引擎去使用LLM 生成的答案可能要比其他搜索引擎查到的答案更符合你的预期但要是在复杂的场景下使用如将 LLM 嵌入应用程序时却遭遇了全新难题简单提示词Prompt得到的答案经常出现幻觉提示词结构是否可以统一规范如何实现开发过程中大模型的轻松、灵活切换大模型输出是非结构化的怎样与要求结构化数据的程序接口交互如何克服预训练模型知识陈旧的问题引入实时更新如何连接模型与外部工具或系统执行具体任务...LangChain 框架的核心目标就是应对这些挑战。它通过将自然语言处理流程拆解为标准化组件让开发者能够自由组合并高效定制工作流。2. LangChain软件安装包LangChain 生态系统包含不同的包用来准确选择要安装的功能。如下图所示主 langchain 包这个包是使用 LangChain 的起点安装方式如下pip install langchainlangchain-core 包除了 langsmith SDK 之外LangChain 生态系统中的所有包都依赖于 langchain-core包含其它包使用的基类和抽象以及 LangChain LCEL表达式语言。它由 langchain 包自动安装不需要显式安装该包。但是如果使用的功能仅在该依赖项的特定版本中可用则可以选择手动安装。如果手动安装则应确保已安装或固定的版本与所使用的任何其他集成包兼容。pip install langchain-coreIntegrations 集成包LangChain 的大部分价值来自于将各种能力进行集成如各类模型集成如 OpenAI 和 Anthropic、各类组件集成如数据存储、工具等等。LangChain 中集成好的包见这里。对于所需依赖项我们需要单独安装。例如要使用 OpenAI可以运行pip install langchain-openailangchain-community 包简单来说任何尚未拆分到独立包中的集成都存在于 langchain-community 包中。安装方式pip install langchain-communitylanggraph 包langgraph 是一个库用于使用 LLM 构建有状态的应用程序。它与 LangChain 顺利集成。安装方式pip install langgraphLangSmith SDKLangSmith SDK 由 LangChain 自动安装。但它不依赖于 langchain-core如果需要可以独立安装和使用安装方式pip install langsmith3. 详细过程3.1 步骤 1申请 API key 并配置环境变量1. 申请 API key以 DeepSeek 为例官网地址DeepSeek如果没有账号先注册账号登录成功后找到个人中心选择 API keys 配置页面点击 “Create new secret key” 按钮新增 API key将 API Key 在自己本地保存好后续接入 DeepSeek 大模型时需要使用。2. 配置环境变量将 API Key 配置在环境变量中主要是为了保证其隐私性。由于 api key 比较隐私为避免在程序中暴露可提前将 api key 配置在环境变量中这样在程序中就可以通过获取对应环境变量拿到 api key保证了 api key 的隐私。3.2 步骤 2定义大模型1.安装 DeepSeek 集成包pip install -U langchain-deepseek2.定义大模型核心代码# 定义大模型 from langchain_deepseek import ChatDeepSeek model ChatDeepSeek(modeldeepseek-chat)3.3 步骤 3定义消息列表核心代码# 定义消息列表 from langchain_core.messages import HumanMessage, SystemMessage messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ]参数说明SystemMessage表示系统角色消息系统消息通常作为输入消息序列中的第一条传入是用来启动 AI 行为的消息。HumanMessage表示用户角色消息是来自用户的、从用户传递到模型的消息。3.4 步骤 4调用大模型model 是 LangChainRunnable可运行接口的实例这意味着 model 提供了一个标准接口供我们与之交互。要简单地调用模型我们可以将消息列表传递给 .invoke 方法。使用 .invoke 方法进行大模型调用核心代码result model.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: deepseek-chat, system_fingerprint: None, id: chatcmpl-C5l29mi6KkQSFO3qaElDJD5Lj9nBn, service_tier: default, finish_reason: stop, logprobs: None} idrun--777ef0be-55c2-411a-a4ab-104a45c22f20-0 usage_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。它主要用于成本计算、监控和预算控制。3.5 步骤 5输出解析若只想输出聊天模型返回的结果字符串可以使用 StrOutputParser 输出解析器组件将大模型输出结果解析为最可能的字符串。核心代码# 定义str字符串输出解析器 from langchain_core.output_parsers import StrOutputParser parser StrOutputParser() print(parser.invoke(result))输出结果你好!3.6 步骤 6链式执行通过上述步骤无论是调用大模型还是输出解析我们发现每次都调用了一个 invoke() 方法最终才会得到我们想要的结果。对于 LangChain它给我们提供了链式执行的能力即我们只需要定义各个 “组件”将它们 “链起来”一次性执行即可得到最终效果。核心代码如下# 定义大模型 model ChatDeepSeek(modeldeepseek-chat) # 定义消息列表 messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ] # 定义输出解析器 parser StrOutputParser() # 定义链 chain model | parser # 执行链 result chain.invoke(messages) print(result)输出结果你好!快速上手完整代码参考from langchain_deepseek import ChatDeepSeek from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser # 定义大模型 model ChatDeepSeek(modeldeepseek-chat) # 定义消息列表 messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ] # 定义输出解析器 parser StrOutputParser() # 定义链 chain model | parser # 执行链 result chain.invoke(messages) print(result)3. 引出 LangChain 相关概念3.1 Runnable 接口Runnable 接口是使用 LangChain Components组件的基础。概念说明Components组件用来帮助当我们在构建应用程序时提供了一系列的核心构建块例如语言模型、输出解析器、检索器、编译的 LangGraph 图等。Runnable 定义了一个标准接口允许 Runnable 组件Invoked调用: 单个输入转换为输出。Batched批处理: 多个输入被有效地转换为输出。Streamed流式传输: 输出在生成时进行流式传输。Inspected检查: 可以访问有关 Runnable 的输入、输出和配置的原理图信息。Composed组合: 可以组合多个 Runnable使用 LCEL 协同工作以创建复杂的管道。因此在快速上手中我们定义的语言模型model、输出解析器StrOutputParser都是Runnable接口的实例他们都使用了 Invoked调用的能力回顾一下# 语言模型model model ChatOpenAI(modelgpt-5-mini) result model.invoke(messages) # 语言模型是 Runnable 接口实例允许invoke调用 # 输出解析器StrOutputParser parser StrOutputParser() parser.invoke(result) # 输出解析器是 Runnable 接口实例允许invoke调用3.2 LangChain Expression LanguageLangChain Expression LanguageLCEL采用声明性方法从现有 Runnable 对象构建新的 Runnable 对象。通过 LCEL 构建出的新的 Runnable 对象被称为 RunnableSequence表示可运行序列。 RunnableSequence 就是一种链参考步骤 6。通过调试步骤 6 就能发现chain 的类型就是 RunnableSequence。重要的是RunnableSequence 也是 Runnable 接口的实例它实现了完整的 Runnable 接口因此它可以用与任何其他 Runnable 相同的姿势使用。回顾一下chain model | parser chain.invoke(messages) # 链是 Runnable 接口实例允许invoke调用可以看到LCEL 其实是一种编排解决方案它使 LangChain 能够以优化的方式处理链的运行时执行。任何两个 Runnable 实例都可以 “链” 在一起成序列。上一个可运行对象的.invoke()调用的输出作为输入传递给下一个可运行对象。方法就是使用|管道 / 运算符chain model | parser它通过两个 Runnable 对象去创建一个 RunnableSequence。实际上 LangChain 重载了|运算符使用|运算符就相当于from langchain_core.runnables import RunnableSequence chain RunnableSequence(firstmodel, lastparser)除此之外可以使用.pipe方法代替。这也相当于|运算符在 Unix/Linux 系统中pipe () 系统调用和 | 管道操作符都用于实现进程间通信这里同样也是迁移过来的用法。chain model.pipe(parser)以上内容就是为了大家能够快速上手LangChain而准备的内容下一篇我们将要介绍关于聊天模型的相关内容。
网站建设高端定制企业官网