springbootAI 2.3.11__tar.gz → 2.3.12__tar.gz
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.
- {springbootai-2.3.11 → springbootai-2.3.12}/CHANGELOG.md +29 -0
- {springbootai-2.3.11/springbootAI.egg-info → springbootai-2.3.12}/PKG-INFO +37 -7
- {springbootai-2.3.11 → springbootai-2.3.12}/README.md +32 -5
- {springbootai-2.3.11 → springbootai-2.3.12}/pyproject.toml +5 -3
- {springbootai-2.3.11 → springbootai-2.3.12}/requirements.txt +4 -2
- {springbootai-2.3.11 → springbootai-2.3.12/springbootAI.egg-info}/PKG-INFO +37 -7
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootAI.egg-info/SOURCES.txt +3 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootAI.egg-info/requires.txt +4 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/annotation_runtime.py +92 -22
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/annotations.py +27 -11
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/autoconfig.py +23 -16
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/core.py +77 -9
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/core.py +4 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cli/scaffold.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/application_context.py +22 -2
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/bean_factory.py +16 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/data/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/datasource/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/runtime.py +11 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/migration.py +2 -2
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/core/sql_session.py +27 -4
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/version.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/security_aop.py +7 -2
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/security_context.py +24 -6
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/test/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/tx/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/utils/banner.py +2 -2
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/validation/__init__.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/swagger.py +1 -1
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/web_context.py +37 -4
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/__init__.py +1 -1
- springbootai-2.3.12/tests/test_ai_convenience.py +574 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_followup_enterprise_fixes.py +1 -1
- springbootai-2.3.12/tests/test_framework_audit_regressions.py +353 -0
- springbootai-2.3.12/tests/test_mcp_agent_example.py +98 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/LICENSE +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/MANIFEST.in +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/SECURITY.md +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/requirements-ai.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/requirements-langgraph.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/requirements-mcp.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/setup.cfg +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/setup.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/advisors.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/etl.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/memory.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/observability.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/providers.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/resilience.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/tools.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/ai/vectorstore.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/batch.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/cache.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/cloud.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/conditional.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/data.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/enterprise.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/langchain.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/langgraph.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/lombok.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/messaging.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/annotations/security.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/aspect.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/cloud_aop.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/comprehensive_aop.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/method_interceptor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/aop/proxy_factory.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/batch/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cli/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cli/main.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/bus.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/config_center.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/discovery.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/feign.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/gateway.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/load_balancer.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/nacos_config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/seata.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/seata_at_proxy.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/seata_bridge.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/sentinel.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/tracer.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/cloud/transaction_store.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/config/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/config/binding.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/config/config_loader.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/config/config_monitor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/config/spring-configuration-metadata.json +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/bean_definition.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/lifecycle.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/registry.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/context/scanner.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/core/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/core/graceful_shutdown.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/core/typing_utils.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/converters.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/easy_csv.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/exceptions.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/reader.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/csv/writer.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/data/page.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/data/repository.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/data/rest.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/data/specification.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/datasource/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/datasource/context.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/datasource/dynamic.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/devtools.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/event/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/event/publisher.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/converters.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/easy_excel.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/exceptions.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/reader.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/style.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/excel/writer.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/accessor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/auto_config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/holder.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/locale.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/locale_resolver.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/message_source.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/middleware.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/properties.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/i18n/sources.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/adapters.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/agents/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/agents/services.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/autoconfig.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/chains/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/chains/services.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/core.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/indexes/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/indexes/index.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/loaders/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/loaders/loaders.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/memory/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/memory/memory.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/parsers/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/parsers/parsers.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/partners.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/prompts/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/prompts/templates.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/tools/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/tools/tools.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/utilities/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/utilities/utils.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/autoconfig.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/checkpoint.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/langgraph/config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/logging/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/logging/context.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/logging/loguru_logger.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/main.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/annotation_runtime.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/autoconfig.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/client.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/mcp/server.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/messaging/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/messaging/kafka.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/messaging/rabbitmq.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/monitoring/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/monitoring/admin_client.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/monitoring/prometheus.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/database.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/ddl_auto.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/mybatis_integration.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/configuration.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/py.typed +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/retry/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/retry/recovery.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/retry/retry_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/retry/retry_decorator.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/scheduling/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/scheduling/scheduler.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/jwt_utils.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/oauth2.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/replay_protection.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/security/secret_manager.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/test/slicing.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/tracing/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/tracing/skywalking.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/tx/events.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/tx/synchronization.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/utils/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/utils/bean_utils.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/utils/logger.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/utils/redis_client.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/validation/aop.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/validation/constraints.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/validation/exceptions.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/validation/validator.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/__init__.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/actuator.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/csrf.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/exception_handler.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/hateoas.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/health.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/interceptor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/request_metrics.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/web/result.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/broker.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/exceptions.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/handler.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/router.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/springbootai/websocket/session.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_actuator.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_actuator_prometheus_admin.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_comprehensive.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_enterprise_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ai_stream_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_annotations_contract.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_aop_pointcut_enhancements.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_audit_time.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_batch.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_bean_utils.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_bus.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_cli.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_cloud_log_safety.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_component_init_error.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_compositional_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_admin_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_binding.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_center.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_center_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_fixes_185.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_config_monitor.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_core.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_csrf.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_csv_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_data_repository.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_data_rest.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_devtools.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_devtools_lifecycle_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_enterprise_safety_regressions.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_excel_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_final_enterprise_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_hateoas.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_i18n_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_io_http_logging_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_ioc_lifecycle_enhancements.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_kafka.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_langchain_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_latest_enterprise_audit_fixes.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_logging_config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_lombok_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_mcp_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_metadata.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_migration.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_nacos_config.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_new_annotations.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_new_features.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_oauth2.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_optional_component_timeouts.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_post_audit_enterprise_fixes.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_production_readiness.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_pymybatis_configuration_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_remaining_enterprise_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_request_metrics.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_retry.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_runtime_configuration_fixes.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_scaffold_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_scheduling.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_seata_at_proxy.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_security.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_security_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_security_hardening.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_select_page.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_starter.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_startup_lifecycle.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_swagger_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_test_slicing.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_tracing.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_transactional_events.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_validation_module.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_web_file_upload.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_web_security_responses.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_web_static_files.py +0 -0
- {springbootai-2.3.11 → springbootai-2.3.12}/tests/test_websocket_module.py +0 -0
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [2.3.12] - 2026-10-08
|
|
6
|
+
|
|
7
|
+
- 修复 Python 3.10 类型解析将默认值为 None 的 dict 参数包装为 Optional 后误识别为查询参数的问题;可空及带类型参数的 dict 统一按 JSON 请求体绑定,保留原始校验类型。
|
|
8
|
+
- 修复压测 Compose 和脚本仍引用旧 `tests_performance` 目录的问题,统一为仓库实际的 `tests/performance` 路径,恢复压测构建、k6 挂载和基准模块启动。
|
|
9
|
+
- 修复显式空扫描包列表仍回退扫描整个入口包的问题;`scan_base_packages=[]` / `base_packages=[]` 现在禁用扫描,避免测试切片导入无关集成测试后被意外跳过,未指定列表时仍自动扫描入口包。
|
|
10
|
+
- 修复 Docker 集成环境中 Kafka 发布 `localhost` 地址导致客户端尝试不可达 IPv6 地址的问题,统一公布测试客户端使用的 `127.0.0.1` 地址。
|
|
11
|
+
- 新增订单查询 Agent + MCP 完整案例:自动启动 stdio 子进程或连接独立 HTTP 服务,发现查询工具、根据订单返回值查物流并汇总;提供离线固定步骤模型、真实 Provider 入口、生命周期关闭和集成测试。
|
|
12
|
+
- 校正文档与源码行为的差异:修复示例导入、组件注册、路由前缀、Excel 类型声明、事务示例、重复 YAML 键及章节链接;明确 AI 元数据注解的实现范围、记忆身份要求、RAG 数据发送范围、Redis 故障行为、异步取消限制及迁移回滚语义。
|
|
13
|
+
- 同步 2.3.12 的 AI 便捷功能说明,移除无法据当前验证记录支持的真实 API 全部验证承诺,并修正 Fake 模型、ETL 切片和工具 Schema 示例。
|
|
14
|
+
- 应用显式启用 AI 时,在 Service 创建前自动装配默认组件并注册到 BeanFactory;已有自定义 `aiChatClient` 时保留其配置,省去手工 Configuration/Bean 注册。
|
|
15
|
+
- 修复构造器延迟类型注解导致按类型注入失败的问题;解析原始构造器的类型命名空间,并支持已解析的 BeanDefinition 依赖信息。
|
|
16
|
+
- 新增 `ChatClient.chat/achat/stream_text/astream_text` 快捷入口,复用默认 Advisor/工具配置并自动传递安全上下文身份和会话;关闭异步文本流会向底层流传播关闭请求,同步网络调用仍受其超时控制。
|
|
17
|
+
- 简化 `@Prompt` / `@RAG`:方法体可写 `...`,无模板时自动选择明确的输入;具体 Pydantic 返回类型自动提示 JSON Schema 并绑定、校验输出,显式 `@StructuredOutput` 优先。
|
|
18
|
+
- 修复 `@Prompt` 模板与 `@RAG` 组合时检索被跳过的问题,同步和异步路径均执行检索并保留 system 提示。
|
|
19
|
+
- 修复 `@AiCache` 跨用户/租户共享缓存和进行中请求的问题,自定义 key 也自动包含可信身份与会话作用域。
|
|
20
|
+
- 修复基础 `ChatModel.acall` 取消后过早释放并发名额及 LangGraph 异步排队取消后泄漏名额的问题。
|
|
21
|
+
- 补充 AI 简化用法文档、可运行示例及回归测试。
|
|
22
|
+
- 修复依赖审计发现的 PyJWT、urllib3、multidict 已知漏洞,分别升级至 `2.15.0`、`2.8.0`、`6.9.1`,同步核心/可选依赖声明与锁文件。
|
|
23
|
+
- 修复安全上下文更新时修改父/兄弟协程共享对象的问题;认证信息和角色、权限列表现在复制后绑定到当前上下文。
|
|
24
|
+
- 修复 JWT 字符串角色、权限按子串匹配的问题(例如 `ADMIN` 错误匹配 `SUPERADMIN`);字符串按单个完整权限处理,非法集合返回认证失败。
|
|
25
|
+
- 修复 `@PathVariable(name=...)` 别名未传给 FastAPI 的问题,URL 占位符名称与 Python 参数名可以不同。
|
|
26
|
+
- 修复 Controller 延迟类型注解在 Web 适配器的模块中解析失败的问题;请求模型现在使用原始方法的命名空间解析,包括 AOP 包装的方法。
|
|
27
|
+
- 支持 Controller 和异常 Advice 返回原生 `Response`(含 JSON、文件与 SSE 流式响应),保留状态码、响应头和响应体;显式 `HTTPException` 交给 FastAPI 处理。
|
|
28
|
+
- 修复 `@Transactional` 配置异常筛选时取消任务仍提交数据的问题;取消和进程控制信号始终回滚,普通业务异常的筛选规则保持生效。
|
|
29
|
+
- 修复 SqlSession 提交失败后遗留物理事务的问题;提交失败立即回滚,回滚失败交由连接池清理,关闭会话时仍能释放失效连接。
|
|
30
|
+
- 新增请求绑定、安全上下文及数据库故障路径回归测试。
|
|
31
|
+
|
|
3
32
|
## [2.3.11] - 2026-09-01
|
|
4
33
|
|
|
5
34
|
- 修复 PyMyBatis 访问控制仅覆盖查询、行级条件直接拼接及 SQL 尾部条件位置错误,写操作和字段权限现在失败关闭,动态租户值必须使用绑定参数。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.12
|
|
4
4
|
Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
|
|
5
5
|
Author-email: YuConggen <1516933915@qq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -30,9 +30,10 @@ Requires-Dist: python-dotenv==1.2.2
|
|
|
30
30
|
Requires-Dist: DBUtils==3.1.2
|
|
31
31
|
Requires-Dist: cryptography==50.0.0
|
|
32
32
|
Requires-Dist: bcrypt==5.0.0
|
|
33
|
-
Requires-Dist: pyjwt==2.
|
|
33
|
+
Requires-Dist: pyjwt==2.15.0
|
|
34
34
|
Requires-Dist: pydantic==2.13.4
|
|
35
35
|
Requires-Dist: requests==2.34.2
|
|
36
|
+
Requires-Dist: urllib3==2.8.0
|
|
36
37
|
Requires-Dist: httpx==0.28.1
|
|
37
38
|
Requires-Dist: defusedxml==0.7.1
|
|
38
39
|
Provides-Extra: mysql
|
|
@@ -49,6 +50,7 @@ Provides-Extra: kafka
|
|
|
49
50
|
Requires-Dist: kafka-python==2.0.2; extra == "kafka"
|
|
50
51
|
Provides-Extra: nacos
|
|
51
52
|
Requires-Dist: nacos-sdk-python==2.0.11; extra == "nacos"
|
|
53
|
+
Requires-Dist: multidict==6.9.1; extra == "nacos"
|
|
52
54
|
Provides-Extra: prometheus
|
|
53
55
|
Requires-Dist: prometheus-client==0.26.0; extra == "prometheus"
|
|
54
56
|
Provides-Extra: logging
|
|
@@ -130,6 +132,7 @@ Requires-Dist: sqlalchemy==2.0.40; extra == "full"
|
|
|
130
132
|
Requires-Dist: redis==8.1.0; extra == "full"
|
|
131
133
|
Requires-Dist: pika==1.4.4; extra == "full"
|
|
132
134
|
Requires-Dist: nacos-sdk-python==2.0.11; extra == "full"
|
|
135
|
+
Requires-Dist: multidict==6.9.1; extra == "full"
|
|
133
136
|
Requires-Dist: prometheus-client==0.26.0; extra == "full"
|
|
134
137
|
Requires-Dist: loguru==0.7.3; extra == "full"
|
|
135
138
|
Requires-Dist: sqlglot==27.28.1; extra == "full"
|
|
@@ -219,7 +222,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
219
222
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
220
223
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
221
224
|
|
|
222
|
-
当前版本是 `2.3.
|
|
225
|
+
当前版本是 `2.3.12`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
|
|
223
226
|
|
|
224
227
|
[新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
|
|
225
228
|
|
|
@@ -350,10 +353,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
350
353
|
|
|
351
354
|
| 组件 | 当前版本 |
|
|
352
355
|
|------|----------|
|
|
353
|
-
| `springbootai` 框架 API | 2.3.
|
|
354
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
355
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
356
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
356
|
+
| `springbootai` 框架 API | 2.3.12 |
|
|
357
|
+
| `springbootai.orm.pymybatis` | 2.3.12 |
|
|
358
|
+
| `springbootai.ai` AI 模块 | 2.3.12 |
|
|
359
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.12 |
|
|
357
360
|
| Python | 3.10+ |
|
|
358
361
|
|
|
359
362
|
### 1.4 适合什么场景
|
|
@@ -1327,7 +1330,12 @@ class RegistrationService:
|
|
|
1327
1330
|
|
|
1328
1331
|
```python
|
|
1329
1332
|
@Transactional(propagation="REQUIRED")
|
|
1333
|
+
def required_operation():
|
|
1334
|
+
...
|
|
1335
|
+
|
|
1330
1336
|
@Transactional(propagation="NESTED")
|
|
1337
|
+
def nested_operation():
|
|
1338
|
+
...
|
|
1331
1339
|
```
|
|
1332
1340
|
|
|
1333
1341
|
`NESTED` 在已有事务中创建 savepoint;`REQUIRES_NEW` 使用独立 Session/连接,连接池 `max_size` 至少应能容纳并发的外层和内层连接。
|
|
@@ -1488,6 +1496,26 @@ class CleanupJob:
|
|
|
1488
1496
|
>
|
|
1489
1497
|
> 提供 ChatClient(链式对话)、Advisor(对话顾问)、Tools(工具调用)、RAG(知识库检索增强生成)、Function Calling 等能力。支持 OpenAI / Ollama / DeepSeek / Moonshot 等多家大模型。
|
|
1490
1498
|
|
|
1499
|
+
以下便捷功能自 **2.3.12** 起提供,安装时运行 `pip install -U "springbootAI[ai]>=2.3.12"`。普通聊天只需 `client.chat("你好")`,异步使用 `await client.achat("你好")`;文本流使用 `client.stream_text(...)` / `client.astream_text(...)`。
|
|
1500
|
+
|
|
1501
|
+
容器管理的 Service 可以只写提示词和签名:
|
|
1502
|
+
|
|
1503
|
+
```python
|
|
1504
|
+
from springbootai.annotations import Prompt, RAG, Service
|
|
1505
|
+
|
|
1506
|
+
@Service
|
|
1507
|
+
class Assistant:
|
|
1508
|
+
@Prompt("用三句话总结:{text}")
|
|
1509
|
+
def summarize(self, text: str) -> str:
|
|
1510
|
+
...
|
|
1511
|
+
|
|
1512
|
+
@RAG(top_k=3)
|
|
1513
|
+
def answer(self, question: str) -> str:
|
|
1514
|
+
...
|
|
1515
|
+
```
|
|
1516
|
+
|
|
1517
|
+
应用显式设置 `spring.ai.enabled: true` 并配置 Provider 后,框架自动调用模型、执行检索;RAG 数据先用向量库的 `add_texts(...)` 入库。返回类型声明为 Pydantic 模型时,自动生成 JSON 格式要求并校验结果,无需另写 `@StructuredOutput`。详见 [最少代码用法](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_MODULE.md#常用功能最少代码写法)。
|
|
1518
|
+
|
|
1491
1519
|
### 12.2 LangChain 模块
|
|
1492
1520
|
|
|
1493
1521
|
> 完整文档:[LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md)。安装:`pip install springbootAI[langchain]`。
|
|
@@ -1993,4 +2021,6 @@ pip install springbootAI[mcp]
|
|
|
1993
2021
|
|
|
1994
2022
|
完整配置、FastAPI 挂载、stdio、认证、白名单、Spring AI/LangChain/LangGraph 组合方式和测试命令见 [MCP_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_MODULE.md)。
|
|
1995
2023
|
|
|
2024
|
+
可运行的 [Agent 调用 MCP 案例](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_AGENT_EXAMPLE.md) 演示订单与物流查询,支持一条命令启动本地 MCP 服务、连接 HTTP 服务和切换真实模型。
|
|
2025
|
+
|
|
1996
2026
|
LangChain 也支持 `@LangChainClient` + `@LangChainCall`,LangGraph 支持 `@LangGraph` + `@GraphNode` + `@GraphEdge` + `@GraphRoute` + `@GraphInvoke`。这些注解复用现有运行时,不会重新实现 LangChain、LangGraph 或 MCP 协议。
|
|
@@ -56,7 +56,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
56
56
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
57
57
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
58
58
|
|
|
59
|
-
当前版本是 `2.3.
|
|
59
|
+
当前版本是 `2.3.12`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
|
|
60
60
|
|
|
61
61
|
[新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
|
|
62
62
|
|
|
@@ -187,10 +187,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
187
187
|
|
|
188
188
|
| 组件 | 当前版本 |
|
|
189
189
|
|------|----------|
|
|
190
|
-
| `springbootai` 框架 API | 2.3.
|
|
191
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
192
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
193
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
190
|
+
| `springbootai` 框架 API | 2.3.12 |
|
|
191
|
+
| `springbootai.orm.pymybatis` | 2.3.12 |
|
|
192
|
+
| `springbootai.ai` AI 模块 | 2.3.12 |
|
|
193
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.12 |
|
|
194
194
|
| Python | 3.10+ |
|
|
195
195
|
|
|
196
196
|
### 1.4 适合什么场景
|
|
@@ -1164,7 +1164,12 @@ class RegistrationService:
|
|
|
1164
1164
|
|
|
1165
1165
|
```python
|
|
1166
1166
|
@Transactional(propagation="REQUIRED")
|
|
1167
|
+
def required_operation():
|
|
1168
|
+
...
|
|
1169
|
+
|
|
1167
1170
|
@Transactional(propagation="NESTED")
|
|
1171
|
+
def nested_operation():
|
|
1172
|
+
...
|
|
1168
1173
|
```
|
|
1169
1174
|
|
|
1170
1175
|
`NESTED` 在已有事务中创建 savepoint;`REQUIRES_NEW` 使用独立 Session/连接,连接池 `max_size` 至少应能容纳并发的外层和内层连接。
|
|
@@ -1325,6 +1330,26 @@ class CleanupJob:
|
|
|
1325
1330
|
>
|
|
1326
1331
|
> 提供 ChatClient(链式对话)、Advisor(对话顾问)、Tools(工具调用)、RAG(知识库检索增强生成)、Function Calling 等能力。支持 OpenAI / Ollama / DeepSeek / Moonshot 等多家大模型。
|
|
1327
1332
|
|
|
1333
|
+
以下便捷功能自 **2.3.12** 起提供,安装时运行 `pip install -U "springbootAI[ai]>=2.3.12"`。普通聊天只需 `client.chat("你好")`,异步使用 `await client.achat("你好")`;文本流使用 `client.stream_text(...)` / `client.astream_text(...)`。
|
|
1334
|
+
|
|
1335
|
+
容器管理的 Service 可以只写提示词和签名:
|
|
1336
|
+
|
|
1337
|
+
```python
|
|
1338
|
+
from springbootai.annotations import Prompt, RAG, Service
|
|
1339
|
+
|
|
1340
|
+
@Service
|
|
1341
|
+
class Assistant:
|
|
1342
|
+
@Prompt("用三句话总结:{text}")
|
|
1343
|
+
def summarize(self, text: str) -> str:
|
|
1344
|
+
...
|
|
1345
|
+
|
|
1346
|
+
@RAG(top_k=3)
|
|
1347
|
+
def answer(self, question: str) -> str:
|
|
1348
|
+
...
|
|
1349
|
+
```
|
|
1350
|
+
|
|
1351
|
+
应用显式设置 `spring.ai.enabled: true` 并配置 Provider 后,框架自动调用模型、执行检索;RAG 数据先用向量库的 `add_texts(...)` 入库。返回类型声明为 Pydantic 模型时,自动生成 JSON 格式要求并校验结果,无需另写 `@StructuredOutput`。详见 [最少代码用法](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_MODULE.md#常用功能最少代码写法)。
|
|
1352
|
+
|
|
1328
1353
|
### 12.2 LangChain 模块
|
|
1329
1354
|
|
|
1330
1355
|
> 完整文档:[LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md)。安装:`pip install springbootAI[langchain]`。
|
|
@@ -1830,4 +1855,6 @@ pip install springbootAI[mcp]
|
|
|
1830
1855
|
|
|
1831
1856
|
完整配置、FastAPI 挂载、stdio、认证、白名单、Spring AI/LangChain/LangGraph 组合方式和测试命令见 [MCP_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_MODULE.md)。
|
|
1832
1857
|
|
|
1858
|
+
可运行的 [Agent 调用 MCP 案例](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_AGENT_EXAMPLE.md) 演示订单与物流查询,支持一条命令启动本地 MCP 服务、连接 HTTP 服务和切换真实模型。
|
|
1859
|
+
|
|
1833
1860
|
LangChain 也支持 `@LangChainClient` + `@LangChainCall`,LangGraph 支持 `@LangGraph` + `@GraphNode` + `@GraphEdge` + `@GraphRoute` + `@GraphInvoke`。这些注解复用现有运行时,不会重新实现 LangChain、LangGraph 或 MCP 协议。
|
|
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
|
|
|
12
12
|
[project]
|
|
13
13
|
# Distribution name: springbootAI (pip install springbootAI); import package: springbootai.
|
|
14
14
|
name = "springbootAI"
|
|
15
|
-
version = "2.3.
|
|
15
|
+
version = "2.3.12"
|
|
16
16
|
description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
license = "MIT"
|
|
@@ -47,9 +47,10 @@ dependencies = [
|
|
|
47
47
|
"DBUtils==3.1.2",
|
|
48
48
|
"cryptography==50.0.0",
|
|
49
49
|
"bcrypt==5.0.0",
|
|
50
|
-
"pyjwt==2.
|
|
50
|
+
"pyjwt==2.15.0",
|
|
51
51
|
"pydantic==2.13.4",
|
|
52
52
|
"requests==2.34.2",
|
|
53
|
+
"urllib3==2.8.0",
|
|
53
54
|
"httpx==0.28.1",
|
|
54
55
|
"defusedxml==0.7.1",
|
|
55
56
|
]
|
|
@@ -76,7 +77,7 @@ kafka = ["kafka-python==2.0.2"]
|
|
|
76
77
|
# ========================================
|
|
77
78
|
# 服务发现——类似 Spring Cloud Alibaba Nacos
|
|
78
79
|
# ========================================
|
|
79
|
-
nacos = ["nacos-sdk-python==2.0.11"]
|
|
80
|
+
nacos = ["nacos-sdk-python==2.0.11", "multidict==6.9.1"]
|
|
80
81
|
|
|
81
82
|
# ========================================
|
|
82
83
|
# 监控和日志——类似 Spring Boot Actuator + Micrometer
|
|
@@ -216,6 +217,7 @@ full = [
|
|
|
216
217
|
"redis==8.1.0",
|
|
217
218
|
"pika==1.4.4",
|
|
218
219
|
"nacos-sdk-python==2.0.11",
|
|
220
|
+
"multidict==6.9.1",
|
|
219
221
|
# 监控 / 日志 / 安全
|
|
220
222
|
"prometheus-client==0.26.0",
|
|
221
223
|
"loguru==0.7.3",
|
|
@@ -29,7 +29,7 @@ sqlglot==27.28.1
|
|
|
29
29
|
defusedxml==0.7.1
|
|
30
30
|
|
|
31
31
|
# 认证授权
|
|
32
|
-
pyjwt==2.
|
|
32
|
+
pyjwt==2.15.0
|
|
33
33
|
cryptography==50.0.0
|
|
34
34
|
bcrypt==5.0.0
|
|
35
35
|
|
|
@@ -41,6 +41,7 @@ loguru==0.7.3
|
|
|
41
41
|
|
|
42
42
|
# HTTP 客户端(Feign)
|
|
43
43
|
requests==2.34.2
|
|
44
|
+
urllib3==2.8.0
|
|
44
45
|
httpx==0.28.1
|
|
45
46
|
|
|
46
47
|
# RabbitMQ 消息队列
|
|
@@ -48,6 +49,7 @@ pika==1.4.4
|
|
|
48
49
|
|
|
49
50
|
# Nacos 服务注册发现
|
|
50
51
|
nacos-sdk-python==2.0.11
|
|
52
|
+
multidict==6.9.1
|
|
51
53
|
|
|
52
54
|
# 参数校验
|
|
53
55
|
pydantic==2.13.4
|
|
@@ -55,4 +57,4 @@ pydantic==2.13.4
|
|
|
55
57
|
# 测试依赖
|
|
56
58
|
pytest==9.1.1
|
|
57
59
|
pytest-cov==7.1.0
|
|
58
|
-
openpyxl==3.1.5
|
|
60
|
+
openpyxl==3.1.5
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.12
|
|
4
4
|
Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
|
|
5
5
|
Author-email: YuConggen <1516933915@qq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -30,9 +30,10 @@ Requires-Dist: python-dotenv==1.2.2
|
|
|
30
30
|
Requires-Dist: DBUtils==3.1.2
|
|
31
31
|
Requires-Dist: cryptography==50.0.0
|
|
32
32
|
Requires-Dist: bcrypt==5.0.0
|
|
33
|
-
Requires-Dist: pyjwt==2.
|
|
33
|
+
Requires-Dist: pyjwt==2.15.0
|
|
34
34
|
Requires-Dist: pydantic==2.13.4
|
|
35
35
|
Requires-Dist: requests==2.34.2
|
|
36
|
+
Requires-Dist: urllib3==2.8.0
|
|
36
37
|
Requires-Dist: httpx==0.28.1
|
|
37
38
|
Requires-Dist: defusedxml==0.7.1
|
|
38
39
|
Provides-Extra: mysql
|
|
@@ -49,6 +50,7 @@ Provides-Extra: kafka
|
|
|
49
50
|
Requires-Dist: kafka-python==2.0.2; extra == "kafka"
|
|
50
51
|
Provides-Extra: nacos
|
|
51
52
|
Requires-Dist: nacos-sdk-python==2.0.11; extra == "nacos"
|
|
53
|
+
Requires-Dist: multidict==6.9.1; extra == "nacos"
|
|
52
54
|
Provides-Extra: prometheus
|
|
53
55
|
Requires-Dist: prometheus-client==0.26.0; extra == "prometheus"
|
|
54
56
|
Provides-Extra: logging
|
|
@@ -130,6 +132,7 @@ Requires-Dist: sqlalchemy==2.0.40; extra == "full"
|
|
|
130
132
|
Requires-Dist: redis==8.1.0; extra == "full"
|
|
131
133
|
Requires-Dist: pika==1.4.4; extra == "full"
|
|
132
134
|
Requires-Dist: nacos-sdk-python==2.0.11; extra == "full"
|
|
135
|
+
Requires-Dist: multidict==6.9.1; extra == "full"
|
|
133
136
|
Requires-Dist: prometheus-client==0.26.0; extra == "full"
|
|
134
137
|
Requires-Dist: loguru==0.7.3; extra == "full"
|
|
135
138
|
Requires-Dist: sqlglot==27.28.1; extra == "full"
|
|
@@ -219,7 +222,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
219
222
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
220
223
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
221
224
|
|
|
222
|
-
当前版本是 `2.3.
|
|
225
|
+
当前版本是 `2.3.12`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
|
|
223
226
|
|
|
224
227
|
[新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
|
|
225
228
|
|
|
@@ -350,10 +353,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
350
353
|
|
|
351
354
|
| 组件 | 当前版本 |
|
|
352
355
|
|------|----------|
|
|
353
|
-
| `springbootai` 框架 API | 2.3.
|
|
354
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
355
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
356
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
356
|
+
| `springbootai` 框架 API | 2.3.12 |
|
|
357
|
+
| `springbootai.orm.pymybatis` | 2.3.12 |
|
|
358
|
+
| `springbootai.ai` AI 模块 | 2.3.12 |
|
|
359
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.12 |
|
|
357
360
|
| Python | 3.10+ |
|
|
358
361
|
|
|
359
362
|
### 1.4 适合什么场景
|
|
@@ -1327,7 +1330,12 @@ class RegistrationService:
|
|
|
1327
1330
|
|
|
1328
1331
|
```python
|
|
1329
1332
|
@Transactional(propagation="REQUIRED")
|
|
1333
|
+
def required_operation():
|
|
1334
|
+
...
|
|
1335
|
+
|
|
1330
1336
|
@Transactional(propagation="NESTED")
|
|
1337
|
+
def nested_operation():
|
|
1338
|
+
...
|
|
1331
1339
|
```
|
|
1332
1340
|
|
|
1333
1341
|
`NESTED` 在已有事务中创建 savepoint;`REQUIRES_NEW` 使用独立 Session/连接,连接池 `max_size` 至少应能容纳并发的外层和内层连接。
|
|
@@ -1488,6 +1496,26 @@ class CleanupJob:
|
|
|
1488
1496
|
>
|
|
1489
1497
|
> 提供 ChatClient(链式对话)、Advisor(对话顾问)、Tools(工具调用)、RAG(知识库检索增强生成)、Function Calling 等能力。支持 OpenAI / Ollama / DeepSeek / Moonshot 等多家大模型。
|
|
1490
1498
|
|
|
1499
|
+
以下便捷功能自 **2.3.12** 起提供,安装时运行 `pip install -U "springbootAI[ai]>=2.3.12"`。普通聊天只需 `client.chat("你好")`,异步使用 `await client.achat("你好")`;文本流使用 `client.stream_text(...)` / `client.astream_text(...)`。
|
|
1500
|
+
|
|
1501
|
+
容器管理的 Service 可以只写提示词和签名:
|
|
1502
|
+
|
|
1503
|
+
```python
|
|
1504
|
+
from springbootai.annotations import Prompt, RAG, Service
|
|
1505
|
+
|
|
1506
|
+
@Service
|
|
1507
|
+
class Assistant:
|
|
1508
|
+
@Prompt("用三句话总结:{text}")
|
|
1509
|
+
def summarize(self, text: str) -> str:
|
|
1510
|
+
...
|
|
1511
|
+
|
|
1512
|
+
@RAG(top_k=3)
|
|
1513
|
+
def answer(self, question: str) -> str:
|
|
1514
|
+
...
|
|
1515
|
+
```
|
|
1516
|
+
|
|
1517
|
+
应用显式设置 `spring.ai.enabled: true` 并配置 Provider 后,框架自动调用模型、执行检索;RAG 数据先用向量库的 `add_texts(...)` 入库。返回类型声明为 Pydantic 模型时,自动生成 JSON 格式要求并校验结果,无需另写 `@StructuredOutput`。详见 [最少代码用法](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_MODULE.md#常用功能最少代码写法)。
|
|
1518
|
+
|
|
1491
1519
|
### 12.2 LangChain 模块
|
|
1492
1520
|
|
|
1493
1521
|
> 完整文档:[LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md)。安装:`pip install springbootAI[langchain]`。
|
|
@@ -1993,4 +2021,6 @@ pip install springbootAI[mcp]
|
|
|
1993
2021
|
|
|
1994
2022
|
完整配置、FastAPI 挂载、stdio、认证、白名单、Spring AI/LangChain/LangGraph 组合方式和测试命令见 [MCP_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_MODULE.md)。
|
|
1995
2023
|
|
|
2024
|
+
可运行的 [Agent 调用 MCP 案例](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_AGENT_EXAMPLE.md) 演示订单与物流查询,支持一条命令启动本地 MCP 服务、连接 HTTP 服务和切换真实模型。
|
|
2025
|
+
|
|
1996
2026
|
LangChain 也支持 `@LangChainClient` + `@LangChainCall`,LangGraph 支持 `@LangGraph` + `@GraphNode` + `@GraphEdge` + `@GraphRoute` + `@GraphInvoke`。这些注解复用现有运行时,不会重新实现 LangChain、LangGraph 或 MCP 协议。
|
|
@@ -267,6 +267,7 @@ tests/test_actuator.py
|
|
|
267
267
|
tests/test_actuator_prometheus_admin.py
|
|
268
268
|
tests/test_ai_annotations.py
|
|
269
269
|
tests/test_ai_comprehensive.py
|
|
270
|
+
tests/test_ai_convenience.py
|
|
270
271
|
tests/test_ai_declarative_annotations.py
|
|
271
272
|
tests/test_ai_enterprise_hardening.py
|
|
272
273
|
tests/test_ai_module.py
|
|
@@ -309,6 +310,7 @@ tests/test_enterprise_safety_regressions.py
|
|
|
309
310
|
tests/test_excel_module.py
|
|
310
311
|
tests/test_final_enterprise_hardening.py
|
|
311
312
|
tests/test_followup_enterprise_fixes.py
|
|
313
|
+
tests/test_framework_audit_regressions.py
|
|
312
314
|
tests/test_hateoas.py
|
|
313
315
|
tests/test_i18n_module.py
|
|
314
316
|
tests/test_io_http_logging_hardening.py
|
|
@@ -323,6 +325,7 @@ tests/test_langgraph_module.py
|
|
|
323
325
|
tests/test_latest_enterprise_audit_fixes.py
|
|
324
326
|
tests/test_logging_config.py
|
|
325
327
|
tests/test_lombok_annotations.py
|
|
328
|
+
tests/test_mcp_agent_example.py
|
|
326
329
|
tests/test_mcp_module.py
|
|
327
330
|
tests/test_metadata.py
|
|
328
331
|
tests/test_migration.py
|
|
@@ -6,9 +6,10 @@ python-dotenv==1.2.2
|
|
|
6
6
|
DBUtils==3.1.2
|
|
7
7
|
cryptography==50.0.0
|
|
8
8
|
bcrypt==5.0.0
|
|
9
|
-
pyjwt==2.
|
|
9
|
+
pyjwt==2.15.0
|
|
10
10
|
pydantic==2.13.4
|
|
11
11
|
requests==2.34.2
|
|
12
|
+
urllib3==2.8.0
|
|
12
13
|
httpx==0.28.1
|
|
13
14
|
defusedxml==0.7.1
|
|
14
15
|
|
|
@@ -64,6 +65,7 @@ sqlalchemy==2.0.40
|
|
|
64
65
|
redis==8.1.0
|
|
65
66
|
pika==1.4.4
|
|
66
67
|
nacos-sdk-python==2.0.11
|
|
68
|
+
multidict==6.9.1
|
|
67
69
|
prometheus-client==0.26.0
|
|
68
70
|
loguru==0.7.3
|
|
69
71
|
sqlglot==27.28.1
|
|
@@ -134,6 +136,7 @@ PyMySQL==1.2.0
|
|
|
134
136
|
|
|
135
137
|
[nacos]
|
|
136
138
|
nacos-sdk-python==2.0.11
|
|
139
|
+
multidict==6.9.1
|
|
137
140
|
|
|
138
141
|
[postgresql]
|
|
139
142
|
psycopg2-binary==2.9.12
|
|
@@ -58,7 +58,7 @@ from springbootai.ai.observability import AIMetrics, ai_metrics
|
|
|
58
58
|
from springbootai.ai.autoconfig import AIProperties, bind_ai_config, configure_ai
|
|
59
59
|
from springbootai.ai.annotation_runtime import ContentModerationError
|
|
60
60
|
|
|
61
|
-
__version__ = "2.3.
|
|
61
|
+
__version__ = "2.3.12"
|
|
62
62
|
|
|
63
63
|
__all__ = [
|
|
64
64
|
# core
|