当前位置: 首页 > news >正文

CLI-Chatbot实现多轮对话以及history

这个项目会让你一次性学会:

  • LLM API 调用
  • 多轮对话
  • conversation history
  • streaming
  • CLI 工程结构
  • async 编程
  • prompt 管理

你最终要做出的结果

类似于:

并且:

一、项目结构

1.先安装uv

uv Documentation

2.创建项目

在cmd终端商执行

uv init cli-chatbot
cd cli-chatbot

3.安装依赖

uv add openai rich python-dotenv

由于LLM本身不记忆历史,每次问问题的时候就会出现

就会非常的麻烦,所以需要加入memory来帮助LLM记忆历史

二、实现多轮对话

memory.py

class ConversationMemory:
def __init__(self):
self.messages = [
{
"role": "system",
"content": "You are a helpful AI assistant."
}
]

def add_user_message(self, content):
self.messages.append({
"role": "user",
"content": content
})

def add_assistant_message(self, content):
self.messages.append({
"role": "assistant",
"content": content
})

def get_messages(self):
return self.messages

app.py

from openai import OpenAI
from dotenv import load_dotenv
from chatbot.memory import ConversationMemory
import os

load_dotenv()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
memory = ConversationMemory()

while True:
user_input = input("\nYou: ")

if user_input.lower() == "exit":
break

memory.add_user_message(user_input)

response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=memory.get_messages()
)

assistant_reply = response.choices[0].message.content

memory.add_assistant_message(assistant_reply)

print("\nAssistant:")
print(assistant_reply)

目前已经实现多轮对话,因为memory.get_messsage()会携带历史记录

stream.py

def stream_response(stream):
full_response = ""

for chunk in stream:
content = chunk.choices[0].delta.content

if content:
print(content, end="", flush=True)
full_response += content

print()

return full_response

修改app.py

from openai import OpenAI
from dotenv import load_dotenv
from chatbot.memory import ConversationMemory
from chatbot.stream import stream_response
import os

load_dotenv()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
memory = ConversationMemory()

while True:
user_input = input("\nYou: ")

if user_input.lower() == "exit":
break

memory.add_user_message(user_input)

stream = client.chat.completions.create(
model="gpt-4.1-mini",
messages=memory.get_messages(),
stream=True
)

print("\nAssistant:\n")

assistant_reply = stream_response(stream)

memory.add_assistant_message(assistant_reply)

输出结果

注:以上内容为 AI 辅助生成的参考回答,仅供参考,请自行核实关键信息。

http://www.cnnetsun.cn/news/2588924.html

相关文章:

  • 2026数据中台选型指南
  • 专利合规向导实测:3步完成产品CRA合规差距分析
  • 浏览器端敏感信息检测实践:Hx0 数据卫士(Hx0 DataGuard)功能梳理与使用体会
  • Windows右键菜单终极优化秘籍:从杂乱到高效的系统级定制方案
  • CHKDSK命令执行后,那一大串英文日志到底说了啥?教你读懂Windows磁盘修复报告
  • 别再为过拟合发愁了!用Python的sklearn轻松搞定岭回归与Lasso回归(附实战代码)
  • 【STM32】HAL库 CubeMX实战:TIM3定时器中断驱动双LED闪烁
  • 别再只会用Pearson了!数据科学实战:根据变量类型(连续/分类)选择正确的相关性检验方法(附Python代码)
  • 告别调参玄学:OpenCV HoughCircles参数详解与实战调优指南(Python版)
  • 从房价预测到猫图识别:用Python手把手复现吴恩达第二周逻辑回归实战
  • 最近折腾了几个 AI 开源项目,最后发现最省事的还是先搞一个大模型中转站
  • 面向对象设计原则(一)
  • 大规模二次规划与稀疏优化的分片线性同伦路径跟踪方法与分解技术【附代码】
  • 工业AOI实战:如何将HRIPCB数据集与YOLOv8结合,打造你自己的PCB缺陷检测系统
  • TwinGAN:双阶段GAN实现中国山水画风格迁移的技术解析与实践
  • 多Agent协同场景下的Harness工程架构设计与核心挑战破解
  • Arduino IDE 2.0调试器支持哪些板子?一份避坑清单与低成本替代方案
  • R语言non-numeric argument错误实战排障指南
  • HSGA模型:基于自引导注意力机制从临床文本预测疾病风险
  • RFDoc:面向证件检测的高效二进制局部特征描述符设计与实践
  • 最新Java面试趋势分析:哪些技能最吃香?
  • Cadence Concept HDL 17.4 保姆级开箱指南:从零新建你的第一个工程
  • HS2-HF Patch深度解析:构建HoneySelect2完整体验的生态解决方案
  • LangGraph 节点间数据传递的四种模式:参数、上下文、状态与缓存
  • PyInstaller打包进阶:除了UPX压缩,还有哪些优化exe体积的实用技巧?
  • 刚接触AI,适不适合直接学这个Agent平台?
  • RData实战:从高效保存到智能加载的完整工作流
  • 为什么产学研共建AI实验室,成了工业数据治理的必选项
  • Django 从 0 到 1 打造完整电商平台:数据库查询优化与索引
  • 极域电子教室UDP广播风暴治理三步法