fix(ai): stop advertising semantic_search when no vector search plugin is enabled (#1597)

Fixes #1532.

### Problem

The `semantic_search` MCP tool was always advertised to the model, even
when
no VectorSearch plugin was enabled. The model could select it, the call
reached `EmbeddingService.SearchSimilar`, and every such conversation
logged
`semantic search failed: semantic search is not available: no vector
search
plugin is enabled` — polluting logs and wasting a tool-call round trip
on a
capability that does not exist in the deployment.

### Fix

- `EmbeddingService.Available()` reports whether a VectorSearch plugin
is
  currently enabled.
- `MCPController.SemanticSearchAvailable()` exposes that to the AI chat.
- `getMCPTools()` omits the `semantic_search` tool when unavailable; all
  other MCP tools keep working exactly as before.
- The default AI prompts (zh/en, and admin-custom prompts) drop the
`semantic_search` instruction lines in the same situation, so the model
is
  no longer nudged toward a missing capability.

### Testing

- New unit tests: tool advertisement with/without the capability,
prompt-line
stripping, and prompt adaptation
(`internal/controller/ai_tools_test.go`).
- `go test ./internal/controller/` — all pass.

Co-authored-by: LinkinStars <linkinstar@foxmail.com>
4 files changed
tree: f37b386b0429bd18e8de71eb008da4c869336288
  1. .github/
  2. .vaunt/
  3. .vscode/
  4. build/
  5. charts/
  6. cmd/
  7. configs/
  8. docs/
  9. i18n/
  10. internal/
  11. pkg/
  12. plugin/
  13. script/
  14. ui/
  15. .asf.yaml
  16. .editorconfig
  17. .env.example
  18. .gitignore
  19. .gitlab-ci.yml
  20. .golangci.yaml
  21. .goreleaser.yaml
  22. crowdin.yml
  23. docker-compose.yaml
  24. Dockerfile
  25. go.mod
  26. go.sum
  27. LICENSE
  28. licenserc.toml
  29. Makefile
  30. NOTICE
  31. README.md
README.md

Apache Answer - Build Q&A platform

A Q&A platform software for teams at any scales. Whether it’s a community forum, help center, or knowledge management platform, you can always count on Answer.

To learn more about the project, visit answer.apache.org.

LICENSE Language Language Go Report Card Discord

Screenshots

screenshot

Quick start

Running with docker

docker run -d -p 9080:80 -v answer-data:/data --name answer apache/answer:2.0.2

For more information, see Installation.

Plugins

Answer provides a plugin system for developers to create custom plugins and expand Answer’s features. You can find the plugin documentation here.

We value your feedback and suggestions to improve our documentation. If you have any comments or questions, please feel free to contact us. We’re excited to see what you can create using our plugin system!

You can also check out the plugins here.

Building from Source

Prerequisites

  • Golang >= 1.23
  • Node.js >= 20
  • pnpm >= 9
  • mockgen >= 0.6.0
  • wire >= 0.5.0

Build

# Install wire and mockgen for building. You can run `make check` to check if they are installed.
$ make generate
# Install frontend dependencies and build
$ make ui
# Install backend dependencies and build
$ make build

Contributing

Contributions are always welcome!

See CONTRIBUTING for ways to get started.

License

Apache License 2.0