Skip to content

[Feature Request] Add Configurable Knowledge Base Search Limit (Top-K) #6536

@kewuguai

Description

@kewuguai

Description

The knowledge base search in LobeChat currently returns only 5 results, which is insufficient for larger datasets (e.g., I need 100). I added KNOWLEDGE_SEARCH_TOP_K=100 to my .env, but it doesn’t work, and .env.example lacks this variable. I propose adding an environment variable like KNOWLEDGE_SEARCH_TOP_K (default 5, adjustable to higher values like 100) and updating .env.example and documentation.

Steps to Reproduce

  1. Deploy LobeChat with docker-compose.yml and .env (attached).
  2. Upload a file with >5 entries to the knowledge base.
  3. Search a query; only 5 results are returned.

Expected Behavior

  • Search returns a configurable number of results (e.g., 100) via KNOWLEDGE_SEARCH_TOP_K.

Actual Behavior

  • Search remains limited to 5 results.

Environment

  • OS: macOS (ARM64, MacBook Pro M1, 16 GB RAM)
  • Docker: Desktop v4.x
  • LobeChat: latest

Attached Files

.env

Proxy (commented out)
HTTP_PROXY=http://localhost:7890/
HTTPS_PROXY=http://localhost:7890/
OpenAI API configuration (sensitive info removed)
OPENAI_API_KEY=sk-xxx
OPENAI_PROXY_URL=https://api.openai.com/v1
OPENAI_API_BASE=https://api.openai.com/v1

DeepSeek API configuration (sensitive info removed)
DEEPSEEK_API_KEY=sk-xxx
DEEPSEEK_PROXY_URL=https://api.deepseek.com/v1
DEEPSEEK_API_BASE=https://api.deepseek.com/v1

AI_PROVIDER=auto
EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=text-embedding-3-large
KNOWLEDGE_SEARCH_TOP_K=100
NEXT_PUBLIC_SERVICE_MODE=server

LOBE_PORT=3210
CASDOOR_PORT=8000
MINIO_PORT=9000
APP_URL=http://192.168.110.59:3210/
AUTH_URL=http://192.168.110.59:3210/api/auth

Postgres configuration
LOBE_DB_NAME=lobechat
POSTGRES_PASSWORD=xxx
DATABASE_URL=postgresql://postgres:xxx@postgresql:5432/lobechat

Casdoor configuration (sensitive info removed)
AUTH_CASDOOR_ISSUER=http://192.168.110.59:8000/
AUTH_CASDOOR_ID=xxx
AUTH_CASDOOR_SECRET=xxx

MinIO configuration
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=xxx
S3_PUBLIC_DOMAIN=http://192.168.110.59:9000/
S3_ENDPOINT=http://192.168.110.59:9000/
MINIO_LOBE_BUCKET=lobe
origin=http://192.168.110.59:8000/

docker-compose.yml

name: lobe-chat-database
services:
network-service:
image: alpine
container_name: lobe-network
restart: always
ports:

"9000:9000"
"9001:9001"
"8000:8000"
"3210:3210" networks:
lobe-network
postgresql:
image: pgvector/pgvector:pg17
container_name: lobe-postgres
ports:

"5432:5432" volumes:
"./data:/var/lib/postgresql/data" environment: POSTGRES_DB: lobechat POSTGRES_PASSWORD: xxx healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 restart: always networks:
lobe-network
minio:
image: minio/minio
container_name: lobe-minio
network_mode: "service:network-service"
volumes:

"./s3_data:/etc/minio/data" environment: MINIO_API_CORS_ALLOW_ORIGIN: "*" env_file:
.env restart: always entrypoint:
/bin/sh
-c
| minio server /etc/minio/data --address ':9000' --console-address ':9001' & MINIO_PID=$! while ! curl -s http://localhost:9000/minio/health/live; do echo 'Waiting for MinIO to start...' sleep 1 done sleep 5 mc alias set myminio http://localhost:9000/ admin xxx echo 'Creating bucket lobe' mc mb myminio/lobe wait $MINIO_PID
casdoor:
image: casbin/casdoor
container_name: lobe-casdoor
network_mode: "service:network-service"
depends_on:
postgresql:
condition: service_healthy
environment:
RUNNING_IN_DOCKER: "true"
driverName: "postgres"
dataSourceName: "user=postgres password=xxx host=postgresql port=5432 sslmode=disable dbname=casdoor"
runmode: "dev"
volumes:

./init_data.json:/init_data.json env_file:
.env entrypoint:
/bin/sh
-c
"./server --createDatabase=true"
lobe:
image: lobehub/lobe-chat-database
container_name: lobe-chat
networks:

lobe-network depends_on: postgresql: condition: service_healthy minio: condition: service_started casdoor: condition: service_started env_file:
.env restart: always
volumes:
data:
driver: local
s3_data:
driver: local

networks:
lobe-network:
driver: bridge

Metadata

Metadata

Assignees

No one assigned

    Labels

    InactiveNo response in 30 days

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions