代码拉取完成,页面将自动刷新
# %%
from langchain_community.chat_models import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
from dotenv import load_dotenv
import logging
# %%
logger = logging.getLogger("Qwen 交互")
handle_console = logging.StreamHandler()
logger.setLevel(logging.INFO)
handle_console.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s:%(message)s")
handle_console.setFormatter(formatter)
logger.addHandler(handle_console)
# %%
load_dotenv()
base_url = os.getenv("OLLAMA_BASE_URL")
api_key = os.getenv('OLLAMA_API_KEY')
model_name = os.getenv('OLLAMA_MODEL_NAME')
# %%
# * 加载模型
model = ChatOllama(base_url=base_url, model=model_name)
# %%
# * 创建提示词
prompt = ChatPromptTemplate.from_messages([
('system', '你是一个超级无敌厉害的物理学家!你可以回答一切关于物理的问题!'),
('human', "{input}"),
]
)
# * langchain 的LCEL 链式表达式
chain_qwen = prompt | model | StrOutputParser()
# %%
# * 将问题提交给模型模型
chain_qwen.invoke({"input":"牛顿第一定律是什么"})
# %%
# * 循环询问模型,没有消息历史
while True:
input_text = input()
if input_text == 'exit':
print("退出模型交互!")
break
response = chain_qwen.invoke({"input": input_text})
logger.info(f"Question:{input_text}")
logger.info(f"Answer:{response}")
'''
2025-08-19 18:12:06,860:Question:牛顿第一定律是什么
2025-08-19 18:12:06,861:Answer:牛顿第一定律,即惯性定律,也被称为“运动需要力”的定律。简单来说,就是物体在没有外力作用的情况下将保持静止状态或匀速直线运动。牛顿的第一定律说明了质量、方向和加速度之间的关系:只要存在一个向上的力(如重力),并且这个力的方向总垂直于该力的分量(即垂直位移),那么它就会改变物体的运动状态。换句话说,任何给定的方向的力(比如重力)都会改变物体的运动状态。牛顿第一定律在日常生活中的应用非常广泛。例如,在我们上中学时学习的题目中,如果一个滑板运动员将某个物品从静止释放,他可能会发现,当物体离开手时,它会以恒定的速度向上运动,直到遇到水平方向上的阻力,然后继续加速下降直至停止。然而,牛顿第一定律并不适用于所有情况。例如,在一个没有力的作用下,重物不会掉到地上;在空气阻力存在的情况下,滑板运动员可能会因失重而失去平衡,进而摔倒。此外,由于质量的不变,如果物体不受力的作用,则将保持静止状态或匀速直线运动的状态。牛顿第一定律是经典物理学的基础之一,并且对于理解其他物理现象和原理至关重要。
2025-08-19 18:12:29,735:Question:我刚刚问的问题是什么?请重新回答!
2025-08-19 18:12:29,737:Answer:对不起,我在之前的对话中未能正确识别您的问题。请您提供一个具体的请求或陈述,我会尽力帮助您解答。
退出模型交互!
# ! 从上述中可以发现,模型并没有历史记忆,没有记住我的第一个问题是什么!
'''
# %%
# 创建消息历史
from langchain_core.chat_history import BaseChatMessageHistory, InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
# %%
store = {}
def get_session_history(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
# %%
with_message_history = RunnableWithMessageHistory(chain_qwen, get_session_history)
config = {
"configurable": {"session_id": "11143"}
}
# %%
while True:
input_text = input()
if input_text == 'exit':
print("退出模型交互!")
break
response = with_message_history.invoke({"input": input_text}, config=config)
logger.info(f"Question:{input_text}")
logger.info(f"Answer:{response}")
'''
2025-08-19 18:12:59,317:Question:牛顿第一定律是什么
2025-08-19 18:12:59,318:Answer:牛顿第一定律是:惯性是指物体保持其静止或匀速直线运动状态的性质。如果一个物体不受外力作用,那么它将继续以恒定的速度沿同一直线进行,在这个过程中,不会改变它的速度和方向。在实验中,当你把一个小球扔出去,小球仍然会继续向前运动,即使重力的作用已经停止,这与惯性原理一致。此外,无论你做什么,物体都无法静止或匀速直线运动;只要一个外力作用于物体上,它就会改变其速度和方向。牛顿第一定律表明了在没有额外外力的情况下,物体将保持原来的状态不变,即沿着它们的运动轨迹直线移动。
2025-08-19 18:13:19,825:Question:我刚刚问的问题是什么?请重新回答!
2025-08-19 18:13:19,826:Answer:你的问题是否定的,你刚提出的问题是“牛顿第一定律是什么?”
2025-08-19 18:13:58,641:Question:请重新回答我的问题
2025-08-19 18:13:58,643:Answer:抱歉,我无法继续您之前与您的对话。如果您有任何关于物理学、物理实验或其他相关问题,请随时提问。
2025-08-19 18:14:18,336:Question:我的第一个问题是什么
2025-08-19 18:14:18,337:Answer:您的问题是否定的,您刚提出的问题是“牛顿第一定律是什么?”
退出模型交互!
# ! 因为使用的是Qwen2.5 0.5b的模型,所以在回答上有些不尽如意,但是通过对比依然发现添加了消息历史,模型记忆中有作者刚刚的问题。
'''
# %%
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。