代码模板语义搜索服务

一个用于1C (BSL)代码模板的语义搜索服务器,支持混合向量和全文搜索,提供CRUD Web界面和Monaco Editor集成。

  • by Desko77
  • Python
  • 本地部署
  • 30 星标
  • 更新于
在 GitHub 查看 Desko77/1c-templates-mcp

使用说明

1c模板mcp

MCP是一个基于代码模板1C(BSL)的语义搜索引擎。2262+来自社区的模板,CRUD Web界面与Monaco Editor,Chromadb+Embeddings进行意义搜索。

机会

  • 语义搜索 -混合(vector+full text)搜索俄语代码模板
  • 6个MCP工具 -搜索、查看、创建、编辑、删除模板
  • Web接口 -完整的CRUD与摩纳哥编辑器和BSL语法背光
  • 2262+模板 -预装1C代码模板数据库 seed_templates.jsonl
  • 灵活的Embeddings OpenAI兼容API或本地SentenceTransformer模型
  • 码头工人 -现成的Docker Compose可快速启动

从现成的图像安装(推荐)

对于普通用途-无需克隆存储库或编译。Docker Hub上的图片: desko77/1c-templates-mcp.

下载文件夹 deploy/ (三个档案: docker-compose.yml, .env.example, README.md)并运行:

cd deploy
docker compose up -d              # CPU-режим
docker compose --profile gpu up -d  # GPU-режим (NVIDIA)

详细的配置和更新说明-B deploy/README.md.

快速启动(从源代码构建)

适用于开发和捐赠。从当前存储库状态本地收集图像。

git clone https://github.com/Desko77/1c-templates-mcp.git
cd 1c-templates-mcp

# CPU (универсально, без требований к GPU)
docker compose --profile cpu up -d

# ИЛИ GPU (NVIDIA, значительно быстрее индексация + поиск)
docker compose --profile gpu up -d

服务器可用:

  • Web界面: http://localhost:8004
  • MCP端点: http://localhost:8004/mcp (POST,流式HTTP)

配置文件之间的差异:

  • cpu -集装箱 template_search_mcp没有GPU。Rosberta第一次在CPU上索引~5-10分钟。到处工作。
  • gpu -集装箱 template_search_mcp_gpu通过nvidia gpu运行 deploy.resources.reservations.devices一分钟内索引需要NVIDIA Container Toolkit(见下文)。

GPU配置文件要求

  1. 英伟达GPU 安装了驱动程序(验证: nvidia-smi 主人)。
  2. nvidia容器工具包 -在Docker容器中运行GPU包。
    • Установка: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
    • Windows通过Docker Desktop运行,WSL2+中安装了NVIDIA Container Toolkit。
    • 安装后: docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi 必须显示您的GPU。
  3. Torch支持CUDA -已经到了 requirements.txt (torch>=2.8.0 CUDA车轮自动拉紧)。

如果GPU不可用或 nvidia-container-toolkit 未确定- docker compose --profile gpu up 这将导致NVIDIA Runtime短缺。在这种情况下,使用 --profile cpu.

连接Claude Code

{
  "mcpServers": {
    "1c-templates-mcp": {
      "type": "url",
      "url": "http://localhost:8004/mcp"
    }
  }
}

MCP工具

工具参数描述 |------------|-----------|----------| | templatesearch | query: str –混合语义+全文模板搜索› | list_templates | offset?, limit? Ð带有压痕的模板列表(默认值50,最大200)。使用搜索 templatesearch | | get_template | template_id: int –获取完整的ID模板→ | add_template | name, description, code, tags? 添加新模板 | update_template | template_id, name?, description?, code?, tags? 更新现有模板 | delete_template | template_id: int 删除ID模板

Web接口

路线描述 |---------|----------| | GET / 搜索模板列表 | GET /new 模板创建表单(Monaco Editor) | GET /{id} 查看模板 | GET /{id}/edit –模板编辑。 | POST /{id}/delete 删除模板

配置

变量是默认的,描述是 |------------|-------------|----------| | HTTP_PORT | 8004 服务器端口 | EMBEDDING_PROVIDER | auto 提供 Embeddings: auto / local / openai (见下文)。 | EMBEDDING_MODEL | intfloat/multilingual-e5-small –HuggingFace–本地Embeddings的模型ID› | OPENAI_API_BASE | http://localhost:1234 OpenAI兼容Embeddings API的URL | OPENAI_API_KEY | lm-studio API 关键 | OPENAI_MODEL API服务器上的模型名称(对于LM Studio,内部名称不是HF-ID)→ | RESET_CHROMA | false 开始时重新创建Chromadb索引 | RESET_CACHE | false 开始时清除模型缓存。 | USESSE | false 使用SSE传输而不是Streamable HTTP。 | DATA_DIR | /app/data 运行时数据目录(SQLite,Chromadb)

建筑

                     MCP Clients (Claude Code, Cursor, ...)
                              |
                         POST /mcp
                              |
                    +---------+---------+
                    |    FastAPI app     |
                    |                   |
                    |  /mcp -> FastMCP  |  6 MCP tools
                    |  /    -> Web UI   |  CRUD + Monaco Editor
                    +----+--------+----+
                         |        |
                    +----+--+  +--+------+
                    | SQLite |  | ChromaDB |
                    | (SoT)  |  | (index)  |
                    +--------+  +----+-----+
                                     |
                              +------+------+
                              | Embeddings  |
                              | OpenAI API  |
                              | or local ST |
                              +-------------+
  • seed_templates.jsonl - 真理之源 对于赔款(每行一个JSON对象)。Docker生成 templates.db.
  • SQLite(templates.db) 运行时模板存储(在Docker Volume中)。JSON在构建阶段的衍生物。
  • 色度数据库 -语义搜索的向量索引,从SQLITE导出(在第一次启动时重建)。
  • 嵌入 OpenAI兼容API(LM Studio,Ollama)或本地SentenceTransformer。

Embedding模型

三种后端选择模式可通过 EMBEDDING_PROVIDER:

模式 auto (默认)

首先尝试OpenAI兼容的API(LM Studio,Ollama,VLLM)。如果不可用,则自动回滚到本地SentenceTransformer模型。

environment:
  - EMBEDDING_PROVIDER=auto
  - OPENAI_API_BASE=http://host.docker.internal:1234
  - OPENAI_MODEL=text-embedding-multilingual-e5-large-instruct
  - EMBEDDING_MODEL=intfloat/multilingual-e5-small   # fallback

模式 local 本地SentenceTransformer

API根本不会崩溃。如果没有LM Studio/Ollama,或者希望有确定性的行为而不依赖于外部服务,则非常适合。

environment:
  - EMBEDDING_PROVIDER=local
  - EMBEDDING_MODEL=intfloat/multilingual-e5-small   # или ai-forever/ru-en-RoSBERTa

模式 openai 只有API

如果API不可用,则失败。适用于需要API服务的生产卸载。

environment:
  - EMBEDDING_PROVIDER=openai
  - OPENAI_API_BASE=https://api.openai.com
  - OPENAI_API_KEY=sk-...
  - OPENAI_MODEL=text-embedding-3-small

关于本地模型的建议

ÐÐÐÐÐÐÐÐÐÐÐÐÐ |--------|---:|---:|---|---| | intfloat/multilingual-e5-small –118m/~450 MB–384–快速–Default–适用于任何地方,包括弱铁→ | ai-forever/ru-en-RoSBERTa Ð404M/~1.6GB=1024ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ | intfloat/multilingual-e5-large –560m/~2.2GB=1024在CPU上非常慢––有通用多语言GPU–。

第一次运行与新模型从HuggingFace(缓存到 model_cache/).从缓存读取后续开始。

嵌入式模型质量控制

如果您怀疑API模型(特别是LM Studio中的第三方GGUF)返回有缺陷的Embudding,请参阅。 ../plans/1c-templates-mcp/test_lmstudio_embeddings.py -脚本检查LM Studio中可用的所有模型是否崩溃(非链接文本的max cosu sim)。

本地启动(无Docker)

pip install -r requirements.txt
python -m app.main

环境变量从 .env 附件 .env.example).GPU安装 torch сCUDA车轮(pip install torch --index-url https://download.pytorch.org/whl/cu121).

要在web界面中突出显示BSL,请在项目旁边克隆BSLu控制台:

git clone --depth 1 https://github.com/salexdv/bsl_console.git

如何添加模板

真理的源泉 seed_templates.jsonl 在项目的根。每个文件行都有一个JSON格式的模板: {"name": "...", "description": "...", "tags": ["..."], "code": "..."}领域 name, description, code 必须, tags 这是可选的。

路径1:直接通过JSON(推荐用于PR)

  1. 将模板字符串添加到末尾 seed_templates.jsonl.
  2. 检查有效性: python scripts/build_db_from_jsonl.py --jsonl seed_templates.jsonl --output ./check.db 它应该结束没有错误。删除 check.db.
  3. 修改并打开PR。

路径2:本地通过Web UI+导出

  1. 启动服务器(docker compose up -d)通过Web UI添加模板(http://localhost:8004/new).模板在Docker Volume中的运行时数据库中找到。
  2. 一定 将运行时数据库上载到主机并导出到JSONL:
    docker cp template_search_mcp:/app/data/templates.db ./runtime_dump.db
    python scripts/export_to_jsonl.py --db ./runtime_dump.db --output seed_templates.jsonl
    rm ./runtime_dump.db
    
  3. git add seed_templates.jsonl评论,PR。

重要的是: 如果执行 docker compose up -d --build 或 docker volume rm 到 步骤2-通过Web UI添加的模板将丢失(运行时数据库将重新创建) seed_templates.jsonl).

JSON更改后重新编译图像

docker compose build --no-cache
docker volume rm 1c-templates-mcp_app_data  # удалит прежнюю runtime-БД
docker compose up -d

Companion-AI代理规则

В docs/rules/ 存储域目录,从中蒸馏出主题数据库模板。这不是一种模式的替代品,而是 Companion-深度上下文知识:模板显示 怎么办 具体操作,手册给出 全貌 域API。具有连接目录的代理可以更好地定位大型API,选择正确的方法,并且不会混淆具有类似意义的模块。

可用的目录

docs/rules/zup-hr-api-reference.md -1C:ZUP 3.1(人事会计)

典型配置机制的完整参考 1C:薪金和人事管理 (基础/核心预算资源调拨目标/公司)它适用于ZUP 3.1上的任何开发。

22节,620行。里面是什么:

节,内容。 |--------|-----------| | 1.建筑›关键区别 Справочник.Сотрудники (工作场所)vs Справочник.ФизическиеЛица (个人资料)。选择规则。 | | 2.模块层次结构› КадровыйУчет / КадровыйУчетРасширенный / КадровыйУчетПовтИсп / ЗарплатаКадры -什么是公共的,什么是内部的,什么时候用什么。 | | 3-4.干部主要方法 КадровыеДанныеСотрудников / КадровыеДанныеФизическихЛиц 大规模和单一的。参数,RLS,性能。 | | 5.字段目录-所有字段都可以通过工作人员编辑器访问:周期(职位、部门、工资、图表,~50个字段)和永久(日期、计算器、SNILS,~80个字段)。解释了“当前*”前缀的细微差别。 | | 6.录取/开除 ПериодыРаботыСотрудников, ДатаПриемаФизическогоЛица, ЭтоНачалоТрудовойДеятельности. | | 7.经验––所有类型的经验(一般、保险、北方、连续)、表示、计算持续时间、正常化。 | | 8.联络员↔ 自然。 ОсновнойСотрудникФизическогоЛица, СотрудникиФизическихЛиц, НеоформленныеСотрудникиФизическихЛиц -大规模和缓存选项。 | | 9.组织工作人员名单。 СотрудникиОрганизации 带有选择参数(部门、合同类型,包括解雇)。 | | 10-11.时间表→ СоздатьВТ* 批处理请求。 СоздатьВТРабочиеМестаСотрудников 工作间隔。 | | 12.员工档案 ПоместитьСотрудникаВАрхив, ИзвлечьСотрудникаИзАрхива (带有删除标记的细微差别)。 | | 13.创建新个人和新员工。 | | 14.首字母缩略语、格变格、性别、职位变格(Morfer Web服务)。 | | 15.辅助方法。 ГоловнаяОрганизация, ДоступныеОрганизации截至日期的责任人。 | | 16.来自客户的挑战 КадровыйУчетВызовСервера 安全的公共API | | 17.当前收费。 ТекущиеНачисленияСотрудника,通过W计划。 | | 18.剩下的假期。 ОстаткиОтпусковСотрудниковНаДату. | | 19.时间表/生产日历› РасписанияРаботыНаПериод, РазностьДатПоКалендарю, БлижайшиеРабочиеДаты. | | 20.印刷形式。 ТабельныйНомерНаПечать, ТарифнаяСтавкаНаПечать, ФормаМножественногоЧисла. | | 21.护照资料 ДокументыФизическихЛиц, ДокументУдостоверяющийЛичностьФизлица. | | 22.人员配置。 ДанныеПозицииШтатногоРасписания. |

最后是带有频繁耙子的“关键细微差别”部分:RLS,接收数据=“00010101”,批量vs单个方法,缓存。

数据库中的相关模板 (通过查找 templatesearch("ЗУП <тема>")):

  • ЗУП: Механизм представлений СКД (Представления_) -SCD报告的虚拟表
  • ЗУП: Периодические регистры через ЗарплатаКадрыПериодическиеРегистры -MW切割
  • ЗУП: Менеджер расчета зарплаты МенеджерРасчетаЗарплаты -程序计算
  • ЗУП: Средний заработок и остатки отпусков 平均收入
  • ЗУП: Учет рабочего времени и производственный календарь -四维扩展+日历图形

如何将目录连接到AI代理

克劳德代码 -两个选择:

  1. 全球(所有项目): 将文件复制到 ~/.claude/rules/ (Windows: C:\Users\<user>\.claude\rules\).此文件夹中的所有规则都自动包含在每个会话的上下文中。
  2. 对于特定项目: 添加链接到 CLAUDE.md 项目: См. companion-справочник: <путь к файлу>.

Cursor/其他IDE: 在项目规则设置(规则/指令)中插入文件。Markdown格式是通用的。

通过没有IDE的MCP客户端: 下载文件,并在处理ZUP主题时将其作为系统加速或附加文档提供给代理。

《汇辑》的赔款

目录覆盖具有大型API的域,在这些域中,没有上下文的AI代理很难选择正确的方法。如果您在不同的配置/子系统(会计、ERP、IT、BSP子系统等)上有此参考,请在此处打开PR。 docs/rules/格式是免费的,主要结构:目录,API主题部分,最后是关键的细微差别/耙子。

致谢

许可证

麻省理工学院