snippy
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你在 VS Code 里写一个新功能,忽然想起三个月前在另一个项目里实现过类似的向量检索逻辑——但那个代码存在哪来着?翻遍了文件夹、Git 历史、Slack 记录,找了半小时。
Snippy 想解决的就是这个问题:让 AI 编程助手(GitHub Copilot、Cursor 等)能够直接搜索并调用你们团队私有的代码片段库,而不需要把代码粘贴到聊天窗口。它的核心思路是——把 Azure Functions 同时暴露为 REST API 和 MCP(Model Context Protocol)工具,让 AI 助手像调用本地函数一样调用远程代码管理接口。

MCP(Model Context Protocol)是 Anthropic 在 2024 年底开源的一个标准化协议,目标是为 AI 助手提供统一的「工具调用」接口规范。你可以把它理解为「AI 工具的 USB-C」——无论后端是什么,只要实现了 MCP 协议,AI 助手就能发现并调用它。
Azure-Samples 团队基于这一趋势,推出了 Snippy 参考应用,展示了如何在 Azure Functions 上同时提供 REST API 和 MCP 工具接口。这不是实验性代码,而是面向生产的设计:Durable Functions(持久化函数)处理状态管理,Cosmos DB 做向量检索,Azure OpenAI 生成文本嵌入,整个链路都可以用 azd up 一键部署。

Snippy 的核心创新在于 Azure Functions 同时注册了两种触发器:
from durable_agents import app, deep_wiki_agent, code_style_agent
# MCP 工具定义示例
tool_properties_save_snippets = ToolPropertyList(
ToolProperty("snippetname", "string", "代码片段的唯一名称"),
ToolProperty("projectid", "string", "所属项目标识"),
ToolProperty("snippet", "string", "代码片段内容"),
)
AI 助手(如 GitHub Copilot)发现这些工具后,可以直接让用户说「帮我搜索类似的代码片段」,Copilot 就会调用 MCP 工具,无需用户手动复制粘贴。
代码片段存储在 Azure Cosmos DB,文本嵌入由 Azure OpenAI text-embedding-3-small 模型生成,存储在 Cosmos DB 的 vector index 中。检索时用余弦相似度匹配:
async def vector_search(query: str, k: int = 30, project_id: str = "*"):
# Azure OpenAI 生成查询向量
response = await openai_client.embeddings.create(
model=model_deployment_name,
input=query
)
# Cosmos DB vector index 相似度搜索
results = await cosmos_ops.vector_search(embedding, k=k)
return json.dumps(results)
这种设计的优势在于:语义检索——用户输入「认证相关的工具函数」,系统能找到相关代码,即使代码中没有任何「认证」关键词。
Snippy 内置两个 AI Agent:
两个 Agent 通过 Durable Task Scheduler 进行编排,采用 fan-out/fan-in 模式——主 Orchestrator 分发任务给子 Agent,最后汇总结果。状态由 Durable Entities 自动持久化,Agent 可以在任意时刻暂停/恢复。
| 维度 | Docker Compose 本地开发 | 云端一键部署(azd up) |
|---|---|---|
| 前置条件 | Docker Desktop + Python 3.11 | Azure 订阅 + azd CLI |
| AI 功能 | ✗(用模拟器替代 Azure 服务) | ✓(完整 OpenAI + Cosmos DB) |
| 复杂度 | 中(需手动配置环境变量) | 低(一行命令搞定) |
| 适用场景 | 学习/调试 | 团队实际使用 |
1. Azure 锁定效应明显
整套方案深度依赖 Azure 生态——Cosmos DB DiskANN 向量索引、Azure OpenAI、Durable Functions、Azure Identity(RBAC 认证)。如果想迁移到 AWS 或 GCP,几乎需要重写。
2. 安全性需额外加固
项目 README 明确标注「不要直接部署到生产环境」,缺少 Key Vault 集成和网络安全加固,开箱即用的版本存在凭证泄露风险。
3. 向量检索精度依赖嵌入质量
语义搜索的效果高度依赖 OpenAI 嵌入模型对代码的理解程度。代码片段过短或过于模板化时,嵌入质量会显著下降。
Snippy 代表了一个重要趋势:AI 应用的「服务端」正在 MCP 化。过去 AI 助手只能通过 API 被动接收数据;现在通过 MCP 协议,AI 助手可以主动发现并调用服务端工具,形成真正的双向交互。
这一模式的核心价值在于:私有代码库第一次有了被 AI 助手「理解」的标准化路径。企业不需要把代码喂给第三方 AI 服务,本地部署的 MCP Server 就可以让 Copilot 直接查询内部代码库。
随着 MCP 生态的扩展(目前已支持文件系统、数据库、Slack、GitHub 等),类似 Snippy 的参考架构会越来越常见——它们是 MCP 协议落地的试验田,也是 AI 应用架构演进的风向标。