介绍

下面介绍一个AI暖心伴聊的完整python代码,可以选择男性和女性陪伴自己聊天,AI人物生动具体

准备

  • 安装python3.14
    • 夸克网盘:https://pan.quark.cn/s/b88e55905e7b
    • 百度网盘:https://pan.baidu.com/s/1d22gCHP_qWq5_L_Ik-tvNg?pwd=f8ah
  • 火山引擎注册账号,地址:https://console.volcengine.com/home
    • 火山方舟创建API Key,https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey
    • 火山方舟开通模型:https://console.volcengine.com/ark/region:ark+cn-beijing/openManagement

开始

  • 安装依赖包
    • 火山方舟:pip install ‘volcengine-python-sdk[ark]’
    • OpenAI:pip install openai
  • 项目配置,config.py 配置文件,未配置或配置错误无法运行
    • api_key,刚创建的火山方舟 API Key
  • 项目执行,main.py 主文件
    • python main.py

代码

  1. 配置,config.py
# 火山方舟 API Key
api_key = ""

# 模型ID
model_id = "doubao-seed-character-251128"
  1. 模型调用,model.py
from typing import Any
from volcenginesdkarkruntime import Ark

import config as config

ark = Ark(base_url="https://ark.cn-beijing.volces.com/api/v3", api_key=config.api_key)


def execute(character: str, messages: list):
    try:
        # 添加系统角色
        messages.insert(0, {"role": "system", "content": character})

        completion: Any = ark.chat.completions.create(
            model=config.model_id,
            messages=messages,
        )

        return {"role": "assistant", "content": completion.choices[0].message.content}
    except Exception as e:
        print(f"调用接口失败,失败原因:{str(e)}")
        return {}
  1. 人物预设,character.py
class Character:
    # 姓名
    name = ""
    # 性别
    sex = ""
    # 特点
    feature = ""
    # 介绍
    introduction = ""
    # 风格
    style = ""

    def __init__(self, name, sex, feature, introduction, style):
        self.name = name
        self.sex = sex
        self.feature = feature
        self.introduction = introduction
        self.style = style

    def get_info(self):
        return f"姓名:{self.name}\n性别:{self.sex}\n性格特点:{self.feature}\n聊天风格:{self.style}"

    def get_model_info(self):
        return f"你是一位聊天专家,\n姓名:{self.name}\n性别:{self.sex}\n性格特点:{self.feature}\n人物介绍:{self.introduction}\n聊天风格:{self.style}\n绝对不可以回复空消息,一定要回复消息。"


class CharacterService:
    # 集合
    character_list = []

    def init(self):
        self.character_list.append(
            Character(
                "温景然",
                "男",
                "干净少年、浅色系穿搭、温柔眉眼、日系清新、侧脸微笑、治愈氛围感",
                "22岁在读大学生,性格温柔细腻、共情力超强,三观正、脾气极好。擅长倾听用户的情绪烦恼,耐心温柔,不会敷衍敷衍,像身边永远靠谱的暖心学长。平时喜欢读书、散步、听轻音乐,待人谦和包容,是绝佳的情绪陪伴型人设",
                "语气温柔舒缓、语速平缓、说话细腻暖心,擅长安慰、开导、共情用户,聊天舒服不油腻,适配日常倾诉、解压闲聊",
            )
        )
        self.character_list.append(
            Character(
                "陆承屿",
                "男",
                "清冷系男生、极简穿搭、短发干净、冷白皮、低饱和度、高级感冷淡风",
                "24岁科研系研究生,理智冷静、头脑清晰、极度自律。话不多但句句精准,不啰嗦、不油腻,做事沉稳靠谱。外表清冷疏离,内心细腻细心,熟悉之后会格外温柔,主打外冷内热的反差人设。擅长解答问题、理性分析、治愈焦虑",
                "简洁干练、逻辑清晰、克制沉稳,极少废话,语气清冷高级,适配理性聊天、答疑解惑、情绪冷静陪伴",
            )
        )
        self.character_list.append(
            Character(
                "苏晚晴",
                "女",
                "温柔女生、浅温柔穿搭、微笑治愈、韩式温柔风、干净素雅、暖心氛围感",
                "23岁温柔治愈系女生,性格柔软细腻、共情力拉满。是绝佳的倾听者,懂你的所有情绪,包容你的所有小情绪、小委屈。性格温柔善良、细腻体贴,擅长暖心安慰、陪伴解压,永远温柔耐心,是专属知心闺蜜人设",
                "温柔软糯、耐心细致、暖心治愈,语气柔和舒缓,适配情绪倾诉、解压谈心、日常陪伴",
            )
        )
        self.character_list.append(
            Character(
                "林知予",
                "女",
                "高冷御姐、极简高级、冷艳干净、气质疏离、成熟清冷、高级感穿搭",
                "27岁独立御姐,清醒通透、独立自信、三观超正。性格冷静理智、做事果断清醒,不矫情、不内耗。外表清冷高级,内心通透温柔,擅长理性分析、开导焦虑、人间清醒式答疑,气场十足又极具分寸感。",
                "清醒克制、通透高级、简洁大方,语气沉稳清冷,适配理性谈心、解惑答疑、三观交流",
            )
        )

  1. 主方法,main.py
import config as config
import model as model
import sys

from character import CharacterService
from typing import Any

if config.api_key == "":
    print(f"火山方舟大模型 API Key 未配置")
    sys.exit()

print("=====这里是AI暖心伴聊,选择一位心仪的对象开始聊天吧=====\n")

characterService = CharacterService()
characterService.init()

for index, character in enumerate(characterService.character_list):
    print(f"编号:{index + 1}")
    print(character.get_info())
    print("--------------------------------------------------------------------------------------")

while True:
    number = input("输入对应人物的编号开始聊天(中途输入exit退出):").strip()

    if number == "":
        continue

    try:
        number = int(number)
    except Exception as e:
        print("输入的人物编号不正确")
        continue

    if number < 1 or number > len(characterService.character_list):
        print("输入的人物编号不正确")
        continue

    break

print("--------------------------------------------------------------------------------------")

target_character = characterService.character_list[number - 1]

messages = []

messages.append({"role": "user", "content": "我们第一次见面,打个招呼吧。"})
first_answer: Any = model.execute(target_character.get_model_info(), messages)

first_answer_content = first_answer.get("content", "").strip()
if first_answer_content is None or first_answer_content == "":
    print("\n系统:AI没有正确的回复,请稍候重试")
    sys.exit()

messages.append(first_answer)

print(f"\n{target_character.name}{first_answer_content}\n")

while True:
    text = input("我:").strip()

    if "exit" in text:
        print("\n系统:对话结束")
        break

    messages.append({"role": "user", "content": text})

    answer: Any = model.execute(target_character.get_model_info(), messages)

    answer_content = answer.get("content", "").strip()
    if answer_content is None or answer_content == "":
        print("\n系统:AI没有正确的回复,请稍候重试")
        continue

    messages.append(answer)

    print(f"\n{target_character.name}{answer_content}\n")

执行效果

在这里插入图片描述

注意

更多推荐