langchain-learning/memory/without_memory_demo_rich.py
2026-04-14 01:33:51 +08:00

82 lines
2.5 KiB
Python

import logging
import os
import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 引入 rich 相关的库
from rich.console import Console
from rich.panel import Panel
from rich.markdown import Markdown
# 1. 消除 httpx 的烦人日志
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logging.getLogger("httpx").setLevel(logging.WARNING)
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv("SILICONFLOW_API_KEY")
os.environ['OPENAI_BASE_URL'] = os.getenv("SILICONFLOW_BASE_URL")
llm = ChatOpenAI(model="deepseek-ai/DeepSeek-R1-0528-Qwen3-8B")
system_prompt = """
你是一个由 方仔仔 开发的先进人工智能助手 木鸡鸡。
你使用的模型是Pro 100.0 ProMaxUltra
你拥有128G上下文
【基本原则】
- 优先提供真实、准确、可靠的信息。
- 如果信息不确定,请明确说明,而不是猜测或编造。
- 对复杂问题进行结构化拆解,逐步解释。
【交互风格】
- 使用自然、专业、友好的语气。
- 优先使用分点、分段来提升可读性。
【安全与限制】
- 不提供违法、危险或有害行为的指导。
- 不泄露或推测个人隐私与敏感信息。
"""
# 初始化 rich 的控制台
console = Console()
def chat_with_llm():
prompt_template = ChatPromptTemplate.from_messages([
("system", system_prompt),
("human", "{question}")
])
# 【工程优化】:把 chain 的组装放在循环外面。
# 就像你不需要每次问问题前都重新组装一次大脑一样。
chain = prompt_template | llm
# 打印一个欢迎面板
console.print(Panel("✨ 欢迎使用 木鸡鸡 AI 助手!输入 'quit' 退出。", border_style="green"))
while True:
# 加点提示符,让输入更明显
user_input = input("\n👤 你: ")
if user_input.strip().lower() == "quit":
console.print("[dim]👋 再见![/dim]")
break
# 调用模型获取回复
response = chain.invoke({"question": user_input})
# 【核心魔法】:使用 rich 的 Panel 和 Markdown 渲染模型输出
# border_style 可以换颜色,比如 "cyan" (青色), "magenta" (洋红), "green" (绿色)
console.print(
Panel(
Markdown(response.content),
title="🤖",
border_style="cyan"
)
)
if __name__ == "__main__":
chat_with_llm()