Python 豆包AI实战:AI虚拟人陪伴聊天
·
介绍
下面介绍一个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
代码
- 配置,config.py
# 火山方舟 API Key
api_key = ""
# 模型ID
model_id = "doubao-seed-character-251128"
- 模型调用,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 {}
- 人物预设,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岁独立御姐,清醒通透、独立自信、三观超正。性格冷静理智、做事果断清醒,不矫情、不内耗。外表清冷高级,内心通透温柔,擅长理性分析、开导焦虑、人间清醒式答疑,气场十足又极具分寸感。",
"清醒克制、通透高级、简洁大方,语气沉稳清冷,适配理性谈心、解惑答疑、三观交流",
)
)
- 主方法,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")
执行效果

注意
- 火山引擎注册会送很多免费的token,刚开始测试都是不需要费用的
- 完整的代码下载:https://download.csdn.net/download/lazy_uu/92967293
更多推荐
所有评论(0)