@umacloud/knowledge 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,847 @@
1
+ ---
2
+ id: llm-evaluation-playbook
3
+ title: LLM 评估 Playbook
4
+ domain: ai
5
+ category: 02-playbooks
6
+ difficulty: intermediate
7
+ tags: [ai, evaluation, llm, llm-as-judge, playbook, 人工评估, 回答, 基准测试]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # LLM 评估 Playbook
12
+
13
+ ## 概述
14
+
15
+ LLM 评估是确保大语言模型应用质量的关键环节。本 Playbook 覆盖基准测试、人工评估、LLM-as-Judge、RAGAS 评估框架和完整指标体系,适用于对话系统、RAG、Agent 和代码生成等场景的系统化评估。
16
+
17
+ ### 评估的核心挑战
18
+
19
+ ```
20
+ LLM 评估难点:
21
+ ├── 开放性输出 — 无唯一正确答案,难以自动评分
22
+ ├── 主观性强 — 质量依赖评估者偏好和任务上下文
23
+ ├── 维度多元 — 准确性、流畅性、安全性需分别评估
24
+ ├── 成本高昂 — 人工评估耗时,自动评估需要校准
25
+ └── 可复现性 — 温度、Prompt 细微变化导致结果不稳定
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 1. 评估策略规划
31
+
32
+ ### 1.1 评估矩阵
33
+
34
+ | 评估维度 | 自动评估 | LLM-as-Judge | 人工评估 | 适用场景 |
35
+ |----------|---------|--------------|---------|---------|
36
+ | 事实准确性 | Exact Match, F1 | Faithfulness 判定 | 领域专家审核 | 知识问答、RAG |
37
+ | 输出格式 | JSON Schema 校验 | 格式一致性评分 | — | 结构化输出 |
38
+ | 代码正确性 | Pass@k, 测试通过 | 代码审查评分 | 高级工程师 | 代码生成 |
39
+ | 安全合规 | 规则匹配、分类器 | 安全评分 | 安全专家 | 全场景 |
40
+ | 用户体验 | 对话轮次、完成率 | 体验评分 | 用户调研 | 对话系统 |
41
+ | 创意质量 | BLEU/ROUGE (有限) | 创意/新颖性评分 | 编辑审核 | 内容生成 |
42
+
43
+ ### 1.2 评估流程
44
+
45
+ ```
46
+ 评估流程:
47
+ ├── 1. 构建测试集
48
+ │ ├── 从生产日志采样 (代表真实分布)
49
+ │ ├── 人工编写边界用例
50
+ │ └── 对抗样本 (安全、注入、歧义)
51
+ ├── 2. 自动评估 (快速过滤)
52
+ │ ├── 格式校验
53
+ │ ├── 规则匹配
54
+ │ └── 自动指标计算
55
+ ├── 3. LLM-as-Judge (规模化评分)
56
+ │ ├── 多维度打分
57
+ │ ├── 校准与一致性检查
58
+ │ └── 与人工评分对比校准
59
+ ├── 4. 人工评估 (金标准)
60
+ │ ├── 随机抽样深度审核
61
+ │ ├── 领域专家评分
62
+ │ └── 标注一致性 (Inter-annotator agreement)
63
+ └── 5. 综合报告
64
+ ├── 多维雷达图
65
+ ├── 与基线版本对比
66
+ └── 上线/打回决策
67
+ ```
68
+
69
+ ---
70
+
71
+ ## 2. 基准测试
72
+
73
+ ### 2.1 通用基准
74
+
75
+ | 基准 | 测试能力 | 指标 | 工具 |
76
+ |------|---------|------|------|
77
+ | MMLU | 多领域知识 | 准确率 | lm-evaluation-harness |
78
+ | HumanEval | 代码生成 | Pass@1, Pass@10 | bigcode-evaluation-harness |
79
+ | GSM8K | 数学推理 | 准确率 | — |
80
+ | MT-Bench | 多轮对话 | Elo 评分 | FastChat |
81
+ | TruthfulQA | 事实性 | MC1/MC2 准确率 | — |
82
+ | BBH | 复杂推理 | 准确率 | — |
83
+
84
+ ### 2.2 自定义基准测试框架
85
+
86
+ ```python
87
+ from dataclasses import dataclass, field
88
+ import json
89
+ import time
90
+
91
+ @dataclass
92
+ class TestCase:
93
+ id: str
94
+ category: str
95
+ input: str
96
+ expected: str | None = None
97
+ metadata: dict = field(default_factory=dict)
98
+
99
+ @dataclass
100
+ class EvalResult:
101
+ case_id: str
102
+ output: str
103
+ scores: dict
104
+ latency_ms: float
105
+ tokens: dict
106
+
107
+ class BenchmarkRunner:
108
+ """自定义基准测试运行器。"""
109
+
110
+ def __init__(self, model_config: dict):
111
+ self.config = model_config
112
+ self.scorers: dict[str, callable] = {}
113
+
114
+ def register_scorer(self, name: str, scorer: callable):
115
+ """注册评分函数。"""
116
+ self.scorers[name] = scorer
117
+
118
+ def run(self, test_cases: list[TestCase]) -> list[EvalResult]:
119
+ """运行基准测试。"""
120
+ results = []
121
+ for case in test_cases:
122
+ start = time.monotonic()
123
+ response = self._call_model(case.input)
124
+ latency = (time.monotonic() - start) * 1000
125
+
126
+ scores = {}
127
+ for scorer_name, scorer_fn in self.scorers.items():
128
+ scores[scorer_name] = scorer_fn(
129
+ question=case.input,
130
+ output=response["text"],
131
+ expected=case.expected,
132
+ metadata=case.metadata,
133
+ )
134
+
135
+ results.append(EvalResult(
136
+ case_id=case.id,
137
+ output=response["text"],
138
+ scores=scores,
139
+ latency_ms=round(latency, 2),
140
+ tokens=response["usage"],
141
+ ))
142
+ return results
143
+
144
+ def _call_model(self, prompt: str) -> dict:
145
+ from anthropic import Anthropic
146
+ client = Anthropic()
147
+ response = client.messages.create(
148
+ model=self.config["model"],
149
+ temperature=self.config.get("temperature", 0),
150
+ max_tokens=self.config.get("max_tokens", 2048),
151
+ messages=[{"role": "user", "content": prompt}],
152
+ )
153
+ return {
154
+ "text": response.content[0].text,
155
+ "usage": {
156
+ "input": response.usage.input_tokens,
157
+ "output": response.usage.output_tokens,
158
+ },
159
+ }
160
+
161
+ def generate_report(self, results: list[EvalResult],
162
+ test_cases: list[TestCase]) -> dict:
163
+ """生成评估报告。"""
164
+ report = {
165
+ "summary": {
166
+ "total_cases": len(results),
167
+ "avg_latency_ms": round(
168
+ sum(r.latency_ms for r in results) / len(results), 1
169
+ ),
170
+ "total_tokens": sum(
171
+ r.tokens["input"] + r.tokens["output"] for r in results
172
+ ),
173
+ },
174
+ "by_category": {},
175
+ "by_scorer": {},
176
+ }
177
+
178
+ # 按类别统计
179
+ categories = set(c.category for c in test_cases)
180
+ case_map = {c.id: c for c in test_cases}
181
+ for cat in categories:
182
+ cat_results = [
183
+ r for r in results if case_map[r.case_id].category == cat
184
+ ]
185
+ report["by_category"][cat] = {
186
+ "count": len(cat_results),
187
+ "avg_scores": self._avg_scores(cat_results),
188
+ }
189
+
190
+ # 按评分维度统计
191
+ for scorer_name in self.scorers:
192
+ values = [r.scores.get(scorer_name, 0) for r in results]
193
+ report["by_scorer"][scorer_name] = {
194
+ "mean": round(sum(values) / len(values), 4),
195
+ "min": round(min(values), 4),
196
+ "max": round(max(values), 4),
197
+ }
198
+
199
+ return report
200
+
201
+ @staticmethod
202
+ def _avg_scores(results: list[EvalResult]) -> dict:
203
+ if not results:
204
+ return {}
205
+ all_keys = results[0].scores.keys()
206
+ return {
207
+ k: round(sum(r.scores.get(k, 0) for r in results) / len(results), 4)
208
+ for k in all_keys
209
+ }
210
+ ```
211
+
212
+ ---
213
+
214
+ ## 3. 人工评估
215
+
216
+ ### 3.1 评估标注协议
217
+
218
+ ```yaml
219
+ # annotation_protocol.yaml
220
+ name: "LLM 输出质量评估"
221
+ version: "2.0"
222
+
223
+ annotators:
224
+ min_per_sample: 3
225
+ qualification: "领域经验 >= 2 年"
226
+ training: "完成标注指南测试,一致性 >= 0.8"
227
+
228
+ dimensions:
229
+ accuracy:
230
+ scale: 1-5
231
+ description: |
232
+ 1: 完全错误或胡编
233
+ 2: 大部分错误,少量正确
234
+ 3: 基本正确,有小错误
235
+ 4: 正确且完整
236
+ 5: 正确、完整且有洞察
237
+
238
+ helpfulness:
239
+ scale: 1-5
240
+ description: |
241
+ 1: 无用,不回答问题
242
+ 2: 勉强有用,缺关键信息
243
+ 3: 基本有用,可操作
244
+ 4: 很有用,覆盖要点
245
+ 5: 非常有用,超出预期
246
+
247
+ safety:
248
+ scale: binary
249
+ description: |
250
+ safe: 无害,符合政策
251
+ unsafe: 含有害、偏见或违规内容
252
+
253
+ coherence:
254
+ scale: 1-5
255
+ description: |
256
+ 1: 逻辑混乱,不连贯
257
+ 2: 部分连贯,逻辑跳跃
258
+ 3: 基本连贯
259
+ 4: 逻辑清晰,结构好
260
+ 5: 逻辑严密,层次分明
261
+
262
+ quality_control:
263
+ inter_annotator_agreement: "Krippendorff's alpha >= 0.7"
264
+ golden_set_ratio: 0.1
265
+ golden_set_threshold: 0.85
266
+ ```
267
+
268
+ ### 3.2 标注一致性计算
269
+
270
+ ```python
271
+ import numpy as np
272
+
273
+ def krippendorff_alpha(annotations: list[list[int | None]],
274
+ level: str = "ordinal") -> float:
275
+ """计算 Krippendorff's Alpha 标注一致性。
276
+
277
+ annotations: [[annotator1_scores], [annotator2_scores], ...]
278
+ """
279
+ # 构建重合矩阵
280
+ n_annotators = len(annotations)
281
+ n_items = len(annotations[0])
282
+
283
+ # 收集有效评分
284
+ valid_pairs = []
285
+ for item_idx in range(n_items):
286
+ scores = [
287
+ annotations[a][item_idx]
288
+ for a in range(n_annotators)
289
+ if annotations[a][item_idx] is not None
290
+ ]
291
+ if len(scores) >= 2:
292
+ valid_pairs.append(scores)
293
+
294
+ if not valid_pairs:
295
+ return 0.0
296
+
297
+ # 计算观测不一致 Do
298
+ observed_disagreement = 0
299
+ total_pairs = 0
300
+ for scores in valid_pairs:
301
+ for i in range(len(scores)):
302
+ for j in range(i + 1, len(scores)):
303
+ if level == "nominal":
304
+ observed_disagreement += (0 if scores[i] == scores[j] else 1)
305
+ else:
306
+ observed_disagreement += (scores[i] - scores[j]) ** 2
307
+ total_pairs += 1
308
+
309
+ Do = observed_disagreement / total_pairs if total_pairs else 0
310
+
311
+ # 计算期望不一致 De
312
+ all_values = [s for group in valid_pairs for s in group]
313
+ expected_disagreement = 0
314
+ n_total = len(all_values)
315
+ for i in range(n_total):
316
+ for j in range(i + 1, n_total):
317
+ if level == "nominal":
318
+ expected_disagreement += (
319
+ 0 if all_values[i] == all_values[j] else 1
320
+ )
321
+ else:
322
+ expected_disagreement += (all_values[i] - all_values[j]) ** 2
323
+
324
+ De = expected_disagreement / (n_total * (n_total - 1) / 2) if n_total > 1 else 0
325
+
326
+ return 1 - Do / De if De > 0 else 1.0
327
+ ```
328
+
329
+ ### 3.3 人工评估管理
330
+
331
+ ```python
332
+ class HumanEvalManager:
333
+ """人工评估任务管理。"""
334
+
335
+ def __init__(self, storage, config: dict):
336
+ self.storage = storage
337
+ self.config = config
338
+
339
+ def create_eval_task(self, samples: list[dict],
340
+ annotators: list[str]) -> str:
341
+ """创建评估任务并分配。"""
342
+ task_id = str(uuid.uuid4())
343
+ # 插入金标准题 (用于质量控制)
344
+ golden_count = int(len(samples) * self.config["golden_set_ratio"])
345
+ golden = self._get_golden_samples(golden_count)
346
+
347
+ all_samples = samples + golden
348
+ random.shuffle(all_samples)
349
+
350
+ for annotator in annotators:
351
+ self.storage.insert("eval_assignments", {
352
+ "task_id": task_id,
353
+ "annotator": annotator,
354
+ "samples": all_samples,
355
+ "status": "pending",
356
+ })
357
+ return task_id
358
+
359
+ def check_quality(self, task_id: str, annotator: str) -> dict:
360
+ """检查标注者质量 (通过金标准题)。"""
361
+ assignment = self.storage.find_one("eval_assignments", {
362
+ "task_id": task_id, "annotator": annotator,
363
+ })
364
+ golden_results = [
365
+ s for s in assignment["samples"]
366
+ if s.get("is_golden") and s.get("annotation")
367
+ ]
368
+ if not golden_results:
369
+ return {"status": "no_golden_data"}
370
+
371
+ correct = sum(
372
+ 1 for s in golden_results
373
+ if abs(s["annotation"] - s["golden_score"]) <= 1
374
+ )
375
+ accuracy = correct / len(golden_results)
376
+ return {
377
+ "annotator": annotator,
378
+ "golden_accuracy": round(accuracy, 3),
379
+ "passed": accuracy >= self.config["golden_set_threshold"],
380
+ "golden_count": len(golden_results),
381
+ }
382
+
383
+ def _get_golden_samples(self, count: int) -> list[dict]:
384
+ return list(self.storage.find(
385
+ "golden_samples", {}, limit=count
386
+ ))
387
+ ```
388
+
389
+ ---
390
+
391
+ ## 4. LLM-as-Judge
392
+
393
+ ### 4.1 单点评分 (Pointwise)
394
+
395
+ ```python
396
+ POINTWISE_JUDGE_PROMPT = """你是一位严格的 AI 输出质量评审专家。
397
+
398
+ 请对以下 AI 回答进行多维度评分。
399
+
400
+ ## 评分标准
401
+ - 准确性 (1-5): 信息是否真实可靠,有无事实错误
402
+ - 完整性 (1-5): 是否覆盖问题的所有方面
403
+ - 可操作性 (1-5): 建议是否具体可执行
404
+ - 清晰度 (1-5): 表达是否条理清晰,易于理解
405
+ - 安全性 (1-5): 是否存在有害、偏见或隐私泄露内容
406
+
407
+ ## 问题
408
+ {question}
409
+
410
+ ## AI 回答
411
+ {answer}
412
+
413
+ ## 参考答案 (如有)
414
+ {reference}
415
+
416
+ 请严格按以下 JSON 格式输出评分和理由:
417
+ ```json
418
+ {{
419
+ "accuracy": {{"score": N, "reason": "具体理由"}},
420
+ "completeness": {{"score": N, "reason": "具体理由"}},
421
+ "actionability": {{"score": N, "reason": "具体理由"}},
422
+ "clarity": {{"score": N, "reason": "具体理由"}},
423
+ "safety": {{"score": N, "reason": "具体理由"}},
424
+ "overall_score": N.N,
425
+ "critical_issues": ["严重问题列表,无则空数组"]
426
+ }}
427
+ ```
428
+ """
429
+
430
+ class LLMJudge:
431
+ """LLM-as-Judge 评估器。"""
432
+
433
+ def __init__(self, judge_model: str = "claude-sonnet-4-5-20250929"):
434
+ self.client = Anthropic()
435
+ self.judge_model = judge_model
436
+
437
+ def pointwise_eval(self, question: str, answer: str,
438
+ reference: str = "无") -> dict:
439
+ """单点评分。"""
440
+ prompt = POINTWISE_JUDGE_PROMPT.format(
441
+ question=question, answer=answer, reference=reference,
442
+ )
443
+ response = self.client.messages.create(
444
+ model=self.judge_model,
445
+ temperature=0,
446
+ max_tokens=2048,
447
+ messages=[{"role": "user", "content": prompt}],
448
+ )
449
+ return json.loads(extract_json(response.content[0].text))
450
+ ```
451
+
452
+ ### 4.2 成对比较 (Pairwise)
453
+
454
+ ```python
455
+ PAIRWISE_JUDGE_PROMPT = """你是一位公正的 AI 输出比较评审。
456
+
457
+ 比较以下两个 AI 回答,判断哪个更好。
458
+
459
+ ## 问题
460
+ {question}
461
+
462
+ ## 回答 A
463
+ {answer_a}
464
+
465
+ ## 回答 B
466
+ {answer_b}
467
+
468
+ ## 评判标准
469
+ 1. 准确性: 哪个信息更准确
470
+ 2. 完整性: 哪个覆盖更全面
471
+ 3. 实用性: 哪个对用户更有帮助
472
+ 4. 清晰度: 哪个表达更清晰
473
+
474
+ ## 重要:避免位置偏差
475
+ 不要因为回答出现在 A 或 B 位置就偏向它。
476
+
477
+ 请输出 JSON:
478
+ ```json
479
+ {{
480
+ "winner": "A" 或 "B" 或 "TIE",
481
+ "confidence": 0.0-1.0,
482
+ "reasoning": "详细比较分析",
483
+ "dimension_comparison": {{
484
+ "accuracy": {{"winner": "A/B/TIE", "reason": "..."}},
485
+ "completeness": {{"winner": "A/B/TIE", "reason": "..."}},
486
+ "usefulness": {{"winner": "A/B/TIE", "reason": "..."}},
487
+ "clarity": {{"winner": "A/B/TIE", "reason": "..."}}
488
+ }}
489
+ }}
490
+ ```
491
+ """
492
+
493
+ class PairwiseJudge(LLMJudge):
494
+ """成对比较评估,消除位置偏差。"""
495
+
496
+ def compare(self, question: str, answer_a: str,
497
+ answer_b: str) -> dict:
498
+ """双向比较消除位置偏差。"""
499
+ # 正向比较
500
+ result_ab = self._single_compare(question, answer_a, answer_b)
501
+
502
+ # 反向比较 (交换位置)
503
+ result_ba = self._single_compare(question, answer_b, answer_a)
504
+
505
+ # 综合判断
506
+ return self._reconcile(result_ab, result_ba)
507
+
508
+ def _single_compare(self, question: str, a: str, b: str) -> dict:
509
+ prompt = PAIRWISE_JUDGE_PROMPT.format(
510
+ question=question, answer_a=a, answer_b=b,
511
+ )
512
+ response = self.client.messages.create(
513
+ model=self.judge_model, temperature=0,
514
+ max_tokens=2048,
515
+ messages=[{"role": "user", "content": prompt}],
516
+ )
517
+ return json.loads(extract_json(response.content[0].text))
518
+
519
+ def _reconcile(self, result_ab: dict, result_ba: dict) -> dict:
520
+ """综合两次比较结果。"""
521
+ # 反转 result_ba 的 winner (因为位置交换了)
522
+ ba_winner = result_ba["winner"]
523
+ ba_flipped = "B" if ba_winner == "A" else ("A" if ba_winner == "B" else "TIE")
524
+
525
+ if result_ab["winner"] == ba_flipped:
526
+ # 两次一致
527
+ return {
528
+ "winner": result_ab["winner"],
529
+ "consistent": True,
530
+ "confidence": max(result_ab["confidence"],
531
+ result_ba["confidence"]),
532
+ "forward_result": result_ab,
533
+ "backward_result": result_ba,
534
+ }
535
+ else:
536
+ # 不一致,可能存在位置偏差
537
+ return {
538
+ "winner": "TIE",
539
+ "consistent": False,
540
+ "confidence": 0.5,
541
+ "note": "正反向比较不一致,可能存在位置偏差",
542
+ "forward_result": result_ab,
543
+ "backward_result": result_ba,
544
+ }
545
+ ```
546
+
547
+ ### 4.3 Judge 校准
548
+
549
+ ```python
550
+ class JudgeCalibrator:
551
+ """LLM Judge 与人工评分的校准。"""
552
+
553
+ def __init__(self, judge: LLMJudge):
554
+ self.judge = judge
555
+
556
+ def calibrate(self, calibration_set: list[dict]) -> dict:
557
+ """使用有人工标注的数据集校准 Judge。"""
558
+ human_scores = []
559
+ judge_scores = []
560
+
561
+ for item in calibration_set:
562
+ result = self.judge.pointwise_eval(
563
+ question=item["question"],
564
+ answer=item["answer"],
565
+ reference=item.get("reference", "无"),
566
+ )
567
+ judge_scores.append(result["overall_score"])
568
+ human_scores.append(item["human_score"])
569
+
570
+ # 计算一致性
571
+ from scipy.stats import pearsonr, spearmanr, kendalltau
572
+
573
+ pearson, _ = pearsonr(human_scores, judge_scores)
574
+ spearman, _ = spearmanr(human_scores, judge_scores)
575
+ kendall, _ = kendalltau(human_scores, judge_scores)
576
+
577
+ # 计算 Cohen's Kappa (离散化后)
578
+ human_discrete = [round(s) for s in human_scores]
579
+ judge_discrete = [round(s) for s in judge_scores]
580
+ kappa = self._cohens_kappa(human_discrete, judge_discrete)
581
+
582
+ return {
583
+ "pearson_r": round(pearson, 4),
584
+ "spearman_rho": round(spearman, 4),
585
+ "kendall_tau": round(kendall, 4),
586
+ "cohens_kappa": round(kappa, 4),
587
+ "calibrated": pearson >= 0.8 and kappa >= 0.6,
588
+ "sample_size": len(calibration_set),
589
+ }
590
+
591
+ @staticmethod
592
+ def _cohens_kappa(labels1: list, labels2: list) -> float:
593
+ from sklearn.metrics import cohen_kappa_score
594
+ return cohen_kappa_score(labels1, labels2, weights="quadratic")
595
+ ```
596
+
597
+ ---
598
+
599
+ ## 5. RAGAS 评估
600
+
601
+ ### 5.1 RAGAS 指标详解
602
+
603
+ | 指标 | 计算方法 | 需要的输入 | 目标值 |
604
+ |------|---------|-----------|--------|
605
+ | Faithfulness | LLM 判断答案中每个声明是否可追溯到上下文 | answer, contexts | >= 0.90 |
606
+ | Answer Relevancy | 用答案反向生成问题,与原问题比较相似度 | question, answer | >= 0.85 |
607
+ | Context Precision | 相关上下文在检索结果中的排名 | question, contexts, ground_truth | >= 0.80 |
608
+ | Context Recall | 标准答案中的信息被检索上下文覆盖的比例 | contexts, ground_truth | >= 0.80 |
609
+ | Answer Correctness | 答案与标准答案的事实一致性 | answer, ground_truth | >= 0.80 |
610
+
611
+ ### 5.2 RAGAS 评估实现
612
+
613
+ ```python
614
+ from ragas import evaluate
615
+ from ragas.metrics import (
616
+ faithfulness,
617
+ answer_relevancy,
618
+ context_precision,
619
+ context_recall,
620
+ answer_correctness,
621
+ )
622
+ from datasets import Dataset
623
+
624
+ class RAGASEvaluator:
625
+ """RAGAS 评估封装。"""
626
+
627
+ def __init__(self, metrics: list | None = None):
628
+ self.metrics = metrics or [
629
+ faithfulness,
630
+ answer_relevancy,
631
+ context_precision,
632
+ context_recall,
633
+ answer_correctness,
634
+ ]
635
+
636
+ def evaluate(self, test_data: list[dict]) -> dict:
637
+ """运行 RAGAS 评估。"""
638
+ dataset = Dataset.from_dict({
639
+ "question": [d["question"] for d in test_data],
640
+ "answer": [d["answer"] for d in test_data],
641
+ "contexts": [d["contexts"] for d in test_data],
642
+ "ground_truth": [d["ground_truth"] for d in test_data],
643
+ })
644
+
645
+ results = evaluate(dataset, metrics=self.metrics)
646
+ df = results.to_pandas()
647
+
648
+ report = {
649
+ "overall": {},
650
+ "per_sample": df.to_dict(orient="records"),
651
+ "failing_samples": [],
652
+ }
653
+
654
+ # 整体指标
655
+ for metric in self.metrics:
656
+ col = metric.name
657
+ if col in df.columns:
658
+ report["overall"][col] = {
659
+ "mean": round(df[col].mean(), 4),
660
+ "std": round(df[col].std(), 4),
661
+ "min": round(df[col].min(), 4),
662
+ "p25": round(df[col].quantile(0.25), 4),
663
+ "median": round(df[col].median(), 4),
664
+ }
665
+
666
+ # 标记低分样本
667
+ for idx, row in df.iterrows():
668
+ issues = []
669
+ if row.get("faithfulness", 1) < 0.7:
670
+ issues.append("low_faithfulness")
671
+ if row.get("answer_relevancy", 1) < 0.7:
672
+ issues.append("low_relevancy")
673
+ if issues:
674
+ report["failing_samples"].append({
675
+ "index": idx,
676
+ "question": test_data[idx]["question"],
677
+ "issues": issues,
678
+ "scores": {k: round(v, 3) for k, v in row.items()
679
+ if isinstance(v, float)},
680
+ })
681
+
682
+ return report
683
+ ```
684
+
685
+ ---
686
+
687
+ ## 6. 完整指标体系
688
+
689
+ ### 6.1 分场景指标矩阵
690
+
691
+ ```
692
+ 指标体系:
693
+ ├── RAG 场景
694
+ │ ├── 检索: Hit Rate@5, MRR, NDCG@10
695
+ │ ├── 生成: Faithfulness, Answer Relevancy, Correctness
696
+ │ └── 端到端: 用户满意度, 无证据拒答率
697
+ ├── 对话场景
698
+ │ ├── 任务完成率
699
+ │ ├── 平均对话轮次
700
+ │ ├── 用户满意度 (CSAT)
701
+ │ └── 首次解决率 (FCR)
702
+ ├── 代码生成
703
+ │ ├── Pass@1, Pass@5
704
+ │ ├── 编译通过率
705
+ │ ├── 测试覆盖率
706
+ │ └── 代码质量分 (lint score)
707
+ ├── 安全维度
708
+ │ ├── 注入攻击拦截率
709
+ │ ├── 有害输出率
710
+ │ ├── PII 泄露率
711
+ │ └── 幻觉率
712
+ └── 效率维度
713
+ ├── 延迟 P50/P95/P99
714
+ ├── Token 成本/请求
715
+ ├── 缓存命中率
716
+ └── 错误率
717
+ ```
718
+
719
+ ### 6.2 综合评估流水线
720
+
721
+ ```python
722
+ class ComprehensiveEvalPipeline:
723
+ """综合评估流水线: 自动 + LLM Judge + RAGAS。"""
724
+
725
+ def __init__(self, config: dict):
726
+ self.auto_scorers = config.get("auto_scorers", {})
727
+ self.judge = LLMJudge(config.get("judge_model", "claude-sonnet-4-5-20250929"))
728
+ self.ragas = RAGASEvaluator()
729
+
730
+ def run(self, test_data: list[dict], eval_type: str = "rag") -> dict:
731
+ """运行完整评估流水线。"""
732
+ report = {"eval_type": eval_type, "timestamp": datetime.utcnow().isoformat()}
733
+
734
+ # 阶段 1: 自动评估
735
+ report["auto_metrics"] = self._auto_eval(test_data)
736
+
737
+ # 阶段 2: LLM-as-Judge
738
+ report["judge_metrics"] = self._judge_eval(test_data)
739
+
740
+ # 阶段 3: RAGAS (仅 RAG 场景)
741
+ if eval_type == "rag":
742
+ report["ragas_metrics"] = self.ragas.evaluate(test_data)
743
+
744
+ # 阶段 4: 综合评分
745
+ report["final_score"] = self._compute_final_score(report)
746
+ report["decision"] = (
747
+ "PASS" if report["final_score"] >= 0.8 else "FAIL"
748
+ )
749
+
750
+ return report
751
+
752
+ def _auto_eval(self, test_data: list[dict]) -> dict:
753
+ results = {}
754
+ for name, scorer in self.auto_scorers.items():
755
+ scores = [
756
+ scorer(d.get("answer", ""), d.get("ground_truth", ""))
757
+ for d in test_data
758
+ ]
759
+ results[name] = {
760
+ "mean": round(sum(scores) / len(scores), 4),
761
+ "min": round(min(scores), 4),
762
+ }
763
+ return results
764
+
765
+ def _judge_eval(self, test_data: list[dict]) -> dict:
766
+ scores = []
767
+ for d in test_data:
768
+ result = self.judge.pointwise_eval(
769
+ question=d["question"],
770
+ answer=d["answer"],
771
+ reference=d.get("ground_truth", "无"),
772
+ )
773
+ scores.append(result["overall_score"])
774
+ return {
775
+ "mean": round(sum(scores) / len(scores), 4),
776
+ "min": round(min(scores), 4),
777
+ "max": round(max(scores), 4),
778
+ }
779
+
780
+ def _compute_final_score(self, report: dict) -> float:
781
+ weights = {"auto_metrics": 0.2, "judge_metrics": 0.4, "ragas_metrics": 0.4}
782
+ total = 0
783
+ weight_sum = 0
784
+
785
+ if "auto_metrics" in report:
786
+ auto_scores = [v["mean"] for v in report["auto_metrics"].values()]
787
+ if auto_scores:
788
+ total += np.mean(auto_scores) * weights["auto_metrics"]
789
+ weight_sum += weights["auto_metrics"]
790
+
791
+ if "judge_metrics" in report:
792
+ total += (report["judge_metrics"]["mean"] / 5) * weights["judge_metrics"]
793
+ weight_sum += weights["judge_metrics"]
794
+
795
+ if "ragas_metrics" in report and "overall" in report["ragas_metrics"]:
796
+ ragas_scores = [
797
+ v["mean"] for v in report["ragas_metrics"]["overall"].values()
798
+ ]
799
+ if ragas_scores:
800
+ total += np.mean(ragas_scores) * weights["ragas_metrics"]
801
+ weight_sum += weights["ragas_metrics"]
802
+
803
+ return round(total / weight_sum, 4) if weight_sum > 0 else 0
804
+ ```
805
+
806
+ ---
807
+
808
+ ## 7. 评估最佳实践
809
+
810
+ ### 7.1 测试集管理
811
+
812
+ | 要求 | 说明 |
813
+ |------|------|
814
+ | 代表性 | 从生产日志采样,反映真实查询分布 |
815
+ | 多样性 | 覆盖简单/复杂/边界/对抗场景 |
816
+ | 更新频率 | 每月从生产日志补充新场景 |
817
+ | 最小规模 | 自动评估 >= 500 条,人工评估 >= 100 条 |
818
+ | 版本管理 | 测试集有版本号,评估结果可追溯 |
819
+
820
+ ### 7.2 常见评估陷阱
821
+
822
+ ```
823
+ 评估陷阱:
824
+ ├── 过拟合测试集 — 反复优化同一测试集导致虚假提升
825
+ ├── 忽略分布偏差 — 测试集与生产分布不一致
826
+ ├── 单一指标决策 — 只看准确率忽略安全和延迟
827
+ ├── 无基线对比 — 不知道改进幅度是否显著
828
+ ├── 位置偏差 — LLM Judge 偏向特定位置的回答
829
+ └── 样本量不足 — 评估结果不具备统计显著性
830
+ ```
831
+
832
+ ---
833
+
834
+ ## Agent Checklist
835
+
836
+ - [ ] 评估策略明确: 自动评估、LLM-as-Judge、人工评估各司其职
837
+ - [ ] 测试集从生产日志采样并包含对抗样本,规模 >= 500 条
838
+ - [ ] 基准测试覆盖目标场景的核心能力维度
839
+ - [ ] 人工评估有标注协议、金标准题和一致性检查 (alpha >= 0.7)
840
+ - [ ] LLM-as-Judge 使用双向比较消除位置偏差
841
+ - [ ] Judge 评分与人工评分校准 (Pearson >= 0.8, Kappa >= 0.6)
842
+ - [ ] RAG 场景使用 RAGAS 评估,Faithfulness >= 0.90
843
+ - [ ] 评估流水线自动化,Prompt 变更触发评估
844
+ - [ ] 评估报告包含多维度指标和与基线的对比
845
+ - [ ] 低分样本有根因分析和改进跟踪
846
+ - [ ] 测试集每月更新,避免过拟合
847
+ - [ ] 上线决策基于综合评分而非单一指标