LangChain-03 astream_events 流输出

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

内容简介

  • 尝试用 FAISSDocArrayInMemorySearch 将数据向量化后检索
  • astream_events 的效果为 |H|arrison| worked| at| Kens|ho|.||

安装依赖

# 之前的依赖即可
pip install --upgrade --quiet  langchain-core langchain-community langchain-openai
# Win或Linux用户可以试试 FAISS
pip install faiss
# mac用户应该为
pip install faiss-cpu

编写代码

我没有用 FAISS,这里替换为:DocArrayInMemorySearch

# MacBookProM1 FAISS没有包,可能是 faiss-cpu
# from langchain_community.vectorstores import FAISS
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import OpenAIEmbeddings
from langchain_openai.chat_models import ChatOpenAI


async def main():
    template = """Answer the question based only on the following context:
    {context}

    Question: {question}
    """
    prompt = ChatPromptTemplate.from_template(template)
    vectorstore = DocArrayInMemorySearch.from_texts(
        ["harrison worked at kensho"], embedding=OpenAIEmbeddings()
    )
    retriever = vectorstore.as_retriever()
    model = ChatOpenAI(
        model="gpt-3.5-turbo",
    )
    retrieval_chain = (
            {
                "context": retriever.with_config(run_name="Docs"),
                "question": RunnablePassthrough(),
            }
            | prompt
            | model.with_config(run_name="my_llm")
            | StrOutputParser()
    )
    async for event in retrieval_chain.astream_events(
            "where did harrison work?", version="v1", include_names=["Docs", "my_llm"]
    ):
        kind = event["event"]
        if kind == "on_chat_model_stream":
            print(event["data"]["chunk"].content, end="|")
        elif kind in {"on_chat_model_start"}:
            print()
            print("Streaming LLM:")
        elif kind in {"on_chat_model_end"}:
            print()
            print("Done streaming LLM.")
        elif kind == "on_retriever_end":
            print("--")
            print("Retrieved the following documents:")
            print(event["data"]["output"]["documents"])
        elif kind == "on_tool_end":
            print(f"Ended tool: {event['name']}")
        else:
            pass

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

运行结果

➜ python3 test03.py
/Users/wuzikang/Desktop/py/langchain_test/own_learn/env/lib/python3.12/site-packages/pydantic/_migration.py:283: UserWarning: `pydantic.error_wrappers:ValidationError` has been moved to `pydantic:ValidationError`.
  warnings.warn(f'`{import_path}` has been moved to `{new_location}`.')
/Users/wuzikang/Desktop/py/langchain_test/own_learn/env/lib/python3.12/site-packages/langchain_core/_api/beta_decorator.py:86: LangChainBetaWarning: This API is in beta and may change in the future.
  warn_beta(
--
Retrieved the following documents:
[Document(page_content='harrison worked at kensho')]
Streaming LLM:
|H|arrison| worked| at| Kens|ho|.||
Done streaming LLM.

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
11月前
|
XML JSON 数据格式
如何在langchain中对大模型的输出进行格式化
我们知道在大语言模型中, 不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便。
|
2月前
|
Linux C语言 Python
perf_event_open 学习 —— 通过read的方式读取硬件技术器
perf_event_open 学习 —— 通过read的方式读取硬件技术器
|
3月前
|
机器人 API UED
Gradio 流式输出教程
本文是Gradio流式输出教程,介绍了如何通过Gradio的Blocks API实现聊天机器人的流式文本输出,包括两个示例:一个简单的ChatBot流式输出示例和一个更复杂的输入处理与输出分离的流式输出示例,旨在改善用户体验并为实时处理积累技术。
Gradio 流式输出教程
|
3月前
|
人工智能 前端开发
ProChat 1.0 使用问题之在 ProChat 中实现流式输出,如何操作
ProChat 1.0 使用问题之在 ProChat 中实现流式输出,如何操作
|
5月前
|
存储 Java API
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
83 0
|
6月前
获取boost::beats::buffers打印的数据
获取boost::beats::buffers打印的数据
|
存储 测试技术 索引
ES中数据流Data streams详解
ES中数据流Data streams详解
768 0
ES中数据流Data streams详解
|
测试技术 API 数据库
Flink 通过 State Processor API 实现状态的读取和写入
在 1.9 版本之前,Flink 运行时的状态对于用户来说是一个黑盒,我们是无法访问状态数据的,从 Flink-1.9 版本开始,官方提供了 State Processor API 这让用户读取和更新状态成为了可能,我们可以通过 State Processor API 很方便的查看任务的状态,还可以在任务第一次启动的时候基于历史数据做状态冷启动。从此状态对于用户来说是透明的。下面就来看一下 State Processor API 的使用。
Flink 通过 State Processor API 实现状态的读取和写入
|
存储 索引
Elastic:深入了解数据流Data Stream
最近看到不少同学反馈数据流的问题,特针对数据流谈谈自己的理解,以供大家参考。
317 0
|
机器学习/深度学习 移动开发 JSON
什么是流式输出?
流式输出在阿里内部已经遍地开花,大家耳熟能详却又好奇不已。清楚的是知道它是性能利器从而提升业务转化,不清楚的是到底什么样的技术才算是流式输出?支撑流式输出的技术理论又有哪些?流式输出适合什么样的应用场景?今天我们就来揭开这层面纱,让大家雾里看花但又能清清楚楚地看到“花”。
什么是流式输出?