假设业务需求:为某大型制造企业提供内部文档(操作手册、质检标准、维修日志)的智能问答,支持多租户隔离、权限控制和审计日志。
我们采用 三层分离架构:
核心交互流程:用户提问 → 网关鉴权 → 业务服务记录上下文 → 调用算法服务检索+生成 → 返回结果并异步埋点。
RAG 是企业知识助手的核心,但 naive 实现往往召回率低、延迟高。我们的优化策略包括:
Python 算法服务核心代码(FastAPI + LangChain):
from fastapi import FastAPI
from pydantic import BaseModel
from langchain.retrievers import EnsembleRetriever
from langchain.elasticsearch import ElasticsearchStore
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms import ChatOpenAI
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain.retrievers import ContextualCompressionRetriever
app = FastAPI()
# 初始化 Embedding(本地部署,保障数据隐私)
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
# 向量存储(Elasticsearch 8.x)
vector_store = ElasticsearchStore(
es_url="http://es-cluster:9200",
index_name="doc_vectors",
embedding=embeddings,
distance_strategy="COSINE"
)
# 关键词检索器(基于 ES 的 match 查询)
keyword_retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 50})
# 向量检索器(更注重语义)
vector_retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 50})
# 混合检索(Ensemble,权重关键词0.3,向量0.7)
ensemble = EnsembleRetriever(
retrievers=[keyword_retriever, vector_retriever],
weights=[0.3, 0.7]
)
# 重排序器(Cross-Encoder,使用 bge-reranker-large)
reranker = CrossEncoderReranker(
model_name="BAAI/bge-reranker-large",
top_n=5
)
final_retriever = ContextualCompressionRetriever(
base_compressor=reranker,
base_retriever=ensemble
)
@app.post("/retrieve")
async def retrieve(query: str, tenant_id: str):
# 多租户过滤(通过 ES filter)
docs = final_retriever.get_relevant_documents(
query,
filter={"term": {"tenant_id": tenant_id}}
)
return [{"content": d.page_content, "score": d.metadata.get("relevance_score")} for d in docs]企业通常同时接入多家 LLM 厂商(OpenAI、Azure、私有化 Qwen),我们设计 LLM Gateway 负责统一鉴权、降级、灰度切换。
// Spring Boot 服务 - LLM 路由核心
@Service
public class LLMRouter {
@Autowired private List<LLMProvider> providers; // 不同厂商实现
public String generate(String prompt, String tenantId) {
// 根据租户级别、模型负载、成本策略动态选择
String preferred = getTenantPreferredModel(tenantId);
LLMProvider provider = providers.stream()
.filter(p -> p.supports(preferred))
.findFirst()
.orElse(providers.get(0)); // 降级
try {
return provider.invoke(prompt);
} catch (Exception e) {
log.warn("主模型故障,切换备用", e);
return providers.get(1).invoke(prompt); // 自动故障转移
}
}
}网关还具备 Token 计数与预算预警,当某租户月度消耗超限时自动切换到廉价模型(如从 GPT-4 降级到 GPT-3.5)。
我们采用 Kubernetes + Istio 进行服务网格管理,关键策略如下:
K8s 部署片段(算法服务):
apiVersion: apps/v1
kind: Deployment
metadata:
name: rag-service
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
spec:
containers:
- name: rag
image: rag-service:latest
resources:
requests:
memory: "4Gi"
cpu: "2"
limits:
memory: "8Gi"
cpu: "4"
env:
- name: ES_HOST
value: "elasticsearch-cluster"
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: redis-secret
key: url
livenessProbe:
httpGet:
path: /health
port: 8000
readinessProbe:
httpGet:
path: /ready
port: 8000企业级项目必须全方位可观测:
rag_requests_total 和 Histogram rag_latency_seconds。trace_id、tenant_id、user_id,便于审计和问题排查。Python 算法服务添加 OpenTelemetry 埋点:
from opentelemetry import trace
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
tracer = trace.get_tracer(__name__)
FastAPIInstrumentor.instrument_app(app)
@app.post("/generate")
async def generate(query: str, tenant: str):
with tracer.start_as_current_span("rag_pipeline") as span:
span.set_attribute("tenant", tenant)
# 检索
docs = await retrieve(query, tenant)
# 构建prompt
context = "\n".join([d["content"] for d in docs])
prompt = f"基于以下资料回答问题:\n{context}\n问题:{query}"
# 调用LLM
answer = router.generate(prompt, tenant)
span.set_attribute("answer_length", len(answer))
return {"answer": answer}企业场景对数据安全极为敏感。我们实施:
[敏感信息] 后再送入 LLM。@EventListener
public void onQueryCompleted(QueryCompletedEvent event) {
auditLogRepository.save(
AuditLog.builder()
.userId(event.getUserId())
.tenant(event.getTenant())
.query(event.getQuery())
.retrievedDocIds(event.getDocIds())
.answer(event.getAnswer())
.latencyMs(event.getLatency())
.build()
);
}本文完整呈现了一个企业级 AI 知识助手从 RAG 优化、微服务治理、LLM 网关、可观测性到安全合规 的全方位实施路线。与个人项目相比,企业级开发的本质是 在不确定性中构建确定性——通过熔断、重试、降级、灰度等工程手段,将 LLM 的随机性封装成稳定可靠的业务能力。
未来演进可向 Agent 化 和 多模态 延伸:赋予助手执行动作(如查询 ERP 库存、创建工单)的能力,并支持图纸、视频等非结构化数据的理解。但无论功能如何丰富,扎实的企业级地基(高可用、可观测、安全)始终是 AI 应用大规模落地的先决条件。这套架构已在多个行业客户的 POC 中验证,累计支撑超过 200 万次问答,P99 延迟控制在 3.5 秒内,为业务部门带来了真正的效率提升。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。