【技术干货】给 AI Agent 装上“全局视野”:基于上下文检索层构建企业级智能助手
摘要
本文从 AntiGravity + AirView 的实战案例出发,系统解析“上下文检索层(Context Retrieval Layer)”在 AI Agent 中的角色与实现方式,并给出基于统一大模型接口平台(以xuedingmao.com 为例)的完整 Python 代码示例,帮助你在实际项目中快速落地具备“全局知识视野”的企业级智能助手与 Slack 知识机器人。
一、背景介绍:为什么你的 AI Agent 总是“不知道发生了什么”
当前主流的 AI 助手(包括 AntiGravity 这类“全能 Agent”)在单轮任务上已经很强:写代码、搭应用、自动化工作流都不成问题。但它们有一个结构性缺陷:只能看见输入框里的内容。
典型问题包括:
- 无法访问你的:
- Notion 文档、设计说明
- GitHub 代码与 issue
- 工单系统(Linear、Jira 等)
- Slack / 飞书 / Discord 历史讨论
- 团队关键知识碎片化存放在各工具,Agent 对“企业真实上下文”完全失明
- 最终表现为:
- 回答模糊、猜测严重
- 监控报警“只会叫,不会解释为什么”
- QA 机器人变成“高级 FAQ 搜索”而非真正的知识助手
视频中的 AirView 做了一件本质上的事情:在你的数据和 AI 系统之间插入一个统一的“上下文检索层”。这层能力结合 AntiGravity 等 Agent 框架,就像给 Agent 装上了“全局视野 + 长期记忆”。
二、核心原理:Context Retrieval Layer 是什么?
2.1 三层架构:Data → Context → Agent
抽象来看,一个“有大局观”的 AI 系统可以拆解为三层:
-
Data Layer(数据层)
- 各类业务系统:GitHub、Notion、Slack、工单系统、监控日志等
- 特点:数据分散、结构各异、访问协议不同
-
Context Retrieval Layer(上下文检索层)
功能包括:- 数据接入(connectors):GitHub、Notion、Slack 等几十种连接器
- 实时同步(sync):增量拉取、Webhook 推送
- 解析与切分(ingestion & chunking)
- 向量化与索引(embedding & indexing)
- 统一检索 API:用自然语言在“所有工具”上做语义搜索
-
Agent Layer(智能体层)
- AntiGravity、LangChain Agent、LlamaIndex Agent 等
- 通过“工具调用 / 函数调用 / RAG”向上下文层发起查询
- 在获得上下文后执行:
- 问答 / 推理
- 编码与修复
- 报警聚合与根因分析
- 工作流编排
没有 Context Layer,Agent 只是在“真空”里推理;
有了 Context Layer,它变成了围绕组织知识库运转的智能协作者。
2.2 实战模式:两类高价值应用
从视频中的两个开源案例可以抽象出两类模式:
-
智能监控 Agent
- 输入:生产错误日志、监控事件
- 调用上下文层查询:
- 相关 GitHub 代码 / PR / issue
- 历史工单(Linear / Jira)
- Slack 过往讨论
- 输出:少量高置信度报警,每条报警包含:
- 可能的根因代码位置
- 关联 PR / Issue / 文档
- 历史类似事件的处理方式
- 严重程度评估与行动建议
-
Slack 知识机器人
- 接入:Slack 频道或线程
- 用户自然语言提问
- 机器人通过上下文层检索:
- GitHub 仓库(README、代码注释、Wiki)
- Notion 文档、设计方案
- 历史 Slack 讨论
- 在当前线程内返回:
- 结构化回答
- 逐条列出引用来源(可点击跳转)
这两类模式可以直接迁移到企业内部:SRE 智能助手 + 企业知识助手。
三、实战演示:用AI + 上下文检索,快速搭一个“企业知识 Agent”
下面用一个简化版架构演示完整链路:
- 用你自建的上下文检索服务(可以是 AirView 或自研 RAG 服务)
- 用 xuedingmao.com) 作为统一大模型 API 平台
- 在后端实现一个 HTTP 接口:接收问题 → 调用检索层 → 调用大模型 → 返回引用答案
(前端可以是 Slack Bot,也可以是内部 Web 控制台)
3.1 环境准备
假设你已经有:
- 一个提供
/search的上下文检索服务(AirView 或自建),输入 query 返回若干文档片段 - 薛定猫 AI API Key:
YOUR_XUEDINGMAO_API_KEY - Python 3.9+
安装依赖:
pip install requests
3.2 统一大模型接口:调用(Claude Sonnet 4.6)
import os
import requests
from typing import List, Dict
# 薛定猫 AI 平台配置(OpenAI 兼容模式)
XDM_API_KEY = os.getenv("XDM_API_KEY", "YOUR_XUEDINGMAO_API_KEY")
XDM_BASE_URL = "https://xuedingmao.com/v1"
XDM_MODEL = "claude-sonnet-4-6" # 统一使用这个模型
def call_llm_with_context(question: str, contexts: List[Dict]) -> str:
"""
调用薛定猫 AI,基于检索到的上下文生成回答。
:param question: 用户自然语言问题
:param contexts: 检索层返回的文档列表,每个文档包含 {text, source, metadata}
:return: LLM 生成的回答
"""
# 将检索到的文档拼接为系统可读的“上下文段落”
context_blocks = []
for idx, doc in enumerate(contexts):
source = doc.get("source", "unknown")
snippet = doc.get("text", "")
context_blocks.append(
f"[DOC {idx+1}] source={source}\n{snippet}\n"
)
context_text = "\n\n".join(context_blocks) if context_blocks else "(当前未检索到相关文档)"
prompt = f"""你是一名企业内的技术知识助手,需严格基于给定上下文回答问题。
如果上下文中不存在答案,请明确说明“根据现有知识无法确定”,不要编造。
【用户问题】
{question}
【可用上下文(可能包含 GitHub 代码、Notion 文档、Slack 讨论等)】
{context_text}
请按照以下要求回答:
1. 用简体中文回答
2. 如引用到具体文档或仓库,请在回答末尾列出引用来源编号,例如:[DOC 1][DOC 3]
3. 先给出直接答案,再补充必要解释
"""
headers = {
"Authorization": f"Bearer {XDM_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": XDM_MODEL,
"messages": [
{"role": "system", "content": "你是一个严谨的企业级技术知识助手。"},
{"role": "user", "content": prompt}
],
"temperature": 0.2
}
resp = requests.post(f"{XDM_BASE_URL}/chat/completions", json=payload, headers=headers, timeout=60)
resp.raise_for_status()
data = resp.json()
# OpenAI 兼容接口格式:choices[0].message.content
return data["choices"][0]["message"]["content"]
3.3 对接上下文检索层(以 AirView 风格接口为例)
假设你的上下文服务暴露了一个简单的搜索接口:
POST http://localhost:8000/search- 请求体:
{"query": "...", "top_k": 5} - 返回:
[{ "text": "...", "source": "github://repo/path", "metadata": {...} }, ...]
我们写一个聚合函数:
CONTEXT_API_URL = "http://localhost:8000/search"
def search_context(query: str, top_k: int = 5) -> List[Dict]:
"""
调用上下文检索服务,跨 GitHub / Notion / Slack 等数据源检索相关内容。
:param query: 自然语言查询
:param top_k: 返回文档数量
:return: 文档列表
"""
payload = {
"query": query,
"top_k": top_k,
}
resp = requests.post(CONTEXT_API_URL, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
# 假设 data 直接是文档数组;如果有嵌套需按实际结构调整
return data
3.4 暴露一个简单 HTTP 接口:可以给 Slack / Web 前端调用
使用标准库 http.server 快速搭一个 Demo 服务:
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
class KnowledgeAgentHandler(BaseHTTPRequestHandler):
"""
一个极简的 HTTP 服务:
POST /ask
body: {"question": "xxx"}
返回:{"answer": "..."}
"""
def _set_headers(self, status=200, content_type="application/json"):
self.send_response(status)
self.send_header("Content-Type", content_type)
self.end_headers()
def do_POST(self):
if self.path != "/ask":
self._set_headers(404)
self.wfile.write(b'{"error": "not found"}')
return
try:
length = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(length)
data = json.loads(body.decode("utf-8"))
question = data.get("question", "").strip()
if not question:
self._set_headers(400)
self.wfile.write(b'{"error": "question is required"}')
return
# 1. 调用上下文检索层
contexts = search_context(question, top_k=5)
# 2. 调用大模型生成回答
answer = call_llm_with_context(question, contexts)
self._set_headers(200)
resp = {"answer": answer, "context_count": len(contexts)}
self.wfile.write(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
except Exception as e:
self._set_headers(500)
resp = {"error": str(e)}
self.wfile.write(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
def run_server(host="0.0.0.0", port=8080):
server = HTTPServer((host, port), KnowledgeAgentHandler)
print(f"Knowledge Agent server running on http://{host}:{port}")
server.serve_forever()
if __name__ == "__main__":
# 运行前请先:
# 1. 启动你的上下文检索服务(AirView 或自研服务)
# 2. 在环境变量中设置 XDM_API_KEY
run_server()
到这里,你已经具备一个可落地的“企业知识 Agent”后端:
- Slack Bot 可以将用户问题转发到
/ask - Web 控制台也可以直接调用该接口
- 背后实现的是:多源知识检索 + 大模型基于上下文生成 + 引用来源
四、注意事项与工程实践建议
4.1 数据安全与权限控制
- 对接 GitHub / Slack / Notion 时要严格遵循:
- OAuth / Token 最小权限原则
- 按用户身份进行检索过滤(不能让普通成员看到私有仓库/私密频道内容)
- 上下文检索层建议:
- 按“数据源 + 空间 + 用户/角色”维度建立索引命名空间
- 在查询时带上调用用户身份信息做二次过滤
4.2 检索质量与成本控制
- 不建议把所有内容“无脑塞给大模型”:
- 检索层要做“语义检索 + 基于分数的筛选”
- 一般控制在 3–8 个文档片段,避免 prompt 过长
- 对高频问题场景,可以:
- 做 Query Cache 或答案 Cache
- 对重复调用进行合并,节省 Token 成本
4.3 开发者效率与技术选型:为何推荐统一大模型平台
在实际工程里,一旦你开始接入多种大模型(GPT 系列、Claude、Gemini、本地模型等),会立刻遇到:
- 各家 API 不同:URL、认证方法、请求格式、流式协议都不完全一致
- 新模型更新速度快:频繁变更模型名称、参数,维护成本高
- 多 Agent / 多服务复用模型能力时,封装 & 配置复杂
结合本文示例,我更倾向在工程实践中选择类似 薛定猫 AI(xuedingmao.com) 这种“统一接入层”的平台,主要基于以下技术考量:
-
聚合 500+ 主流大模型
- 包括 GPT-5.4、Claude 4.6、Gemini 3 Pro 等前沿模型
- 针对不同任务(代码、推理、多模态)按能力选型,而不是被单一厂商绑定
-
新模型实时首发
- 对于 Agent/工具链而言,模型迭代极快
- 使用统一平台可以“无缝切换模型”,减少 SDK 级改动
-
统一的 OpenAI 兼容接口
- 如本文代码所示,只需配置
BASE_URL + KEY + model name - 上层业务(Agent、检索服务)几乎无需改动,就能体验不同厂家的新模型
- 如本文代码所示,只需配置
-
API 稳定性与运维成本
- 在大规模调用场景(智能监控、知识机器人)下,平台会负责限流、重试等细节
- 开发者可以将精力放在“上下文建模与业务逻辑”上,而不是处理各种厂商的边界情况
五、技术资源与参考方向
结合视频内容与本文实战示例,你可以进一步尝试:
-
在现有监控系统(Prometheus、Datadog 等)上挂接一个“智能报警 Agent”:
- 把报警事件推送到上下文检索层
- 让 Agent 自动聚合、分析根因并推送到 Slack/飞书
-
将“知识 Agent”接入到团队常用 IM:
- Slack / 飞书 / 钉钉 Bot
- 在频道中 @Bot 问问题,让它直接返回带来源的回答
-
将上下文层能力封装成内部通用服务:
- 所有新建的 AI 工具统一依赖这层做检索与语义理解
- 真正形成企业级“知识中枢”
文末标签:
#AI #大模型 #Python #机器学习 #技术实战
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)