%%capture --no-stderr
%pip install --quiet -U langgraph langchain_openai langgraph_sdk
import os, getpass
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
_set_env("OPENAI_API_KEY")
请注意,我们使用 RunnableConfig
配合 call_model
来实现逐令牌流式传输。该功能仅在 Python < 3.11 版本中需要额外配置。此处包含该配置是为了兼容在 CoLab(默认使用 Python 3.x 环境)中运行本笔记本的情况。
from IPython.display import Image, display
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage, RemoveMessage
from langchain_core.runnables import RunnableConfig
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph, START, END
from langgraph.graph import MessagesState
# LLM
model = ChatOpenAI(model="gpt-4o", temperature=0)
# State
class State(MessagesState):
summary: str
# Define the logic to call the model
def call_model(state: State, config: RunnableConfig):
# Get summary if it exists
summary = state.get("summary", "")
# If there is summary, then we add it
if summary:
# Add summary to system message
system_message = f"Summary of conversation earlier: {summary}"
# Append summary to any newer messages
messages = [SystemMessage(content=system_message)] + state["messages"]
else:
messages = state["messages"]
response = model.invoke(messages, config)
return {"messages": response}
def summarize_conversation(state: State):
# First, we get any existing summary
summary = state.get("summary", "")
# Create our summarization prompt
if summary:
# A summary already exists
summary_message = (
f"This is summary of the conversation to date: {summary}\n\n"
"Extend the summary by taking into account the new messages above:"
)
else:
summary_message = "Create a summary of the conversation above:"
# Add prompt to our history
messages = state["messages"] + [HumanMessage(content=summary_message)]
response = model.invoke(messages)
# Delete all but the 2 most recent messages
delete_messages = [RemoveMessage(id=m.id) for m in state["messages"][:-2]]
return {"summary": response.content, "messages": delete_messages}
# Determine whether to end or summarize the conversation
def should_continue(state: State):
"""Return the next node to execute."""
messages = state["messages"]
# If there are more than six messages, then we summarize the conversation
if len(messages) > 6:
return "summarize_conversation"
# Otherwise we can just end
return END
# Define a new graph
workflow = StateGraph(State)
workflow.add_node("conversation", call_model)
workflow.add_node(summarize_conversation)
# Set the entrypoint as conversation
workflow.add_edge(START, "conversation")
workflow.add_conditional_edges("conversation", should_continue)
workflow.add_edge("summarize_conversation", END)
# Compile
memory = MemorySaver()
graph = workflow.compile(checkpointer=memory)
display(Image(graph.get_graph().draw_mermaid_png()))
# Create a thread
config = {"configurable": {"thread_id": "1"}}
# Start conversation
for chunk in graph.stream({"messages": [HumanMessage(content="hi! I'm Lance")]}, config, stream_mode="updates"):
print(chunk)
{'conversation': {'messages': AIMessage(content='Hi Lance! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_25624ae3a5', 'finish_reason': 'stop', 'logprobs': None}, id='run-6d58e31e-a278-4df6-ab0a-bb51d08ca037-0', usage_metadata={'input_tokens': 11, 'output_tokens': 10, 'total_tokens': 21})}}
现在,我们只需打印状态更新。
# Start conversation
for chunk in graph.stream({"messages": [HumanMessage(content="hi! I'm Lance")]}, config, stream_mode="updates"):
chunk['conversation']["messages"].pretty_print()
================================== Ai Message ==================================
Hi Lance! How are you doing today?
现在,我们可以看到 stream_mode="values"
。
这是在调用 conversation
节点后,图的完整状态(full state
)。
# Start conversation, again
config = {"configurable": {"thread_id": "2"}}
# Start conversation
input_message = HumanMessage(content="hi! I'm Lance")
for event in graph.stream({"messages": [input_message]}, config, stream_mode="values"):
for m in event['messages']:
m.pretty_print()
print("---"*25)
================================ Human Message ================================= hi! I'm Lance --------------------------------------------------------------------------- ================================ Human Message ================================= hi! I'm Lance ================================== Ai Message ================================== Hi Lance! How can I assist you today? ---------------------------------------------------------------------------
流式令牌处理¶
我们通常需要传输的不仅仅是图状态。
特别是在聊天模型调用中,实时传输生成过程中的令牌是常见需求。
我们可以通过使用 .astream_events
方法实现这一功能,该方法会在节点内部事件发生时实时回传事件流!
每个事件都是一个包含以下键的字典:
event
:表示被触发的事件类型name
:事件名称data
:与该事件关联的数据metadata
:包含事件发射节点标识langgraph_node
让我们具体看看。
config = {"configurable": {"thread_id": "3"}}
input_message = HumanMessage(content="Tell me about the 49ers NFL team")
async for event in graph.astream_events({"messages": [input_message]}, config, version="v2"):
print(f"Node: {event['metadata'].get('langgraph_node','')}. Type: {event['event']}. Name: {event['name']}")
/var/folders/l9/bpjxdmfx7lvd1fbdjn38y5dh0000gn/T/ipykernel_66136/946416104.py:3: LangChainBetaWarning: This API is in beta and may change in the future. async for event in graph.astream_events({"messages": [input_message]}, config, version="v2"):
Node: . Type: on_chain_start. Name: LangGraph Node: __start__. Type: on_chain_start. Name: __start__ Node: __start__. Type: on_chain_end. Name: __start__ Node: conversation. Type: on_chain_start. Name: conversation Node: conversation. Type: on_chat_model_start. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_stream. Name: ChatOpenAI Node: conversation. Type: on_chat_model_end. Name: ChatOpenAI Node: conversation. Type: on_chain_start. Name: ChannelWrite<conversation,messages,summary> Node: conversation. Type: on_chain_end. Name: ChannelWrite<conversation,messages,summary> Node: conversation. Type: on_chain_start. Name: should_continue Node: conversation. Type: on_chain_end. Name: should_continue Node: conversation. Type: on_chain_stream. Name: conversation Node: conversation. Type: on_chain_end. Name: conversation Node: . Type: on_chain_stream. Name: LangGraph Node: . Type: on_chain_end. Name: LangGraph
核心要点在于:图中聊天模型生成的令牌具有 on_chat_model_stream
类型。
我们可以通过 event['metadata']['langgraph_node']
来选择要流式输出的节点。
而 event['data']
可用于获取每个事件的实际数据,在本例中即为 AIMessageChunk
。
node_to_stream = 'conversation'
config = {"configurable": {"thread_id": "4"}}
input_message = HumanMessage(content="Tell me about the 49ers NFL team")
async for event in graph.astream_events({"messages": [input_message]}, config, version="v2"):
# Get chat model tokens from a particular node
if event["event"] == "on_chat_model_stream" and event['metadata'].get('langgraph_node','') == node_to_stream:
print(event["data"])
{'chunk': AIMessageChunk(content='', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' San', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Francisco', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' a', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' professional', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' American', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' football', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' based', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' San', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Francisco', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bay', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Area', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' They', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' compete', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' National', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Football', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' League', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' (', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='NFL', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=')', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' as', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' a', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' member', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' league', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content="'s", id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' National', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Football', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Conference', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' (', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='N', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='FC', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=')', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' West', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' division', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Here', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' some', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' key', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' points', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' about', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' History', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Founded', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='194', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='6', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Joined', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFL', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='194', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='9', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' as', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' part', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' merger', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' between', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFL', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' All', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-Amer', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ica', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Football', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Conference', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' (', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='AA', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='FC', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=')\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Name', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Origin', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' name', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' "', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='"', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' is', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' a', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' reference', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' to', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' prospect', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ors', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' who', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' arrived', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Northern', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' California', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' during', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='184', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='9', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Gold', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Rush', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Ach', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ievements', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Super', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bowl', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Championships', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' have', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' won', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' five', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Super', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bowl', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' titles', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' (', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='X', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='VI', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' XIX', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' XX', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='III', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' XX', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='IV', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' XX', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='IX', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=').\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Conference', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Championships', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' They', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' have', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' won', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFC', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Championship', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' seven', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' times', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Division', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Championships', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' has', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' numerous', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFC', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' West', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' division', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' titles', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Not', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='able', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Figures', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Joe', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Montana', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Hall', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Fame', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' quarterback', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' who', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' led', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' to', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' four', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Super', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bowl', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' victories', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Jerry', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Rice', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Wid', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ely', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' considered', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' greatest', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' wide', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' receiver', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFL', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' history', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Steve', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Young', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Another', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Hall', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Fame', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' quarterback', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' who', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' led', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' to', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' a', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Super', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bowl', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' victory', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Bill', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Walsh', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Legendary', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' head', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' coach', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' known', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' for', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' developing', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' "', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='West', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Coast', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Off', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ense', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='."\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Home', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Stadium', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Le', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='vi', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content="'s", id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Stadium', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Located', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Santa', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Clara', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' California', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' it', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' has', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' been', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=" team's", id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' home', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' since', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='201', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='4', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Prior', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' to', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' that', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' they', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' played', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' at', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Cand', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='lestick', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Park', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' San', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Francisco', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Colors', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Masc', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ot', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Colors', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Red', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' gold', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' white', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='-', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' **', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Masc', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ot', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=':**', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' S', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ourd', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ough', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Sam', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Recent', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Performance', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' have', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' experienced', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' various', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' periods', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' success', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' rebuilding', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' They', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' reached', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Super', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Bowl', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='201', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='9', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' season', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' but', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' were', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' defeated', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' by', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Kansas', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' City', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Chiefs', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' team', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' has', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' been', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' competitive', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' recent', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' years', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' often', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' cont', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ending', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' for', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' playoff', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' spots', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Community', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Culture', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' have', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' a', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' strong', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' fan', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' base', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' known', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' for', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' their', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' rich', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' history', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' tradition', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' They', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' also', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' active', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' community', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' service', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' charitable', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' activities', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' through', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Foundation', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='###', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Rival', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ries', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='The', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' have', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' notable', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' rival', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ries', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' with', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' several', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' teams', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' including', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Dallas', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Cowboys', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Seattle', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Seahawks', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Los', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Angeles', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Rams', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' These', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' rival', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ries', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' often', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' marked', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' by', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' intense', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' memorable', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' games', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.\n\n', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='Overall', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' San', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' Francisco', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='49', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ers', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' are', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' one', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' most', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' stor', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='ied', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' franchises', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' NFL', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' history', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=',', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' known', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' for', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' their', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' success', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' in', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='198', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='0', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='s', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' ', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='199', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='0', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='s', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' and', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' their', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' continued', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' pursuit', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' of', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' excellence', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' on', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' the', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content=' field', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='.', id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')} {'chunk': AIMessageChunk(content='', response_metadata={'finish_reason': 'stop', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_25624ae3a5'}, id='run-b76ec3b8-9c45-42fe-b321-4ec3a69c185c')}
如上方所示,只需使用 chunk
键即可获取 AIMessageChunk
。
config = {"configurable": {"thread_id": "5"}}
input_message = HumanMessage(content="Tell me about the 49ers NFL team")
async for event in graph.astream_events({"messages": [input_message]}, config, version="v2"):
# Get chat model tokens from a particular node
if event["event"] == "on_chat_model_stream" and event['metadata'].get('langgraph_node','') == node_to_stream:
data = event["data"]
print(data["chunk"].content, end="|")
|The| San| Francisco| |49|ers| are| a| professional| American| football| team| based| in| the| San| Francisco| Bay| Area|.| They| compete| in| the| National| Football| League| (|NFL|)| as| a| member| of| the| league|'s| National| Football| Conference| (|N|FC|)| West| division|.| Here| are| some| key| points| about| the| team|: |###| History| |-| **|Founded|:**| |194|6| as| a| charter| member| of| the| All|-Amer|ica| Football| Conference| (|AA|FC|)| and| joined| the| NFL| in| |194|9| when| the| leagues| merged|. |-| **|Team| Name|:**| The| name| "|49|ers|"| is| a| reference| to| the| prospect|ors| who| arrived| in| Northern| California| during| the| |184|9| Gold| Rush|. |###| Ach|ievements| |-| **|Super| Bowl| Championships|:**| The| |49|ers| have| won| five| Super| Bowl| titles| (|X|VI|,| XIX|,| XX|III|,| XX|IV|,| and| XX|IX|). |-| **|Conference| Championships|:**| They| have| won| the| NFC| Championship| seven| times|. |-| **|Division| Championships|:**| The| team| has| numerous| NFC| West| division| titles|. |###| Not|able| Figures| |-| **|Co|aches|:**| Bill| Walsh|,| who| is| credited| with| developing| the| "|West| Coast| offense|,"| is| one| of| the| most| famous| coaches| in| |49|ers| history|. |-| **|Players|:**| The| team| has| had| several| Hall| of| Fame| players|,| including| Joe| Montana|,| Jerry| Rice|,| Steve| Young|,| Ronnie| L|ott|,| and| many| others|. |###| Stadium| |-| **|Le|vi|'s| Stadium|:**| Located| in| Santa| Clara|,| California|,| it| has| been| the| team's| home| since| |201|4|.| Before| that|,| they| played| at| Cand|lestick| Park| in| San| Francisco|. |###| Rival|ries| |-| **|Dallas| Cowboys|:**| One| of| the| most| stor|ied| rival|ries|,| especially| prominent| during| the| |198|0|s| and| |199|0|s|. |-| **|Seattle| Seahawks|:**| A| more| recent| but| intense| rivalry|,| particularly| since| the| Seahawks| joined| the| NFC| West| in| |200|2|. |-| **|Los| Angeles| Rams|:**| A| long|-standing| divis|ional| rivalry|. |###| Recent| Performance| |-| The| |49|ers| have| had| periods| of| both| success| and| struggle| in| recent| years|.| They| reached| the| Super| Bowl| in| the| |201|9| season| but| lost| to| the| Kansas| City| Chiefs|.| The| team| has| been| competitive| in| the| NFC| West| and| continues| to| build| a| strong| roster|. |###| Ownership| and| Management| |-| **|Owner|:**| The| team| is| owned| by| Denise| De|Bart|olo| York| and| John| York|,| with| their| son| Jed| York| serving| as| the| CEO|. |-| **|General| Manager|:**| John| Lynch|,| a| former| NFL| player| and| Hall| of| F|amer|,| has| been| the| GM| since| |201|7|. |-| **|Head| Coach|:**| Kyle| Shan|ahan|,| known| for| his| offensive| ac|umen|,| has| been| the| head| coach| since| |201|7|. |The| |49|ers| are| known| for| their| rich| history|,| iconic| players|,| and| significant| contributions| to| the| game| of| football|.| They| continue| to| be| a| prominent| and| competitive| team| in| the| NFL|.||
使用 LangGraph API 进行流式处理¶
⚠️ 免责声明
自这些视频拍摄以来,我们已对 Studio 进行了更新,现在可以在本地运行并在浏览器中打开。这是目前运行 Studio 的首选方式(而非视频中展示的桌面应用程序)。关于本地开发服务器的文档请参见此处,本地运行 Studio 的说明请参见此处。要启动本地开发服务器,请在本模块的 /studio
目录下运行以下终端命令:
langgraph dev
您将看到如下输出:
- 🚀 API: http://127.0.0.1:2024
- 🎨 Studio 界面: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
- 📚 API 文档: http://127.0.0.1:2024/docs
打开浏览器并访问 Studio 界面:https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
。
LangGraph API 支持编辑图状态。
if 'google.colab' in str(get_ipython()):
raise Exception("Unfortunately LangGraph Studio is currently not supported on Google Colab")
from langgraph_sdk import get_client
# This is the URL of the local development server
URL = "http://127.0.0.1:2024"
client = get_client(url=URL)
# Search all hosted graphs
assistants = await client.assistants.search()
让我们像之前一样流式传输 values
。
# Create a new thread
thread = await client.threads.create()
# Input message
input_message = HumanMessage(content="Multiply 2 and 3")
async for event in client.runs.stream(thread["thread_id"],
assistant_id="agent",
input={"messages": [input_message]},
stream_mode="values"):
print(event)
StreamPart(event='metadata', data={'run_id': '1ef6a3d0-41eb-66f4-a311-8ebdfa1b281f'}) StreamPart(event='values', data={'messages': [{'content': 'Multiply 2 and 3', 'additional_kwargs': {'example': False, 'additional_kwargs': {}, 'response_metadata': {}}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '345c67cf-c958-4f89-b787-540fc025080c', 'example': False}]}) StreamPart(event='values', data={'messages': [{'content': 'Multiply 2 and 3', 'additional_kwargs': {'example': False, 'additional_kwargs': {}, 'response_metadata': {}}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '345c67cf-c958-4f89-b787-540fc025080c', 'example': False}, {'content': '', 'additional_kwargs': {'tool_calls': [{'index': 0, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'function': {'arguments': '{"a":2,"b":3}', 'name': 'multiply'}, 'type': 'function'}]}, 'response_metadata': {'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'type': 'ai', 'name': None, 'id': 'run-88179a6d-eb1e-4953-ac42-0b533b6d76f6', 'example': False, 'tool_calls': [{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': None}]}) StreamPart(event='values', data={'messages': [{'content': 'Multiply 2 and 3', 'additional_kwargs': {'example': False, 'additional_kwargs': {}, 'response_metadata': {}}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '345c67cf-c958-4f89-b787-540fc025080c', 'example': False}, {'content': '', 'additional_kwargs': {'tool_calls': [{'index': 0, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'function': {'arguments': '{"a":2,"b":3}', 'name': 'multiply'}, 'type': 'function'}]}, 'response_metadata': {'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'type': 'ai', 'name': None, 'id': 'run-88179a6d-eb1e-4953-ac42-0b533b6d76f6', 'example': False, 'tool_calls': [{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': None}, {'content': '6', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'multiply', 'id': '4dd5ce10-ac0b-4a91-b34b-c35109dcbf29', 'tool_call_id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'artifact': None, 'status': 'success'}]}) StreamPart(event='values', data={'messages': [{'content': 'Multiply 2 and 3', 'additional_kwargs': {'example': False, 'additional_kwargs': {}, 'response_metadata': {}}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '345c67cf-c958-4f89-b787-540fc025080c', 'example': False}, {'content': '', 'additional_kwargs': {'tool_calls': [{'index': 0, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'function': {'arguments': '{"a":2,"b":3}', 'name': 'multiply'}, 'type': 'function'}]}, 'response_metadata': {'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'type': 'ai', 'name': None, 'id': 'run-88179a6d-eb1e-4953-ac42-0b533b6d76f6', 'example': False, 'tool_calls': [{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': None}, {'content': '6', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'multiply', 'id': '4dd5ce10-ac0b-4a91-b34b-c35109dcbf29', 'tool_call_id': 'call_iIPryzZZxRtXozwwhVtFObNO', 'artifact': None, 'status': 'success'}, {'content': 'The result of multiplying 2 and 3 is 6.', 'additional_kwargs': {}, 'response_metadata': {'finish_reason': 'stop', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'type': 'ai', 'name': None, 'id': 'run-b5862486-a25f-48fc-9a03-a8506a6692a8', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': None}]})
流式传输的对象包含以下属性:
event
:类型data
:状态
from langchain_core.messages import convert_to_messages
thread = await client.threads.create()
input_message = HumanMessage(content="Multiply 2 and 3")
async for event in client.runs.stream(thread["thread_id"], assistant_id="agent", input={"messages": [input_message]}, stream_mode="values"):
messages = event.data.get('messages',None)
if messages:
print(convert_to_messages(messages)[-1])
print('='*25)
========================= content='Multiply 2 and 3' additional_kwargs={'additional_kwargs': {'example': False, 'additional_kwargs': {}, 'response_metadata': {}}, 'response_metadata': {}, 'example': False} id='f51807de-6b99-4da4-a798-26cf59d16412' ========================= content='' additional_kwargs={'additional_kwargs': {'tool_calls': [{'index': 0, 'id': 'call_imZHAw7kvMR2ZeKaQVSlj25C', 'function': {'arguments': '{"a":2,"b":3}', 'name': 'multiply'}, 'type': 'function'}]}, 'response_metadata': {'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'example': False, 'invalid_tool_calls': [], 'usage_metadata': None} id='run-fa4ab1c6-274d-4be5-8c4a-a6411c7c35cc' tool_calls=[{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'call_imZHAw7kvMR2ZeKaQVSlj25C', 'type': 'tool_call'}] ========================= content='6' additional_kwargs={'additional_kwargs': {}, 'response_metadata': {}, 'status': 'success'} name='multiply' id='3e7bbfb6-aa82-453a-969c-9c753fbd1d74' tool_call_id='call_imZHAw7kvMR2ZeKaQVSlj25C' ========================= content='The result of multiplying 2 and 3 is 6.' additional_kwargs={'additional_kwargs': {}, 'response_metadata': {'finish_reason': 'stop', 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5'}, 'example': False, 'invalid_tool_calls': [], 'usage_metadata': None} id='run-e8e0d672-cfb2-42be-850a-345df3718f69' =========================
目前有一些新的流式传输模式仅通过 API 支持。
例如,我们可以使用 messages
模式来更好地处理上述情况!
该模式当前假设您的图中存在一个 messages
键,这是一个消息列表。
所有使用 messages
模式发出的事件都包含两个属性:
event
:事件名称data
:与该事件关联的数据
thread = await client.threads.create()
input_message = HumanMessage(content="Multiply 2 and 3")
async for event in client.runs.stream(thread["thread_id"],
assistant_id="agent",
input={"messages": [input_message]},
stream_mode="messages"):
print(event.event)
metadata messages/complete messages/metadata messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/complete messages/complete messages/metadata messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/partial messages/complete
我们可以观察到以下几种事件类型:
metadata
:运行相关的元数据messages/complete
:完整成型的消息messages/partial
:聊天模型生成的令牌片段
您可以通过此链接深入了解这些事件类型的详细信息。
接下来,我们将演示如何流式传输这些消息。
我们会定义一个辅助函数来优化消息中工具调用的格式显示。
thread = await client.threads.create()
input_message = HumanMessage(content="Multiply 2 and 3")
def format_tool_calls(tool_calls):
"""
Format a list of tool calls into a readable string.
Args:
tool_calls (list): A list of dictionaries, each representing a tool call.
Each dictionary should have 'id', 'name', and 'args' keys.
Returns:
str: A formatted string of tool calls, or "No tool calls" if the list is empty.
"""
if tool_calls:
formatted_calls = []
for call in tool_calls:
formatted_calls.append(
f"Tool Call ID: {call['id']}, Function: {call['name']}, Arguments: {call['args']}"
)
return "\n".join(formatted_calls)
return "No tool calls"
async for event in client.runs.stream(
thread["thread_id"],
assistant_id="agent",
input={"messages": [input_message]},
stream_mode="messages",):
# Handle metadata events
if event.event == "metadata":
print(f"Metadata: Run ID - {event.data['run_id']}")
print("-" * 50)
# Handle partial message events
elif event.event == "messages/partial":
for data_item in event.data:
# Process user messages
if "role" in data_item and data_item["role"] == "user":
print(f"Human: {data_item['content']}")
else:
# Extract relevant data from the event
tool_calls = data_item.get("tool_calls", [])
invalid_tool_calls = data_item.get("invalid_tool_calls", [])
content = data_item.get("content", "")
response_metadata = data_item.get("response_metadata", {})
if content:
print(f"AI: {content}")
if tool_calls:
print("Tool Calls:")
print(format_tool_calls(tool_calls))
if invalid_tool_calls:
print("Invalid Tool Calls:")
print(format_tool_calls(invalid_tool_calls))
if response_metadata:
finish_reason = response_metadata.get("finish_reason", "N/A")
print(f"Response Metadata: Finish Reason - {finish_reason}")
print("-" * 50)
Metadata: Run ID - 1ef6a3da-687f-6253-915a-701de5327165 -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2, 'b': 3} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2, 'b': 3} -------------------------------------------------- Tool Calls: Tool Call ID: call_IL4MGMtr1fEpR3Yd9c2goLd8, Function: multiply, Arguments: {'a': 2, 'b': 3} Response Metadata: Finish Reason - tool_calls -------------------------------------------------- -------------------------------------------------- AI: The -------------------------------------------------- AI: The result -------------------------------------------------- AI: The result of -------------------------------------------------- AI: The result of multiplying -------------------------------------------------- AI: The result of multiplying -------------------------------------------------- AI: The result of multiplying 2 -------------------------------------------------- AI: The result of multiplying 2 and -------------------------------------------------- AI: The result of multiplying 2 and -------------------------------------------------- AI: The result of multiplying 2 and 3 -------------------------------------------------- AI: The result of multiplying 2 and 3 is -------------------------------------------------- AI: The result of multiplying 2 and 3 is -------------------------------------------------- AI: The result of multiplying 2 and 3 is 6 -------------------------------------------------- AI: The result of multiplying 2 and 3 is 6. -------------------------------------------------- AI: The result of multiplying 2 and 3 is 6. Response Metadata: Finish Reason - stop --------------------------------------------------