Skip to content

Commit 1b56e99

Browse files
chengjoeylyingbug
authored andcommitted
feat: support milvus vectordb for knowledge retrieve
Signed-off-by: joeyczheng <joeyczheng@tencent.com>
1 parent daf7dee commit 1b56e99

File tree

11 files changed

+4725
-22
lines changed

11 files changed

+4725
-22
lines changed

.env.example

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ OLLAMA_BASE_URL=http://host.docker.internal:11434
2424
# 主数据库类型(postgres/mysql)
2525
DB_DRIVER=postgres
2626

27-
# 向量存储类型(postgres/elasticsearch_v7/elasticsearch_v8/qdrant)
27+
# 向量存储类型(postgres/elasticsearch_v7/elasticsearch_v8/qdrant/milvus)
2828
RETRIEVE_DRIVER=postgres
2929

3030
# 文件存储类型(local/minio/cos/tos)
@@ -226,3 +226,19 @@ WEKNORA_SANDBOX_DOCKER_IMAGE=wechatopenai/weknora-sandbox:latest
226226

227227
# APK 镜像源设置(可选)
228228
APK_MIRROR_ARG=mirrors.tencent.com
229+
230+
# 如果使用Milvus作为向量存储,需要配置以下参数
231+
# Milvus服务地址
232+
# MILVUS_ADDRESS=milvus:19530
233+
234+
# Milvus集合名称,用于存储向量数据
235+
# MILVUS_COLLECTION=weknora_embeddings
236+
237+
# Milvus 用户名(可选)
238+
# MILVUS_USERNAME=your_milvus_username
239+
240+
# Milvus 密码(可选)
241+
# MILVUS_PASSWORD=your_milvus_password
242+
243+
# Milvus 数据库名称(可选)
244+
# MILVUS_DB_NAME=your_milvus_db_name

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,13 @@ deps:
219219
go mod download
220220

221221
# Build for production
222+
# google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn for qdrant milvus proto conflict
222223
build-prod:
223224
VERSION=$$(git describe --tags --abbrev=0 2>/dev/null || echo "$${VERSION:-unknown}"); \
224225
COMMIT_ID=$${COMMIT_ID:-unknown}; \
225226
BUILD_TIME=$${BUILD_TIME:-unknown}; \
226227
GO_VERSION=$${GO_VERSION:-unknown}; \
227-
LDFLAGS="-X 'github.com/Tencent/WeKnora/internal/handler.Version=$$VERSION' -X 'github.com/Tencent/WeKnora/internal/handler.CommitID=$$COMMIT_ID' -X 'github.com/Tencent/WeKnora/internal/handler.BuildTime=$$BUILD_TIME' -X 'github.com/Tencent/WeKnora/internal/handler.GoVersion=$$GO_VERSION'"; \
228+
LDFLAGS="-X 'github.com/Tencent/WeKnora/internal/handler.Version=$$VERSION' -X 'github.com/Tencent/WeKnora/internal/handler.CommitID=$$COMMIT_ID' -X 'github.com/Tencent/WeKnora/internal/handler.BuildTime=$$BUILD_TIME' -X 'github.com/Tencent/WeKnora/internal/handler.GoVersion=$$GO_VERSION' -X 'google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn'"; \
228229
go build -ldflags="-w -s $$LDFLAGS" -o $(BINARY_NAME) $(MAIN_PATH)
229230

230231
download_spatial:

docker-compose.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ services:
8181
- QDRANT_COLLECTION=${QDRANT_COLLECTION:-weknora_embeddings}
8282
- QDRANT_API_KEY=${QDRANT_API_KEY:-}
8383
- QDRANT_USE_TLS=${QDRANT_USE_TLS:-false}
84+
- MILVUS_ADDRESS=milvus:19530
85+
- MILVUS_COLLECTION=${MILVUS_COLLECTION:-weknora_embeddings}
8486
- DOCREADER_ADDR=docreader:50051
8587
- STORAGE_TYPE=${STORAGE_TYPE:-}
8688
- LOCAL_STORAGE_BASE_DIR=${LOCAL_STORAGE_BASE_DIR:-}
@@ -275,6 +277,34 @@ services:
275277
- qdrant
276278
- full
277279

280+
milvus:
281+
image: milvusdb/milvus:v2.6.11
282+
container_name: WeKnora-milvus
283+
security_opt:
284+
- seccomp:unconfined
285+
command: ["milvus", "run", "standalone"]
286+
environment:
287+
- ETCD_USE_EMBED=true
288+
- ETCD_DATA_DIR=/var/lib/milvus/etcd
289+
- COMMON_STORAGETYPE=local
290+
- DEPLOY_MODE=STANDALONE
291+
healthcheck:
292+
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
293+
interval: 30s
294+
start_period: 90s
295+
timeout: 20s
296+
retries: 3
297+
ports:
298+
- "19530:19530"
299+
- "9091:9091"
300+
volumes:
301+
- milvus_data:/var/lib/milvus
302+
networks:
303+
- WeKnora-network
304+
restart: unless-stopped
305+
profiles:
306+
- milvus
307+
278308
networks:
279309
WeKnora-network:
280310
driver: bridge
@@ -286,3 +316,4 @@ volumes:
286316
minio_data:
287317
neo4j-data:
288318
qdrant_data:
319+
milvus_data:

go.mod

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
module github.com/Tencent/WeKnora
22

3-
go 1.24.0
4-
5-
toolchain go1.24.2
3+
go 1.24.11
64

75
require (
86
github.com/PuerkitoBio/goquery v1.10.3
@@ -19,10 +17,11 @@ require (
1917
github.com/google/uuid v1.6.0
2018
github.com/hibiken/asynq v0.25.1
2119
github.com/mark3labs/mcp-go v0.43.0
20+
github.com/milvus-io/milvus/client/v2 v2.6.2
2221
github.com/minio/minio-go/v7 v7.0.90
2322
github.com/neo4j/neo4j-go-driver/v6 v6.0.0-alpha.1
2423
github.com/ollama/ollama v0.11.4
25-
github.com/panjf2000/ants/v2 v2.11.2
24+
github.com/panjf2000/ants/v2 v2.11.3
2625
github.com/parquet-go/parquet-go v0.25.0
2726
github.com/pganalyze/pg_query_go/v6 v6.1.0
2827
github.com/pgvector/pgvector-go v0.3.0
@@ -60,23 +59,32 @@ require (
6059
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
6160
cloud.google.com/go/compute/metadata v0.9.0 // indirect
6261
github.com/KyleBanks/depth v1.2.1 // indirect
63-
github.com/PuerkitoBio/purell v1.1.1 // indirect
64-
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
6562
github.com/andybalholm/brotli v1.2.0 // indirect
6663
github.com/andybalholm/cascadia v1.3.3 // indirect
6764
github.com/apache/arrow-go/v18 v18.4.1 // indirect
6865
github.com/bahlo/generic-list-go v0.2.0 // indirect
66+
github.com/beorn7/perks v1.0.1 // indirect
67+
github.com/blang/semver/v4 v4.0.0 // indirect
6968
github.com/buger/jsonparser v1.1.1 // indirect
7069
github.com/bytedance/sonic v1.14.0 // indirect
7170
github.com/bytedance/sonic/loader v0.3.0 // indirect
71+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
7272
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
7373
github.com/cespare/xxhash/v2 v2.3.0 // indirect
7474
github.com/chromedp/cdproto v0.0.0-20250724212937-08a3db8b4327 // indirect
7575
github.com/chromedp/sysutil v1.1.0 // indirect
76+
github.com/cilium/ebpf v0.11.0 // indirect
7677
github.com/clbanning/mxj v1.8.4 // indirect
7778
github.com/cloudwego/base64x v0.1.6 // indirect
79+
github.com/cockroachdb/errors v1.9.1 // indirect
80+
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
81+
github.com/cockroachdb/redact v1.1.3 // indirect
82+
github.com/containerd/cgroups/v3 v3.0.3 // indirect
83+
github.com/coreos/go-semver v0.3.0 // indirect
84+
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
7885
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
7986
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
87+
github.com/docker/go-units v0.5.0 // indirect
8088
github.com/duckdb/duckdb-go-bindings v0.1.24 // indirect
8189
github.com/duckdb/duckdb-go-bindings/darwin-amd64 v0.1.24 // indirect
8290
github.com/duckdb/duckdb-go-bindings/darwin-arm64 v0.1.24 // indirect
@@ -88,17 +96,21 @@ require (
8896
github.com/dustin/go-humanize v1.0.1 // indirect
8997
github.com/elastic/elastic-transport-go/v8 v8.7.0 // indirect
9098
github.com/felixge/httpsnoop v1.0.4 // indirect
99+
github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect
91100
github.com/fsnotify/fsnotify v1.8.0 // indirect
101+
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
92102
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
103+
github.com/getsentry/sentry-go v0.12.0 // indirect
93104
github.com/gin-contrib/sse v1.1.0 // indirect
94105
github.com/go-ini/ini v1.67.0 // indirect
95106
github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2 // indirect
96107
github.com/go-logr/logr v1.4.3 // indirect
97108
github.com/go-logr/stdr v1.2.2 // indirect
98-
github.com/go-openapi/jsonpointer v0.19.5 // indirect
99-
github.com/go-openapi/jsonreference v0.19.6 // indirect
109+
github.com/go-ole/go-ole v1.3.0 // indirect
110+
github.com/go-openapi/jsonpointer v0.21.0 // indirect
111+
github.com/go-openapi/jsonreference v0.20.2 // indirect
100112
github.com/go-openapi/spec v0.20.4 // indirect
101-
github.com/go-openapi/swag v0.19.15 // indirect
113+
github.com/go-openapi/swag v0.23.0 // indirect
102114
github.com/go-playground/locales v0.14.1 // indirect
103115
github.com/go-playground/universal-translator v0.18.1 // indirect
104116
github.com/go-playground/validator/v10 v10.27.0 // indirect
@@ -107,11 +119,19 @@ require (
107119
github.com/gobwas/ws v1.4.0 // indirect
108120
github.com/goccy/go-json v0.10.5 // indirect
109121
github.com/goccy/go-yaml v1.18.0 // indirect
122+
github.com/godbus/dbus/v5 v5.0.4 // indirect
123+
github.com/gogo/protobuf v1.3.2 // indirect
124+
github.com/golang/protobuf v1.5.4 // indirect
125+
github.com/google/btree v1.1.2 // indirect
110126
github.com/google/flatbuffers v25.9.23+incompatible // indirect
111127
github.com/google/go-querystring v1.1.0 // indirect
112128
github.com/google/s2a-go v0.1.9 // indirect
113129
github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
114130
github.com/googleapis/gax-go/v2 v2.16.0 // indirect
131+
github.com/gorilla/websocket v1.5.0 // indirect
132+
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
133+
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
134+
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
115135
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
116136
github.com/hashicorp/errwrap v1.1.0 // indirect
117137
github.com/hashicorp/go-multierror v1.1.1 // indirect
@@ -122,47 +142,90 @@ require (
122142
github.com/jackc/puddle/v2 v2.2.2 // indirect
123143
github.com/jinzhu/inflection v1.0.0 // indirect
124144
github.com/jinzhu/now v1.1.5 // indirect
145+
github.com/jonboulle/clockwork v0.2.2 // indirect
125146
github.com/josharian/intern v1.0.0 // indirect
126-
github.com/json-iterator/go v1.1.12 // indirect
147+
github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect
127148
github.com/klauspost/compress v1.18.2 // indirect
128149
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
150+
github.com/kr/pretty v0.3.1 // indirect
151+
github.com/kr/text v0.2.0 // indirect
129152
github.com/leodido/go-urn v1.4.0 // indirect
130153
github.com/lib/pq v1.10.9 // indirect
154+
github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect
131155
github.com/mailru/easyjson v0.9.0 // indirect
132156
github.com/mattn/go-isatty v0.0.20 // indirect
133157
github.com/mattn/go-runewidth v0.0.16 // indirect
158+
github.com/milvus-io/milvus-proto/go-api/v2 v2.6.8-0.20251223041313-25746c47c1a7 // indirect
159+
github.com/milvus-io/milvus/pkg/v2 v2.6.7-0.20251201120310-af64f2acba38 // indirect
134160
github.com/minio/crc64nvme v1.0.1 // indirect
135161
github.com/minio/md5-simd v1.1.2 // indirect
136-
github.com/mitchellh/mapstructure v1.4.3 // indirect
162+
github.com/mitchellh/mapstructure v1.5.0 // indirect
137163
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
138164
github.com/modern-go/reflect2 v1.0.2 // indirect
139165
github.com/mozillazg/go-httpheader v0.2.1 // indirect
166+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
140167
github.com/olekukonko/tablewriter v0.0.5 // indirect
168+
github.com/opencontainers/runtime-spec v1.0.2 // indirect
141169
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
142170
github.com/pierrec/lz4/v4 v4.1.22 // indirect
171+
github.com/pkg/errors v0.9.1 // indirect
143172
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
173+
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
174+
github.com/prometheus/client_golang v1.20.5 // indirect
175+
github.com/prometheus/client_model v0.6.1 // indirect
176+
github.com/prometheus/common v0.55.0 // indirect
177+
github.com/prometheus/procfs v0.15.1 // indirect
144178
github.com/quic-go/qpack v0.5.1 // indirect
145179
github.com/quic-go/quic-go v0.54.0 // indirect
146180
github.com/rivo/uniseg v0.4.7 // indirect
147181
github.com/robfig/cron/v3 v3.0.1 // indirect
182+
github.com/rogpeppe/go-internal v1.14.1 // indirect
148183
github.com/rs/xid v1.6.0 // indirect
149184
github.com/sagikazarmark/locafero v0.7.0 // indirect
185+
github.com/samber/lo v1.27.0 // indirect
186+
github.com/shirou/gopsutil/v3 v3.23.12 // indirect
187+
github.com/shoenig/go-m1cpu v0.1.6 // indirect
188+
github.com/soheilhy/cmux v0.1.5 // indirect
150189
github.com/sourcegraph/conc v0.3.0 // indirect
190+
github.com/spaolacci/murmur3 v1.1.0 // indirect
151191
github.com/spf13/afero v1.12.0 // indirect
152192
github.com/spf13/cast v1.10.0 // indirect
153193
github.com/spf13/pflag v1.0.6 // indirect
154194
github.com/subosito/gotenv v1.6.0 // indirect
195+
github.com/tidwall/gjson v1.17.1 // indirect
196+
github.com/tidwall/match v1.1.1 // indirect
197+
github.com/tidwall/pretty v1.2.0 // indirect
198+
github.com/tklauser/go-sysconf v0.3.16 // indirect
199+
github.com/tklauser/numcpus v0.11.0 // indirect
200+
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect
155201
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
202+
github.com/twpayne/go-geom v1.6.1 // indirect
203+
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
156204
github.com/ugorji/go/codec v1.3.0 // indirect
157205
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
206+
github.com/x448/float16 v0.8.4 // indirect
207+
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
158208
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
209+
github.com/yusufpapurcu/wmi v1.2.4 // indirect
159210
github.com/zeebo/xxh3 v1.0.2 // indirect
211+
go.etcd.io/bbolt v1.3.6 // indirect
212+
go.etcd.io/etcd/api/v3 v3.5.5 // indirect
213+
go.etcd.io/etcd/client/pkg/v3 v3.5.5 // indirect
214+
go.etcd.io/etcd/client/v2 v2.305.5 // indirect
215+
go.etcd.io/etcd/client/v3 v3.5.5 // indirect
216+
go.etcd.io/etcd/pkg/v3 v3.5.5 // indirect
217+
go.etcd.io/etcd/raft/v3 v3.5.5 // indirect
218+
go.etcd.io/etcd/server/v3 v3.5.5 // indirect
160219
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
220+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
161221
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
162222
go.opentelemetry.io/otel/metric v1.38.0 // indirect
163223
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
224+
go.uber.org/atomic v1.11.0 // indirect
225+
go.uber.org/automaxprocs v1.5.3 // indirect
164226
go.uber.org/mock v0.5.0 // indirect
165227
go.uber.org/multierr v1.11.0 // indirect
228+
go.uber.org/zap v1.27.0 // indirect
166229
golang.org/x/arch v0.20.0 // indirect
167230
golang.org/x/exp v0.0.0-20251209150349-8475f28825e9 // indirect
168231
golang.org/x/mod v0.31.0 // indirect
@@ -174,7 +237,14 @@ require (
174237
golang.org/x/time v0.14.0 // indirect
175238
golang.org/x/tools v0.40.0 // indirect
176239
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
240+
google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect
177241
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
178242
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect
243+
gopkg.in/inf.v0 v0.9.1 // indirect
244+
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
179245
gopkg.in/yaml.v2 v2.4.0 // indirect
246+
k8s.io/apimachinery v0.32.3 // indirect
247+
sigs.k8s.io/yaml v1.4.0 // indirect
180248
)
249+
250+
replace go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc => go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0

0 commit comments

Comments
 (0)