# from sre_parse import State
# 从 langchain_openai 导入 ChatOpenAI 类来使用 OpenAI 的聊天模型
from langchain_openai import ChatOpenAI
# from config import llm
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END # 导入用于创建状态机图形的库
from langgraph.graph.message import add_messages # 用于处理消息的模块
# 定义 State 类型,用于存储对话状态的消息列表
class State(TypedDict):
messages: Annotated[list, add_messages] # 'messages' 需要添加消息
# 创建一个状态图构建器,StateGraph 用于管理和处理状态机图
graph_builder = StateGraph(State)
# 配置一个 ChatOpenAI 实例,用于与 OpenAI 模型进行交互
llm = ChatOpenAI(
base_url='http://localhost:8000/generate/', # 这是本地服务的 API 地址
# model='deepseek-chat',
model='DeepSeek-R1-Distill-Qwen-1___5B', # 指定使用的模型
# model=AutoModelForCausalLM.from_pretrained(model_path),
api_key="xxx") # API 密钥,这里需要使用有效的 API 密钥
# def chatbot(state:State):
# return {"messages":[llm.invoke(state["messages"])]}
# chatbot 函数,接受 State 类型的输入并调用 LLM 生成消息
def chatbot(state: State):
# response = llm.invoke(state["messages"])
# print(type(response)) # 打印返回值的类型
# print(response) # 打印返回值内容
return {"messages": [llm.invoke(state["messages"])]} # 调用 LLM 生成消息并返回
# 将 chatbot 函数添加到图中作为一个节点
graph_builder.add_node("chatbot", chatbot)
# 创建图中的边,将 START 节点连接到 chatbot 节点
graph_builder.add_edge(START, "chatbot")
# 创建图中的边,将 chatbot 节点连接到 END 节点
graph_builder.add_edge("chatbot", END)
# 编译图形,生成一个可以运行的图
graph = graph_builder.compile()
# 开始循环,接收用户输入并与图形交互
while True:
user_input = input("User: ") # 获取用户输入
if user_input.lower() in ["quit", "exit", "q"]: # 用户输入 "quit", "exit", 或 "q" 时退出
print("Goodbye!") # 打印告别信息
break # 退出循环
# 遍历图中的每个事件,并处理与用户输入相关的消息流
for event in graph.stream({"messages": ("user", user_input)}):
for value in event.values():
# print("value", value)
# 输出助手生成的消息
print("Assistant:", value["messages"][-1].content)
# graph_builder.add_node("chatbot",chatbot)
# graph_builder.add_edge(START,end_key:"chatbot")
# graph_builder.add_edge(start_key:"chatbot", END)
# graph = graph_builder.compile()
# try:
# mermid_code