欢迎光临
我们一直在努力

LangChain怎么用?一文带你搞懂核心组件与代码

摘要:LangChain是Python中用于封装大模型功能的框架,可极大简化开发流程。本文基于LangChain 0.3版本,系统讲解模型调用、多轮对话、输出格式控制以及四种Prompt模板的使用方法,每个知识点均配有完整可运行代码示例。适合大模型应用开发初学者快速上手。

目录

  • LangChain概述与核心组件
  • 语言模型基础调用
  • 多轮对话场景模拟
  • 输出格式控制
  • Prompt模板封装
  • 参考资源
  • 1. LangChain概述与核心组件

    LangChain是一个Python框架,将大模型常用功能封装到一起,集成多种工具,让开发者可以更快捷地构建AI应用。当前最新版本为LangChain 0.3。

    核心组件共五个:

    组件作用
    语言模型 选择使用哪个模型,如GPT-3.5、GPT-4
    提示词管理 管理Prompt,让模型输出更精确的数据
    链(Chain) 将各组件连接在一起运行,实现功能组装
    记忆(Memory) 保存上下文对话信息
    代理(Agent) 自主决策和执行任务的智能体

    2. 语言模型基础调用

    2.1 环境准备

    pip install langchain-openai

    import os
    os.environ["OPENAI_API_KEY"] = "your-api-key"
    # 如需代理可设置
    # os.environ["HTTP_PROXY"] = "…"

    2.2 基础调用代码

    from langchain_openai import ChatOpenAI

    # 创建模型实例,默认使用GPT-3.5
    llm = ChatOpenAI()

    # 调用模型
    result = llm.invoke("你是谁")
    print(result.content)

    2.3 查看和切换模型

    # 打印当前使用的模型名称
    print(llm.model_name) # 默认输出 gpt-3.5-turbo

    # 切换模型
    llm = ChatOpenAI(model_name="gpt-4o")

    每次调用消耗的token数量因模型而异,GPT-4系列消耗更多。

    3. 多轮对话场景模拟

    通过设置系统角色、用户角色和AI角色,模拟特定对话场景。

    from langchain_core.messages import SystemMessage, HumanMessage, AIMessage

    messages = [
    SystemMessage(content="你是AGI课堂的课程助理,你的名字叫Bob"),
    HumanMessage(content="我是学员Tom"),
    AIMessage(content="欢迎Tom同学,有什么可以帮助你的?"),
    HumanMessage(content="我是谁?你是谁?")
    ]

    result = llm.invoke(messages)
    print(result.content)

    此方法用于调试AI在特定对话场景中的表现,优化对话流程。

    4. 输出格式控制

    LangChain提供多种输出解析器,强制模型按指定格式返回数据,便于代码解析和使用。

    4.1 列表格式输出

    from langchain.output_parsers import CommaSeparatedListOutputParser
    from langchain.prompts import PromptTemplate

    parser = CommaSeparatedListOutputParser()
    format_instructions = parser.get_format_instructions()

    prompt = PromptTemplate(
    template="给我5个{subject}。\\n{format_instructions}",
    input_variables=["subject"],
    partial_variables={"format_instructions": format_instructions}
    )

    _input = prompt.format(subject="心情词汇")
    response = llm.invoke(_input)
    parsed = parser.parse(response.content)
    print(parsed) # 输出Python列表

    4.2 时间格式输出

    from langchain.output_parsers import DatetimeOutputParser

    parser = DatetimeOutputParser()
    # 用法与列表格式类似,返回datetime对象

    4.3 自定义JSON格式输出

    通过继承BaseModel定义结构化输出。

    from langchain_core.pydantic_v1 import BaseModel, Field
    from langchain.output_parsers import PydanticOutputParser

    class AuthorInfo(BaseModel):
    name: str = Field(description="作家的名字")
    nationality: str = Field(description="作家的国籍")
    works: list = Field(description="作家的代表作列表")

    parser = PydanticOutputParser(pydantic_object=AuthorInfo)
    format_instructions = parser.get_format_instructions()

    prompt = PromptTemplate(
    template="回答用户的问题。\\n{format_instructions}\\n问题:{question}",
    input_variables=["question"],
    partial_variables={"format_instructions": format_instructions}
    )

    _input = prompt.format(question="莫言是谁")
    response = llm.invoke(_input)
    parsed = parser.parse(response.content)
    print(parsed) # 输出AuthorInfo对象,包含name、nationality、works

    GPT-4在自定义格式解析上效果更稳定,GPT-3.5可能出现解析失败,多次运行可获得完整结果。

    5. Prompt模板封装

    5.1 基础模板(PromptTemplate)

    from langchain.prompts import PromptTemplate

    template = PromptTemplate.from_template("你好,我的名字叫{name}")
    print(template.format(name="小明"))

    5.2 聊天场景模板

    from langchain.prompts import ChatPromptTemplate

    template = ChatPromptTemplate.from_messages([
    ("system", "你是{company}的客服助手,你的名字叫{assistant_name}"),
    ("human", "你好,我想问一下{question}")
    ])

    messages = template.format_messages(
    company="AGI课堂",
    assistant_name="Bob",
    question="你是谁"
    )
    result = llm.invoke(messages)
    print(result.content)

    5.3 示例模板(FewShotPromptTemplate)

    通过示例让模型学习输出格式。

    from langchain.prompts import FewShotPromptTemplate

    examples = [
    {"input": "北京天气怎么样", "output": "北京市"},
    {"input": "南京下雨吗", "output": "南京市"},
    {"input": "武汉热吗", "output": "武汉市"}
    ]

    example_template = """
    输入:{input}
    输出:{output}
    """

    prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=PromptTemplate.from_template(example_template),
    prefix="请根据示例回答问题",
    suffix="输入:{input}\\n输出:",
    input_variables=["input"]
    )

    _input = prompt.format(input="长沙多少度")
    response = llm.invoke(_input)
    print(response.content) # 输出长沙市

    5.4 文档模板(外部文件管理)

    将提示词独立存放于外部文件,实现代码与提示词分离,便于维护。

    创建template.json:

    {
    "template": "我的名字叫{name},我喜欢{thing}"
    }

    加载并使用:

    import json
    from langchain.prompts import PromptTemplate

    with open("template.json", "r") as f:
    data = json.load(f)

    template = PromptTemplate.from_template(data["template"])
    print(template.format(name="小明", thing="编程"))

    优势:提示词文本量大时,与Python代码分开管理,可维护性更高。

    6. 参考资源

    • 本文基于B站视频《20分钟学会LangChain,全面解析+项目实战+代码讲解》整理撰写,通过Ai好记完成视频转录,一键获取核心步骤及代码,如果你也有通过音视频学习AI的需求,推荐试试这个工具,省时又省力!

    如有问题欢迎评论区交流。如果本文对你有帮助,点赞、收藏、转发支持~

    赞(0)
    未经允许不得转载:171主机测评 » LangChain怎么用?一文带你搞懂核心组件与代码
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址