langchain 入门指南 - JSON 形式输出大模型的响应

简介: langchain 入门指南 - JSON 形式输出大模型的响应

在一些入门例子中,我们会发现,我们可以告诉 LLM 如何输出,然后输出的结果真的是我们想要的,比如下面这个例子:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.5, max_tokens=200)
summarizing_prompt_template = """
输出为 JSON 格式,包含字段 content、summary。
总结以下文本为一个 20 字以内的句子:
---
{content}
"""
prompt = PromptTemplate.from_template(summarizing_prompt_template)
summarizing_chain = prompt | llm | StrOutputParser()
print(summarizing_chain.invoke({"content": "这是一个测试。"}))

在实际使用中,content 可能是一个很长的文本。

输出:

{
  "content": "这是一个测试。",
  "summary": "这是一个测试。"
}

正如某些例子上经常写的 “You are a helpful assistant”,其实从某种程度上来说,我们确实可以把 LLM 看作是我们的一名得力助手。

这名助手是可以理解我们说的话并作出回应的。

因此,我们就可以告诉 LLM,我们希望输出的格式是 JSON,然后我们可以在 JSON 中定义我们希望输出的字段。

langchain 中的 JSON 输出

在上面这个例子中,其实是等于我们给了 LLM 一个指令,告诉它我们希望输出的格式是 JSON,然后我们定义了 JSON 的格式。

既然很多时候我们都想要给我们的 LLM 一个指令,那为何不把这些逻辑固定下来呢?

为了解决这个问题,langchain 的 PromptTemplate 为我们提供了指定输出的指令的通用解决方案。

from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    model_name="gpt-3.5-turbo",
    temperature=0.5,
    max_tokens=200
)
response_schemas = [
    ResponseSchema(name="content", description="The original content"),
    ResponseSchema(name="summary", description="The summary of the content"),
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
summarizing_prompt_template = """
{format_instructions}
总结以下文本为一个 20 字以内的句子:
---
{content}
"""
prompt = PromptTemplate.from_template(summarizing_prompt_template, partial_variables={'format_instructions': format_instructions})
summarizing_chain = prompt | llm | output_parser
print(summarizing_chain.invoke({"content": "这是一个测试。"}))

输出:

{
  "content": "这是一个测试。",
  "summary": "这是一个测试。"
}

说明:

  1. ResponseSchema 用于定义输出的字段,name 为字段名,description 为字段描述。这些信息是给 LLM 看的。LLM 会根据这些信息来输出我们想要的结果。
  2. partial_variables 用于传递部分变量给模板,剩下的变量会在调用 LLM 的时候再传递。

在上面这个例子中,我们实际传递给 LLM 的模板是:

The output should be a markdown code snippet formatted in the following schema, including the leading and trailing "```json" and "```":
```json
{
  "content": string  // The original content
  "summary": string  // The summary of the content
}
```
总结以下文本为一个 20 字以内的句子:
---
这是一个测试。

这个模板告诉 LLM,我们希望输出的格式是 JSON,然后我们定义了 JSON 的格式。

总结

在 langchain 中,我们可以通过 ResponseSchema 来定义我们希望输出的字段,然后生成一个 prompt,传递给 LLM,让 LLM 知道我们希望输出的格式是什么。


相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
11月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
3611 1
|
人工智能 数据库
智能体(AI Agent)开发实战之【LangChain】(四)结合大模型基于RAG实现本地知识库问答和纠错
本文介绍如何基于RAG实现知识库问答系统的输入内容纠错功能。通过加载本地知识库、构建向量数据库,结合大语言模型对输入文本进行检索比对与纠错优化,提升问答准确性。
|
人工智能 自然语言处理 数据挖掘
智能体(AI Agent)开发实战之【LangChain】(三)结合大模型基于RAG实现本地知识库问答优化
智能体(AI Agent)开发实战之【LangChain】(三)结合大模型基于RAG实现本地知识库问答优化
|
数据采集 存储 人工智能
智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答
智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答
|
人工智能 API 开发者
智能体(AI Agent)开发实战之【LangChain】(一)接入大模型输出结果
LangChain 是一个开源框架,专为构建与大语言模型(LLMs)相关的应用设计。通过集成多个 API、数据源和工具,助力开发者高效构建智能应用。本文介绍了 LangChain 的环境准备(如安装 LangChain、OpenAI 及国内 DeepSeek 等库)、代码实现(以国内开源大模型 Qwen 为例,展示接入及输出结果的全流程),以及核心参数配置说明。LangChain 的灵活性和强大功能使其成为开发对话式智能应用的理想选择。
|
存储 人工智能 监控
通过Milvus和Langchain快速构建基于百炼大模型的LLM问答系统
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
1617 4
|
JSON 人工智能 API
程序调用大模型返回结构化输出(JSON)
本文介绍了如何使用讯飞星火大模型API,并通过Python封装实现结构化数据输出。首先,通过封装SparkAI类,实现了与讯飞星火API的交互,确保了调用的安全性和便捷性。接着,利用Pydantic库定义了数据模型`CalendarEvent`,确保从大模型获取的回答能够被正确解析成预设的结构化JSON格式,从而解决了大模型回答不规范的问题。示例代码展示了如何构造请求、接收并解析响应,最终输出结构化的活动信息。
2141 6
|
人工智能 前端开发 JavaScript
前端大模型入门(二):掌握langchain的核心Runnable接口
Langchain.js 是 Langchain 框架的 JavaScript 版本,专为前端和后端 JavaScript 环境设计。最新 v0.3 版本引入了强大的 Runnable 接口,支持灵活的执行方式和异步操作,方便与不同模型和逻辑集成。本文将详细介绍 Runnable 接口,并通过实现自定义 Runnable 来帮助前端人员快速上手。
907 1
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
5482 2

热门文章

最新文章