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()
编译onnx-tensorrt产生libnvonnxparser.so
编译onnx-tensorrt产生libnvonnxparser.so
91 0
|
Python
Python:urllib解析查询参数parse_qsl、parse_qs
Python:urllib解析查询参数parse_qsl、parse_qs
208 0
GuessedAtParserWarning: No parser was explicitly specified,
GuessedAtParserWarning 一、问题描述 二、错误分析 二、解决方案
411 0
GuessedAtParserWarning: No parser was explicitly specified,
|
存储 JSON 数据库
FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder
FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder
332 0
|
数据采集 Python
urllib.parse模块
urllib.parse模块
111 0
用mxnet生成了params文件之后有什么用?
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/81185513 params文件保存的是预训练好的模型,那它有什么用? 当然是节省了训练的过程,你也不需要有样本数据,就可以实现特定的功能了。
1477 0
|
机器学习/深度学习 Python
Python ConfigParser
ConfigParser 在深度学习中,我打算用这个类来处理参数文件,xx.ini或者xx.cfg。 一、基本操作 1、基本的读取配置文件 read(filename) - 直接读取ini,cfg文件内容 se...
1267 0