【S1W3 交叉评测】港链智企 Agent(智策通)— 评测意见 #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
交叉评测意见
评测项目: Eason/ganglian-zhixuan-agent-v3 — 港链智企 Agent(智策通)
评测日期: 2026-05-19
评测对象路径:
/tmp/synnovator-review/ganglian-zhixuan-agent-v3/extracted1. 项目理解
项目方向
「港链智企 Agent」(对外品牌名"智策通 / PolicyMatch")是一个面向临港新片区中小企业与 OPC 创业者的政策智能匹配与申报材料生成平台。其核心价值主张是:企业录入基本画像(行业、规模、研发投入、资质等),系统通过 AI 规则引擎自动匹配可申报的扶持政策,输出匹配度评分与可解释的匹配理由,并一键生成申报书初稿与材料清单。
技术架构上,本项目是一个 TanStack Start(React 19 SSR) + shadcn/ui + Cloudflare Workers 的前端应用,后端通过 HTTP API 对接一个独立的 Python 分析服务(
VITE_GANGLIAN_API_BASE指向http://127.0.0.1:8000),并在后端不可用时自动降级为本地规则引擎 + 硬编码政策库兜底。目标用户
/admin后台管理政策库与企业申报记录)核心问题
解决传统企业政策申报中的三个痛点:
2. 项目亮点
2.1 完整的前端产品闭环,6 个路由覆盖全流程
项目从首页营销落地页 → 登录 → 企业画像录入 → 政策匹配结果 → 申报材料生成 → 后台管理,构成一个完整的用户旅程。每个页面都有独立的 SEO meta 标签、响应式布局和清晰的信息架构。
2.2 精美的设计系统,达到商业产品视觉水准
项目使用了完整的设计令牌(design tokens)体系:Libre Baskerville 衬线字体用于标题(营造权威感)、IBM Plex Sans 无衬线字体用于正文(保证可读性)。OKLCH 色彩空间定义了 light/dark 双主题、自定义阴影层级(
shadow-card/shadow-elevated)、渐变(bg-gradient-primary)、以及 success/warning/destructive 语义色。UI 质感远超比赛原型平均水平。2.3 前后端分离架构 + 优雅降级策略
api.ts中的analyzeEnterprise()函数(第 136-164 行)实现了清晰的降级逻辑:先尝试POST /api/analyze调用 Python 后端,若失败则 catch 异常并回退到localFallback()使用本地规则引擎 + 硬编码政策库。同时通过sessionStorage缓存分析结果(第 150-152 行),避免重复请求。这种设计使得项目即使在没有后端的环境中也能完整演示。2.4 企业画像录入采用分步向导,降低信息收集门槛
onboarding.tsx(第 25-203 行)将企业信息收集拆分为 3 步:基础信息 → 经营情况 → 研发与资质,配合进度条(Progress组件,第 91 行)和步骤指示器(step indicator),信息架构清晰。关键字段使用 Select 下拉(行业/地区/规模从store.ts第 215-217 行的预定义常量中读取),减少用户输入负担。2.5 服务端错误处理完善,生产就绪度高
server.ts实现了一个精巧的错误处理链路:error-capture.ts(第 1-27 行)通过globalThis.addEventListener捕获未处理的 error 和 unhandledrejection 事件并存入带 TTL(5 秒)的环形缓冲区;server.ts的normalizeCatastrophicSsrResponse()(第 55-67 行)检测 h3 框架吞掉的 SSR 异常(特征:响应 body 为{"unhandled":true,"message":"HTTPError"}),并替换为品牌化的错误页面。同时start.ts(第 5-18 行)的中间件级兜底确保任何未捕获异常都返回格式化的 500 页面而非裸错误。2.6 后端 API 契约设计规范,TypeScript 类型完整
api.ts为后端返回的 JSON 定义了完整的 TypeScript 类型:BackendAnalyzeResponse(第 34-43 行)、ImportPolicyResponse(第 51-57 行)、ImportedPoliciesResponse(第 45-49 行),并通过normalizeBackendPolicy()(第 97-118 行)将后端字段映射到前端统一的RecommendedPolicy类型。这种类型安全的 API 层降低了前后端协作的出错概率。3. 当前不足
3.1 登录系统完全为演示态,零安全防护
login.tsx中的三种登录方式(邮箱、短信、OAuth)均为假登录:submit(email.split("@")[0] || "演示用户")— 不验证密码,不调用后端submit("Google 用户"),无实际 OAuth 流程store.ts的saveUser()(第 35-38 行)仅将{email, name}写入localStorage,无 token、无 session、无任何安全机制。这在比赛演示中可接受,但项目文档中未明确标注"演示环境/非生产就绪",可能误导评审对其完成度的判断。3.2 Python 后端代码未包含在本仓库中
api.ts调用了三个后端 API 端点:POST /api/analyze— 企业分析(第 138 行)GET /api/imported-policies— 获取已采集政策(第 173 行)POST /api/import-policy— 采集新政策(第 186 行)但整个代码仓库中没有任何后端代码(Python/Node/其他)。后端被假定为一个独立运行在
http://127.0.0.1:8000的服务。这意味着本仓库仅交付了前端部分,完整的"AI 智能匹配"能力依赖于一个未交付的外部服务。评审者无法完整评估项目的核心 AI 能力。3.3 本地规则引擎过于简化,匹配逻辑存在明显缺陷
store.ts中的recommendPolicies()函数(第 182-213 行)实现了一个基础规则引擎,存在以下问题:行业匹配仅做
includes判断(第 187 行):p.industries.includes(e.techField || e.industry)— 如果企业的techField为 "人工智能" 但政策行业的列表中只有 "信息技术",则会匹配失败。没有行业分类的层级映射或语义相似度计算。硬编码特殊规则(第 201-207 行):针对
p001(高企认定)和p002(专精特新)写了死代码规则,这些规则无法泛化到新增政策。政策库每增加一条政策,都需要修改规则引擎代码。基础分值为 40(第 185 行
let score = 40)且无解释 — 为什么不是 30 或 50?评分上限 99(第 209 行
Math.min(99, score))— 这意味着永远没有"100% 匹配",可能让用户困惑。3.4 Admin 后台数据全为硬编码,无法反映真实运营状态
admin.tsx中的企业列表(第 23-30 行ENTERPRISES常量)、申报记录(第 32-39 行APPS常量)、统计数据(第 41-46 行stats常量)全部为硬编码数组,数据与用户在前端录入的企业信息、在/materials页面生成的申报毫无关联。后台的"政策采集"功能(importPolicyFromUrl(),第 65-82 行)依赖一个不存在于仓库中的后端 API,在无后端环境中始终失败并静默降级为空数组(第 60-61 行.catch(() => { setImportedPolicies([]); }))。3.5 申报材料生成为纯模板引擎,非 AI 生成
materials.tsx中的generateDraft()函数(第 184-239 行)是一个纯字符串模板引擎:将企业信息填入预设的申报书模板段落中,通过字符串拼接生成。当后端返回applicationDraft时(第 64 行),直接使用后端版本;否则使用前端模板。真正的 AI 材料生成能力完全依赖未交付的 Python 后端。而且
generateDraft()中有硬编码的数学假设:预计带动新增就业人数固定为员工数 * 0.15(第 229 行),预计新增营收固定为营收 * 0.18(第 230 行),这些数字没有行业差异或政策相关性依据。3.6 缺少自动化测试、CI/CD 配置与可观测性
整个代码仓库中:
*.test.ts/*.spec.ts测试文件vitest/jest等测试依赖(package.json中无测试相关 devDependencies).github/workflows)console.error(如api.ts第 155 行、server.ts第 76 行)对于一个声称"面向企业生产环境"的项目,缺少测试是可接受的技术债务,但完全为零则表明项目仍处于原型阶段。
4. 下一步建议
4.1 [高优先] 将 Python 后端代码纳入仓库,或提供 Docker Compose 一键启动
当前评测者无法运行完整的"AI 匹配"流程。建议:
/backend目录docker-compose.yml实现前端 + 后端一键启动README.md中明确说明后端的 API 契约(请求/响应格式),并提供 mock server 数据以便离线评测4.2 [高优先] 标注演示环境边界,或在登录页增加「演示模式」标识
当前登录流程从 UI 上看与真实产品无异,但实际上无任何安全机制。建议:
/login路由增加skipAuth参数支持匿名体验(目前首页"开始匹配"按钮直接跳/onboarding,不强制登录,这其实是好的 UX,但登录页的存在容易误导)store.ts中补充注释说明 localStorage 仅用于演示数据持久化4.3 [高优先] 将
recommendPolicies()规则引擎升级为数据驱动当前的硬编码特殊规则(
p.id === "p001"/p.id === "p002")无法扩展。建议:Policy类型中增加matchRules: MatchRule[]字段,将匹配条件定义为数据而非代码link-aimatchmaker将评分公式参数化(见matchmaker-review.md第 57 行),可以借鉴其维度加权设计4.4 [中优先] 将 Admin 后台数据源接入真实状态
当前 Admin 后台的
ENTERPRISES/APPS数组与前端用户行为完全脱钩。建议:localStorage中的KEY_ENT读取(至少能做本地一致性)/materials页面的"下载"操作时写入 localStorage 并回显POLICIES数组和 localStorage 动态计算4.5 [中优先] 增加单元测试与 E2E 测试
建议补充:
recommendPolicies()各种企业画像输入下的评分输出(验证评分逻辑正确性)normalizeBackendPolicy()对各种后端响应格式的映射正确性PolicyCard/MaterialsPage的空状态、加载状态、错误状态onboarding → policies → materials完整用户旅程参考
package.json添加vitest和@testing-library/react依赖。4.6 [低优先] 增强申报材料生成的个性化
当前
generateDraft()的模板中预计新增就业和营收使用固定百分比。建议:applicationDraft字段由 AI 生成更个性化的材料(这需要后端就绪)5. 综合评价
总体评价:前端工程完成度高,全栈能力待验证
「港链智企 Agent」展现了 扎实的前端工程能力与出色的 UI 设计水准。TanStack Start SSR + shadcn/ui 的技术选型合理,设计系统精致,用户旅程完整,错误处理考虑周详。如果仅从"前端产品原型"角度来评估,这是一个质量很高的交付。
然而,该项目的核心定位是"AI Agent",其 AI 能力(智能匹配、材料生成、政策采集)全部依赖于一个未交付的 Python 后端服务。当前仓库中的前端代码实际上是一个"AI 能力的精美展示壳"——展示 AI 生成结果的 UI、处理 AI 结果的类型定义、AI 服务不可用时的降级策略,但 AI 本身不在仓库中。这也解释了为什么
admin.tsx中的数据全为硬编码、login.tsx的认证全为模拟——这些都是前端独立演示所必需的 mock。从 Eason 为我们 MedRoundTable 所做的详尽的跨维度评测来看(覆盖产品定位、文档完整性、Agent 通信协议、合规性等),Eason 本人对 AI Agent 项目的评审标准是较高的。按照同样的标准回看本项目:
核心建议:如果 Eason 能将 Python 后端代码补充进仓库并完善文档,这个项目有潜力成为一个优秀的全栈 AI Agent 应用。当前状态下,它更像一个"带着精美 UI 壳的前端半成品"——壳很亮,但核不在。