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中对大模型的输出进行格式化
我们知道在大语言模型中, 不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便。
|
1月前
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
33 2
|
2月前
|
安全 API
在FS/IO上下文使用的GFP掩码 【ChatGPT】
在FS/IO上下文使用的GFP掩码 【ChatGPT】
33 10
|
2月前
|
Java 数据处理
Stream流的简单使用
这篇文章介绍了Java中Stream流的基本概念和使用方法。文章解释了Stream流的三类方法:获取流、中间方法和终结方法。详细讨论了如何生成Stream流,包括从Collection体系集合、Map体系集合、数组和同种数据类型的多个数据中生成流。接着,介绍了Stream流的中间操作方法,如`filter`、`limit`、`skip`、`concat`和`distinct`。文章还讨论了Stream流的终结方法,如`forEach`和`count`,以及收集方法,如`collect`。最后,通过几个例子演示了如何使用Stream流进行数据处理和收集操作。
|
3月前
|
机器人 API UED
Gradio 流式输出教程
本文是Gradio流式输出教程,介绍了如何通过Gradio的Blocks API实现聊天机器人的流式文本输出,包括两个示例:一个简单的ChatBot流式输出示例和一个更复杂的输入处理与输出分离的流式输出示例,旨在改善用户体验并为实时处理积累技术。
Gradio 流式输出教程
|
3月前
|
人工智能 前端开发
ProChat 1.0 使用问题之在 ProChat 中实现流式输出,如何操作
ProChat 1.0 使用问题之在 ProChat 中实现流式输出,如何操作
|
3月前
|
消息中间件 Kafka Go
从Go channel中批量读取数据
从Go channel中批量读取数据
|
5月前
|
前端开发 应用服务中间件 PHP
解决php因为输出内容太短无法流式(Stream)输出问题
本文探讨了PHP流式输出的问题,指出当每次`echo`的内容过短时,前端可能无法实时接收。通过测试发现,需达到一定长度(如1024字节)时流式输出才会生效。为解决此问题,建议在PHP代码中检查输出内容长度,不足时拼接特殊标记,前端接收到后通过正则表达式移除。示例代码提供了解决方案,文章鼓励读者留言讨论和点赞分享。关注作者微信公众号【xdub】获取更多相关内容。
55 2
|
6月前
Pyglet控件的批处理参数batch和分组参数group简析
Pyglet控件的批处理参数batch和分组参数group简析
41 0
|
存储 消息中间件 缓存
Feed 流系统实战
Feed 流系统实战
213 3