开源模型应用落地-LangChain实用小技巧-利用结构化输出构建智能交互(二十二)

一、前言

    Langchain 是一个强大的框架,专为构建由语言模型驱动的应用而设计。其核心优势之一是支持结构化输出,使得用户可以更精确地控制和定制模型的输出格式。这种结构化输出功能,对于需要特定数据格式或结构的应用场景尤为关键,比如信息抽取、报告生成和对话系统等。通过定义特定的输出模板和字段,开发者能够确保模型返回的信息符合预期结构,从而极大地方便后续的数据处理和分析。

    此外,这种输出方式还增强了模型与其他系统的集成能力,允许无缝地将生成的内容与数据库、API 或其他服务进行交互,实现更复杂的业务逻辑和用户场景。因此,利用 Langchain 的结构化输出,开发者不仅可以提升应用的可用性和可靠性,还能够节省开发时间,使其在快速迭代和创新中占据优势。


二、术语

2.1.LangChain

    是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

    LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

   LangChain的主要特性:
        1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
        2.允许语言模型与其环境交互
        3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
        4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
        5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。

2.2.LECL

    是指“LangChain Expression Language”,它是一种描述和操作语言,用于在LangChain环境中处理和操控数据和流程。


三、前提条件 

3.1. 基础环境

  1.  操作系统:不限

3.2. 安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
pip install langchain langchain-core langchain-community langchain-openai

四、技术实现

4.1. 示例一

# -*- coding: utf-8 -*-
import os

from langchain_core.prompts import ChatPromptTemplate
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 你的Open AI Key

class CustomFormat(BaseModel):
    """指定地区的美食攻略"""
    region: str = Field(description="地区,例如:背景")
    foods: str = Field(description="推荐的美食清单")

if __name__ == '__main__':

    llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0)
    structured_llm = llm.with_structured_output(CustomFormat, method="json_mode")

    prompt = ChatPromptTemplate.from_messages([
        ("system", "请根据用户问题进行回答。用JSON格式响应,响应的内容需要提取出`region`和`foods`信息。"),
        ("human", "{query}")
    ])

    chain = {"query": RunnablePassthrough()} | prompt | structured_llm

    print(chain.invoke("广州有什么好吃的?"))

调用结果:

4.2. 示例二

# -*- coding: utf-8 -*-
import os

from langchain_core.prompts import ChatPromptTemplate
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 你的Open AI Key

class CustomFormat(BaseModel):
    """FAQ"""
    question: str = Field(description="问题描述")
    answer: str = Field(description="回答描述")

if __name__ == '__main__':

    llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0)
    structured_llm = llm.with_structured_output(CustomFormat, method="json_mode")

    prompt = ChatPromptTemplate.from_messages([
        ("system", "请根据用户问题进行回答。用JSON格式响应,响应的内容需要提取出`question`和`answer`信息。"),
        ("human", "{query}")
    ])

    chain = {"query": RunnablePassthrough()} | prompt | structured_llm

    print(chain.invoke("广州有什么好玩的地方推荐?"))

调用结果:


五、附带说明

5.1. 问题一

from langchain_core.pydantic_v1 import BaseModel过期

调整为

from pydantic import BaseModel

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术探险家

以微薄之力温暖这个世界

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值