langchain qwen3 构建一个简单的对话系统

创建一个conda环境

bash 复制代码
conda create -n llm python=3.10

软件库安装,缺少的软件包,会报错提示安装即可

bash 复制代码
pip install langchain transformers

代码:

python 复制代码
from langchain_huggingface import ChatHuggingFace, HuggingFacePipeline
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
import torch

# 1. 初始化本地 LLM (保持你之前的配置)
llm = HuggingFacePipeline.from_model_id(
    model_id="/data2/wanghq/models/Qwen/Qwen3-8B",
    task="text-generation",
    pipeline_kwargs={
        "max_new_tokens": 1024,
        "temperature": 0.5,
        "do_sample": True,
        "device_map": "auto",
        "trust_remote_code": True,
        "dtype": torch.bfloat16, 
    },
)

model = ChatHuggingFace(llm=llm)

# 2. 建立内存中的存储字典,用于存放不同 session 的历史记录
store = {}

def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]

# 3. 封装成带记忆能力的 Chain
# 这里的 config 会根据 session_id 自动提取或存储对话历史
with_message_history = RunnableWithMessageHistory(
    model,
    get_session_history,
)

# 4. 实现循环对话
print("\n--- 已进入连续对话模式(输入 'exit' 退出) ---")
session_config = {"configurable": {"session_id": "robot_research_01"}}

# 可选:先存入一个系统提示词
get_session_history("robot_research_01").add_message(
    SystemMessage(content="你是一个机器人专家。直接回复,不要输出 <think> 标签。")
)

while True:
    user_input = input("\nUser: ")
    if user_input.lower() in ["exit", "quit", "退出"]:
        break

    print("\nQwen: ", end="", flush=True)
    
    # 5. 调用并流式输出
    # 注意:with_message_history 会自动处理历史记录的注入和更新
    for chunk in with_message_history.stream(
        [HumanMessage(content=user_input)],
        config=session_config
    ):
        print(chunk.content, end="", flush=True)
    print("\n")

执行结果

相关推荐
love530love2 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達2 小时前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
CryptoPP3 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
探物 AI4 小时前
把 MambaOut 塞进 YOLOv11:会有什么样的反应
python·yolo·计算机视觉
如竟没有火炬4 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠4 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Cosolar4 小时前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构
GDAL5 小时前
使用 uv 管理 Python 版本
python·uv·版本
真实的菜5 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
cup115 小时前
[开源] Meta Assistant / 告别命令行,我为一堆 Python 脚本做了一个 Windows 任务栏的“家”
windows·python·工具·nuitka·脚本运行