文章目录
- LLM 代码
- values
- messages
- updates
- messages + updates
- messages + updates 2
LLM 代码
from dataclasses import dataclassfrom langchain.chat_models import init_chat_model
from langgraph.graph import StateGraph, STARTfrom langchain_openai import ChatOpenAI
# 初始化 llm
model_name = 'glm-4-flash'
base_url = 'https://open.bigmodel.cn/api/paas/v4'
api_key = '6eeeb21...bPJyrc8e' llm = ChatOpenAI(openai_api_base=base_url,model = model_name,api_key = api_key,temperature=0.1, # streaming=True,
)@dataclass
class MyState:topic: strjoke: str = ""def call_model(state: MyState):"""Call the LLM to generate a joke about a topic"""llm_response = llm.invoke( # (1)![{"role": "user", "content": f"给我讲一个关于 {state.topic} 的笑话"}])return {"joke": llm_response.content}graph = (StateGraph(MyState).add_node(call_model).add_edge(START, "call_model").compile()
)message = {"topic": "冰淇淋"}
values
events = graph.stream(message, stream_mode="values",
)
-- event : {'topic': '冰淇淋'}
-- event : {'topic': '冰淇淋', 'joke': '有一天,冰淇淋去参加一个聚会,它走进房间后,看到大家都在聊天,于是它决定找个地方坐下。\n\n冰淇淋走到一个角落,看到一把椅子,它说:“嘿,椅子,我坐这里可以吗?”\n\n椅子回答:“当然可以,不过你得小心,我可是‘冷板凳’。”\n\n冰淇淋一愣,然后笑着说:“哦,原来如此,那我就不客气了,谢谢你的提醒!”'}
messages
for message_chunk, metadata in graph.stream( # (2)!{"topic": "ice cream"},stream_mode="messages",
):print('\n')print('-- message_chunk : ', message_chunk) print('-- metadata : ', metadata) if message_chunk.content:print(message_chunk.content, end="|", flush=True)
-- metadata :
{'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:ee4d452e-bd6a-6176-fb64-086b7793dd96','checkpoint_ns': 'call_model:ee4d452e-bd6a-6176-fb64-086b7793dd96','ls_provider': 'openai', 'ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1
} -- message_chunk : content='为什么' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'为什么|-- message_chunk : content='冰淇淋' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'冰淇淋|-- message_chunk : content='总是' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'总是|-- message_chunk : content='那么' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'那么|-- message_chunk : content='开心' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'开心|-- message_chunk : content='?\n\n因为它' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'?因为它|-- message_chunk : content='总是' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'总是|-- message_chunk : content='笑' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'笑|-- message_chunk : content='得' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'得|-- message_chunk : content='“' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'“|-- message_chunk : content='冰' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'冰|-- message_chunk : content='”' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'”|-- message_chunk : content='裂' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'裂|-- message_chunk : content='!' additional_kwargs={} response_metadata={} id='run--a3723e25-7094-4fad-8339-fdd41da406e4'!|-- message_chunk : content='😄' additional_kwargs={} response_metadata={'finish_reason': 'stop', 'model_name': 'glm-4-flash'} id='run--a3723e25-7094-4fad-8339-fdd41da406e4' usage_metadata={'input_tokens': 13, 'output_tokens': 20, 'total_tokens': 33, 'input_token_details': {}, 'output_token_details': {}}😄|%
updates
for chunk in graph.stream(message,stream_mode="updates"
):print(chunk)
{'call_model': {'joke': '有一天,冰淇淋去参加一个聚会,它走进房间后,看到大家都在聊天,于是它决定找个地方坐下。\n\n冰淇淋走到一个角落,看到一把椅子,它说:“嘿,椅子,我坐这里可以吗?”\n\n椅子回答:“当然可以,不过你得小心,我可是个‘冷’椅子。”\n\n冰淇淋一愣,然后笑着说:“哦,原来您是个‘冷’椅子啊,那我可得小心别融化了。”\n\n大家听了都笑了,椅子也跟着笑了起来,从此,冰淇淋和椅子成了好朋友,每次聚会都会带来欢乐。'}
}
messages + updates
for chunk in graph.stream(message,stream_mode=["messages", "updates"],
):print('\n', chunk )
('messages', (AIMessageChunk(content = '有一天', additional_kwargs = {}, response_metadata = {}, id = 'run--8ecc7304-693a-44f5-84ca-7164e02cb8ec'), {'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1 })
)('messages', (AIMessageChunk(content = ',', additional_kwargs = {}, response_metadata = {}, id = 'run--8ecc7304-693a-44f5-84ca-7164e02cb8ec'), { 'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1 })
)('messages', (AIMessageChunk(content = '冰淇淋', additional_kwargs = {}, response_metadata = {}, id = 'run--8ecc7304-693a-44f5-84ca-7164e02cb8ec'), {'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers ': ('branch: to: call_model ',), 'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','checkpoint_ns': 'call_model:9ea3643a-d6f7-88c5-c9ea-4e355adb32c9','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1}
))...('messages', (AIMessageChunk(content = '!”', additional_kwargs = {}, response_metadata = {}, id = 'run--4e59a246-6974-4416-a22b-64a0f11605e3'), {'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:d2654764-3e30-1059-8493-ec47cc229898','checkpoint_ns': 'call_model:d2654764-3e30-1059-8493-ec47cc229898','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1
}))('messages', (AIMessageChunk(content = '', additional_kwargs = {}, response_metadata = {'finish_reason': 'stop','model_name': 'glm-4-flash'}, id = 'run--4e59a246-6974-4416-a22b-64a0f11605e3', usage_metadata = {'input_tokens': 14,'output_tokens': 130,'total_tokens': 144,'input_token_details': {},'output_token_details': {}}), {'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:d2654764-3e30-1059-8493-ec47cc229898','checkpoint_ns': 'call_model:d2654764-3e30-1059-8493-ec47cc229898','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1
}))('updates', {'call_model': {'joke': '有一天,冰淇淋去参加一个聚会,它走进房间后,看到大家都在聊天,于是它决定找个地方坐下。它走到一个角落,看到一把椅子,就坐了下来。\n\n冰淇淋刚坐下,突然椅子开始颤动,然后椅子上的一个按钮亮了起来。冰淇淋好奇地按了按钮,结果椅子上突然冒出一句话:“你坐得有点重,小心我融化了!”\n\n大家听了都哈哈大笑,冰淇淋也尴尬地笑了。这时,一个朋友走过来,拍了拍冰淇淋的肩膀说:“别担心,我们这里都是‘融融’的气氛,大家都很欢迎你!”'}
})
messages + updates 2
# updates 会打印出错
for msg_type, (message_chunk, metadata) in graph.stream(message,stream_mode=["messages", "updates"],
):print('\n-- msg_type : ', msg_type ) print('-- message_chunk : ', message_chunk) print('-- metadata : ', metadata)
-- metadata 2:
{'langgraph_step': 1,'langgraph_node': 'call_model','langgraph_triggers': ('branch:to:call_model', ),'langgraph_path': ('__pregel_pull', 'call_model'),'langgraph_checkpoint_ns': 'call_model:a3f28959-0172-a7a9-797f-3ada4609cdc1','checkpoint_ns': 'call_model:a3f28959-0172-a7a9-797f-3ada4609cdc1','ls_provider': 'openai','ls_model_name': 'glm-4-flash','ls_model_type': 'chat','ls_temperature': 0.1
}**************************-- msg_type : messages
-- message_chunk : content='有一天' additional_kwargs={} response_metadata={} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3'-- msg_type : messages
-- message_chunk : content=',' additional_kwargs={} response_metadata={} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3'-- msg_type : messages
-- message_chunk : content='冰淇淋' additional_kwargs={} response_metadata={} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3'...-- msg_type : messages
-- message_chunk : content='了' additional_kwargs={} response_metadata={} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3'-- msg_type : messages
-- message_chunk : content='!”' additional_kwargs={} response_metadata={} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3'-- msg_type : messages
-- message_chunk : content='' additional_kwargs={} response_metadata={'finish_reason': 'stop', 'model_name': 'glm-4-flash'} id='run--d0984020-e413-44f0-bacb-ba4667ee10c3' usage_metadata={'input_tokens': 14, 'output_tokens': 144, 'total_tokens': 158, 'input_token_details': {}, 'output_token_details': {}}*****('updates', {'call_model': {'joke': '有一天,冰淇淋去参加一个聚会,它走进房间后,看到大家都在聊天,于是它决定找个地方坐下。它走到一个角落,看到一把椅子,就坐了下来。\n\n冰淇淋刚坐下,突然椅子开始颤动,然后椅子上的一个按钮亮了起来。冰淇淋好奇地按了按钮,结果椅子上突然冒出一句话:“你坐得有点重,小心我融化了!”\n\n大家听了都哈哈大笑,冰淇淋也尴尬地笑了。这时,一个朋友走过来,拍了拍冰淇淋的肩膀说:“别担心,我们这里都是‘融融’的气氛,大家都很欢迎你!”'}
})
2025-05-27(二)