提示增强器MCP
一台服务器,将粗略的人工智能助手功能提示转化为精美的生产质量提示。它使用LLM(Gemini或OpenAI)用正确的工具映射、对话流、数据验证和CRM字段引用重写提示。
为 Hackathon 网站.
它的作用
一位企业主写了一个粗略的提示,比如:
“当有人打电话时,要知道他们的姓名和公司名称,然后在网上查找”
服务器将其转换为结构化提示:
- 身份和目标 --职业角色名称、使命、语气
- 对话流程 --一次收集一条信息的编号步骤
- 数据验证 --电话/电子邮件格式检查,何时触发工具调用
- 工具映射 --精确CRM
field_id映射,使工具调用真正起作用 - 关闭 --友好的成功信息(从不提及“CRM”或内部系统)
它还严格执行 工具调用执行规则 因此,人工智能助手从不说“请稍候,我查一下”(这会使对话陷入僵局,因为助手只会为每个用户消息发送一个响应)。
建筑
┌─────────────────────────────────────────────┐
│ prompt-enhancer-mcp │
│ │
│ ┌─────────────┐ ┌───────────────────┐ │
│ │ /mcp │ │ /api/enhance-prompt│ │
│ │ (MCP proto) │ │ (REST JSON) │ │
│ └──────┬───────┘ └────────┬──────────┘ │
│ │ │ │
│ └──────────┬──────────┘ │
│ ▼ │
│ buildMetaPrompt() │
│ (meta_prompt.go) │
│ │ │
│ ┌──────────┼──────────┐ │
│ ▼ ▼ ▼ │
│ Gemini OpenAI Template │
│ API API Fallback │
│ (preferred) (backup) (no key) │
└─────────────────────────────────────────────┘两个接口,逻辑相同:
| 端点 | 协议 | 使用人 |
|---|---|---|
/mcp | MCP(模型上下文协议) | Cursor、Claude Desktop等人工智能工具 |
/api/enhance-prompt | REST(JSON POST) | Galaxy前端(Angular) |
/health | HTTP GET | 健康检查 |
前端如何连接
Galaxy前端确实如此 不 使用MCP。这很明显 POST /api/enhance-prompt 使用JSON调用:
{
"user_prompt": "collect caller info and search their business",
"tool_names": ["WebSearch_SearchService_Search", "CRMCompanies_CRMCompanyService_CreateCompany"],
"tool_schemas": "[{\"id\":\"WebSearch_SearchService_Search\", ...}]",
"capability_name": "Lead Intake",
"capability_description": "Collects lead info and creates CRM records"
}服务器响应如下:
{
"enhanced_prompt": "## 1. IDENTITY & GOAL\n**Role:** Lead Intake Specialist\n..."
}MCP端点(/mcp)暴露出与a相同的逻辑 EnhanceCapabilityPrompt 用于使用MCP协议的AI本地客户端的工具。
本地运行
先决条件
- 转到1.21+
- Gemini API密钥(首选)或OpenAI API密钥
构建与运行
# Build
go build -o prompt-enhancer-mcp .
# Run with Gemini
GEMINI_API_KEY="your-key-here" ./prompt-enhancer-mcp
# Or with OpenAI
OPENAI_API_KEY="your-key-here" ./prompt-enhancer-mcp
# Custom port (default: 8090)
PORT=9000 GEMINI_API_KEY="your-key-here" ./prompt-enhancer-mcp如果未设置API键,则服务器仍在运行,但返回到基于静态模板的增强(无LLM调用)。
验证它是否有效
# Health check
curl http://localhost:8090/health
# Test enhancement
curl -X POST http://localhost:8090/api/enhance-prompt \
-H "Content-Type: application/json" \
-d '{
"user_prompt": "greet the caller and collect their business name",
"tool_names": ["WebSearch_SearchService_Search"],
"capability_name": "Business Lookup",
"capability_description": "Looks up business info"
}'环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
GEMINI_API_KEY | 否\* | Google Gemini API密钥(先尝试) |
OPENAI_API_KEY | 否\* | OpenAI API密钥(如果没有Gemini密钥,则尝试) |
PORT | 无 | 服务器端口(默认值: 8090) |
LLM_MODEL | 否 | OpenAI模型覆盖(默认: gpt-4o) |
\*建议至少使用一个API密钥。如果两者都没有,服务器将使用基于模板的回退。
请求/响应详细信息
REST端点: POST /api/enhance-prompt
输入(请求正文):
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
user_prompt | string | 是 | 业务负责人在UI中键入的粗略/草稿提示 |
tool_names | string[] | 是 | 为功能选择的工具ID列表(例如。 ["WebSearch_SearchService_Search", "CRMCompanies_CRMCompanyService_CreateCompany"]) |
tool_schemas | string | 否 | 工具参数模式的JSON字符串--帮助LLM生成正确的字段映射 |
capability_name | string | 否 | 能力名称(例如“潜在客户摄入量”)-用于身份和目标部分 |
capability_description | string | 否 | 描述该功能的作用——为LLM提供更多上下文 |
输出(响应体):
| 字段 | 类型 | 描述 |
|---|---|---|
enhanced_prompt | string | 包含所有5个部分(身份、流程、验证、工具映射、关闭)的精美提示 |
MCP工具: EnhanceCapabilityPrompt
与上述输入相同,通过 MCP协议 在 /mcp 适用于AI原生客户端(Cursor、Claude Desktop)。定义于 main.go.
提示是如何生成的
将粗略提示转换为抛光提示的管道:
User's rough prompt + tool names + schemas
│
▼
┌─ resolveFieldCatalog() ─┐ (field_catalog.go)
│ Checks if tool names │
│ contain "Company" or │
│ "Contact" and returns │
│ matching CRM field IDs │
└────────────┬────────────┘
▼
┌─ buildMetaPrompt() ─────┐ (meta_prompt.go)
│ Fills a Go template │
│ with: │
│ - User's rough prompt │
│ - Tool names & schemas │
│ - CRM field catalog │
│ - Capability name/desc │
│ - Strict rules for │
│ structure & tone │
└────────────┬────────────┘
▼
┌─ callLLM() ────────────┐ (handler.go)
│ Sends the meta-prompt │
│ to Gemini → OpenAI → │
│ or template fallback │
└────────────┬────────────┘
▼
Enhanced prompt returned
to the frontend管道中的关键文件:
| 文件 | 它的作用 | 关键功能 |
|---|---|---|
handler.go | 接收REST/MCP请求,编排管道,调用LLM | handleEnhancePromptREST(), callLLM(), callGemini(), callOpenAI(), buildTemplateFallback() |
meta_prompt.go | 去吧 text/template 它组装发送到LLM的完整指令集,包括示例、结构规则、音调规则、工具调用执行规则和字段映射规则 | buildMetaPrompt(), metaPromptTemplate |
field_catalog.go | CRM字段ID的静态目录(standard__company_name, standard__first_name等)——仅在选择相关工具时才包括在内 | resolveFieldCatalog(), companyFields, contactFields |
main.go | 将所有内容连接在一起——注册MCP工具,设置HTTP路由,启动服务器 | main() |
项目结构
├── main.go # Server setup, MCP tool registration, HTTP routing
├── handler.go # REST handler, LLM calls (Gemini/OpenAI), template fallback
├── meta_prompt.go # Meta-prompt template that instructs the LLM how to rewrite prompts
├── field_catalog.go # CRM field definitions (Company + Contact) for tool mapping
├── go.mod / go.sum # Dependencies
└── .gitignore关键设计决策
双接口(MCP+REST): MCP非常适合AI原生工具,但对于前端HTTP调用来说过于夸张。从同一个二进制文件中公开两者意味着一个服务器、一个部署、两种集成模式。
LLM回退链: 双子座→ OpenAI→ 静态模板。服务器总是返回 *某物* 有用,即使所有API键都丢失。
工具调用执行规则: meta-prompt显式地告诉LLM永远不要生成“请稍候”模式。人工智能助手为每个用户发送一条响应消息——如果助手在工具调用前说“等等”,用户就永远看不到结果,对话就会陷入僵局。
CRM字段目录: 仅当工具名称包含“公司”或“联系人”时才包括在内。非CRM工具(如WebSearch)得到一个干净的提示,没有不相关的字段映射。
