介绍LangChain

为什么要用LangChain?

LangChain 通过标准接口(如模型、嵌入、向量存储等)帮助开发者构建由大型语言模型(LLM)驱动的应用程序。

使用 LangChain 用于:

  • 实时数据增强。轻松将大型语言模型连接到多样化的数据源和外部/内部系统,利用LangChain庞大的集成库,涵盖模型提供者、工具、向量存储器、检索器等。
  • 模型互作性。在工程团队不断试验时,不断更换型号,以找到最适合你应用需求的方案。随着行业前沿的发展,请迅速适应——LangChain的抽象设计让你保持前进且不失去动力。
  • 快速原型制作。利用LangChain模块化、基于组件的架构快速构建和迭代LLM应用。无需从头重建即可测试不同方法和工作流,加速开发周期。
  • 备生产准备的功能。通过集成如LangSmith部署可靠应用,支持监控、评估和调试。利用经过实战验证的模式和最佳实践自信地扩展。
  • 充满活力的社区和生态系统。利用丰富的集成、模板和社区贡献组件的生态系统。通过活跃的开源社区,享受持续改进并保持对最新AI发展的了解。
  • 灵活的抽象层。在适合你需求的抽象层面工作——从快速起步的高级链条到细致控制的低级组件。LangChain 随着应用的复杂性而增长。

LangChain 生态系统

虽然 LangChain 框架可以独立使用,但它也能无缝集成任何 LangChain 产品,为开发者在构建 LLM 应用时提供完整的工具套件。

为了提升你的大型语言模型应用开发,可以将LangChain与以下工具搭配使用:

  • 深度代理(新!)——构建能够规划、使用子代理并利用文件系统处理复杂任务的代理
  • LangGraph——构建能够可靠处理复杂任务的代理,使用LangGraph,我们的底层代理编排框架。LangGraph提供可定制架构、长期记忆和人机作流,并受到LinkedIn、Uber、Klarna和GitLab等公司的生产信任。
  • 集成——LangChain集成列表,包括聊天与嵌入模型、工具包等
  • LangSmith——对智能体评估和可观察性很有帮助。调试表现不佳的大型语言模型应用运行,评估智能体轨迹,提高生产环境的可见性,并随着时间提升性能。
  • LangSmith 部署——通过专门构建的部署平台轻松部署和扩展代理,支持长期运行的有状态工作流程。发现、重用、配置并在团队间共享代理,并通过 LangSmith Studio 快速迭代视觉原型。

有哪些大模型应用开发框架呢?

LangChain: 这些工具里出现最早、最成熟的,适合复杂任务分解和单智能体应用.

LlamaIndex: 专注于高效的索引和检索,适合 RAG 场景。(注意不是Meta开发的)

LangChain4J: LangChain还出了Java,Javascript两个语言的版本.

SpringAI/SpringAI Alibaba: 有待进一步成熟,此外只是简单的对于一些接口进行了封装.

SemanticKernel: 也称为sk,微软推出的,对于C#同学来说,那就是5颗星.

LangChain的使用场景

学完LangChain,如下类型的项目,大家都可以实现:

项目名称 技术点 难度
文档回答助手

Prompt + Embedding +

RetrievalQA

⭐⭐

智能日程规划助手

Agent + Tool + Memory

⭐⭐⭐  

LLM+数据库问答

SQLDatabaseToolkit + Agent

⭐⭐⭐⭐

多模型路由对话系统

RouterChain + 多 LLM

⭐⭐⭐⭐

互联网智能客服

ConversationChain + RAG +Agent

⭐⭐⭐⭐⭐

企业知识库助手(RAG + 本地模型)

VectorDB + LLM + Streamlit

⭐⭐⭐⭐⭐

LangChain资料介绍

官网地址:https://www.langchain.com/langchain

官网文档:https://python.langchain.com/docs/introduction/

API文档:https://python.langchain.com/api_reference/

github地址:https://github.com/langchain-ai/langchain

模型调用的分类

模型调用的主要方法及参数

相关方法及属性:

OpenAI(...) / ChatOpenAI(...) :创建一个模型对象(非对话类/对话类)

model.invoke(xxx) :执行调用,将用户输入发送给模型

.content :提取模型返回的实际文本内容

必须设置的参数:

base_url :大模型 API 服务的根地址

api_key :用于身份验证的密钥,由大模型服务商(如 OpenAI、百度千帆)提供

model/model_name :指定要调用的具体大模型名称(如 gpt-4-turbo 、 ERNIE-3.5-8K 等)

其它参数:

temperature :温度,控制生成文本的“随机性”,取值范围为0~1。

值越低 → 输出越确定、保守(适合事实回答)

值越高 → 输出越多样、有创意(适合创意写作)

通常,根据需要设置如下:

精确模式(0.5或更低):生成的文本更加安全可靠,但可能缺乏创意和多样性。

平衡模式(通常是0.8):生成的文本通常既有一定的多样性,又能保持较好的连贯性和准确

性。

创意模式(通常是1):生成的文本更有创意,但也更容易出现语法错误或不合逻辑的内容。

max_tokens :限制生成文本的最大长度,防止输出过长。

Token是什么?

基本单位 : 大模型处理文本的最小单位是token(相当于自然语言中的词或字),输出时逐个token

依次生成。

收费依据 :大语言模型(LLM)通常也是以token的数量作为其计量(或收费)的依据。

1个Token≈1-1.8个汉字,1个Token≈3-4个英文字母

Token与字符转化的可视化工具:

OpenAI提供:https://platform.openai.com/tokenizer

百度智能云提供:https://console.bce.baidu.com/support/#/tokenizer

max_tokens设置建议:

客服短回复:128-256。比如:生成一句客服回复(如“订单已发货,预计明天送达”)

常规对话、多轮对话:512-1024

长内容生成:1024-4096。比如:生成一篇产品说明书(包含功能、使用方法等结构)

模型调用推荐平台:closeai

这里推荐使用的平台:

考虑到OpenAI等模型在国内访问及充值的不便,大家可以使用CloseAI网站注册和充值, 具体费用自理 

https://www.closeai-asia.com

模型调用的三种方式

硬编码方式

调用对话模型
import os
import dotenv
from langchain_openai import ChatOpenAI

# 调用对话模型
chat_model = ChatOpenAI(
    # 必须要设置的三个参数
    model_name='gpt-4o-mini', # 默认使用的是gpt-3.5-turbo模型
    base_url='https://api.openai-proxy.org/v1',
    api_key='sk-8d××××××××××××××××××××××××××××××××××××',
)

# 调用模型
response = chat_model.invoke("什么是langchain?")

# 查看响应的文本
print(response.content)
调用非对话模型
import os
import dotenv
from langchain_openai import OpenAI

# 调用非对话模型
chat_model = OpenAI(
    # 必须要设置的三个参数
    model_name='gpt-4o-mini', # 默认使用的是gpt-3.5-turbo模型
    base_url='https://api.openai-proxy.org/v1',
    api_key='sk-8d××××××××××××××××××××××××××××××××××××',
)

# 调用模型
response = chat_model.invoke("什么是langchain?")

# 查看响应的文本
print(response)

环境变量方式(推荐)

第一步:

在运行中找到编辑配置:

第二步:

添加OPEN_API_KEY和OPEN_BASE_URL两个环境变量:

运行代码:

import os
import dotenv
from langchain_openai import ChatOpenAI

print(os.environ['OPENAI_BASE_URL'])
print(os.environ['OPENAI_API_KEY'])
# 调用对话模型
chat_model = ChatOpenAI(
    # 必须要设置的三个参数
    model_name='gpt-4o-mini', # 默   认使用的是gpt-3.5-turbo模型
    base_url=os.environ['OPENAI_BASE_URL'],
    api_key=os.environ['OPENAI_API_KEY'],
)

# 调用模型
response = chat_model.invoke("什么是langchain?")

# 查看响应的文本
print(response.content)

配置文件的方式

创建一个.env的文件,添加OPEN_API_KEY和OPEN_BASE_URL两个环境变量,然后通过编译器调用该文件:

运行代码:

import os
import dotenv
from langchain_openai import ChatOpenAI

# 调用对话模型
chat_model = ChatOpenAI(
    # 必须要设置的三个参数
    model_name='gpt-4o-mini', # 默认使用的是gpt-3.5-turbo模型
    base_url=os.environ['OPENAI_BASE_URL'],
    api_key=os.environ['OPENAI_API_KEY'],
)

# 调用模型
response = chat_model.invoke("什么是langchain?")

# 查看响应的文本
print(response.content)

小结

方式 安全性 持久性 适用场景
硬编码

⚠ 低

❌ 临时

本地快速测试

环境变量

✅ 中

⚠ 会话级

短期开发调试

.env 配置文件

✅✅ 高

✅ 永久

生产环境、团队协作

使用各个平台的API调用大模型

OpenAI的方式

链接:CloseAI - 亚洲规模最大的企业级AI中转平台

调用非对话模型

from openai import OpenAI
# 从环境变量读取API密钥(推荐安全存储)
client = OpenAI(api_key="sk-×××××××××××××××××××××××××××××××××",
#填写自己的api-key
base_url="https://api.openai-proxy.org/v1") #通过代码示例获取
# 调用Completion接口
response = client.completions.create(
model="gpt-3.5-turbo-instruct", # 非对话模型
prompt="请将以下英文翻译成中文:\n'Artificial intelligence will reshape the future.'",
max_tokens=100, # 生成文本最大长度
temperature=0.7, # 控制随机性
)
# 提取结果
print(response.choices[0].text.strip())

调用对话模型(推荐)

from openai import OpenAI
import os
import dotenv
dotenv.load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["OPENAI_BASE_URL"] = os.getenv("OPENAI_BASE_URL")
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "我是一位乐于助人的AI智能小助手"},
{"role": "user", "content": "你好,请你介绍一下你自己。"}
]
)
print(response.choices[0])

百度千帆平台

链接:https://cloud.baidu.com/doc/qianfan-docs/s/Mm8r1mejk

使用OpenAI的方式

from openai import OpenAI
import os
import dotenv
dotenv.load_dotenv()

# 初始化OpenAI客户端
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

messages = [{"role": "user", "content": "你是谁"}]
completion = client.chat.completions.create(
    model="deepseek-v3.2",
    messages=messages,
    # 通过 extra_body 设置 enable_thinking 开启思考模式
    extra_body={"enable_thinking": True},
    stream=True,
    stream_options={
        "include_usage": True
    },
)

reasoning_content = ""  # 完整思考过程
answer_content = ""  # 完整回复
is_answering = False  # 是否进入回复阶段
print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")

for chunk in completion:
    if not chunk.choices:
        print("\n" + "=" * 20 + "Token 消耗" + "=" * 20 + "\n")
        print(chunk.usage)
        continue

    delta = chunk.choices[0].delta

    # 只收集思考内容
    if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
        if not is_answering:
            print(delta.reasoning_content, end="", flush=True)
        reasoning_content += delta.reasoning_content

    # 收到content,开始进行回复
    if hasattr(delta, "content") and delta.content:
        if not is_answering:
            print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
            is_answering = True
        print(delta.content, end="", flush=True)
        answer_content += delta.content

使用dashscope

import os
from dashscope import Generation

# 初始化请求参数
messages = [{"role": "user", "content": "你是谁?"}]

completion = Generation.call(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="deepseek-v3.2",
    messages=messages,
    result_format="message",  # 设置结果格式为 message
    enable_thinking=True,
    stream=True,              # 开启流式输出
    incremental_output=True,  # 开启增量输出
)

reasoning_content = ""  # 完整思考过程
answer_content = ""     # 完整回复
is_answering = False    # 是否进入回复阶段

print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")

for chunk in completion:
    message = chunk.output.choices[0].message
    # 只收集思考内容
    if "reasoning_content" in message:
        if not is_answering:
            print(message.reasoning_content, end="", flush=True)
        reasoning_content += message.reasoning_content

    # 收到 content,开始进行回复
    if message.content:
        if not is_answering:
            print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
            is_answering = True
        print(message.content, end="", flush=True)
        answer_content += message.content

print("\n" + "=" * 20 + "Token 消耗" + "=" * 20 + "\n")
print(chunk.usage)

智谱的GLM

链接:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys

使用OpenAI的方式

from openai import OpenAI

client = OpenAI(
    api_key="8d××××××××××××××××××××××××××××××××××××",
    base_url="https://open.bigmodel.cn/api/paas/v4/"
)

completion = client.chat.completions.create(
    model="glm-4.7",
    messages=[
        {"role": "system", "content": "你是一个聪明且富有创造力的小说作家"},
        {"role": "user", "content": "请你作为童话故事大王,写一篇短篇童话故事"}
    ],
    top_p=0.7,
    temperature=0.9
)

print(completion.choices[0].message.content)

使用langchain的方式

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage  # 修改这里

# 创建 LLM 实例
llm = ChatOpenAI(
    temperature=0.7,
    model="glm-4.7",
    openai_api_key="8d××××××××××××××××××××××××××××××××××××",
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

# 创建消息
messages = [
    SystemMessage(content="你是一个有用的 AI 助手"),
    HumanMessage(content="请介绍一下人工智能的发展历程")
]

# 调用模型
response = llm.invoke(messages)  # 注意:使用 invoke 方法
print(response.content)

硅基流动平台

链接:https://www.siliconflow.cn/

OpenAI方式

from openai import OpenAI

client = OpenAI(api_key="8d××××××××××××××××××××××××××××××××××××",
                base_url="https://api.siliconflow.cn/v1")
response = client.chat.completions.create(
    # model='Pro/deepseek-ai/DeepSeek-R1',
    model="Qwen/Qwen2.5-72B-Instruct",
    messages=[
        {'role': 'user',
        'content': "推理模型会给市场带来哪些新的机会"}
    ],
    stream=True
)

for chunk in response:
    if not chunk.choices:
        continue
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.choices[0].delta.reasoning_content:
        print(chunk.choices[0].delta.reasoning_content, end="", flush=True)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐