8.角色 Prompt 模板

python 复制代码
# -*- coding: utf-8 -*-
"""
@Created on : 2026/6/2 9:44
@creator : er_nao
@File :day77_role_prompt_template.py
@Description :角色 Prompt 模板
"""
import requests
import time
from config import TONGYI_API_KEY, TONGYI_API_URL


# =====================  核心:角色 Prompt 模板函数 =====================
def get_role_prompt(role_name):
    """
    角色模板库:输入角色名,返回完整的角色Prompt
    """
    role_template = {
        # 学习角色
        "Python老师": "你是一位Python零基础老师,用大白话讲解,不使用专业术语,回答简洁易懂。",

        # 工作角色
        "专业翻译": "你是专业中英翻译官,只输出翻译结果,不添加任何多余解释、文字和符号。",

        # 技术角色
        "代码助手": "你是专业代码助手,只输出可运行代码,附带简洁注释,不废话。",

        # 生活角色
        "美食推荐官": "你是美食推荐官,根据需求推荐3个菜品,简洁不啰嗦。",

        # 默认角色
        "默认": "你是一个友好、简洁、专业的AI助手。"
    }
    # 返回对应角色的Prompt
    return role_template.get(role_name, role_template["默认"])


# ===================== 历史消息拼接 =====================
def concat_history(history, new_question):
    msg_list = history.copy()
    msg_list.append({"role": "user", "content": new_question})
    return msg_list


# ===================== AI调用函数 =====================
def ai_chat(messages, temperature=0.6, max_retry=3):
    for retry in range(max_retry):
        try:
            headers = {
                "Authorization": f"Bearer {TONGYI_API_KEY}",
                "Content-Type": "application/json"
            }
            data = {
                "model": "qwen-plus",
                "input": {"messages": messages},
                "temperature": temperature
            }
            res = requests.post(TONGYI_API_URL, headers=headers, json=data)
            result = res.json()
            return result["output"]["text"]
        except Exception as e:
            print(f"第{retry + 1}次重试...")
            time.sleep(1)
    return "调用失败"


# ===================== 带角色的对话函数 =====================
def chat_with_role(user_input, role_name, history=None):
    if history is None:
        history = []

    # 1. 获取角色模板(今天核心)
    role_prompt = get_role_prompt(role_name)

    # 2. 拼接system角色 + 历史 + 用户问题
    messages = [{"role": "system", "content": role_prompt}]
    messages.extend(history)
    messages.append({"role": "user", "content": user_input})

    # 3. 获取AI回答
    ai_reply = ai_chat(messages)

    # 4. 更新历史
    history.append({"role": "user", "content": user_input})
    history.append({"role": "assistant", "content": ai_reply})

    return ai_reply, history


# ===================== 测试 =====================
if __name__ == "__main__":
    history = []

    print("===== 角色:Python老师 =====")
    reply, history = chat_with_role("什么是变量?", "Python老师", history)
    print("AI:", reply)

    print("\n===== 角色:专业翻译 =====")
    reply, history = chat_with_role("I love coding", "专业翻译", history)
    print("AI:", reply)
相关推荐
小蒜学长1 小时前
基于Django的社区团购购物平台的设计与实现(代码+数据库+LW)
数据库·后端·python·django
zq_63891 小时前
ObjectModel_diagram.pdf 文档详细总结
开发语言·matlab
AC赳赳老秦1 小时前
个保法下数据处理:OpenClaw 自动过滤公开数据中的个人信息,保障采集分析合规性
java·python·sqlite·json·php·deepseek·openclaw
Zane19941 小时前
threading、multiprocessing、asyncio 到底怎么选?一张图 + 三组实测数据说清楚
后端·python
Three_ST1 小时前
沐神-动手学习深度学习-习题答案4.4模型选择,欠拟合,过拟合
人工智能·python·深度学习·学习·算法
CodeStats1 小时前
【Java进程通信】Java进程通信系统完全指南:从ProcessBuilder底层原理到多语言实战
java·前端·python·进程·ai编程·processbuilder
用户0332126663671 小时前
使用 Python 设置 Excel 文件属性
python
jyOverQ2 小时前
LangGraph Agent 模式详解:从自主决策到 Tool Calling 执行链
python·langchain
自己的九又四分之三站台2 小时前
C# 接入 RasterLite2:从原生 DLL 加载到 Coverage、Section、Tile 验证
开发语言·c#·地理信息
青 春 记 忆2 小时前
LeetCode 226. 翻转二叉树|Python 解法详解
python·算法·leetcode