[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-95150":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":14,"stars30d":14,"stars90d":12,"forks30d":12,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":18,"createdAt":9,"pushedAt":9,"updatedAt":19,"readmeContent":20,"aiSummary":9,"trendingCount":12,"starSnapshotCount":12,"syncStatus":21,"lastSyncTime":22,"discoverSource":23},95150,"-AI-","gry67673905\u002F-AI-","gry67673905","软件实习项目作业",null,"Python",124,0,106,13,44.8,false,"main",[],"2026-08-24 04:01:23","# 智慧政务“一网通办”AI 助手（演示环境）\n\n本仓库是一套可运行的全栈业务演示：群众（个人\u002F企业）、工作人员和管理员可在 Android 本地资产门户中完成事项查询、资格预检、材料与表单、办件审核、预约、模拟核验\u002F缴费\u002F邮寄、咨询转人工、知识维护和审计。后端采用 FastAPI 模块化单体，MCP 作为独立只读服务，PostgreSQL 是事项与办件的权威数据源。\n\n> 所有账号、身份、企业、材料、政策、审核、缴费和邮寄结果均为合成演示数据。本项目没有接入真实政务、短信、支付、人脸、银行或快递平台，不能作为真实办事依据。\n\n## 仓库组成\n\n| 目录 | 作用 |\n| --- | --- |\n| `backend\u002F` | FastAPI、边界\u002F协调者\u002F领域\u002F基础设施分层、Alembic、JWT、MinIO、RAG 与受控咨询编排 |\n| `android\u002F` | `com.example.aicompanion` 本地 WebView 门户、原生边界、协调者、网关与 HMS 地图入口 |\n| `mcp-server\u002F` | Node Streamable HTTP MCP，只读调用模拟政务目录 |\n| `mock-gov-api\u002F` | 六个演示事项及材料、流程、窗口 REST 数据 |\n| `compose.yaml` | PostgreSQL 16、Redis 7、Milvus、etcd、MinIO、API、MCP 与 Mock API |\n| `compose.cloud.yaml`、`deploy\u002F` | 云端演示 Compose、Docker secrets、HTTPS、备份\u002F回滚和显式付费 RAG 导入脚本 |\n| `scripts\u002F` | 环境初始化、启动、迁移、业务验收、AI 验收、日志、测试和非破坏性停止 |\n\n设计说明见 [架构文档](docs\u002Farchitecture.md)、[业务与领域设计](docs\u002Fbusiness-design.md)、[角色权限矩阵](docs\u002Frole-permissions.md)、[API 示例](docs\u002Fapi-examples.md) 和 [云端部署手册](docs\u002Fcloud-deployment.md)。\n\n## 前置条件\n\n- Windows 11、WSL2 与 Docker Desktop（Linux 容器后端）。Milvus 建议为 Docker Desktop 预留至少 8 GB 内存和 15 GB 磁盘。\n- PowerShell 5.1 或 7；Android 构建还需要 Android SDK\u002FGradle。\n- 外层 `key-list.txt` 中存在拼写为 `deepseeek-key` 的本地 DeepSeek 测试密钥。\n\n本阶段不启动 AVD、不安装 APK，也不做手机界面可视化调试。\n\n## 初始化与启动\n\n在本目录运行：\n\n```powershell\n.\\scripts\\init-env.ps1\n.\\scripts\\dev-up.ps1\n```\n\n`init-env.ps1` 将 DeepSeek 密钥安全映射为 `DEEPSEEK_API_KEY`，并随机生成数据库、JWT、MinIO 与内部服务凭据。脚本不会打印密钥；`.env` 已忽略提交。已有 `.env` 只补齐缺项，避免改动现有 PostgreSQL 数据卷对应的密码。\n\n检查服务：\n\n```powershell\nInvoke-RestMethod http:\u002F\u002F127.0.0.1:8000\u002Fhealth\u002Fready | ConvertTo-Json -Depth 10\n.\\scripts\\logs.ps1\n```\n\nAPI 文档在本地栈启动后可访问 `http:\u002F\u002F127.0.0.1:8000\u002Fdocs`；当前 OpenAPI 共 73 个 method\u002Fpath。默认本地栈未启用团队 RAG，`\u002Fhealth\u002Fready` 检查 PostgreSQL、Redis、Milvus、MCP、Mock API、MinIO 和业务种子共 7 项。云端启用固定团队数据集后新增 `rag_corpus`，共 8 项，并校验激活别名准确指向 15,858 条内容向量和 1,012 条文档路由向量。PostgreSQL 宿主调试端口为 `127.0.0.1:15432`，其他本地依赖默认仅在 Compose 网络中可达。\n\n## 演示账号\n\n管理员和工作人员由启动种子幂等创建，群众账号通过注册接口创建。只有在需要人工输入账号时才显式运行：\n\n```powershell\n.\\scripts\\show-demo-accounts.ps1\n```\n\n该命令会在当前终端显示本地管理员\u002F工作人员凭据；不要截图、复制到日志或用于云端。`business-smoke.ps1` 会从 `.env` 读取凭据并仅输出状态汇总，不打印密码、Token、材料哈希或表单内容。\n\n角色与申请人类型是两个维度：权限角色为 `CITIZEN\u002FSTAFF\u002FADMIN`；个人和企业群众分别使用 `INDIVIDUAL\u002FENTERPRISE`，企业不是管理员角色。\n\n## 演示目录与业务\n\n种子目录包含六个已发布演示事项：社会保障卡申领、居民身份证丢失补领、个体工商户设立登记、企业社会保险登记、劳动合同备案、单位住房公积金缴存登记与演示缴付。它们覆盖：\n\n- 受限 JSON 规则资格预检和 JSON Schema 动态表单；\n- 必需、条件必需、可选材料，PDF\u002FJPEG\u002FPNG 单文件不超过 10 MB；\n- MinIO 私有材料、SHA-256 完整性、`NOT_SCANNED_DEMO` 明示状态；\n- 乐观锁版本与 `Idempotency-Key`；\n- 部门内工作人员认领、补正、驳回、批准和办结；\n- 本地模拟预约、身份核验、缴费失败\u002F重试\u002F取消与邮寄推进\u002F取消；\n- 公开事项 AI 咨询、`local_catalog + MCP + RAG` 三类溯源、SSE、反馈与转人工取消\u002F解决；RAG 可融合本地知识与经净化、版本化导入的团队语料；\n- 管理员部门\u002F窗口\u002F人员、事项版本生命周期、知识索引恢复\u002F重试\u002F归档、审计和指标。\n\nLLM 只解释和建议，不能直接更改办件、审批、缴费、账号或事项状态。私人身份、表单、材料和办件数据不会进入公共 Redis 检索缓存或 LLM 上下文。\n\n## 验收与测试\n\n不调用 DeepSeek 的完整业务 smoke：\n\n```powershell\n.\\scripts\\business-smoke.ps1\n```\n\n脚本注册一次随机合成群众账号，完成“社会保障卡申领”的资格预检、两份合成 PDF 上传、提交、工作人员两阶段认领\u002F审批\u002F办结、群众时间线和管理员指标检查；随后只对本轮创建的数据验证模拟邮寄取消、转人工取消，以及合成知识上传后归档。全程不调用 DeepSeek，不删除既有数据库或对象存储数据。\n\n仅在最后需要付费验收时运行 AI smoke：\n\n```powershell\n.\\scripts\\smoke.ps1\n```\n\n默认先从公开目录精确选择 `DEMO-SS-CARD-001`，再携带其内部 `service_id` 发起一次真实 DeepSeek 调用；响应必须同时包含 PostgreSQL `local_catalog`、MCP 和 RAG 三类来源。脚本按 `规范化问题 + 外部事项 ID + dataset 版本` 精确检查 Redis `smart-gov:retrieval:v3:*` 键；本地未启用团队 RAG 时 dataset 为 `none`。脚本不输出答案、会话、密钥或 Token。只有显式传入 `-SecondPaidCall` 才会发起第二次模型调用并验证 `cache_hit`。\n\n源码级测试：\n\n```powershell\n.\\scripts\\test-all.ps1\n# 首次安装本地依赖：\n.\\scripts\\test-all.ps1 -InstallDependencies\n```\n\n测试包含全部 PowerShell AST 校验、Python 单元测试、Mock\u002FMCP Node 检查和测试，以及 Android `lintDebug`、JVM 测试和 `assembleDebug`。不会启动模拟器、安装 APK 或截图。若只检查非 Android 代码，可使用 `-SkipAndroid`。\n\n迁移状态与非破坏升级：\n\n```powershell\n.\\scripts\\migrate.ps1 -StatusOnly\n.\\scripts\\migrate.ps1\n```\n\n启动时 API 也会执行 `alembic upgrade head`。当前 head 为 `0005_rag_corpus`，在既有业务表之外增加版本化团队语料、分块检查点与 embedding 缓存；迁移保留 `0001_initial` 的匿名聊天，脚本不会 downgrade、删表或删除数据卷。\n\n## 主要 API\n\n| 分组 | 说明 | 认证 |\n| --- | --- | --- |\n| `GET \u002Fhealth\u002Flive`、`GET \u002Fhealth\u002Fready` | 进程存活与全栈依赖就绪 | 否 |\n| `POST \u002Fapi\u002Fv1\u002Fchat`、`POST \u002Fapi\u002Fv1\u002Fchat\u002Fstream` | 普通\u002FSSE 咨询；可带 `service_id`，私人办件查询还可带 `application_id` | 公开事项可匿名 |\n| `\u002Fapi\u002Fv1\u002Fauth\u002F*` | 演示验证码、个人\u002F企业注册、登录、刷新、登出、当前账号 | 按接口 |\n| `\u002Fapi\u002Fv1\u002Fservices\u002F*` | 事项、资格、材料、流程、表单、窗口 | 公开 |\n| `\u002Fapi\u002Fv1\u002Fapplications\u002F*` | 草稿、表单、材料、提交、补正、撤回、丢弃、时间线、邮寄 | 群众；授权人员可读 |\n| `\u002Fapi\u002Fv1\u002Fconsultations\u002F*` | 历史、反馈、转人工、消息和发起人取消 | 登录 |\n| `\u002Fapi\u002Fv1\u002Fstaff\u002F*` | 待办、认领、审核、办结和人工咨询 | 工作人员 |\n| `\u002Fapi\u002Fv1\u002Fadmin\u002F*` | 组织、人员、账号、事项版本、知识上传\u002F重试\u002F归档、审计、指标 | 管理员 |\n| `\u002Fapi\u002Fv1\u002Fappointments\u002F*`、`\u002Fpayments\u002F*`、`\u002Fverifications\u002F*`、`\u002Fdeliveries\u002F*` | 预约与本地模拟能力；群众可取消未终结支付\u002F邮寄，到场和配送由所属部门人员推进 | 按操作 |\n\n所有提交、审核、预约、缴费等写操作都使用唯一 `Idempotency-Key`；并发编辑以响应中的 `version` 为准，版本或状态冲突返回 409。统一错误语义和请求示例见 [API 示例](docs\u002Fapi-examples.md)。\n\n## Android 构建与安全边界\n\n```powershell\nSet-Location .\\android\nD:\\AndroidDev\\gradle-8.14.5\\bin\\gradle.bat :app:lintDebug :app:testDebugUnitTest :app:assembleDebug\n```\n\n当前 debug\u002Frelease 构建都默认连接 `https:\u002F\u002F123.249.68.176`，且网络安全配置拒绝明文 HTTP。可用 `-PgovApiBase=https:\u002F\u002F\u003C域名或IP>` 覆盖，但必须是无用户名、路径、查询和片段的 HTTPS origin，否则构建立即失败。debug APK 生成于 `android\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Fdebug\u002Fapp-debug.apk`；本项目只编译和测试，不自动安装 APK、不启动 AVD。\n\nWebView 只加载受信任的本地资产。JS Bridge 仅暴露校验后的命令封包、材料选择、语音开始\u002F停止和窗口地图；HTTP 与 Token 均由原生网关处理。Token 使用 Android Keystore 加密存储，不进入 WebView、日志或明文 SharedPreferences。HMS 地图只接受后端校验后的 `window_id`。\n\n沿用的 AG Connect 身份和包名为 `com.example.aicompanion`，因此 APK 会被 Android 视作旧应用的同一包，本阶段只验证构建。\n\n## 停止、数据与云端边界\n\n```powershell\n.\\scripts\\dev-down.ps1\n```\n\n普通停止保留所有命名卷。`docker compose down --volumes` 会不可恢复地删除 PostgreSQL、Redis、Milvus 和 MinIO 数据，自动化脚本不会执行它。\n\n仓库已提供 Linux x86_64 云端演示部署文件：API 仅绑定 `127.0.0.1:18000`，公网由 Nginx 与官方 lego v5.4.0 管理的 Let’s Encrypt `shortlived` IP 证书提供 `https:\u002F\u002F123.249.68.176`；TCP 80 必须持续开放给无停机 HTTP-01 续期，密钥通过 `deploy\u002Fsecrets\u002F` 只读挂载。首次部署保持 `RAG_GROUP_ENABLED=false` 并通过 7 项 readiness；确认 DashScope 一次性 embedding 费用后，才可显式运行 `deploy\u002Fscripts\u002Fimport-rag.sh --confirm-paid-import` 导入固定数据集 `team-2026-08-22-v1`，成功后必须通过含 `rag_corpus` 的 8 项 readiness。原始 `RAG_DATABASE .zip` 含废弃凭据及非业务文件，禁止上传；云端只使用忽略提交的净化归档。\n\n完整的 IP 证书、部署、RAG 导入、一次付费 smoke、零额外付费公网验收、流量切换、旧服务备份\u002F恢复和 APK 构建顺序见 [云端部署手册](docs\u002Fcloud-deployment.md)。旧 Certbot、域名 TLS-ALPN 脚本仅为历史回退材料，本次 IP 部署禁止调用。这仍是演示环境：Mock API 和 Demo Provider 不是正式政务能力；正式上线前还必须完成真实身份\u002F租户隔离、密钥托管、病毒扫描、授权审计、隐私和合规评估。\n",2,"2026-08-22 02:30:05","CREATED_QUERY"]