82 lines
2.5 KiB
Python
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() |