@jhm1909/ag-kit 0.1.0
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.
- package/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
# Advanced RAG Techniques
|
|
2
|
+
|
|
3
|
+
Beyond basic retrieval: hybrid search, reranking, and query optimization.
|
|
4
|
+
|
|
5
|
+
## 1. Query Understanding
|
|
6
|
+
|
|
7
|
+
### Intent Classification
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
INTENT_TYPES = {
|
|
11
|
+
"factual": "Direct question with specific answer",
|
|
12
|
+
"summarization": "Request for summary or overview",
|
|
13
|
+
"comparison": "Comparing multiple items",
|
|
14
|
+
"procedural": "How-to or step-by-step",
|
|
15
|
+
"analytical": "Requires reasoning over data"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def classify_intent(query: str) -> str:
|
|
19
|
+
classification = llm.classify(query, list(INTENT_TYPES.keys()))
|
|
20
|
+
return classification
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Query Expansion
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
def expand_query(query: str, method: str = "hybrid") -> list:
|
|
27
|
+
"""Generate multiple query variations for better recall"""
|
|
28
|
+
|
|
29
|
+
expansions = [query]
|
|
30
|
+
|
|
31
|
+
if method in ["synonym", "hybrid"]:
|
|
32
|
+
# Add synonym variations
|
|
33
|
+
synonyms = llm.complete(f"""
|
|
34
|
+
Generate 3 synonym variations of: "{query}"
|
|
35
|
+
Return as JSON list.
|
|
36
|
+
""")
|
|
37
|
+
expansions.extend(json.loads(synonyms))
|
|
38
|
+
|
|
39
|
+
if method in ["hyde", "hybrid"]:
|
|
40
|
+
# Hypothetical Document Embedding
|
|
41
|
+
hypothetical_answer = llm.complete(f"""
|
|
42
|
+
Write a brief answer to: "{query}"
|
|
43
|
+
(This will be used for semantic search, not shown to user)
|
|
44
|
+
""")
|
|
45
|
+
expansions.append(hypothetical_answer)
|
|
46
|
+
|
|
47
|
+
return expansions
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Sub-query Decomposition
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
def decompose_query(complex_query: str) -> list:
|
|
54
|
+
"""Break complex query into atomic retrievals"""
|
|
55
|
+
|
|
56
|
+
decomposition = llm.complete(f"""
|
|
57
|
+
Break this complex question into 2-4 simpler sub-questions:
|
|
58
|
+
|
|
59
|
+
Question: "{complex_query}"
|
|
60
|
+
|
|
61
|
+
Each sub-question should retrieve one piece of information.
|
|
62
|
+
Return as JSON list.
|
|
63
|
+
""")
|
|
64
|
+
|
|
65
|
+
sub_queries = json.loads(decomposition)
|
|
66
|
+
|
|
67
|
+
# Retrieve for each sub-query
|
|
68
|
+
results = []
|
|
69
|
+
for sq in sub_queries:
|
|
70
|
+
docs = vector_db.search(sq, top_k=3)
|
|
71
|
+
results.append({"query": sq, "docs": docs})
|
|
72
|
+
|
|
73
|
+
return results
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 2. Retrieval Strategies
|
|
77
|
+
|
|
78
|
+
### Hybrid Search (Dense + Sparse)
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
class HybridRetriever:
|
|
82
|
+
def __init__(self, vector_db, bm25_index, alpha: float = 0.5):
|
|
83
|
+
self.vector_db = vector_db
|
|
84
|
+
self.bm25 = bm25_index
|
|
85
|
+
self.alpha = alpha # Weight between dense (alpha) and sparse (1-alpha)
|
|
86
|
+
|
|
87
|
+
def search(self, query: str, top_k: int = 10) -> list:
|
|
88
|
+
# Dense retrieval
|
|
89
|
+
query_emb = embed(query)
|
|
90
|
+
dense_results = self.vector_db.search(query_emb, top_k=top_k*2)
|
|
91
|
+
|
|
92
|
+
# Sparse retrieval
|
|
93
|
+
sparse_results = self.bm25.search(query, top_k=top_k*2)
|
|
94
|
+
|
|
95
|
+
# Fusion
|
|
96
|
+
fused = self.reciprocal_rank_fusion(
|
|
97
|
+
dense_results,
|
|
98
|
+
sparse_results,
|
|
99
|
+
k=60 # RRF constant
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
return fused[:top_k]
|
|
103
|
+
|
|
104
|
+
def reciprocal_rank_fusion(self, dense, sparse, k: int = 60):
|
|
105
|
+
"""RRF: score = Σ 1/(k + rank)"""
|
|
106
|
+
scores = defaultdict(float)
|
|
107
|
+
|
|
108
|
+
for rank, doc in enumerate(dense):
|
|
109
|
+
scores[doc.id] += 1 / (k + rank)
|
|
110
|
+
|
|
111
|
+
for rank, doc in enumerate(sparse):
|
|
112
|
+
scores[doc.id] += 1 / (k + rank)
|
|
113
|
+
|
|
114
|
+
# Get full documents and sort by score
|
|
115
|
+
sorted_ids = sorted(scores.keys(), key=lambda x: scores[x], reverse=True)
|
|
116
|
+
return [self.get_doc(id) for id in sorted_ids]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Multi-Index Retrieval
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
class MultiIndexRetriever:
|
|
123
|
+
"""Query multiple indices and merge results"""
|
|
124
|
+
|
|
125
|
+
def __init__(self):
|
|
126
|
+
self.indices = {
|
|
127
|
+
"documentation": vector_db_docs,
|
|
128
|
+
"code": vector_db_code,
|
|
129
|
+
"tickets": vector_db_tickets,
|
|
130
|
+
"conversations": vector_db_chat
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
def search(self, query: str, index_filter: list = None) -> dict:
|
|
134
|
+
indices_to_search = index_filter or self.indices.keys()
|
|
135
|
+
|
|
136
|
+
results = {}
|
|
137
|
+
for idx_name in indices_to_search:
|
|
138
|
+
results[idx_name] = self.indices[idx_name].search(query, top_k=5)
|
|
139
|
+
|
|
140
|
+
return results
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Contextual Retrieval
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
def contextual_chunking(documents: list) -> list:
|
|
147
|
+
"""Add context to each chunk for better retrieval"""
|
|
148
|
+
|
|
149
|
+
chunks = []
|
|
150
|
+
for doc in documents:
|
|
151
|
+
# Split into base chunks
|
|
152
|
+
base_chunks = split_document(doc)
|
|
153
|
+
|
|
154
|
+
for chunk in base_chunks:
|
|
155
|
+
# Generate context for this chunk
|
|
156
|
+
context = llm.complete(f"""
|
|
157
|
+
Document: {doc.title}
|
|
158
|
+
|
|
159
|
+
This chunk is from the above document:
|
|
160
|
+
{chunk.text}
|
|
161
|
+
|
|
162
|
+
Provide 1-2 sentences of context to situate this chunk:
|
|
163
|
+
""")
|
|
164
|
+
|
|
165
|
+
chunks.append({
|
|
166
|
+
"text": f"{context}\n\n{chunk.text}",
|
|
167
|
+
"metadata": chunk.metadata
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
return chunks
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 3. Reranking
|
|
174
|
+
|
|
175
|
+
### Cross-Encoder Reranking
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
from sentence_transformers import CrossEncoder
|
|
179
|
+
|
|
180
|
+
class Reranker:
|
|
181
|
+
def __init__(self, model: str = "cross-encoder/ms-marco-MiniLM-L-6-v2"):
|
|
182
|
+
self.model = CrossEncoder(model)
|
|
183
|
+
|
|
184
|
+
def rerank(self, query: str, documents: list, top_k: int = 5) -> list:
|
|
185
|
+
# Create query-doc pairs
|
|
186
|
+
pairs = [[query, doc.text] for doc in documents]
|
|
187
|
+
|
|
188
|
+
# Score
|
|
189
|
+
scores = self.model.predict(pairs)
|
|
190
|
+
|
|
191
|
+
# Sort by score
|
|
192
|
+
scored_docs = list(zip(documents, scores))
|
|
193
|
+
scored_docs.sort(key=lambda x: x[1], reverse=True)
|
|
194
|
+
|
|
195
|
+
return [doc for doc, _ in scored_docs[:top_k]]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### LLM-based Reranking
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
def llm_rerank(query: str, documents: list, top_k: int = 3) -> list:
|
|
202
|
+
"""Use LLM to judge relevance"""
|
|
203
|
+
|
|
204
|
+
doc_descriptions = "\n\n".join([
|
|
205
|
+
f"[{i}] {doc.text[:200]}..."
|
|
206
|
+
for i, doc in enumerate(documents)
|
|
207
|
+
])
|
|
208
|
+
|
|
209
|
+
ranking = llm.complete(f"""
|
|
210
|
+
Query: {query}
|
|
211
|
+
|
|
212
|
+
Documents:
|
|
213
|
+
{doc_descriptions}
|
|
214
|
+
|
|
215
|
+
Rank the top {top_k} most relevant documents by number.
|
|
216
|
+
Return as JSON list of indices.
|
|
217
|
+
""")
|
|
218
|
+
|
|
219
|
+
indices = json.loads(ranking)
|
|
220
|
+
return [documents[i] for i in indices]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Diversity Reranking
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
def diversify_results(documents: list, lambda_param: float = 0.5) -> list:
|
|
227
|
+
"""MMR: Maximal Marginal Relevance
|
|
228
|
+
|
|
229
|
+
Score = λ * Relevance - (1-λ) * max(Similarity to selected)
|
|
230
|
+
"""
|
|
231
|
+
selected = []
|
|
232
|
+
candidates = documents.copy()
|
|
233
|
+
|
|
234
|
+
while candidates and len(selected) < len(documents):
|
|
235
|
+
if not selected:
|
|
236
|
+
# Pick most relevant first
|
|
237
|
+
best = max(candidates, key=lambda d: d.relevance_score)
|
|
238
|
+
else:
|
|
239
|
+
# Pick best trade-off between relevance and diversity
|
|
240
|
+
best = max(candidates, key=lambda d:
|
|
241
|
+
lambda_param * d.relevance_score -
|
|
242
|
+
(1 - lambda_param) * max(
|
|
243
|
+
similarity(d, s) for s in selected
|
|
244
|
+
)
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
selected.append(best)
|
|
248
|
+
candidates.remove(best)
|
|
249
|
+
|
|
250
|
+
return selected
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## 4. Context Assembly
|
|
254
|
+
|
|
255
|
+
### Prompt Compression
|
|
256
|
+
|
|
257
|
+
```python
|
|
258
|
+
class PromptCompressor:
|
|
259
|
+
def compress(self, context: list, query: str, budget: int) -> list:
|
|
260
|
+
"""Compress context to fit token budget"""
|
|
261
|
+
|
|
262
|
+
if self.token_count(context) <= budget:
|
|
263
|
+
return context
|
|
264
|
+
|
|
265
|
+
# Method 1: Truncate least relevant
|
|
266
|
+
scored = [
|
|
267
|
+
(doc, relevance_score(doc, query))
|
|
268
|
+
for doc in context
|
|
269
|
+
]
|
|
270
|
+
scored.sort(key=lambda x: x[1], reverse=True)
|
|
271
|
+
|
|
272
|
+
selected = []
|
|
273
|
+
tokens = 0
|
|
274
|
+
for doc, score in scored:
|
|
275
|
+
doc_tokens = len(doc.text.split())
|
|
276
|
+
if tokens + doc_tokens > budget:
|
|
277
|
+
# Compress this doc
|
|
278
|
+
compressed = self.summarize(doc.text, ratio=0.5)
|
|
279
|
+
doc_tokens = len(compressed.split())
|
|
280
|
+
doc.text = compressed
|
|
281
|
+
|
|
282
|
+
if tokens + doc_tokens <= budget:
|
|
283
|
+
selected.append(doc)
|
|
284
|
+
tokens += doc_tokens
|
|
285
|
+
|
|
286
|
+
return selected
|
|
287
|
+
|
|
288
|
+
def summarize(self, text: str, ratio: float = 0.3) -> str:
|
|
289
|
+
"""Extractive summarization"""
|
|
290
|
+
sentences = sent_tokenize(text)
|
|
291
|
+
|
|
292
|
+
# Score sentences by importance
|
|
293
|
+
word_freq = Counter(word_tokenize(text.lower()))
|
|
294
|
+
scores = [
|
|
295
|
+
sum(word_freq[w] for w in word_tokenize(s.lower()))
|
|
296
|
+
for s in sentences
|
|
297
|
+
]
|
|
298
|
+
|
|
299
|
+
# Select top sentences
|
|
300
|
+
n = max(1, int(len(sentences) * ratio))
|
|
301
|
+
top_indices = np.argsort(scores)[-n:]
|
|
302
|
+
|
|
303
|
+
return " ".join([sentences[i] for i in sorted(top_indices)])
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Dynamic Context Window
|
|
307
|
+
|
|
308
|
+
```python
|
|
309
|
+
def assemble_context(
|
|
310
|
+
query: str,
|
|
311
|
+
retrieved_docs: list,
|
|
312
|
+
max_tokens: int = 4000,
|
|
313
|
+
strategy: str = "hierarchical"
|
|
314
|
+
) -> str:
|
|
315
|
+
"""Build optimal context for LLM"""
|
|
316
|
+
|
|
317
|
+
if strategy == "simple":
|
|
318
|
+
# Concatenate until budget
|
|
319
|
+
context = ""
|
|
320
|
+
for doc in retrieved_docs:
|
|
321
|
+
if tokens(context + doc.text) > max_tokens:
|
|
322
|
+
break
|
|
323
|
+
context += f"\n\n[Source: {doc.source}]\n{doc.text}"
|
|
324
|
+
return context
|
|
325
|
+
|
|
326
|
+
elif strategy == "hierarchical":
|
|
327
|
+
# Summary + full text of most relevant
|
|
328
|
+
summary = generate_summary(retrieved_docs)
|
|
329
|
+
|
|
330
|
+
remaining_budget = max_tokens - tokens(summary)
|
|
331
|
+
full_texts = ""
|
|
332
|
+
for doc in retrieved_docs[:3]: # Top 3 full text
|
|
333
|
+
if tokens(full_texts + doc.text) > remaining_budget:
|
|
334
|
+
break
|
|
335
|
+
full_texts += f"\n\n{doc.text}"
|
|
336
|
+
|
|
337
|
+
return f"Summary:\n{summary}\n\nFull Context:\n{full_texts}"
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## 5. Evaluation
|
|
341
|
+
|
|
342
|
+
### Retrieval Metrics
|
|
343
|
+
|
|
344
|
+
```python
|
|
345
|
+
def evaluate_retrieval(
|
|
346
|
+
queries: list,
|
|
347
|
+
ground_truth: dict, # query -> relevant_doc_ids
|
|
348
|
+
retriever
|
|
349
|
+
) -> dict:
|
|
350
|
+
"""Compute retrieval metrics"""
|
|
351
|
+
|
|
352
|
+
metrics = {
|
|
353
|
+
"precision@k": [],
|
|
354
|
+
"recall@k": [],
|
|
355
|
+
"mrr": [], # Mean Reciprocal Rank
|
|
356
|
+
"ndcg": [] # Normalized Discounted Cumulative Gain
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
for query in queries:
|
|
360
|
+
results = retriever.search(query, top_k=10)
|
|
361
|
+
retrieved_ids = [r.id for r in results]
|
|
362
|
+
relevant_ids = set(ground_truth[query])
|
|
363
|
+
|
|
364
|
+
# Precision@k
|
|
365
|
+
for k in [1, 5, 10]:
|
|
366
|
+
retrieved_k = set(retrieved_ids[:k])
|
|
367
|
+
precision = len(retrieved_k & relevant_ids) / k
|
|
368
|
+
metrics[f"precision@{k}"].append(precision)
|
|
369
|
+
|
|
370
|
+
# Recall@k
|
|
371
|
+
for k in [1, 5, 10]:
|
|
372
|
+
retrieved_k = set(retrieved_ids[:k])
|
|
373
|
+
recall = len(retrieved_k & relevant_ids) / len(relevant_ids)
|
|
374
|
+
metrics[f"recall@{k}"].append(recall)
|
|
375
|
+
|
|
376
|
+
# MRR
|
|
377
|
+
for rank, doc_id in enumerate(retrieved_ids, 1):
|
|
378
|
+
if doc_id in relevant_ids:
|
|
379
|
+
metrics["mrr"].append(1 / rank)
|
|
380
|
+
break
|
|
381
|
+
else:
|
|
382
|
+
metrics["mrr"].append(0)
|
|
383
|
+
|
|
384
|
+
# Average metrics
|
|
385
|
+
return {k: np.mean(v) for k, v in metrics.items()}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Answer Relevance
|
|
389
|
+
|
|
390
|
+
```python
|
|
391
|
+
def evaluate_answer_relevance(
|
|
392
|
+
query: str,
|
|
393
|
+
answer: str,
|
|
394
|
+
retrieved_context: list
|
|
395
|
+
) -> dict:
|
|
396
|
+
"""Check if answer is grounded in retrieved context"""
|
|
397
|
+
|
|
398
|
+
# Faithfulness: does answer come from context?
|
|
399
|
+
faithfulness = llm.complete(f"""
|
|
400
|
+
Context: {retrieved_context}
|
|
401
|
+
Answer: {answer}
|
|
402
|
+
|
|
403
|
+
Is this answer fully supported by the context?
|
|
404
|
+
Score 1-5 and explain.
|
|
405
|
+
""")
|
|
406
|
+
|
|
407
|
+
# Answer relevance: does it answer the query?
|
|
408
|
+
relevance = llm.complete(f"""
|
|
409
|
+
Query: {query}
|
|
410
|
+
Answer: {answer}
|
|
411
|
+
|
|
412
|
+
Does this answer directly address the query?
|
|
413
|
+
Score 1-5 and explain.
|
|
414
|
+
""")
|
|
415
|
+
|
|
416
|
+
return {
|
|
417
|
+
"faithfulness": parse_score(faithfulness),
|
|
418
|
+
"relevance": parse_score(relevance)
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
## 6. Optimization Tips
|
|
423
|
+
|
|
424
|
+
### Index Optimization
|
|
425
|
+
- Use appropriate embedding models for domain
|
|
426
|
+
- Normalize embeddings for cosine similarity
|
|
427
|
+
- Consider dimensionality reduction (PCA)
|
|
428
|
+
- Index in batches for large datasets
|
|
429
|
+
|
|
430
|
+
### Query Optimization
|
|
431
|
+
- Cache common queries
|
|
432
|
+
- Pre-compute query embeddings
|
|
433
|
+
- Use query classification to route to specialized indices
|
|
434
|
+
|
|
435
|
+
### Latency Optimization
|
|
436
|
+
- Parallel retrieval from multiple sources
|
|
437
|
+
- Async embedding generation
|
|
438
|
+
- Streaming results (don't wait for all)
|
|
439
|
+
- Redis/memory cache for hot queries
|
|
440
|
+
|
|
441
|
+
### Cost Optimization
|
|
442
|
+
- Smaller embedding models for initial retrieval
|
|
443
|
+
- Larger models only for reranking
|
|
444
|
+
- Quantized embeddings (fp16, int8)
|