LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践

1.背景

本qiang~这两周关注到一个很火的开源文档问答系统Kotaemon,从8月28日至今短短两周时间,github星标迅猛增长10K,因此计划深挖一下其中的原理及奥秘。

本篇主要是Kotaemon的简介信息,涉及到主要特点,与传统文档RAG的区别,如何部署、以及效果演示

后续内容会针对核心模块进行拆解研读,敬请期待~

2.简介

Kotaemon是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline的开发者

2.1终端用户

1)提供了一个基于RAG问答的简单且最小化的UI界面

2)支持诸多LLM API提供商(如OpenAI, Cohere)和本地部署的LLM(如ollama和llama-cpp-python)

2.2开发者

1)提供了一个构建RAG文档问答pipeline的框架

2)使用Gradio开发,基于提供的UI可以自定义并查看RAG pipeline的运行过程

3.主要特点

1)托管自己的QA Web UI: 支持多用户登录,支持文件私有或公开,支持与他人协助分享

2)管理LLM和Embedding模型: 支持本地LLM和流行的API提供商

3)混合RAG pipeline: 支持全文本和向量的混合检索,以及re-ranking来保障检索质量

4)支持多模态文档:支持对含有图片及表格的N多个文档进行问答,支持多模态文档解析

5)带有高级引文的文档预览: 系统默认提供具体的引用信息,保障LLM回答的准确性。直接在浏览器内的PDF查阅器查看引文,并高亮显示。

6)支持复杂推理方法:使用问题分解来回答复杂/多跳问题。支持使用ReAct、ReWoo及其他Agent进行推理

在你提到的这行配置中: ```yaml LLM_API_HOST: "http://aps1-omada-sale-assistant-internal.alpha.tplinknbu.com" ``` **直接写死的字符串是不能使用“占位符”的**,除非你所使用的 **运行环境或工具链支持变量替换(如模板解析、环境注入等)**。 --- ### ✅ 回答问题:可以使用占位符吗? **不可以直接使用像 `{}` 或 `${}` 这样的“占位符”并期望它自动被替换** —— 除非有外部工具处理。 但你可以通过以下方式 **间接实现“占位符”功能**,具体取决于你的使用场景。 --- ## 🧩 场景分析:何时能用“占位符” ### ✅ 场景 1:使用 Docker Compose + 环境变量 你想让 `alpha` 是一个可变部分,比如根据环境变成 `alpha` / `beta` / `prod`。 #### 解法:使用环境变量占位符 `${VAR}` ```yaml # docker-compose.yml services: app: environment: LLM_API_HOST: "http://${SERVICE_NAME}.${ENVIRONMENT}.tplinknbu.com" ``` 配合 `.env` 文件: ```env SERVICE_NAME=aps1-omada-sale-assistant-internal ENVIRONMENT=alpha ``` 最终结果: ```text http://aps1-omada-sale-assistant-internal.alpha.tplinknbu.com ``` > ✅ 支持!这是 Docker Compose 的变量替换机制。 📌 注意:这种 `${VAR}` 不是 YAML 原生支持的,而是 **Docker Compose 在加载时做的预处理替换**。 --- ### ✅ 场景 2:Kubernetes ConfigMap + Helm 模板 如果你用 Helm 部署,可以使用 Go template 的语法: ```yaml # configmap.yaml (Helm template) data: LLM_API_HOST: "http://aps1-omada-sale-assistant-internal.{{ .Values.environment }}.tplinknbu.com" ``` 然后在 `values.yaml` 中定义: ```yaml environment: alpha ``` 部署后会自动替换为: ```text http://aps1-omada-sale-assistant-internal.alpha.tplinknbu.com ``` > ✅ Helm 支持真正的“占位符”。 --- ### ✅ 场景 3:Spring Boot / Java 应用中的 `application.yml` 你可以这样写: ```yaml llm: api-host: "http://aps1-omada-sale-assistant-internal.${env:alpha}.tplinknbu.com" ``` 但这不会自动生效。你需要结合: - JVM 参数:`-Denv=alpha` - 或者 Spring 的 `@Value("${env}")` 注入 - 或使用 `PropertySourcesPlaceholderConfigurer` 更推荐的是: ```yaml llm: api-host: "http://aps1-omada-sale-assistant-internal.${ENVIRONMENT:alpha}.tplinknbu.com" ``` 其中 `${ENVIRONMENT:alpha}` 表示:使用环境变量 `ENVIRONMENT`,如果未设置则默认为 `alpha`。 > ✅ Spring Boot 支持这种占位符(前提是启用属性占位符解析)。 --- ### ❌ 场景 4:纯 YAML 文件(无运行时处理) ```yaml LLM_API_HOST: "http://aps1-omada-sale-assistant-internal.{environment}.tplinknbu.com" ``` 或者: ```yaml LLM_API_HOST: "http://aps1-omada-sale-assistant-internal.${ENV}.tplinknbu.com" ``` 👉 如果没有工具去解析和替换这些 `{}` 或 `${}`,那么它们就只是普通字符串,**不会被替换**! > ❌ 不支持 —— 占位符不会自动生效。 --- ## ✅ 推荐做法(通用方案) 如果你想实现“可配置的主机名”,最佳实践是: ### 方案一:使用环境变量(最通用) ```yaml # docker-compose.yml environment: LLM_API_HOST: "${LLM_API_HOST:-http://aps1-omada-sale-assistant-internal.alpha.tplinknbu.com}" ``` 这样可以在启动时通过 `.env` 或命令行覆盖: ```bash LLM_API_HOST=http://localhost:8000 docker-compose up ``` ### 方案二:拆解为多个变量(适合多环境) ```yaml environment: LLM_API_HOST: "http://aps1-omada-sale-assistant-internal.${DEPLOY_ENV:-alpha}.tplinknbu.com" ``` --- ## 🔍 总结 | 写法 | 是否支持占位符 | 说明 | |------|----------------|------| | `"http://${VAR}/path"` | ✅ 只有在 Docker Compose / Shell / Spring 等支持环境中才有效 | | `"http://{var}/path"` | ❌ 不会被任何标准工具识别 | | 直接写死 URL | ✅ 安全但不灵活 | | 使用外部变量注入 | ✅✅✅ 强烈推荐用于多环境部署 | --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengrennwpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值