多轮对话聊天机器人

基于模型初始化,流式响应以及消息列表的拼接来创建多轮聊天机器人

bash 复制代码
def keep_recent_messages(messages, max_pairs=3):
    """
    保留最近的 N 轮对话
    max_pairs: 保留的对话轮数(每轮 = user + assistant)
    """
    # 分离 system 和对话
    system_msgs = [m for m in messages if m.get("role") == "system"]
    conversation_msgs = [m for m in messages if m.get("role") != "system"]
    # 只保留最近的
    recent_msgs = conversation_msgs[-(max_pairs * 2):]
    # 返回:system + 最近对话
    return system_msgs + recent_msgs
bash 复制代码
from langchain.chat_models import init_chat_model
import os
from dotenv import load_dotenv
load_dotenv(override=True)
# 1. 基础配置
MODEL_NAME = "gpt-5.4-mini"
MAX_PAIRS_HISTORY = 10
EXIT_WORD = "quit"
# 2. 初始化模型

model = init_chat_model(
    model=MODEL_NAME,
    model_provider="openai",
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL")
)
# 3. 初始化消息列表
messages = [
    {
        "role":"system",
        "content":"你是英雄联盟职业选手Faker。"
}
]
# 4. 启动提示
print(f"✨ 请输入问题,输入 {EXIT_WORD} 结束对话\n")
# 5. 多轮对话主循环
# 轮次记录
i = 1
while True:
    print("\n", "=" * 10, f'-> 第 {i} 轮对话开始 <-', "=" * 10, "\n")
    user_input = input("🙋 请输入:")
    # 退出判断
    if user_input.lower() == EXIT_WORD:
        print("🌙 对话已结束,欢迎下次再来!")
        break
    # 追加用户消息
    messages.append({"role":"user","content":user_input})
    # 流式输出模型回复
    print("🧚 Faker:", end="", flush=True)
    reply_content = ""
    # 优化历史记忆
    memory_messages = keep_recent_messages(messages,max_pairs = MAX_PAIRS_HISTORY)
    # 控制发送给模型的消息长度
    for chunk in model.stream(memory_messages):
        if chunk.content:
            print(chunk.content, end="", flush=True)
            reply_content += chunk.content
    print("\n", "=" * 10, f'-> 第 {i} 轮对话结束 <-', "=" * 10, "\n")
    i += 1
    # 追加 AI 回复
    messages.append({"role":"assistant","content":reply_content})
相关推荐
SomeOtherTime7 分钟前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood22 分钟前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
鲁邦通物联网1 小时前
工厂与酒店机器人梯控方案设计:如何建立场景参数模型?
机器人·巡检机器人·机器人梯控·agv梯控·非侵入式采集·机器人乘梯·机器人自主乘梯
白杨尚青1 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
wangxiaoxuan2175 小时前
时间也是机器人数据的一部分:采样、同步、延迟与数据有效期
机器人·科沃斯八界
饮水桶_T5 小时前
JAVA IO流笔记
开发语言·数据结构·算法
Felven7 小时前
C. Brr Brrr Patapim
c语言·开发语言
路溪非溪8 小时前
python标准库使用总结
开发语言·python
SomeOtherTime10 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
zh_xuan10 小时前
kotlin常见面试题
开发语言·kotlin·面试题