基于 Go + Cobra 的知识库问答 CLI,内置 Milvus 向量检索、可控的 Agent 有向图,以及带对话记忆的问答模型(Qallm)。
- 知识库入库:上传本地文档,切分+嵌入+写入 Milvus
- 问答(非流式):向量检索 + 基于上下文的问答
- 对话记忆:支持清空与查看历史上下文
- 清晰工作流:Query 与 Update 模式分流
- 纯 CLI:
start / ask / console子命令
cmd/: Cobra 命令root.go根命令ask.go问答/更新console.go交互式控制台(非流式)
internal/agent/: 业务 Agent(KBAgent、ReaderAgent、工具)internal/llms/: 问答模型与对话记忆(Qallm, ConversationMemory)internal/vectorstore/: Milvus 存取与搜索internal/embedding/: 向量化实现internal/config/: 配置加载(env + viper)main.go: 入口(调用cmd.Execute())
go mod tidy
go build ./...环境变量优先,支持 .env。关键项:
- Siliconcloud(OpenAI 兼容)
SILICONCLOUD_API_KEYSILICONCLOUD_API_BASELLM_MODELLLM_TEMPERATURE(可选)LLM_MAX_TOKENS(可选)
- Embedding
EMBEDDING_PROVIDEREMBEDDING_MODELEMBEDDING_API_KEYEMBEDDING_API_BASE
- Milvus
MILVUS_ADDRESS(默认localhost:19530)MILVUS_USERNAME/MILVUS_PASSWORD(可选)MILVUS_COLLECTION(默认eino_collection)
- 其他
UPLOAD_TEMP_PATH(默认upload)MEMORY_WINDOW_SIZE(默认 20)AGENT_VERBOSE(true/false)
示例 .env:
SILICONCLOUD_API_KEY=your_key
SILICONCLOUD_API_BASE=https://api.siliconflow.cn/v1
LLM_MODEL=deepseek-ai/DeepSeek-V3
LLM_TEMPERATURE=0.3
LLM_MAX_TOKENS=2048
EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=BAAI/bge-m3
EMBEDDING_API_KEY=your_key
EMBEDDING_API_BASE=https://api.siliconflow.cn/v1
MILVUS_ADDRESS=localhost:19530
MILVUS_USERNAME=
MILVUS_PASSWORD=
MILVUS_COLLECTION=eino_collection
UPLOAD_TEMP_PATH=upload
MEMORY_WINDOW_SIZE=20
AGENT_VERBOSE=false- 环境检查与目录准备:
go run . start- 一次性问答/更新:
go run . ask -q "Explain vector database"
go run . ask -f upload/notes.md
go run . ask -q "给我摘要" -f upload/file.txt- 交互式控制台(非流式):
go run . console
# 1 上传文档到知识库
# 2 清除上下文
# 3 查看上下文(最近 20 条)
# 0 退出- Query 模式:
START -> retrieve -> qa -> finish_check -> END(必要时进入 reader 采集片段) - Update 模式:
START -> embedding -> END(仅入库,不做检索/问答)
说明:为避免空查询向量化错误,上传完成后直接结束。
go fmt ./...
go test ./... -v
go build ./...- 使用约定式提交消息(feat/fix/chore 等)。
- 不提交密钥到仓库;使用环境变量或
.env(本地)。 - 已清理历史日志文件夹,避免仓库膨胀。
未指定许可协议。若需开源,请补充 LICENSE。