基于规则引擎 + 本地 Skill + 大模型(One API)的养老规划问答系统,支持客户信息查询、退休测算、资产配置、行为分析与建议书生成。
Pension_Agent/
├── run.py # 程序入口(评测/命令行调用此文件)
├── requirements.txt # Python 依赖
├── .env.example # 环境变量示例(复制后填写私有配置)
├── Readme.md # 本说明
├── pension_agent/ # 核心业务包
│ ├── config/
│ │ ├── settings.py # 数据库、API 等配置(从环境变量读取)
│ │ ├── constants.py # 产品库、时间基准、关键词
│ │ └── prompts.py # Planner 系统提示词
│ ├── db/ # MySQL 连接与表结构探测
│ ├── memory/ # 会话与用户长期记忆
│ ├── intent/ # 意图识别、路由、答案校验
│ ├── analytics/ # 行为分析与聚合统计
│ ├── services/ # 客户、退休测算、配置、报告
│ ├── llm/ # 大模型调用与 Tool Schema
│ ├── skills/ # 可调用 Skill 实现与注册表
│ ├── agent/ # 规则引擎与 LLM Agent
│ ├── core/
│ │ └── pipeline.py # 主流程 run()
│ └── state.py # 进程内缓存与日志
├── test_local.py # 本地批量提问自测
└── test_enhancements.py # 结构化回归自测
pip install -r requirements.txt请勿在代码仓库中填写真实账号、密码或 API Key。
请复制 .env.example 为 .env(或在系统中导出环境变量),填入你自己的私有配置:
| 变量 | 说明 |
|---|---|
TASK2_DB_HOST |
MySQL 主机 |
TASK2_DB_PORT |
端口,默认 3306 |
TASK2_DB_USER |
数据库用户名 |
TASK2_DB_PASSWORD |
数据库密码 |
TASK2_DB_NAME |
数据库名 |
TASK2_BASE_TABLE |
客户基础表,本地训练集常用 train_base_table |
TASK2_ACTION_TABLE |
行为表,本地训练集常用 train_action_table |
ONE_API_URL |
大模型接口地址(竞赛环境由平台注入) |
ONE_API_KEY |
你的 One API 密钥 |
ONE_API_MODEL |
模型名,如 qwen3.6-flash |
可选:
| 变量 | 说明 |
|---|---|
PENSION_MEMORY_PATH |
记忆 JSON 路径;未设置时使用系统临时目录下按进程区分的文件 |
AGENT_LOG_LEVEL |
日志级别,默认 WARNING |
Windows PowerShell 示例:
$env:TASK2_DB_HOST = "你的主机"
$env:TASK2_DB_USER = "你的用户名"
$env:TASK2_DB_PASSWORD = "你的密码"
$env:TASK2_DB_NAME = "你的库名"
$env:ONE_API_KEY = "你的密钥"python run.py "客户V500001现在年龄多大?"标准输出仅打印最终答案(无 JSON、无调试日志),符合竞赛提交要求。
无参数运行 python run.py 会执行内置多轮对话示例(用于本地调试)。
- 加载记忆 → 解析用户 ID、意图(
intent/) - 规则引擎
rule_run:确定性 SQL/公式题优先 - LLM Agent
agent_run:Function Calling + Planner 选择 Skill - 写回会话记忆 并返回答案
- 不要修改提交目录下的共享文件;记忆文件请用
PENSION_MEMORY_PATH指向唯一路径(含 PID/UUID)。 - 日志勿输出到 stdout;可通过
AGENT_LOG_LEVEL控制。
python test_local.py
python test_enhancements.py敏感项集中在 pension_agent/config/settings.py,默认值为空,必须通过环境变量提供后才能连接数据库或调用大模型。