LangChain 学习之旅 (一):核心理念与环境实战
当开发者第一次接触大模型(LLM)时,通常是从调用各大厂商的 API 开始的。只需几行代码发送一个 HTTP 请求,就能获得模型的回答,看起来似乎非常简单。但随着业务场景逐渐复杂,真实的工程痛点开始浮现。
一、 LangChain 学习之旅:全景目录
在我们深入第一行代码之前,先来了解一下整个学习框架的脉络。本系列博客将带你从零开始,一步步掌握大模型应用开发的核心技术:
- 基础篇 (Basics):环境配置、极简调用与 Token 成本控制。(📍你在这里)
- 核心组件篇 (Core Components):
- 提示词模板 (Prompt Templates):动态构建指令。
- 输出解析器 (Output Parsers):让大模型输出结构化的 JSON 数据。
- 记忆机制 (Memory):让模型拥有多轮对话的上下文能力。
- 数据增强篇 (RAG & Data Connection):文档加载、文本切分、向量化与检索,打造属于你的企业级知识库。
- 智能体篇 (Agents & Tools):给大模型装上“手脚”,让它能自主调用搜索引擎、执行代码、操作数据库。
二、 痛点驱动:为什么我们需要 LangChain?
1. 裸调 API 的工程瓶颈
假设我们要开发一个智能客服,初期直接调用 OpenAI 或火山引擎的 API 完全足够。但没过多久,产品经理提出了新需求:
- 无缝切换模型:今天用 GPT-4,明天为了降本增效,要无缝切换到国产的豆包(Doubao)模型。如果直接写死 API 请求,意味着大量胶水代码需要重构。
- 业务上下文注入:大模型没有记忆。为了让它结合公司文档回答问题,我们需要自己写代码去切分文本、向量化、存入数据库、检索并手动拼接进 Prompt 中。
- 不可控的输出:大模型习惯自由发挥,但下游的业务代码往往需要严格的 JSON 格式才能解析。
2. LangChain 的工程定位
大模型只是大脑,而系统需要手脚和血管。
LangChain 不是另一种大模型,而是一个大模型应用编排框架。它提供了一套标准化的抽象接口,把底层各家模型厂商的 API 差异抹平,并将提示词模板(Prompt)、记忆(Memory)、外部工具(Tools)像乐高积木一样拼装起来。
三、 准备工作:环境与配置的工程实践
在真实的工程中,第一道红线就是:绝对不要把 API Key 硬编码在代码中。
为了实现本地调试与生产环境的隔离,我们需要使用 .env 文件来管理环境变量,并安装相关的 LangChain 组件。
1. 注册火山引擎获取大模型 API
在写代码之前,我们需要一个大模型提供商的账号。考虑到国内访问速度和成本,我们推荐使用字节跳动的火山引擎(Volcengine)提供的豆包大模型。对于新注册的用户,火山引擎通常会赠送高达 50 万 Token 的免费额度,足够我们完成所有的基础测试了。
- 注册与认证:访问火山引擎方舟平台并完成账号注册与实名认证。
- 获取 API Key:在控制台的“API Key 管理”中创建一个新的 API Key(格式类似于
ark-xxxxxx...)。 - 创建推理接入点:在“模型推理”菜单中,选择一个模型(例如性价比极高的
Doubao-seed-2.0-mini),点击“创建接入点”,记录下生成的接入点名称(Endpoint)。
Tip: 你可以在控制台实时查看你的免费额度消耗情况。
2. 安装核心依赖
我们需要安装 LangChain 的 OpenAI 接口封装库,以及用于加载环境变量的 python-dotenv:
pip install langchain-openai python-dotenv
3. 配置文件落地
在项目根目录创建一个 .env 文件。这里以接入火山引擎的 Doubao 模型为例:
# 底层网络请求地址(火山引擎 API 兼容 OpenAI 标准协议)
OPENAI_API_BASE="https://ark.cn-beijing.volces.com/api/v3"
# 你的火山引擎 API Key(LangChain 默认读取 OPENAI_API_KEY)
OPENAI_API_KEY="ark-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 官方原生 SDK 习惯读取 ARK_API_KEY,为了兼容性建议一并配上
ARK_API_KEY="ark-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 具体的模型推理接入点(Endpoint)
LLM_MODEL_NAME="doubao-seed-2-0-mini-260428"
通过这种方式,如果我们未来想切换到真正的 OpenAI 或者其他的本地开源模型,只需要修改这一个配置文件,业务代码可以做到零改动。
四、 实战:极简防破产版 Hello World
接下来,我们用最少的代码跑通整个链路。为了防止新手在调试期因为代码死循环或模型“话痨”而导致 Token 账单爆炸,我们在这段代码中加入了一个非常实用的工程小技巧:严格限制最大输出长度。
在 01_Basics/01_quickstart.py 中编写以下代码:
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
# 1. 加载 .env 文件中的配置到环境变量中
load_dotenv()
# 2. 实例化模型(抹平了底层 API 的调用细节)
from pydantic import SecretStr
llm = ChatOpenAI(
api_key=SecretStr(os.getenv("OPENAI_API_KEY") or os.getenv("ARK_API_KEY") or ""),
base_url=os.getenv("OPENAI_API_BASE"),
model=os.getenv("LLM_MODEL_NAME") or "doubao-seed-2-0-mini-260428",
temperature=0.1, # 降低随机性,让模型回答更简短、直接
model_kwargs={"max_tokens": 100} # 工程技巧:强制限制模型最多只能输出 100 个 token,防破产且省流
)
print("🤖 发送极简请求中...")
# 3. 发送问候
response = llm.invoke("Hi,请简单用中文跟我打个招呼!")
print(f"大模型回答:\n{response.content}")
1. 终端运行日志证明
在终端中执行该脚本,你会看到类似如下的标准化输出:
(HELLOWORLD) ➜ HelloWorld python Langchain-Learning-Journey/01_Basics/01_quickstart.py
🤖 发送极简请求中...
大模型回答:
你好呀!很高兴和你交流😊
2. 代码解析
在这段短短的几行代码中,LangChain 已经悄悄帮我们做了很多事:
- 协议适配:
ChatOpenAI类不仅能连 OpenAI,只要是兼容 OpenAI API 规范的国产大模型(如火山引擎、DeepSeek),都可以直接通过配置base_url来无缝接入。 - 入参收敛:通过
temperature和max_tokens,我们将不可控的生成过程关进了笼子里,确保输出结果在预期成本和可控逻辑范围内。
五、 下一步计划
目前,我们只是把 LangChain 当作一个“套壳的 HTTP 请求客户端”在用,这完全没有发挥出它的威力。
大模型在实际业务中最怕的是“没有上下文”。在下一篇文章中,我们将引入 LangChain 的两大核心杀器:
- Prompt Templates (提示词模板):如何把用户输入变成结构化的任务指令。
- Output Parsers (输出解析器):如何把大模型的闲聊废话剥离,强制它输出程序能直接反序列化的 JSON 数据。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)