langchain如何进行流式输出
在使用langchain框架,当希望让模型输出的数据可以在前端进行流式输出时,可以采用该方法。
a.astream_events解释:a为Agent_executor,这个for循环,会将在进行流式输出的事件都给循环一下,其中的判断是看是否到了模型输出的部分。
事件例子如下所示:
{'event': 'on_llm_start', 'data': {'input': {'input': '你好'}}, 'name': 'Ollama', 'tags': ['seq:step:3'], 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text='Thought')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=':')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' The')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' user')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' has')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' greeted')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' me')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=',')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
{'event': 'on_llm_stream', 'data': {'chunk': GenerationChunk(text=' but')}, 'run_id': 'e8e7f241-d3bc-445b-b1c9-f3d3e4d1a62e', 'name': 'Ollama', 'tags': ['seq:step:3'], 'metadata': {}, 'parent_ids': ['0f0c607d-d651-4f47-90d0-654fb746ee44', '8f7d306d-6ac3-4e3a-9d85-36238cfe2ea5']}
--------
async def stream_out():
chunks = ''
async for event in a.astream_events({'input': '你好'}, version='v2', include_names=['Ollama']):
if event['event'] == 'on_llm_stream':
chunks = chunks + event['data']['chunk'].text
print(chunks)
# pprint.pprint(chunks, depth=1)
asyncio.run(stream_out())
而我们想要的东西仅仅是在llm_stream过程中的,因而进行判断。include_names是可以根据名字排除掉一些不需要的事件。
除了Agent之外的如何进行流式输出可以查看官方文档里面的,有问题欢迎大家在评论区进行留言。
参考链接: