LangChain-02 JsonOutputParser

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: LangChain-02 JsonOutputParser

安装依赖

pip install --upgrade --quiet  langchain-core langchain-community langchain-openai
• 1

我在环境变量中配置了,所以后续在代码中可以省略这个参数。

export OPENAI_API_KEY="sk-UkyBxxxx"
export OPENAI_API_BASE="https://wzk....."
• 1
• 2

编写代码

from langchain_core.output_parsers import JsonOutputParser
from langchain_openai.chat_models import ChatOpenAI

async def main():
    model = ChatOpenAI(
            model="gpt-3.5-turbo",
        )
    chain = (
        model | JsonOutputParser()
    )  # Due to a bug in older versions of Langchain, JsonOutputParser did not stream results from some models
    async for text in chain.astream(
        'output a list of the countries france, spain and japan and their populations in JSON format. Use a dict with an outer key of "countries" which contains a list of countries. Each country should have the key `name` and `population`'
    ):
        print(text, flush=True)


if __name__ == '__main__':
    import asyncio
    asyncio.run(main())

执行代码

➜ python3 test04.py
{}
{'countries': []}
{'countries': [{}]}
{'countries': [{'name': ''}]}
{'countries': [{'name': 'France'}]}
{'countries': [{'name': 'France', 'population': 670}]}
{'countries': [{'name': 'France', 'population': 670760}]}
{'countries': [{'name': 'France', 'population': 67076000}]}
{'countries': [{'name': 'France', 'population': 67076000}, {}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': ''}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain'}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 467}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 467330}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {'name': ''}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {'name': 'Japan'}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {'name': 'Japan', 'population': 126}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {'name': 'Japan', 'population': 126476}]}
{'countries': [{'name': 'France', 'population': 67076000}, {'name': 'Spain', 'population': 46733038}, {'name': 'Japan', 'population': 126476458}]}

提取JSON

定义一个函数

def _extract_country_names(inputs):
    """A function that does not operates on input streams and breaks streaming."""
    if not isinstance(inputs, dict):
        return ""

    if "countries" not in inputs:
        return ""

    countries = inputs["countries"]

    if not isinstance(countries, list):
        return ""

    country_names = [
        country.get("name") for country in countries if isinstance(country, dict)
    ]
    return country_names

通过 Chain 将函数链接起来

# 上文写的是:model | JsonOutputParser(),这里修改为:
chain = model | JsonOutputParser() | _extract_country_names

再次执行

➜ python3 test04.py
[None, '', 'France', 'France', 'France', 'France', 'France', None, 'France', '', 'France

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
Python
Python参数解析工具argparse.ArgumentParser()
Python参数解析工具argparse.ArgumentParser()
|
人工智能
Learn R package together--(3)
论文中作图经常会有合并图排版需求,一般会放入PPT中或AI手动调节,若是在R中出图前直接调好岂不是更美滋滋,So本次就介绍几种关于合并图形的包cowplot、gridExtra、ggpubr、patchwork
73 0
|
XML JSON 测试技术
Python之configparser模块详解和使用
Python之configparser模块详解和使用
88 0
Python之configparser模块详解和使用
GuessedAtParserWarning: No parser was explicitly specified,
GuessedAtParserWarning 一、问题描述 二、错误分析 二、解决方案
420 0
GuessedAtParserWarning: No parser was explicitly specified,
用mxnet生成了params文件之后有什么用?
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/81185513 params文件保存的是预训练好的模型,那它有什么用? 当然是节省了训练的过程,你也不需要有样本数据,就可以实现特定的功能了。
1480 0
|
机器学习/深度学习 Python
Python ConfigParser
ConfigParser 在深度学习中,我打算用这个类来处理参数文件,xx.ini或者xx.cfg。 一、基本操作 1、基本的读取配置文件 read(filename) - 直接读取ini,cfg文件内容 se...
1268 0
|
JavaScript 前端开发 PHP
选择使用正确的 Markdown Parser
本文讲的是选择使用正确的 Markdown Parser,Ray提供的一门关于MarkDown课程将会分享这些不同的版本都拥有哪些特性去帮助你做出明智的选择。
2822 0