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)
相关推荐
江畔柳前堤13 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
05664613 小时前
agent学习Day15——SQLAlchemy 查询过滤、分页与历史列表接口
python·学习·fastapi
Wang's Blog13 小时前
Go-Zero 项目开发47:自研微服务框架的必要性与核心结构设计
开发语言·微服务·golang
白鸽(二般)14 小时前
MinIO Java Client API
java·开发语言
hPw0eKIqD14 小时前
C++ 模板参数推导问题小记(非推导上下文)
开发语言·c++
程序员爱德华14 小时前
Python与C++:异同点对比
c++·python
hangyuekejiGEO14 小时前
GEO技术服务选型指南
大数据·人工智能·python
临床数据科学和人工智能兴趣组14 小时前
要使用 R Markdown,首先需要安装 R 和 RStudio,接着安装 rmarkdown 包
开发语言·数据挖掘·数据分析·r语言·r语言-4.2.1
软萌萌的115 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
Nebula嵌入式15 小时前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式