678 字
3 分钟
AI模块设计进阶:健康计划生成与解析逻辑完善
1. 模块概述
模块定位本次迭代聚焦于 AI 模块功能的进阶开发,核心任务包括:
- 接入 DeepSeek API 并实现接口调用封装
- 实现健康计划的标准格式输出
- 完善计划解析模型,支持健壮性输入处理
- 规范 API 密钥管理与环境隔离
2. 核心设计
2.1 环境变量管理
安全封装为提升安全性,系统将敏感信息如
API Key
存储于.env
文件中,并使用python-dotenv
加载。
# 安装依赖
pip install python-dotenv
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.deepseek.com/v1
配置加载:
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL")
)
2.2 接口封装与调用
def chat(user_id, information):
try:
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": f"User ID: {user_id}, Information: {information}"}
],
stream=False,
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print(f"[Error] Chat request failed: {e}")
return None
2.3 提示词标准构建
from openai import OpenAI
def build_prompt():
today = datetime.date.today()
intro = f"今天是{today}。"
role_description = (
"你是一个健康助手,下面我将给你用户的信息,你需要给出从今天开始一周的健康和饮食计划,"
"要求有7天,每天有三个饮食规划和两个运动规划。要求标准化输出,其他额外内容不要。"
)
format_guide = (
"请按照以下格式提供计划回复:每个任务以分号 (;) 分隔,任务的格式如下:"
"p<day>: <starttime>; <endtime>; <task_name>; <task_description>; "
"- <day>: 任务的天数标识,例如 \"p1\" 表示第 1 天。"
"- <starttime>: 任务的开始时间,例如 \"08:00\"。"
"- <endtime>: 任务的结束时间,例如 \"10:00\"。"
"- <task_name>: 任务的名称,例如 \"晨跑\"。"
"- <task_description>: 任务的详细描述,例如 \"在公园跑步 5 公里\"。"
"示例回复:p1: 08:00; 10:00; 晨跑; 在公园跑步 5 公里; p2: 14:00; 16:00; 阅读; 阅读一本书;"
)
return intro + role_description + format_guide
2.4 健康计划数据结构与解析函数
# response2plan.py
from typing import Optional, List
from datetime import datetime
class Plan:
def __init__(self, thing, description, day, start_date, end_date):
self.thing = thing
self.description = description
self.day = day
self.start_date = start_date
self.end_date = end_date
def parse_plans(input_text: Optional[str]) -> List[Plan]:
if not input_text:
return []
plans = []
lines = input_text.strip().split("\n")
for line in lines:
if line.startswith("p"):
_, content = line.split(":", 1)
day = int(line[1])
parts = [p.strip() for p in content.split(";") if p.strip()]
if len(parts) >= 4:
start = datetime.strptime(parts[0], "%H:%M").time()
end = datetime.strptime(parts[1], "%H:%M").time()
plans.append(Plan(parts[2], parts[3], day, start, end))
return plans
3. 工作流程
更新后的流程
前端提交用户健康信息
构建完整 Prompt 调用 DeepSeek 模型
返回内容按行格式拆解,交由解析函数转为 Plan 实例
4. 测试验证
# 启动虚拟环境
.venv\Scripts\activate
# 启动 Django 服务器
python manage.py runserver
5. 总结
本次迭代在 v0.4 基础上完善了核心 AI 服务的调用、响应与结构化能力,为健康助手系统的智能决策模块打下了坚实基础。