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()