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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
自然语言处理 数据可视化 Java
NLP6:stanford Parser中文分词
NLP6:stanford Parser中文分词
210 0
|
Python
Python参数解析工具argparse.ArgumentParser()
Python参数解析工具argparse.ArgumentParser()
|
分布式计算 Apache Spark
《Combating Abusive Language in Chat with Apache Spark》电子版地址
Combating Abusive Language in Chat with Apache Spark
71 0
《Combating Abusive Language in Chat with Apache Spark》电子版地址
|
前端开发 JavaScript 程序员
Turbopack似乎并没有那么牛
Turbopack似乎并没有那么牛
Turbopack似乎并没有那么牛
|
存储 缓存 JSON
swc与Turbopack
本文适合对新主流技术感兴趣的小伙伴阅读
编译onnx-tensorrt产生libnvonnxparser.so
编译onnx-tensorrt产生libnvonnxparser.so
100 0
GuessedAtParserWarning: No parser was explicitly specified,
GuessedAtParserWarning 一、问题描述 二、错误分析 二、解决方案
427 0
GuessedAtParserWarning: No parser was explicitly specified,
|
存储 JSON 数据库
FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder
FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder
340 0
|
自然语言处理 Python
NLP之Stanford Parser using NLTK
因为官网的使用的很不方便,各个参数没有详细的说明,也查不到很好的资料了。所以决定使用python配合NLTK来获取Constituency Parser和Denpendency Parser。
1890 0
|
自然语言处理 机器学习/深度学习
NLP之Stanford Parser
Parser 主要有以下几个问题: Parser是什么? 如何使用Stanford Parser Parser把一个句子转变为树状结构,那么这棵树具体的是怎么样,怎么操作这棵树?也就是说,怎么把这棵树用在LSTM上。
1435 0