Skip to content

arkin-developer/kbchat

Repository files navigation

kbchat

基于 Go + Cobra 的知识库问答 CLI,内置 Milvus 向量检索、可控的 Agent 有向图,以及带对话记忆的问答模型(Qallm)。

功能特性

  • 知识库入库:上传本地文档,切分+嵌入+写入 Milvus
  • 问答(非流式):向量检索 + 基于上下文的问答
  • 对话记忆:支持清空与查看历史上下文
  • 清晰工作流:Query 与 Update 模式分流
  • 纯 CLIstart / 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_KEY
    • SILICONCLOUD_API_BASE
    • LLM_MODEL
    • LLM_TEMPERATURE(可选)
    • LLM_MAX_TOKENS(可选)
  • Embedding
    • EMBEDDING_PROVIDER
    • EMBEDDING_MODEL
    • EMBEDDING_API_KEY
    • EMBEDDING_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 退出

工作流(KBAgent)

  • Query 模式:START -> retrieve -> qa -> finish_check -> END(必要时进入 reader 采集片段)
  • Update 模式:START -> embedding -> END(仅入库,不做检索/问答)

说明:为避免空查询向量化错误,上传完成后直接结束。

开发

go fmt ./...
go test ./... -v
go build ./...

备注

  • 使用约定式提交消息(feat/fix/chore 等)。
  • 不提交密钥到仓库;使用环境变量或 .env(本地)。
  • 已清理历史日志文件夹,避免仓库膨胀。

许可

未指定许可协议。若需开源,请补充 LICENSE。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages