├── bin
└── mcp-prompt-server
├── prompts
├── test_prompt.yaml
├── more
│ ├── code_review.yaml
│ ├── code_refactoring.yaml
│ ├── test_case_generator.yaml
│ ├── api_documentation.yaml
│ ├── project_architecture.yaml
│ ├── prompt_template_generator.yaml
│ ├── build_mcp_server.yaml
│ ├── writing_assistant.yaml
│ ├── gen_mimeng_headline_title.yaml
│ ├── gen_3d_webpage_html.yaml
│ ├── gen_knowledge_card_html.yaml
│ ├── gen_html_web_page.yaml
│ ├── gen_magazine_card_html.yaml
│ ├── gen_3d_edu_webpage_html.yaml
│ ├── gen_bento_grid_html.yaml
│ └── gen_prd_prototype_html.yaml
├── gen_podcast_script.yaml
├── gen_mimeng_headline_title.yaml
├── gen_3d_webpage_html.yaml
├── gen_knowledge_card_html.yaml
├── gen_html_web_page.yaml
├── gen_magazine_card_html.yaml
├── gen_title.yaml
├── gen_summarize.yaml
├── gen_3d_edu_webpage_html.yaml
├── gen_bento_grid_html.yaml
└── gen_prd_prototype_html.yaml
├── copy_prompts.sh
├── go.mod
├── .gitignore
├── internal
├── util
│ └── files.go
├── prompt
│ ├── model.go
│ └── loader.go
└── server
│ └── server.go
├── cmd
└── main.go
├── LICENSE
├── go.sum
└── README.md
/bin/mcp-prompt-server:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smallnest/mcp-prompt-server-go/HEAD/bin/mcp-prompt-server
--------------------------------------------------------------------------------
/prompts/test_prompt.yaml:
--------------------------------------------------------------------------------
1 | name: test_prompt
2 | description: A simple test prompt to verify the system works
3 | arguments: []
4 | messages:
5 | - role: user
6 | content:
7 | type: text
8 | text: |
9 | This is a test prompt from the Go implementation of MCP Prompt Server.
10 | If you can see this message, it means the system is working correctly!
11 |
--------------------------------------------------------------------------------
/copy_prompts.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # 源目录
4 | SRC_DIR="/Users/chaoyuepan/mcp-prompt-server/src/prompts"
5 | # 目标目录
6 | DEST_DIR="/Users/chaoyuepan/mcp-prompt-server-go/prompts"
7 |
8 | # 确保目标目录存在
9 | mkdir -p "$DEST_DIR"
10 |
11 | # 复制所有yaml和json文件
12 | echo "Copying prompt files..."
13 | cp "$SRC_DIR"/*.yaml "$DEST_DIR"/ 2>/dev/null
14 | cp "$SRC_DIR"/*.json "$DEST_DIR"/ 2>/dev/null
15 |
16 | echo "Done! Copied prompt files to $DEST_DIR"
17 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/chaoyuepan/mcp-prompt-server-go
2 |
3 | go 1.24.0
4 |
5 | require (
6 | github.com/mark3labs/mcp-go v0.29.0
7 | gopkg.in/yaml.v3 v3.0.1
8 | )
9 |
10 | require (
11 | github.com/google/uuid v1.6.0 // indirect
12 | github.com/kataras/golog v0.1.13 // indirect
13 | github.com/kataras/pio v0.0.14 // indirect
14 | github.com/spf13/cast v1.7.1 // indirect
15 | github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
16 | golang.org/x/sys v0.31.0 // indirect
17 | )
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # If you prefer the allow list template instead of the deny list, see community template:
2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
3 | #
4 | # Binaries for programs and plugins
5 | *.exe
6 | *.exe~
7 | *.dll
8 | *.so
9 | *.dylib
10 |
11 | # Test binary, built with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Dependency directories (remove the comment below to include it)
18 | # vendor/
19 |
20 | # Go workspace file
21 | go.work
22 | go.work.sum
23 |
24 | # env file
25 | .env
26 |
--------------------------------------------------------------------------------
/prompts/more/code_review.yaml:
--------------------------------------------------------------------------------
1 | name: code_review
2 | description: 当用户想要审查代码时,可以使用这个提示词,来帮助用户对代码进行全面审查,提供改进建议
3 | arguments:
4 | - name: language
5 | description: 编程语言
6 | required: true
7 | - name: code
8 | description: 要审查的代码
9 | required: true
10 | messages:
11 | - role: user
12 | content:
13 | type: text
14 | text: |
15 | 请对以下{{language}}代码进行全面审查,包括但不限于:
16 | 1. 代码质量和可读性
17 | 2. 潜在的bug和错误
18 | 3. 性能优化机会
19 | 4. 安全隐患
20 | 5. 最佳实践建议
21 | 6. 代码结构和组织
22 |
23 | 代码:
24 | ```{{language}}
25 | {{code}}
26 | ```
27 |
28 | 请提供详细的分析和具体的改进建议。
29 |
--------------------------------------------------------------------------------
/prompts/more/code_refactoring.yaml:
--------------------------------------------------------------------------------
1 | name: code_refactoring
2 | description: 当用户想要重构代码时,可以使用这个提示词,来帮助用户提高代码质量和可维护性
3 | arguments:
4 | - name: language
5 | description: 编程语言
6 | required: true
7 | - name: code
8 | description: 要重构的代码
9 | required: true
10 | - name: focus_areas
11 | description: 重点关注的重构领域(如性能、可读性、模块化等)
12 | required: false
13 | messages:
14 | - role: user
15 | content:
16 | type: text
17 | text: |
18 | 请对以下{{language}}代码进行重构,以提高其质量和可维护性:
19 |
20 | ```{{language}}
21 | {{code}}
22 | ```
23 |
24 | {{#focus_areas}}
25 | 重点关注以下方面:{{focus_areas}}
26 | {{/focus_areas}}
27 |
28 | 请提供:
29 | 1. 重构后的完整代码
30 | 2. 详细说明您所做的每项更改及其理由
31 | 3. 重构如何改进了代码的质量和可维护性
32 |
--------------------------------------------------------------------------------
/prompts/more/test_case_generator.yaml:
--------------------------------------------------------------------------------
1 | name: test_case_generator
2 | description: 当用户想要为给定代码生成全面的测试用例时,可以使用这个提示词,来帮助用户生成测试用例
3 | arguments:
4 | - name: language
5 | description: 编程语言
6 | required: true
7 | - name: code
8 | description: 要测试的代码
9 | required: true
10 | - name: test_framework
11 | description: 测试框架(如Jest, Pytest, JUnit等)
12 | required: true
13 | messages:
14 | - role: user
15 | content:
16 | type: text
17 | text: |
18 | 请为以下{{language}}代码生成全面的测试用例,使用{{test_framework}}测试框架:
19 |
20 | ```{{language}}
21 | {{code}}
22 | ```
23 |
24 | 测试用例应包括:
25 | 1. 正常功能测试
26 | 2. 边界条件测试
27 | 3. 错误处理测试
28 | 4. 性能测试(如适用)
29 |
30 | 请确保测试覆盖所有主要功能和边缘情况,并提供每个测试的详细说明。
31 |
--------------------------------------------------------------------------------
/internal/util/files.go:
--------------------------------------------------------------------------------
1 | package util
2 |
3 | import (
4 | "os"
5 | )
6 |
7 | // EnsureDirectory 确保目录存在
8 | func EnsureDirectory(dir string) error {
9 | return os.MkdirAll(dir, 0755)
10 | }
11 |
12 | // FileExists 检查文件是否存在
13 | func FileExists(path string) bool {
14 | info, err := os.Stat(path)
15 | if os.IsNotExist(err) {
16 | return false
17 | }
18 | return !info.IsDir()
19 | }
20 |
21 | // DirectoryExists 检查目录是否存在
22 | func DirectoryExists(path string) bool {
23 | info, err := os.Stat(path)
24 | if os.IsNotExist(err) {
25 | return false
26 | }
27 | return info.IsDir()
28 | }
29 |
30 | // CopyFile 复制文件
31 | func CopyFile(src, dst string) error {
32 | input, err := os.ReadFile(src)
33 | if err != nil {
34 | return err
35 | }
36 |
37 | return os.WriteFile(dst, input, 0644)
38 | }
39 |
--------------------------------------------------------------------------------
/prompts/more/api_documentation.yaml:
--------------------------------------------------------------------------------
1 | name: api_documentation
2 | description: 当用户想要生成API文档时,可以使用这个提示词,来帮助用户根据代码生成详细的API文档
3 | arguments:
4 | - name: language
5 | description: 编程语言
6 | required: true
7 | - name: code
8 | description: 要生成文档的API代码
9 | required: true
10 | - name: format
11 | description: 文档格式(markdown/html/jsdoc等)
12 | required: true
13 | messages:
14 | - role: user
15 | content:
16 | type: text
17 | text: |
18 | 请根据以下{{language}}代码生成详细的API文档,使用{{format}}格式:
19 |
20 | ```{{language}}
21 | {{code}}
22 | ```
23 |
24 | 文档应包括:
25 | 1. 函数/方法的用途和描述
26 | 2. 参数列表及其类型、默认值和说明
27 | 3. 返回值类型和说明
28 | 4. 可能抛出的异常
29 | 5. 使用示例
30 | 6. 注意事项或限制
31 |
32 | 请确保文档清晰、准确且易于理解。
33 |
--------------------------------------------------------------------------------
/prompts/more/project_architecture.yaml:
--------------------------------------------------------------------------------
1 | name: project_architecture
2 | description: 当用户想要设计项目架构和目录结构时,可以使用这个提示词,来帮助用户设计合理的项目架构和目录结构
3 | arguments:
4 | - name: project_type
5 | description: 项目类型(如Web应用、移动应用、API服务等)
6 | required: true
7 | - name: technologies
8 | description: 使用的技术栈(如React, Node.js, Python等)
9 | required: true
10 | - name: features
11 | description: 项目主要功能和特性
12 | required: true
13 | messages:
14 | - role: user
15 | content:
16 | type: text
17 | text: |
18 | 请为以下项目设计一个合理的架构和目录结构:
19 |
20 | 项目类型:{{project_type}}
21 | 技术栈:{{technologies}}
22 | 主要功能:{{features}}
23 |
24 | 请提供:
25 | 1. 完整的目录结构
26 | 2. 主要组件/模块的划分
27 | 3. 数据流设计
28 | 4. 各组件之间的交互方式
29 | 5. 开发和部署建议
30 |
31 | 请确保架构设计遵循最佳实践,具有良好的可扩展性、可维护性和性能。
32 |
--------------------------------------------------------------------------------
/prompts/more/prompt_template_generator.yaml:
--------------------------------------------------------------------------------
1 | name: prompt_template_generator
2 | description: 当用户想要生成新的prompt模板时,可以使用这个提示词,来帮助用户生成新的prompt模板文件
3 | arguments:
4 | - name: prompt_name
5 | description: 新prompt的名称(唯一标识符)
6 | required: true
7 | - name: prompt_description
8 | description: 对prompt功能的描述
9 | required: true
10 | - name: task_type
11 | description: 任务类型(如代码生成、文档编写、数据分析等)
12 | required: true
13 | messages:
14 | - role: user
15 | content:
16 | type: text
17 | text: |
18 | 请为我生成一个名为"{{prompt_name}}"的新prompt模板,用于{{task_type}}任务。
19 |
20 | 该prompt的描述为:{{prompt_description}}
21 |
22 | 请提供:
23 | 1. 完整的YAML格式模板文件内容
24 | 2. 该模板需要的参数列表及其说明
25 | 3. 模板消息内容,确保包含适当的参数占位符
26 | 4. 使用该模板的示例
27 |
28 | 请确保模板设计符合最佳实践,能够有效引导Claude完成指定任务。
29 |
--------------------------------------------------------------------------------
/cmd/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "flag"
5 | "os"
6 | "os/signal"
7 | "syscall"
8 |
9 | "github.com/chaoyuepan/mcp-prompt-server-go/internal/server"
10 | "github.com/kataras/golog"
11 | )
12 |
13 | var (
14 | addr = flag.String("addr", ":8888", "server address, use stdio transport if not set")
15 | )
16 |
17 | func main() {
18 | flag.Parse()
19 |
20 | golog.Println("Starting MCP Prompt Server...")
21 |
22 | // 创建并启动服务器
23 | srv, err := server.NewServer("../prompts")
24 | if err != nil {
25 | golog.Fatalf("Failed to create server: %v", err)
26 | }
27 |
28 | // 在后台运行服务器
29 | go func() {
30 | if err := srv.Start(*addr); err != nil {
31 | golog.Fatalf("server error: %v", err)
32 | }
33 |
34 | golog.Infof("server started on %s", *addr)
35 | }()
36 |
37 | golog.Println("MCP Prompt Server is running...")
38 |
39 | // 优雅关闭
40 | c := make(chan os.Signal, 1)
41 | signal.Notify(c, os.Interrupt, syscall.SIGTERM)
42 | <-c
43 |
44 | golog.Infof("shutting down...")
45 | srv.Stop()
46 | golog.Infof("server stopped")
47 | }
48 |
--------------------------------------------------------------------------------
/prompts/more/build_mcp_server.yaml:
--------------------------------------------------------------------------------
1 | name: build_mcp_server
2 | description: 当用户想要创建一个MCP Server或MCP tool时,可以使用这个提示词,来帮助用户创建和配置MCP服务器,包括理解MCP文档、设计服务器资源和功能
3 | arguments: []
4 | messages:
5 | - role: user
6 | content:
7 | type: text
8 | text: |
9 | # 创建MCP server
10 |
11 | Preparing the documentation
12 | Before starting, gather the necessary documentation to help us to understand MCP:
13 |
14 | 1. Visit https://modelcontextprotocol.io/llms-full.txt and read the full documentation text
15 | 2. Navigate to the MCP TypeScript SDK (https://github.com/modelcontextprotocol/typescript-sdk)
16 | 3. read the README files and other relevant documentation
17 |
18 | Describing your server
19 | Once you've provided the documentation, clearly describe what kind of server you want to build. Be specific about:
20 |
21 | - What resources your server will expose
22 | - What tools it will provide
23 | - Any prompts it should offer
24 | - What external systems it needs to interact with
25 |
26 | Then start building the MCP server
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 smallnest
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/prompts/more/writing_assistant.yaml:
--------------------------------------------------------------------------------
1 | name: writing_assistant
2 | description: 当用户想要编辑文章时,可以使用这个提示词,来帮助用户将草稿内容编辑成符合目标平台要求的成熟文章,包括公众号、小红书、推特等平台
3 | arguments:
4 | - name: draft
5 | description: 用户提供的草稿内容
6 | required: true
7 | - name: platform
8 | description: 目标平台(如公众号、小红书、推特等)
9 | required: false
10 | messages:
11 | - role: user
12 | content:
13 | type: text
14 | text: |
15 | # 写作编辑助手
16 |
17 | 你是一位专业的写作编辑助手,擅长将草稿内容编辑成高质量的成熟文章。你的主要职责是帮助用户将初稿转化为适合不同平台发布的精美文章。
18 |
19 | ## 你的能力
20 |
21 | 1. **多平台内容适配**:能够根据用户需求,将内容编辑成适合公众号、小红书、推特等不同平台的文章格式
22 | 2. **文章结构优化**:重组段落,优化标题和小标题,使文章结构更加清晰
23 | 3. **语言表达提升**:改进用词和句式,使文章更加流畅自然
24 | 4. **风格调整**:根据目标平台特点调整文章风格和语调
25 | 5. **排版美化**:提供适合各平台的排版建议,包括段落分布、emoji使用等
26 | 6. **标题优化**:提供吸引人的标题和副标题建议
27 |
28 | ## 工作流程
29 |
30 | 1. 当用户提供草稿时,首先询问用户希望将文章编辑成哪种平台的内容(如果用户未指定)
31 | 2. 分析草稿内容,理解核心主题和关键信息
32 | 3. 根据目标平台特点,重新编辑内容
33 | 4. 提供编辑后的完整文章,并说明主要修改点
34 | 5. 根据用户反馈进行进一步调整
35 |
36 | ## 平台特点指南
37 |
38 | ### 公众号文章
39 | - 标题:吸引人且有深度,通常20字以内
40 | - 结构:清晰的引言、正文(2-4个小标题)、结语
41 | - 排版:正文段落间留白,重点内容可加粗,适当使用引用格式
42 | - 风格:专业、有深度,但不失亲和力
43 | - 长度:通常1500-3000字
44 |
45 | ### 小红书
46 | - 标题:直接、吸引人,通常带emoji,15字以内
47 | - 结构:开门见山,重点先行,分点罗列
48 | - 排版:大量使用emoji,段落短小,善用分隔符和换行
49 | - 风格:轻松、口语化、亲切,像朋友间对话
50 | - 长度:通常500-1200字
51 |
52 | ### 推特
53 | - 标题/开头:直接切入主题,吸引注意
54 | - 结构:简洁明了,一个核心观点
55 | - 排版:考虑字数限制,精简表达
56 | - 风格:简短有力,可以略带个性
57 | - 长度:280字以内
58 |
59 | ## 用户草稿
60 |
61 | ```
62 | {{draft}}
63 | ```
64 |
65 | ## 目标平台
66 | {{#if platform}}
67 | {{platform}}
68 | {{else}}
69 | 请先告诉我你希望将文章编辑成哪种平台的内容(公众号、小红书、推特等)
70 | {{/if}}
71 |
72 | 请根据以上信息,帮我将草稿编辑成适合目标平台的高质量文章,并说明主要修改点。
73 |
--------------------------------------------------------------------------------
/prompts/gen_podcast_script.yaml:
--------------------------------------------------------------------------------
1 | name: gen_podcast_script
2 |
3 | description: 将任意主题或内容转化为一段高质量的中文播客对话脚本,风格深度、真诚、全球视野与中国洞察兼具,完全模拟Lex Fridman播客的主持风格。
4 |
5 | arguments: []
6 |
7 | messages:
8 | - role: user
9 | content:
10 | type: text
11 | text: |
12 | # Lex Fridman播客风格脚本生成提示词
13 |
14 | ## 角色设定
15 | 你将扮演一位受Lex Fridman启发的中文播客主持人,保留其深度思考和提问特点,同时兼具全球视野和中国洞察。你需要将用户提供的任何主题或内容转化为一段高质量的纯文本中文播客对话脚本。
16 |
17 | ## 对话风格要素
18 | 请在对话中体现以下特点:
19 | 1. 深度洞察:提出切中要害的问题,引导嘉宾探索主题的核心本质
20 | 2. 真诚好奇:展现出对知识的渴望和对嘉宾观点的真实兴趣
21 | 3. 思辨深度:将讨论引向更深层次的思考,融合东西方多元哲学视角
22 | 4. 平等交流:使用平等、友好的语气,保持专业而亲切的对话氛围
23 | 5. 全球本土化视角:将话题同时放在全球大背景和中国具体语境中思考
24 | 6. 故事引导:鼓励嘉宾分享个人经历和实践体会,尤其是跨文化经验
25 | 7. 简洁有力:问题简短清晰,但富有深度和启发性
26 |
27 | ## 对话结构
28 | 1. 开场白:简短介绍嘉宾和主题,使用自然的中文表达
29 | 2. 热身问题:从嘉宾背景或基础概念开始,建立轻松的交流氛围
30 | 3. 全球视角:探讨主题在国际背景下的发展和意义
31 | 4. 中国洞察:聚焦主题在中国的独特表现和意义
32 | 5. 关键问题:提出1-2个核心问题,这些问题应该能引发深度思考
33 | 6. 跨文化比较:引导嘉宾比较不同文化背景下对主题的理解差异
34 | 7. 未来展望:讨论相关领域的全球趋势和中国机遇
35 |
36 | ## 语言特点
37 | - 使用"你认为..."、"你如何看待..."等平等友好的开放式提问
38 | - 用更自然的中文表达方式表达赞同和兴趣,如:
39 | * "这点很让人印象深刻"
40 | * "确实,这个角度我之前没想到"
41 | * "听你这么说,我突然想到..."
42 | * "这个例子特别能说明问题"
43 | * "刚才你提到的那点特别吸引我"
44 | - 融入国际视野和中国视角的平衡表达
45 | - 保持谦逊好奇,但避免过度自谦
46 | - 语言流畅自然,既不过于学术化,也不过于口语化
47 |
48 | ## 嘉宾称呼
49 | - 初次称呼可使用姓名+头衔,如"张三博士"、"李四教授"
50 | - 对话深入后转为直呼姓名,体现平等交流氛围
51 | - 避免使用过于正式的敬语,保持亲切但专业的语气
52 |
53 | ## 互动技巧
54 | - 适当使用"打断提问"技巧,展现思考的即时性
55 | - 通过复述嘉宾观点并延伸提问,展示积极倾听
56 | - 偶尔分享简短的个人观察或经历,但迅速将焦点拉回嘉宾
57 | - 在嘉宾表达复杂观点后,适当总结并确认理解无误
58 |
59 | ## 输出格式
60 | - 纯文本对话脚本,仅包含对话内容
61 | - 清晰标注"主持人:"和"嘉宾:"角色
62 | - 不包含任何非语言反应描述、舞台指示或情绪提示
63 | - 对话应当自然流畅,展现出真实对话的节奏和深度
64 |
65 | ---
66 | 请基于以上指南,将我提供的内容转化为纯文本中文播客对话脚本:
67 | 主持人:乔木
68 | 嘉宾名:橘子老师
69 | [用户输入的主题或内容]
--------------------------------------------------------------------------------
/prompts/gen_mimeng_headline_title.yaml:
--------------------------------------------------------------------------------
1 | name: mimeng_headline_master
2 | # 咪蒙标题生成大师
3 |
4 | description: 基于咪蒙五大标题法则和详细子策略,为任意内容生成10个极具吸引力、能引爆阅读量的标题,并给出每个标题的法则、策略和心理分析。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色: 标题生成大师
12 |
13 | 你是一位精通咪蒙标题方法论的标题策划专家,擅长为各类内容创作引人注目、能引爆阅读量的标题。你深谙人类心理弱点,知道如何用文字触发读者的好奇心和点击欲望,同时保持标题与内容的相关性。
14 |
15 | # 任务: 生成10个极具吸引力的标题选项
16 |
17 | 基于咪蒙的五大核心法则和详细子策略,为提供的内容生成10个能够引爆阅读量的标题选项。每个标题应当做到"意料之外,情理之中",让读者无法忽视。
18 |
19 | ## 咪蒙标题方法论:
20 |
21 | ### 1. 危险法则 (DANGEROUS)
22 | - **威胁法则**:使用恐吓性词汇制造危机感
23 | - **死亡暗示**:巧妙运用"死"、"谋杀"等高风险词汇
24 |
25 | ### 2. 意外法则 (UNEXPECTED)
26 | - **数字法则**:使用具体、异常或精确的数字
27 | - **符号法则**:运用问号、叹号或非常规符号引起注意
28 | - **超长/超短法则**:极端长度的标题或极简标题
29 | - **异常句式法则**:重复、递进或不寻常的句式结构
30 | - **反常识法则**:挑战常识或价值观,解构固定搭配
31 |
32 | ### 3. 矛盾法则 (CONTRADICTION)
33 | - **选择矛盾**:设置两难选择
34 | - **物理矛盾**:将对立的物理概念并置
35 | - **心理矛盾**:描述违反常规心理反应的情况
36 | - **环境人物矛盾**:将不协调的人物与环境组合
37 |
38 | ### 4. 痛点法则 (SORE POINT)
39 | - **虚荣痛点**:针对社会认可和地位的渴望
40 | - **欲望痛点**:巧妙暗示性或情感需求
41 | - **贪婪痛点**:关于金钱、成功的快速获取
42 | - **懒惰痛点**:承诺以最小努力获得最大回报
43 |
44 | ### 5. 感同身受法则 (SYMPATHIZE)
45 | - **对号入座法则**:直接与读者建立关系,使用"你"
46 | - **细节法则**:使用具体细节创造画面感,便于代入
47 | - **接地气法则**:使用通俗易懂的语言,避免专业术语
48 |
49 | # 输出格式:
50 | 1. 生成10个标题,按吸引力和点击率潜力从高到低排序
51 | 2. 每个标题后标注使用的主要法则和子策略
52 | 3. 为每个标题提供简短说明,解释其吸引力来源和心理触发点
53 | 4. 最后提供一个简短总结,说明哪些类型的标题最适合这篇内容
54 |
55 | ## 输出示例:
56 |
57 | **标题1:《xxxx》**
58 | - **法则**:危险法则-威胁
59 | - **分析**:通过xxx激发读者的危机感,触发自我保护心理
60 |
61 | **标题2:《xxxx》**
62 | - **法则**:意外法则-数字+符号
63 | - **分析**:具体数字提供可信度,问号引发好奇心和不确定性
64 |
65 | [以此类推...]
66 |
67 | **总结**:基于内容特点,痛点法则和矛盾法则的标题最适合这篇文章,建议优先考虑前3个标题。
68 |
69 | ## 待生成标题的内容:
70 |
71 | {{content}}
--------------------------------------------------------------------------------
/prompts/more/gen_mimeng_headline_title.yaml:
--------------------------------------------------------------------------------
1 | name: mimeng_headline_master
2 | # 咪蒙标题生成大师
3 |
4 | description: 基于咪蒙五大标题法则和详细子策略,为任意内容生成10个极具吸引力、能引爆阅读量的标题,并给出每个标题的法则、策略和心理分析。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色: 标题生成大师
12 |
13 | 你是一位精通咪蒙标题方法论的标题策划专家,擅长为各类内容创作引人注目、能引爆阅读量的标题。你深谙人类心理弱点,知道如何用文字触发读者的好奇心和点击欲望,同时保持标题与内容的相关性。
14 |
15 | # 任务: 生成10个极具吸引力的标题选项
16 |
17 | 基于咪蒙的五大核心法则和详细子策略,为提供的内容生成10个能够引爆阅读量的标题选项。每个标题应当做到"意料之外,情理之中",让读者无法忽视。
18 |
19 | ## 咪蒙标题方法论:
20 |
21 | ### 1. 危险法则 (DANGEROUS)
22 | - **威胁法则**:使用恐吓性词汇制造危机感
23 | - **死亡暗示**:巧妙运用"死"、"谋杀"等高风险词汇
24 |
25 | ### 2. 意外法则 (UNEXPECTED)
26 | - **数字法则**:使用具体、异常或精确的数字
27 | - **符号法则**:运用问号、叹号或非常规符号引起注意
28 | - **超长/超短法则**:极端长度的标题或极简标题
29 | - **异常句式法则**:重复、递进或不寻常的句式结构
30 | - **反常识法则**:挑战常识或价值观,解构固定搭配
31 |
32 | ### 3. 矛盾法则 (CONTRADICTION)
33 | - **选择矛盾**:设置两难选择
34 | - **物理矛盾**:将对立的物理概念并置
35 | - **心理矛盾**:描述违反常规心理反应的情况
36 | - **环境人物矛盾**:将不协调的人物与环境组合
37 |
38 | ### 4. 痛点法则 (SORE POINT)
39 | - **虚荣痛点**:针对社会认可和地位的渴望
40 | - **欲望痛点**:巧妙暗示性或情感需求
41 | - **贪婪痛点**:关于金钱、成功的快速获取
42 | - **懒惰痛点**:承诺以最小努力获得最大回报
43 |
44 | ### 5. 感同身受法则 (SYMPATHIZE)
45 | - **对号入座法则**:直接与读者建立关系,使用"你"
46 | - **细节法则**:使用具体细节创造画面感,便于代入
47 | - **接地气法则**:使用通俗易懂的语言,避免专业术语
48 |
49 | # 输出格式:
50 | 1. 生成10个标题,按吸引力和点击率潜力从高到低排序
51 | 2. 每个标题后标注使用的主要法则和子策略
52 | 3. 为每个标题提供简短说明,解释其吸引力来源和心理触发点
53 | 4. 最后提供一个简短总结,说明哪些类型的标题最适合这篇内容
54 |
55 | ## 输出示例:
56 |
57 | **标题1:《xxxx》**
58 | - **法则**:危险法则-威胁
59 | - **分析**:通过xxx激发读者的危机感,触发自我保护心理
60 |
61 | **标题2:《xxxx》**
62 | - **法则**:意外法则-数字+符号
63 | - **分析**:具体数字提供可信度,问号引发好奇心和不确定性
64 |
65 | [以此类推...]
66 |
67 | **总结**:基于内容特点,痛点法则和矛盾法则的标题最适合这篇文章,建议优先考虑前3个标题。
68 |
69 | ## 待生成标题的内容:
70 |
71 | {{content}}
--------------------------------------------------------------------------------
/prompts/gen_3d_webpage_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_3d_webpage_html
2 | # 3D网页展示生成器
3 |
4 | description: 基于Three.js、GSAP等技术,为任意主题生成沉浸式3D网页单页,融合高级视觉设计、交互动画和最佳UI实践,适合内容展示、可视化和创意体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:3D网页创意技术总监
12 |
13 | 你是一名专精于Three.js的创意技术总监和可视化专家,擅长将复杂信息转化为引人入胜的交互式3D体验。请为我提供的任何主题或内容创建一个令人惊艳的单页面HTML展示,融合高级视觉设计和沉浸式3D效果。
14 |
15 | ## 关键技术要素
16 |
17 | 使用以下技术栈构建沉浸式体验:
18 | - Three.js (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/three.js/110/three.min.js)
19 | - 内嵌自定义控件代码,避免外部依赖问题
20 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
21 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
22 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
23 | - GSAP动画库 (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js)
24 |
25 | ## 3D场景设计
26 |
27 | 根据内容主题,设计一个完整的Three.js场景,可能包括:
28 | - 适合主题的3D几何体、模型或粒子系统
29 | - 动态相机和光照设置
30 | - 基于滚动或用户交互的动画效果
31 | - 在3D环境与2D内容之间建立有意义的联系
32 | - 环境氛围(雾效、阴影、反射等)增强视觉深度
33 |
34 | ## UI与内容布局最佳实践
35 |
36 | 遵循以下布局原则,确保3D内容成为焦点:
37 | - 3D场景应占据主要视觉空间,内容不应遮挡3D体验
38 | - 使用可折叠侧边栏或模态框展示详细文字内容
39 | - 鼠标放到侧边栏,自动展开,移开后缩回去。
40 | - 为3D元素添加标签系统,允许用户了解各部分功能和意义
41 | - 使用半透明UI元素,在提供信息的同时不阻断3D场景的可见性
42 |
43 | ## 交互提示系统
44 |
45 | 设计直观的交互引导体验:
46 | - 添加简洁的初始操作提示,几秒后自动降低透明度
47 | - 在用户执行操作时提供即时反馈,更新提示内容
48 | - 为关键3D元素添加标签或高亮效果,帮助用户理解场景
49 | - 设计清晰的控制按钮,具有明确的视觉状态变化
50 | - 在复杂操作前提供简短教程或演示
51 | - 3D模型自动循环,但速度要慢。
52 |
53 | ## 设计原则
54 |
55 | 遵循以下设计原则创建引人入胜的体验:
56 | - 整合而非装饰:3D元素应直接服务于内容表达,而非仅作装饰
57 | - 性能优先:确保复杂视觉效果不影响页面加载和运行速度
58 | - 沉浸式叙事:利用3D效果构建内容的视觉叙事层次
59 | - 交互深度:添加多层次交互,让用户通过探索发现内容
60 | - 响应式适配:确保在所有设备上提供最佳体验,智能降级复杂效果
61 |
62 | ## 额外加分
63 |
64 | 可选择以下一种或多种创意方向拓展体验:
65 | - 物理引擎模拟:使用cannon.js等物理引擎创建具有真实感的交互
66 |
67 | ## 输出成果
68 |
69 | 提供包含以下内容的完整解决方案:
70 | 1. 单一HTML文件,包含所有必要CSS和JavaScript(避免外部依赖)
71 | 2. 只输出HTML,不要其他任何引导语和介绍。
72 |
73 | 无论我提供什么主题,都请发挥你的创意想象力和技术专长,创造一个超越传统网页的沉浸式体验,确保3D内容成为核心焦点,而辅助信息以不干扰的方式呈现。
74 |
75 | 待处理主题:
--------------------------------------------------------------------------------
/prompts/more/gen_3d_webpage_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_3d_webpage_html
2 | # 3D网页展示生成器
3 |
4 | description: 基于Three.js、GSAP等技术,为任意主题生成沉浸式3D网页单页,融合高级视觉设计、交互动画和最佳UI实践,适合内容展示、可视化和创意体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:3D网页创意技术总监
12 |
13 | 你是一名专精于Three.js的创意技术总监和可视化专家,擅长将复杂信息转化为引人入胜的交互式3D体验。请为我提供的任何主题或内容创建一个令人惊艳的单页面HTML展示,融合高级视觉设计和沉浸式3D效果。
14 |
15 | ## 关键技术要素
16 |
17 | 使用以下技术栈构建沉浸式体验:
18 | - Three.js (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/three.js/110/three.min.js)
19 | - 内嵌自定义控件代码,避免外部依赖问题
20 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
21 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
22 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
23 | - GSAP动画库 (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js)
24 |
25 | ## 3D场景设计
26 |
27 | 根据内容主题,设计一个完整的Three.js场景,可能包括:
28 | - 适合主题的3D几何体、模型或粒子系统
29 | - 动态相机和光照设置
30 | - 基于滚动或用户交互的动画效果
31 | - 在3D环境与2D内容之间建立有意义的联系
32 | - 环境氛围(雾效、阴影、反射等)增强视觉深度
33 |
34 | ## UI与内容布局最佳实践
35 |
36 | 遵循以下布局原则,确保3D内容成为焦点:
37 | - 3D场景应占据主要视觉空间,内容不应遮挡3D体验
38 | - 使用可折叠侧边栏或模态框展示详细文字内容
39 | - 鼠标放到侧边栏,自动展开,移开后缩回去。
40 | - 为3D元素添加标签系统,允许用户了解各部分功能和意义
41 | - 使用半透明UI元素,在提供信息的同时不阻断3D场景的可见性
42 |
43 | ## 交互提示系统
44 |
45 | 设计直观的交互引导体验:
46 | - 添加简洁的初始操作提示,几秒后自动降低透明度
47 | - 在用户执行操作时提供即时反馈,更新提示内容
48 | - 为关键3D元素添加标签或高亮效果,帮助用户理解场景
49 | - 设计清晰的控制按钮,具有明确的视觉状态变化
50 | - 在复杂操作前提供简短教程或演示
51 | - 3D模型自动循环,但速度要慢。
52 |
53 | ## 设计原则
54 |
55 | 遵循以下设计原则创建引人入胜的体验:
56 | - 整合而非装饰:3D元素应直接服务于内容表达,而非仅作装饰
57 | - 性能优先:确保复杂视觉效果不影响页面加载和运行速度
58 | - 沉浸式叙事:利用3D效果构建内容的视觉叙事层次
59 | - 交互深度:添加多层次交互,让用户通过探索发现内容
60 | - 响应式适配:确保在所有设备上提供最佳体验,智能降级复杂效果
61 |
62 | ## 额外加分
63 |
64 | 可选择以下一种或多种创意方向拓展体验:
65 | - 物理引擎模拟:使用cannon.js等物理引擎创建具有真实感的交互
66 |
67 | ## 输出成果
68 |
69 | 提供包含以下内容的完整解决方案:
70 | 1. 单一HTML文件,包含所有必要CSS和JavaScript(避免外部依赖)
71 | 2. 只输出HTML,不要其他任何引导语和介绍。
72 |
73 | 无论我提供什么主题,都请发挥你的创意想象力和技术专长,创造一个超越传统网页的沉浸式体验,确保3D内容成为核心焦点,而辅助信息以不干扰的方式呈现。
74 |
75 | 待处理主题:
--------------------------------------------------------------------------------
/internal/prompt/model.go:
--------------------------------------------------------------------------------
1 | package prompt
2 |
3 | import (
4 | "fmt"
5 | "strings"
6 | )
7 |
8 | // Prompt 定义了一个提示词模板
9 | type Prompt struct {
10 | Name string `yaml:"name" json:"name"`
11 | Description string `yaml:"description" json:"description"`
12 | Arguments []Argument `yaml:"arguments" json:"arguments"`
13 | Messages []Message `yaml:"messages" json:"messages"`
14 | }
15 |
16 | // Argument 定义了提示词的参数
17 | type Argument struct {
18 | Name string `yaml:"name" json:"name"`
19 | Description string `yaml:"description" json:"description"`
20 | Type string `yaml:"type" json:"type"`
21 | Required bool `yaml:"required" json:"required"`
22 | }
23 |
24 | // Message 定义了提示词的消息
25 | type Message struct {
26 | Role string `yaml:"role" json:"role"`
27 | Content Content `yaml:"content" json:"content"`
28 | }
29 |
30 | // Content 定义了消息的内容
31 | type Content struct {
32 | Type string `yaml:"type" json:"type"`
33 | Text string `yaml:"text" json:"text"`
34 | }
35 |
36 | // RenderMessages 处理提示词模板并替换参数占位符
37 | func (p *Prompt) RenderMessages(args map[string]interface{}) []Message {
38 | // 创建副本以避免修改原始内容
39 | renderedMessages := make([]Message, len(p.Messages))
40 | for i, msg := range p.Messages {
41 | renderedContent := Content{
42 | Type: msg.Content.Type,
43 | Text: msg.Content.Text,
44 | }
45 |
46 | // 用参数值替换占位符
47 | for name, value := range args {
48 | placeholder := "{{" + name + "}}"
49 | renderedContent.Text = strings.ReplaceAll(renderedContent.Text, placeholder, fmt.Sprintf("%v", value))
50 | }
51 |
52 | renderedMessages[i] = Message{
53 | Role: msg.Role,
54 | Content: renderedContent,
55 | }
56 | }
57 |
58 | return renderedMessages
59 | }
60 |
61 | // RenderMessages 处理提示词模板并替换参数占位符
62 | func (p *Prompt) RenderPromptMessages(args map[string]string) []Message {
63 | // 创建副本以避免修改原始内容
64 | renderedMessages := make([]Message, len(p.Messages))
65 | for i, msg := range p.Messages {
66 | renderedContent := Content{
67 | Type: msg.Content.Type,
68 | Text: msg.Content.Text,
69 | }
70 |
71 | // 用参数值替换占位符
72 | for name, value := range args {
73 | placeholder := "{{" + name + "}}"
74 | renderedContent.Text = strings.ReplaceAll(renderedContent.Text, placeholder, fmt.Sprintf("%v", value))
75 | }
76 |
77 | renderedMessages[i] = Message{
78 | Role: msg.Role,
79 | Content: renderedContent,
80 | }
81 | }
82 |
83 | return renderedMessages
84 | }
85 |
--------------------------------------------------------------------------------
/prompts/gen_knowledge_card_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_knowledge_card_html
2 | # 知识卡片生成器
3 |
4 | description: 从复杂文本中提炼20个金句,并为每个金句生成2种不同风格的知识卡片HTML,适合社交媒体、自媒体和在线学习内容,风格多元、视觉冲击力强。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:内容策展人&视觉设计师
12 |
13 | 你是一名专业的内容策展人和视觉设计师,擅长从复杂文本中提炼精华并创建视觉冲击力强的知识卡片。
14 |
15 | ## 任务
16 | 从我提供的内容中,提取20个金句,并为每个金句设计2种不同风格的知识卡片,适合社交媒体、自媒体平台和在线学习内容。
17 |
18 | ### 第一步:内容分析与提炼
19 | - 识别最有价值、最具洞见的20个金句
20 | - 每个金句应代表核心思想,表达简练有力,具有启发性
21 | - 优先选择那些能引发思考、有深度、有独特视角的句子
22 |
23 | ### 第二步:知识卡片设计
24 | - 为每个金句创建2个不同风格的设计版本:
25 | * 两个宽屏版本(比例2.35:1),应并排放置
26 | - 每个卡片最大高度为383px
27 | - 确保每个金句的设计版本使用完全不同的设计风格,包括:
28 | * 不同的色彩方案与背景处理
29 | * 不同的字体选择与排版方式
30 | * 不同的装饰元素与视觉强调手法
31 | * 不同的整体设计风格
32 |
33 | ### 色彩与背景要求
34 | - 使用广泛的色彩范围:从明亮活泼的蓝色、黄色、薄荷绿到柔和的米色、灰色
35 | - 多样化背景处理:纯色背景、渐变效果、纸张质感、网格纹理、水彩效果
36 | - 灵活的对比度策略:高对比度设计(蓝底黄字、红字白底)和柔和低对比设计
37 | - 添加质感元素:水彩、纸张褶皱、噪点、纹理等增强视觉层次
38 | - 确保文字与背景有足够对比度,避免白底白字等可读性问题
39 |
40 | ### 字体与排版要求
41 | - 字体多样性:黑体为主,辅以手写风格、描边效果和变形字体
42 | - 合理的字体大小占比:标题文字通常占据画面40-80%的空间
43 | - 灵活的排版方式:居中、左对齐、自由布局、不规则排列
44 | - 多样的强调手法:使用描边、高亮、圆圈标记、下划线等方式强调关键词
45 | - 丰富的色彩运用:黑色主导,但也使用红色、黄色等鲜艳彩色文字设计
46 |
47 | ### 装饰与互动元素要求
48 | - 丰富的图标与表情:卡通表情、简笔画、主题相关图标等
49 | - 多样的手绘元素:箭头、圆圈、不规则线条、涂鸦风格边框
50 | - 创意的标签与徽章:类似"核心观点"等小标签增添层次
51 | - 模拟的互动提示:编辑、下载按钮等元素,增强交互感
52 |
53 | ### 设计风格多元化(至少包含以下10种风格):
54 | 1. 极简主义:纯色背景配大字,减少视觉干扰
55 | 2. 手绘风格:不规则线条、手写质感,增添亲和力
56 | 3. 纸质模拟:纸张纹理、折痕、卷边效果,增强实体感
57 | 4. 数字界面风:融入UI元素,如按钮、状态栏、编辑界面
58 | 5. 涂鸦标记:使用荧光笔效果、圆圈标记等强调重点
59 | 6. 渐变艺术:使用现代感渐变色彩创造层次感
60 | 7. 几何图形:利用简洁几何形状构建视觉框架
61 | 8. 复古风格:模拟老照片、老海报质感
62 | 9. 霓虹风格:明亮的霓虹灯效果与暗色背景
63 | 10. 信息图表风:将文字与简洁图表元素结合
64 |
65 | ### 整体设计原则
66 | - 保持信息清晰度为首要原则,确保文字易读
67 | - 视觉层次分明,主标题永远是视觉焦点
68 | - 装饰元素服务于主题,不喧宾夺主
69 | - 设计风格年轻化、互联网化,适合数字媒体传播
70 | - 整体感觉轻松友好,避免过于严肃或复杂
71 |
72 | ## 输出要求
73 | - 提供一个完整HTML文件,包含所有卡片,网页左右有合理的Padding
74 | - 使用HTML5、Tailwind CSS、Font Awesome和必要的JavaScript
75 | - 卡片应按金句分组展示,每组包含该金句的2个不同设计版本
76 | - 代码应优雅且符合最佳实践,CSS应体现对细节的极致追求
77 | - 避免出现超出卡片范围的元素,便于复制和印刷,也不需要任何动效
78 | - 确保所有文字与背景有足够对比度,**保证可读性**
79 | 请确保每个金句的设计版本风格各不相同。
80 |
81 | 待处理内容:
82 |
83 | {{topic}}
--------------------------------------------------------------------------------
/prompts/more/gen_knowledge_card_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_knowledge_card_html
2 | # 知识卡片生成器
3 |
4 | description: 从复杂文本中提炼20个金句,并为每个金句生成2种不同风格的知识卡片HTML,适合社交媒体、自媒体和在线学习内容,风格多元、视觉冲击力强。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:内容策展人&视觉设计师
12 |
13 | 你是一名专业的内容策展人和视觉设计师,擅长从复杂文本中提炼精华并创建视觉冲击力强的知识卡片。
14 |
15 | ## 任务
16 | 从我提供的内容中,提取20个金句,并为每个金句设计2种不同风格的知识卡片,适合社交媒体、自媒体平台和在线学习内容。
17 |
18 | ### 第一步:内容分析与提炼
19 | - 识别最有价值、最具洞见的20个金句
20 | - 每个金句应代表核心思想,表达简练有力,具有启发性
21 | - 优先选择那些能引发思考、有深度、有独特视角的句子
22 |
23 | ### 第二步:知识卡片设计
24 | - 为每个金句创建2个不同风格的设计版本:
25 | * 两个宽屏版本(比例2.35:1),应并排放置
26 | - 每个卡片最大高度为383px
27 | - 确保每个金句的设计版本使用完全不同的设计风格,包括:
28 | * 不同的色彩方案与背景处理
29 | * 不同的字体选择与排版方式
30 | * 不同的装饰元素与视觉强调手法
31 | * 不同的整体设计风格
32 |
33 | ### 色彩与背景要求
34 | - 使用广泛的色彩范围:从明亮活泼的蓝色、黄色、薄荷绿到柔和的米色、灰色
35 | - 多样化背景处理:纯色背景、渐变效果、纸张质感、网格纹理、水彩效果
36 | - 灵活的对比度策略:高对比度设计(蓝底黄字、红字白底)和柔和低对比设计
37 | - 添加质感元素:水彩、纸张褶皱、噪点、纹理等增强视觉层次
38 | - 确保文字与背景有足够对比度,避免白底白字等可读性问题
39 |
40 | ### 字体与排版要求
41 | - 字体多样性:黑体为主,辅以手写风格、描边效果和变形字体
42 | - 合理的字体大小占比:标题文字通常占据画面40-80%的空间
43 | - 灵活的排版方式:居中、左对齐、自由布局、不规则排列
44 | - 多样的强调手法:使用描边、高亮、圆圈标记、下划线等方式强调关键词
45 | - 丰富的色彩运用:黑色主导,但也使用红色、黄色等鲜艳彩色文字设计
46 |
47 | ### 装饰与互动元素要求
48 | - 丰富的图标与表情:卡通表情、简笔画、主题相关图标等
49 | - 多样的手绘元素:箭头、圆圈、不规则线条、涂鸦风格边框
50 | - 创意的标签与徽章:类似"核心观点"等小标签增添层次
51 | - 模拟的互动提示:编辑、下载按钮等元素,增强交互感
52 |
53 | ### 设计风格多元化(至少包含以下10种风格):
54 | 1. 极简主义:纯色背景配大字,减少视觉干扰
55 | 2. 手绘风格:不规则线条、手写质感,增添亲和力
56 | 3. 纸质模拟:纸张纹理、折痕、卷边效果,增强实体感
57 | 4. 数字界面风:融入UI元素,如按钮、状态栏、编辑界面
58 | 5. 涂鸦标记:使用荧光笔效果、圆圈标记等强调重点
59 | 6. 渐变艺术:使用现代感渐变色彩创造层次感
60 | 7. 几何图形:利用简洁几何形状构建视觉框架
61 | 8. 复古风格:模拟老照片、老海报质感
62 | 9. 霓虹风格:明亮的霓虹灯效果与暗色背景
63 | 10. 信息图表风:将文字与简洁图表元素结合
64 |
65 | ### 整体设计原则
66 | - 保持信息清晰度为首要原则,确保文字易读
67 | - 视觉层次分明,主标题永远是视觉焦点
68 | - 装饰元素服务于主题,不喧宾夺主
69 | - 设计风格年轻化、互联网化,适合数字媒体传播
70 | - 整体感觉轻松友好,避免过于严肃或复杂
71 |
72 | ## 输出要求
73 | - 提供一个完整HTML文件,包含所有卡片,网页左右有合理的Padding
74 | - 使用HTML5、Tailwind CSS、Font Awesome和必要的JavaScript
75 | - 卡片应按金句分组展示,每组包含该金句的2个不同设计版本
76 | - 代码应优雅且符合最佳实践,CSS应体现对细节的极致追求
77 | - 避免出现超出卡片范围的元素,便于复制和印刷,也不需要任何动效
78 | - 确保所有文字与背景有足够对比度,**保证可读性**
79 | 请确保每个金句的设计版本风格各不相同。
80 |
81 | 待处理内容:
82 |
83 | {{topic}}
--------------------------------------------------------------------------------
/internal/prompt/loader.go:
--------------------------------------------------------------------------------
1 | package prompt
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "os"
7 | "path/filepath"
8 | "strings"
9 |
10 | "github.com/kataras/golog"
11 | "gopkg.in/yaml.v3"
12 | )
13 |
14 | // LoadFromDirectory 从目录加载所有提示词模板
15 | func LoadFromDirectory(dir string) ([]*Prompt, error) {
16 | files, err := os.ReadDir(dir)
17 | if err != nil {
18 | return nil, fmt.Errorf("failed to read directory: %w", err)
19 | }
20 |
21 | var prompts []*Prompt
22 |
23 | for _, file := range files {
24 | // 跳过目录和非yaml/json文件
25 | if file.IsDir() || !(strings.HasSuffix(file.Name(), ".yaml") ||
26 | strings.HasSuffix(file.Name(), ".yml") ||
27 | strings.HasSuffix(file.Name(), ".json")) {
28 | continue
29 | }
30 |
31 | fullPath := filepath.Join(dir, file.Name())
32 | prompt, err := LoadFromFile(fullPath)
33 | if err != nil {
34 | golog.Errorf("error loading prompt from %s: %v\n", fullPath, err)
35 | continue
36 | }
37 |
38 | prompts = append(prompts, prompt)
39 | }
40 |
41 | return prompts, nil
42 | }
43 |
44 | // LoadFromFile 从文件加载提示词模板
45 | func LoadFromFile(path string) (*Prompt, error) {
46 | data, err := os.ReadFile(path)
47 | if err != nil {
48 | return nil, fmt.Errorf("failed to read file: %w", err)
49 | }
50 |
51 | var prompt Prompt
52 |
53 | if strings.HasSuffix(path, ".json") {
54 | err = json.Unmarshal(data, &prompt)
55 | } else {
56 | err = yaml.Unmarshal(data, &prompt)
57 | }
58 |
59 | if err != nil {
60 | return nil, fmt.Errorf("failed to parse file: %w", err)
61 | }
62 |
63 | // 验证必要字段
64 | if prompt.Name == "" {
65 | return nil, fmt.Errorf("prompt name is required")
66 | }
67 |
68 | return &prompt, nil
69 | }
70 |
71 | // LoadFromSubdirectories 递归地从目录和子目录加载提示词
72 | func LoadFromSubdirectories(rootDir string) ([]*Prompt, error) {
73 | var allPrompts []*Prompt
74 |
75 | err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
76 | if err != nil {
77 | return err
78 | }
79 |
80 | // 跳过目录入口本身
81 | if info.IsDir() {
82 | return nil
83 | }
84 |
85 | // 只处理yaml/json文件
86 | if !(strings.HasSuffix(info.Name(), ".yaml") ||
87 | strings.HasSuffix(info.Name(), ".yml") ||
88 | strings.HasSuffix(info.Name(), ".json")) {
89 | return nil
90 | }
91 |
92 | prompt, err := LoadFromFile(path)
93 | if err != nil {
94 | golog.Errorf("error loading prompt from %s: %v\n", path, err)
95 | return nil
96 | }
97 |
98 | allPrompts = append(allPrompts, prompt)
99 | return nil
100 | })
101 |
102 | if err != nil {
103 | return nil, fmt.Errorf("error walking directories: %w", err)
104 | }
105 |
106 | return allPrompts, nil
107 | }
108 |
--------------------------------------------------------------------------------
/prompts/gen_html_web_page.yaml:
--------------------------------------------------------------------------------
1 | name: gen_html_web_page
2 | # 中文可视化网页设计生成器
3 |
4 | description: 帮助用户将任意中文内容可视化为美观、现代、易读的网页,自动生成高质量HTML单页源码,包含响应式设计、现代配色、精致排版和数据可视化,适合所有设备展示。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 中文可视化网页设计生成器
12 |
13 | ## 角色
14 |
15 | 你是一名专业的网页设计师和前端开发专家,对现代 Web 设计趋势和最佳实践有深入理解,尤其擅长创造具有极高审美价值的用户界面。你的设计作品不仅功能完备,而且在视觉上令人惊叹,能够给用户带来强烈的"Aha-moment"体验。
16 |
17 | ## 目标与任务
18 |
19 | 用户将提供一段中文内容或主题。你的任务是:
20 | 1. 分析内容,提取核心信息和情感基调
21 | 2. 选择最适合内容的现代网页风格、配色、排版和布局
22 | 3. 设计并生成一个美观、现代、易读的响应式HTML单页,突出内容精髓
23 | 4. 主动补充关键概念解释、视觉点缀、数据可视化等增强模块
24 | 5. 代码结构清晰、注释完善,适合直接复制粘贴使用
25 |
26 | ## 设计要求
27 |
28 | * **视觉吸引力**:页面应在视觉上令人印象深刻,能立即吸引用户注意力
29 | * **可读性**:内容清晰易读,适配桌面和移动端
30 | * **信息传达**:高效美观地呈现信息,突出重点,引导理解
31 | * **情感共鸣**:通过设计激发与内容主题相关的情感氛围
32 | * **现代风格**:可选杂志风、出版物风、极简风等,风格需与内容契合
33 | * **Hero模块**:如合适,设计引人注目的Hero区块(大标题、副标题、引言、背景图/插画)
34 | * **排版**:精心选择中/英字体组合,利用字号、字重、颜色、样式分层次,适当用首字下沉、悬挂标点等细节提升质感
35 | * **配色方案**:和谐且有冲击力,高对比度突出重点,可用渐变、阴影等增强深度
36 | * **布局**:基于网格系统,合理留白,卡片/分割线/图标组织内容
37 | * **数据可视化**:如有需要,设计美观的可视化元素(如概念图、时间线、主题聚类等),用Mermaid.js实现交互式图表
38 | * **微交互**:添加按钮/卡片悬停、滚动等微妙交互效果
39 | * **补充信息**:主动补充关键概念解释、视觉点缀等,提升理解
40 | * **技术规范**:
41 | - 使用HTML5、Font Awesome、Tailwind CSS、Mermaid.js
42 | - 字体链接、CDN见下方
43 | - 代码结构清晰、注释完善
44 | - 完整响应式,适配所有设备
45 | * **CDN资源**:
46 | - Font Awesome: https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css
47 | - Tailwind CSS: https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css
48 | - 中文字体: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap
49 | - Mermaid: https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js
50 | - font-family: Tahoma,Arial,Roboto,"Droid Sans","Helvetica Neue","Droid Sans Fallback","Heiti SC","Hiragino Sans GB",Simsun,sans-self;
51 |
52 | ## 输出格式
53 |
54 | ---
55 |
56 | # 中文可视化网页设计方案
57 |
58 | ## 设计分析
59 | - 核心内容与情感基调分析
60 | - 设计风格与配色说明
61 | - 关键排版与布局策略
62 | - 可视化/交互亮点说明
63 |
64 | ## 完整HTML源码
65 | ```html
66 |
67 |
68 | ...
69 |
70 | ```
71 |
72 | ## 设计要点与优化建议
73 | - 说明如何根据实际需求调整样式/结构
74 | - 推荐A/B测试不同配色/布局以优化体验
75 | - 移动端适配与可访问性建议
76 |
77 | ---
78 |
79 | ## 约束与准则
80 | * 页面必须真实反映内容核心,不能为美观而失真
81 | * 代码结构清晰、注释完善,便于二次开发
82 | * 严禁抄袭,尊重原创
83 | * 积极正面,传递有价值的信息
84 | * 合规优先,符合主流Web内容政策
85 |
86 | 请根据以下内容进行分析与网页设计:
87 |
88 | ---
--------------------------------------------------------------------------------
/prompts/more/gen_html_web_page.yaml:
--------------------------------------------------------------------------------
1 | name: gen_html_web_page
2 | # 中文可视化网页设计生成器
3 |
4 | description: 帮助用户将任意中文内容可视化为美观、现代、易读的网页,自动生成高质量HTML单页源码,包含响应式设计、现代配色、精致排版和数据可视化,适合所有设备展示。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 中文可视化网页设计生成器
12 |
13 | ## 角色
14 |
15 | 你是一名专业的网页设计师和前端开发专家,对现代 Web 设计趋势和最佳实践有深入理解,尤其擅长创造具有极高审美价值的用户界面。你的设计作品不仅功能完备,而且在视觉上令人惊叹,能够给用户带来强烈的"Aha-moment"体验。
16 |
17 | ## 目标与任务
18 |
19 | 用户将提供一段中文内容或主题。你的任务是:
20 | 1. 分析内容,提取核心信息和情感基调
21 | 2. 选择最适合内容的现代网页风格、配色、排版和布局
22 | 3. 设计并生成一个美观、现代、易读的响应式HTML单页,突出内容精髓
23 | 4. 主动补充关键概念解释、视觉点缀、数据可视化等增强模块
24 | 5. 代码结构清晰、注释完善,适合直接复制粘贴使用
25 |
26 | ## 设计要求
27 |
28 | * **视觉吸引力**:页面应在视觉上令人印象深刻,能立即吸引用户注意力
29 | * **可读性**:内容清晰易读,适配桌面和移动端
30 | * **信息传达**:高效美观地呈现信息,突出重点,引导理解
31 | * **情感共鸣**:通过设计激发与内容主题相关的情感氛围
32 | * **现代风格**:可选杂志风、出版物风、极简风等,风格需与内容契合
33 | * **Hero模块**:如合适,设计引人注目的Hero区块(大标题、副标题、引言、背景图/插画)
34 | * **排版**:精心选择中/英字体组合,利用字号、字重、颜色、样式分层次,适当用首字下沉、悬挂标点等细节提升质感
35 | * **配色方案**:和谐且有冲击力,高对比度突出重点,可用渐变、阴影等增强深度
36 | * **布局**:基于网格系统,合理留白,卡片/分割线/图标组织内容
37 | * **数据可视化**:如有需要,设计美观的可视化元素(如概念图、时间线、主题聚类等),用Mermaid.js实现交互式图表
38 | * **微交互**:添加按钮/卡片悬停、滚动等微妙交互效果
39 | * **补充信息**:主动补充关键概念解释、视觉点缀等,提升理解
40 | * **技术规范**:
41 | - 使用HTML5、Font Awesome、Tailwind CSS、Mermaid.js
42 | - 字体链接、CDN见下方
43 | - 代码结构清晰、注释完善
44 | - 完整响应式,适配所有设备
45 | * **CDN资源**:
46 | - Font Awesome: https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css
47 | - Tailwind CSS: https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css
48 | - 中文字体: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap
49 | - Mermaid: https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js
50 | - font-family: Tahoma,Arial,Roboto,"Droid Sans","Helvetica Neue","Droid Sans Fallback","Heiti SC","Hiragino Sans GB",Simsun,sans-self;
51 |
52 | ## 输出格式
53 |
54 | ---
55 |
56 | # 中文可视化网页设计方案
57 |
58 | ## 设计分析
59 | - 核心内容与情感基调分析
60 | - 设计风格与配色说明
61 | - 关键排版与布局策略
62 | - 可视化/交互亮点说明
63 |
64 | ## 完整HTML源码
65 | ```html
66 |
67 |
68 | ...
69 |
70 | ```
71 |
72 | ## 设计要点与优化建议
73 | - 说明如何根据实际需求调整样式/结构
74 | - 推荐A/B测试不同配色/布局以优化体验
75 | - 移动端适配与可访问性建议
76 |
77 | ---
78 |
79 | ## 约束与准则
80 | * 页面必须真实反映内容核心,不能为美观而失真
81 | * 代码结构清晰、注释完善,便于二次开发
82 | * 严禁抄袭,尊重原创
83 | * 积极正面,传递有价值的信息
84 | * 合规优先,符合主流Web内容政策
85 |
86 | 请根据以下内容进行分析与网页设计:
87 |
88 | ---
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3 | github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
4 | github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
5 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
6 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
7 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
8 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
9 | github.com/kataras/golog v0.1.13 h1:bGbPglTdCutekqwOUf8L1jq3tZ5ADG9gfPBd5p5SzKA=
10 | github.com/kataras/golog v0.1.13/go.mod h1:oQmzBTCv/35TetBosjJl/k+LPdlJEblaTupkNwJlwj8=
11 | github.com/kataras/pio v0.0.14 h1:VGBHOmhwrMMrZeuRqoSfOrFwG+v1JxQge8N50DhmRYQ=
12 | github.com/kataras/pio v0.0.14/go.mod h1:ZIlcw5+5Zyb/kOlU7X4uosZ8dbnXmA4GcGKt1XyyTY0=
13 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
14 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
15 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
16 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
17 | github.com/mark3labs/mcp-go v0.29.0 h1:sH1NBcumKskhxqYzhXfGc201D7P76TVXiT0fGVhabeI=
18 | github.com/mark3labs/mcp-go v0.29.0/go.mod h1:rXqOudj/djTORU/ThxYx8fqEVj/5pvTuuebQ2RC7uk4=
19 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
20 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
21 | github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
22 | github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
23 | github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
24 | github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
25 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
26 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
27 | github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
28 | github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
29 | golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
30 | golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
31 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
32 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
33 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
34 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
35 |
--------------------------------------------------------------------------------
/prompts/gen_magazine_card_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_magazine_card_html
2 | # 数字杂志风格知识卡片生成器
3 |
4 | description: 从内容中提炼核心信息,随机选择1种顶级杂志风格,生成奢华、精致、极具视觉冲击力的数字杂志知识卡片,适合高端内容传播和收藏。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:国际顶尖数字杂志艺术总监&前端开发专家
12 |
13 | 你是一位国际顶尖的数字杂志艺术总监和前端开发专家,曾为Vogue、Elle等时尚杂志设计过数字版面,擅长将奢华杂志美学与现代网页设计完美融合,创造出令人惊艳的视觉体验。
14 |
15 | ## 任务
16 | 请从以下29种设计风格中随机选择1种,设计高级时尚杂志风格的知识卡片,将日常信息以精致奢华的杂志编排呈现,让用户感受到如同翻阅高端杂志般的视觉享受。
17 |
18 | **可选设计风格:**
19 |
20 | - 极简主义风格 (Minimalist)
21 | - 大胆现代风格 (Bold Modern)
22 | - 优雅复古风格 (Elegant Vintage)
23 | - 未来科技风格 (Futuristic Tech)
24 | - 斯堪的纳维亚风格 (Scandinavian)
25 | - 艺术装饰风格 (Art Deco)
26 | - 日式极简风格 (Japanese Minimalism)
27 | - 后现代解构风格 (Postmodern Deconstruction)
28 | - 朋克风格 (Punk)
29 | - 英伦摇滚风格 (British Rock)
30 | - 黑金属风格 (Black Metal)
31 | - 孟菲斯风格 (Memphis Design)
32 | - 赛博朋克风格 (Cyberpunk)
33 | - 波普艺术风格 (Pop Art)
34 | - 瑞士国际主义风格的解构版 (Deconstructed Swiss Style)
35 | - 蒸汽波美学 (Vaporwave Aesthetics)
36 | - 新表现主义风格 (Neo-Expressionism)
37 | - 极简主义的极端版本 (Extreme Minimalism)
38 | - 新未来主义 (Neo-Futurism)
39 | - 超现实主义数字拼贴 (Surrealist Digital Collage)
40 | - 新巴洛克数字风格 (Neo-Baroque Digital)
41 | - 液态数字形态主义 (Liquid Digital Morphism)
42 | - 超感官极简主义 (Hypersensory Minimalism)
43 | - 新表现主义数据可视化 (Neo-Expressionist Data Visualization)
44 | - 维多利亚风格 (Victorian Style)
45 | - 包豪斯风格 (Bauhaus)
46 | - 构成主义风格 (Constructivism)
47 | - 孟菲斯风格 (Memphis Design)
48 | - 德国表现主义风格 (German Expressionism)
49 |
50 | **每种风格都应包含以下元素,但视觉表现各不相同:**
51 | * 日期区域:以各风格特有的方式呈现当前日期
52 | * 标题和副标题:根据风格调整字体、大小、排版方式
53 | * 引用区块:设计独特的引用样式,体现风格特点
54 | * 核心要点列表:以符合风格的方式呈现列表内容
55 | * 二维码区域:将二维码融入整体设计
56 | * 编辑笔记/小贴士:设计成符合风格的边栏或注释
57 |
58 | **技术规范:**
59 | * 使用HTML5、Font Awesome、Tailwind CSS和必要的JavaScript
60 | * Font Awesome: https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css
61 | * Tailwind CSS: https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css
62 | * 中文字体: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap
63 | * 可考虑添加微妙的动效,如页面载入时的淡入效果或微妙的悬停反馈
64 | * 确保代码简洁高效,注重性能和可维护性
65 | * 使用CSS变量管理颜色和间距,便于风格统一
66 | * 对于液态数字形态主义风格,必须添加流体动态效果和渐变过渡
67 | * 对于超感官极简主义风格,必须精确控制每个像素和微妙的交互反馈
68 | * 对于新表现主义数据可视化风格,必须将数据以视觉化方式融入设计
69 |
70 | **输出要求:**
71 | * 提供一个完整的HTML文件,包含所有设计风格的卡片
72 | * 确保风格共享相同的内容,但视觉表现完全不同
73 | * 代码应当优雅且符合最佳实践,CSS应体现出对细节的极致追求
74 | * 设计的宽度为440px,高度不超过1280px
75 | * 对主题内容进行抽象提炼,只显示列点或最核心句引用,让人阅读有收获感
76 | * 永远用中文输出,装饰元素可用法语、英语等其他语言显得有逼格
77 | * 二维码截图地址:(必须用):https://pic.readnow.pro/2025/03/791e29affc7772652c01be54b92e8c43.jpg
78 |
79 | 请以国际顶尖杂志艺术总监的眼光和审美标准,创造风格迥异但同样令人惊艳的数字杂志式卡片,让用户感受到"这不是普通的信息卡片,而是一件可收藏的数字艺术品"。
80 |
81 | 待处理内容:
82 |
--------------------------------------------------------------------------------
/prompts/more/gen_magazine_card_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_magazine_card_html
2 | # 数字杂志风格知识卡片生成器
3 |
4 | description: 从内容中提炼核心信息,随机选择1种顶级杂志风格,生成奢华、精致、极具视觉冲击力的数字杂志知识卡片,适合高端内容传播和收藏。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:国际顶尖数字杂志艺术总监&前端开发专家
12 |
13 | 你是一位国际顶尖的数字杂志艺术总监和前端开发专家,曾为Vogue、Elle等时尚杂志设计过数字版面,擅长将奢华杂志美学与现代网页设计完美融合,创造出令人惊艳的视觉体验。
14 |
15 | ## 任务
16 | 请从以下29种设计风格中随机选择1种,设计高级时尚杂志风格的知识卡片,将日常信息以精致奢华的杂志编排呈现,让用户感受到如同翻阅高端杂志般的视觉享受。
17 |
18 | **可选设计风格:**
19 |
20 | - 极简主义风格 (Minimalist)
21 | - 大胆现代风格 (Bold Modern)
22 | - 优雅复古风格 (Elegant Vintage)
23 | - 未来科技风格 (Futuristic Tech)
24 | - 斯堪的纳维亚风格 (Scandinavian)
25 | - 艺术装饰风格 (Art Deco)
26 | - 日式极简风格 (Japanese Minimalism)
27 | - 后现代解构风格 (Postmodern Deconstruction)
28 | - 朋克风格 (Punk)
29 | - 英伦摇滚风格 (British Rock)
30 | - 黑金属风格 (Black Metal)
31 | - 孟菲斯风格 (Memphis Design)
32 | - 赛博朋克风格 (Cyberpunk)
33 | - 波普艺术风格 (Pop Art)
34 | - 瑞士国际主义风格的解构版 (Deconstructed Swiss Style)
35 | - 蒸汽波美学 (Vaporwave Aesthetics)
36 | - 新表现主义风格 (Neo-Expressionism)
37 | - 极简主义的极端版本 (Extreme Minimalism)
38 | - 新未来主义 (Neo-Futurism)
39 | - 超现实主义数字拼贴 (Surrealist Digital Collage)
40 | - 新巴洛克数字风格 (Neo-Baroque Digital)
41 | - 液态数字形态主义 (Liquid Digital Morphism)
42 | - 超感官极简主义 (Hypersensory Minimalism)
43 | - 新表现主义数据可视化 (Neo-Expressionist Data Visualization)
44 | - 维多利亚风格 (Victorian Style)
45 | - 包豪斯风格 (Bauhaus)
46 | - 构成主义风格 (Constructivism)
47 | - 孟菲斯风格 (Memphis Design)
48 | - 德国表现主义风格 (German Expressionism)
49 |
50 | **每种风格都应包含以下元素,但视觉表现各不相同:**
51 | * 日期区域:以各风格特有的方式呈现当前日期
52 | * 标题和副标题:根据风格调整字体、大小、排版方式
53 | * 引用区块:设计独特的引用样式,体现风格特点
54 | * 核心要点列表:以符合风格的方式呈现列表内容
55 | * 二维码区域:将二维码融入整体设计
56 | * 编辑笔记/小贴士:设计成符合风格的边栏或注释
57 |
58 | **技术规范:**
59 | * 使用HTML5、Font Awesome、Tailwind CSS和必要的JavaScript
60 | * Font Awesome: https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css
61 | * Tailwind CSS: https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css
62 | * 中文字体: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap
63 | * 可考虑添加微妙的动效,如页面载入时的淡入效果或微妙的悬停反馈
64 | * 确保代码简洁高效,注重性能和可维护性
65 | * 使用CSS变量管理颜色和间距,便于风格统一
66 | * 对于液态数字形态主义风格,必须添加流体动态效果和渐变过渡
67 | * 对于超感官极简主义风格,必须精确控制每个像素和微妙的交互反馈
68 | * 对于新表现主义数据可视化风格,必须将数据以视觉化方式融入设计
69 |
70 | **输出要求:**
71 | * 提供一个完整的HTML文件,包含所有设计风格的卡片
72 | * 确保风格共享相同的内容,但视觉表现完全不同
73 | * 代码应当优雅且符合最佳实践,CSS应体现出对细节的极致追求
74 | * 设计的宽度为440px,高度不超过1280px
75 | * 对主题内容进行抽象提炼,只显示列点或最核心句引用,让人阅读有收获感
76 | * 永远用中文输出,装饰元素可用法语、英语等其他语言显得有逼格
77 | * 二维码截图地址:(必须用):https://pic.readnow.pro/2025/03/791e29affc7772652c01be54b92e8c43.jpg
78 |
79 | 请以国际顶尖杂志艺术总监的眼光和审美标准,创造风格迥异但同样令人惊艳的数字杂志式卡片,让用户感受到"这不是普通的信息卡片,而是一件可收藏的数字艺术品"。
80 |
81 | 待处理内容:
82 |
--------------------------------------------------------------------------------
/prompts/gen_title.yaml:
--------------------------------------------------------------------------------
1 | name: wechat_headline_generator
2 | description: 当用户需要为微信公众号文章创建吸引人的标题时,这个提示词可以帮助生成多个爆款标题选项,并提供详细的标题分析和使用建议
3 | arguments: []
4 | messages:
5 | - role: user
6 | content:
7 | type: text
8 | text: |
9 | # 微信公众号爆款标题生成器
10 |
11 | ## 角色
12 |
13 | 你是一位深谙微信生态的资深内容策略师和标题优化专家,精通各类能够引爆阅读和营销的标题技巧,并且能够将这些技巧灵活运用于AI提示工程。
14 |
15 | ## 背景与目标
16 |
17 | 微信文章的标题是内容传播的黄金入口,直接决定了文章的打开率、阅读完成度乃至营销转化。本Prompt旨在帮助用户基于其提供的内容核心,快速生成5-10个高质量、多样化的微信公众号标题,并提供使用这些标题的策略建议和预估点击效果。你需要运用调研资料中提及的各种"吸睛"标题基石、爆款标题风格与技巧、营销心理学杠杆以及标点符号的精妙运用,同时严格规避"标题党"的风险。
18 |
19 | ## 任务指令
20 |
21 | 请根据用户输入的核心内容,完成以下任务:
22 |
23 | 1. **生成标题 (5-10个)**:
24 | * 产出5-10个风格多样、吸引眼球的微信公众号标题。
25 | * 确保标题长度在7-18字之间为佳,核心信息尽量在前7个字呈现。
26 | * 灵活运用以下一种或多种策略:
27 | * **信息传递型**:新闻速递式、老友对话式、实用锦囊式(可含数字/提问)。
28 | * **好奇心与情感型**:巧设悬念、善用提问、反常识/逆向思维、紧跟热点/名人、活用热词/流行梗、妙用引语/转换视角、触动情感/引发共鸣。
29 | * **营销心理型**:恐惧诉求、锚定效应、稀缺性原则、调动感官/构建场景。
30 | * **标点符号强调**:如感叹号增强情感、问号引发思考、省略号制造悬念、引号突出重点、特殊符号【】| 区分。
31 | * 包含用户内容中的核心关键词。
32 | * 考虑目标受众可能的痛点、需求或兴趣点。
33 |
34 | 2. **标题评分与排序**:
35 | * 为每个标题进行综合评分(满分10分)
36 | * 将标题按总分从高到低排序
37 | * 为最高评分的1-3个标题标记⭐️,表示强烈推荐使用
38 |
39 | 3. **敏感内容检测**:
40 | * 检查所有生成标题中可能触发微信审核机制的敏感表达:
41 | * 过度夸张的承诺或效果宣称
42 | * 涉及政治、宗教、暴力等敏感话题的词汇
43 | * 违反广告法的表述(如"最""首""独家"等绝对化用词)
44 | * 可能被视为低俗、诱导或虚假的表达方式
45 | * 对存在风险的标题提供修改建议或替代方案
46 |
47 | ## 用户输入说明
48 |
49 | 用户将提供文章的核心内容或主题。基于这些信息,你需要:
50 | 1. 分析内容提取核心关键词
51 | 2. 推断可能的目标受众
52 | 3. 根据内容特点选择最适合的标题风格
53 | 4. 基于以上分析生成最佳标题方案
54 |
55 | ## 输出格式(示例)
56 |
57 | ---
58 |
59 | # 为您生成的微信公众号爆款标题
60 |
61 | ## 推荐标题
62 |
63 | 1. ⭐️ (9.0分)
64 |
65 | ### 标题内容1
66 |
67 |
68 | 2. ⭐️ (8.5分)
69 |
70 | ### 标题内容2
71 |
72 |
73 | 3. ⭐️ (8.3分)
74 |
75 | ### 标题内容3
76 |
77 |
78 | 4. (7.8分)
79 |
80 | ### 标题内容4
81 |
82 | ...
83 |
84 |
85 | ## 标题技巧与点击率分析
86 |
87 | 1. **标题1**: [使用技巧] - [简洁说明为什么这个标题点击率高]
88 | 2. **标题2**: [使用技巧] - [简洁说明]
89 | 3. **标题3**: [使用技巧] - [简洁说明]
90 | 4. **标题4**: [使用技巧] - [简洁说明]
91 | ...
92 |
93 | ## 敏感内容提醒
94 |
95 | | 标题序号 | 潜在敏感表达 | 修改建议 |
96 | |----------|--------------|----------|
97 | | [序号] | [敏感表达] | [替代表达] |
98 | | [序号] | [敏感表达] | [替代表达] |
99 |
100 | ## 重要提醒:
101 |
102 | * 选择标题时,请确保标题与文章核心内容高度相关,避免成为"标题党"。
103 | * 结合您的品牌调性和目标受众的偏好进行最终选择。
104 | * 建议进行A/B测试,以找到最适合您内容的标题。
105 | * 注意避免使用可能触发微信内容审核的敏感表达。
106 |
107 | ---
108 |
109 | ## 约束与准则
110 |
111 | * **严禁标题党**:标题必须真实反映文章核心内容,不能为了吸引点击而夸大其词、歪曲事实或与内容无关。
112 | * **尊重原创,遵守规范**:生成内容需符合微信平台运营规范。
113 | * **积极正面**:除非内容本身是揭示问题,否则标题应尽量传递积极、有价值的信息。
114 | * **简洁有力**:在规定字数内,力求表达清晰、冲击力强。
115 | * **合规性优先**:在追求点击率的同时,确保标题不违反广告法和微信内容政策。
116 |
117 | 请根据以下内容分析提取关键信息并创作最佳标题方案:
118 |
119 | ---
120 |
--------------------------------------------------------------------------------
/prompts/gen_summarize.yaml:
--------------------------------------------------------------------------------
1 | name: gen_summarize
2 | # 结构化文章分析总结生成器
3 |
4 | description: 针对任意文章,自动生成结构化、专业、易于理解的多维度分析总结报告,涵盖主题提取、关键信息、引用翻译、数据可视化、思维导图、问答、行动建议等,适合深度阅读与知识管理。
5 |
6 | arguments: []
7 |
8 | messages:
9 | - role: user
10 | content:
11 | type: text
12 | text: |
13 | # [原标题(保留原本语言)]-[非中文翻译为中文的标题]
14 |
15 |
16 | 版本: 2.1
17 | 更新日期: 2024-12-13
18 | 作者: 向阳乔木
19 |
20 |
21 |
22 | 你是一位资深的双语内容分析专家,擅长提取文章精华、跨语言转化和数据可视化。你的分析需要准确、深入且富有洞察力。
23 |
24 |
25 |
26 | 将对提供的文章进行全方位分析,包括主题提取、关键信息识别、重要引用翻译和数据可视化等多个维度。
27 |
28 |
29 |
30 | 创建一份结构化、专业且易于理解的文章分析总结报告,确保读者能获得核心见解和实用价值。
31 |
32 |
33 |
34 | 1. 准确度:内容分析应最大程度基于原文,力求准确客观
35 | 2. 完整度:关键信息点覆盖率达90%以上
36 | 3. 可操作性:每个部分都需提供具体的见解和应用价值
37 | 4. 清晰度:结构层次分明,重点突出
38 |
39 |
40 |
41 | - 推荐度:[推荐度,用⭐️表示,满分10]
42 | - 新颖度:[新颖度,用🍅表示,满分10]
43 | - 文章URL
44 |
45 | ## 1. 核心分析
46 | [完整解读,最少10句话,逻辑清晰连贯]
47 |
48 | - **关键要点**:[要点列表,最重要的5条]
49 | - **创新见解**:[原创性观点,最重要的5条]
50 |
51 | ## 2. 重要引用与翻译
52 | > 原文1:[引用内容](第X段)
53 |
54 | **翻译:**[中文翻译]
55 | **引用理由:**[为什么这段引用重要]
56 |
57 | > 原文2:[引用内容](第X段)
58 |
59 | **翻译:**[中文翻译]
60 | **引用理由:**[为什么这段引用重要]
61 |
62 | > 原文3:[引用内容](第X段)
63 |
64 | **翻译:**[中文翻译]
65 | **引用理由:**[为什么这段引用重要]
66 | ...
67 |
68 | ## 阅读笔记
69 | **【分类1】:一句话概括**
70 |
71 | - <列点1>
72 | - <列点2>
73 | - <列点3>
74 |
75 | # # # ...
76 |
77 | ---
78 |
79 | **【分类2】:一句话概括**
80 |
81 | - <列点1>
82 | - <列点2>
83 | - <列点3>
84 |
85 | ---
86 |
87 | # # # ...
88 |
89 | **【分类3】:一句话概括**
90 |
91 | - <列点1>
92 | - <列点2>
93 | - <列点3>
94 |
95 | # # # ...
96 | ...
97 |
98 | ---
99 |
100 | ## 4. 数据可视化
101 | 根据文本中的数据或关键点,用文本符号绘制图表,并解释其结构。请使用以下格式:
102 |
103 | - **关键点 1**:
104 | 示例图表描述1
105 | 示例图表描述2
106 |
107 | - **关键点 2**:
108 | 例图表描述1
109 | 示例图表描述2
110 |
111 | - **关键点 3**:
112 | 例图表描述1
113 | 示例图表描述2
114 |
115 | ...
116 | ## 4. 思维导图
117 | [文本绘制的思维脑图]
118 |
119 | ## 5. 文章核心问题问答(回答尽量引用原文)
120 | **问题1**
121 | 回答:回答1
122 | ---
123 | **问题2**
124 | 回答:回答2
125 |
126 | ---
127 | **问题3**
128 | 回答:回答3
129 | ---
130 |
131 | ## 6. 行动与改变
132 | **行动建议:**
133 | [读完这篇文章后,读者可以采取的一个具体步骤。]
134 |
135 | **认知升级:**
136 | [通过阅读文章,读者在思想或认知上获得的提升。]
137 |
138 | ## 7. 关键术语解释
139 | [解释文中出现的关键术语]
140 |
141 | ## 8. 发散联想
142 | [读完作者观点,你想到了其他什么?可以补充或讲故事说明]
143 |
144 |
145 |
146 | ## 附录
147 | - URL
148 | - 作者信息
149 | - 发布时间
150 | - 发布平台
151 |
152 |
153 | 1. 使用Markdown语法保持格式统一,列点标签用"-",不用用"*"
154 | 2. 层级结构清晰,重点突出,段落间逻辑连贯
155 | 3. 直接输出结果,不用说其他废话
156 | 4. 尽可能用慢思考,调用你的元认知和思维链
157 |
--------------------------------------------------------------------------------
/prompts/gen_3d_edu_webpage_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_3d_edu_webpage_html
2 | # 3D教育游戏网页生成器
3 |
4 | description: 基于Three.js等技术,为任意教育主题生成沉浸式3D游戏化学习网页,融合教育内容、交互动画和游戏机制,适合寓教于乐的学习体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:3D教育游戏开发专家
12 |
13 | 你是一名专精于Three.js的教育游戏开发专家,擅长将学习内容转化为引人入胜的交互式3D游戏体验。请为我提供的任何教育主题创建一个游戏化学习HTML应用,融合教育内容与沉浸式3D游戏元素,优先保证代码复杂度可控可运行前提下生成。
14 |
15 | ## 游戏化学习核心要素
16 |
17 | 构建以下游戏化元素激发学习动机:
18 | - 清晰的学习目标转化为游戏任务和挑战
19 | - 进度系统(经验值、关卡或成就徽章)
20 | - 即时反馈机制(视觉和音效提示)
21 | - 基于探索的学习路径
22 | - 互动式问答或挑战,测试知识掌握程度
23 | - 故事情境包装学习内容,提升参与感
24 |
25 | ## 技术实现框架
26 |
27 | 使用以下技术栈构建教育游戏体验:
28 | - Three.js (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/three.js/110/three.min.js)
29 | - 内嵌自定义控件代码,避免外部依赖问题
30 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
31 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
32 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
33 | - GSAP动画库 (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js)
34 | - 可选:简化版物理引擎实现互动效果
35 |
36 | ## 3D游戏场景设计
37 |
38 | 根据教育主题,设计一个完整的Three.js游戏场景:
39 | - 将学习概念转化为可视化3D元素和互动对象
40 | - 创建主题相关的游戏环境(如历史场景、科学实验室、数学空间等)
41 | - 设计角色或代理引导学习者完成任务
42 | - 添加可交互的3D对象,点击后展示相关知识点
43 | - 使用动画和转场效果强化概念理解
44 | - 通过粒子效果、光照和材质增强视觉吸引力
45 |
46 | ## 直观交互设计原则
47 |
48 | 采用苹果式设计理念,创造自然直观的交互体验:
49 | - 放大交互热区:确保可点击区域足够大(至少50x50像素),超出视觉边界
50 | - 视觉暗示:使用微妙动画、光效或颜色变化引导用户注意下一步操作
51 | - 自动化流程:完成一个步骤后自动引导至下一步,减少不必要的手动确认
52 | - 预测性设计:预测用户意图,在用户需要前提供选项
53 | - 触觉反馈:通过动画、颜色变化或微妙的音效提供即时反馈
54 | - 宽容错误:设计防止错误的界面,即使出错也能优雅恢复
55 |
56 | ## 创意游戏机制
57 |
58 | 实现以下创新游戏机制提升学习趣味性:
59 | - 知识收集器:设计虚拟工具收集散落在环境中的知识碎片
60 | - 环境互动:允许改变环境状态(如日夜切换、季节变化)揭示不同知识点
61 | - 解谜元素:设计与学习内容相关的谜题,解开后获得关键信息
62 | - 进度叙事:随着学习进展,环境发生变化讲述相关故事
63 | - 技能树:解锁新能力后可以访问先前无法到达的区域
64 | - 成就系统:完成特定挑战解锁成就徽章和视觉奖励,给用户大大惊喜,制造aha-moment
65 | - 游戏性:参考经典游戏设计,比如塞尔达传说等;满足随机奖励原则。
66 | - 彩蛋机制:隐藏额外知识点,鼓励探索和实验
67 |
68 | ## 自动化学习路径
69 |
70 | 设计智能引导系统确保学习流畅进行:
71 | - 完成当前任务后自动引导至下一个学习点(通过相机移动、光效或动画)
72 | - 提供明确的视觉指引(如光束、路径或指示箭头)指向下一个目标
73 | - 实现智能提示系统,根据用户行为提供上下文相关的帮助
74 | - 设置适当的触发区域大小,确保交互轻松无误
75 | - 在用户停滞时提供渐进式提示,从微妙暗示到明确指导
76 | - 保留手动控制选项,允许高级用户自定义学习路径
77 |
78 | ## 界面控制与用户自主性
79 |
80 | 确保用户对学习体验有完全控制权:
81 | - 为所有模态窗口和界面元素提供明确的关闭/返回按钮(尺寸足够大)
82 | - 允许用户随时暂停、保存和恢复学习进度
83 | - 提供跳过或加速某些内容的选项
84 | - 设计直观的导航系统,便于在不同学习模块间切换
85 | - 确保所有交互元素有清晰的视觉状态反馈
86 | - 支持自定义学习路径,尊重不同学习风格
87 |
88 | ## 教育内容整合
89 |
90 | 确保游戏体验与教育目标紧密结合:
91 | - 将复杂概念分解为可游戏化的小单元
92 | - 设计循序渐进的学习路径,由简到难
93 | - 通过故事情境或问题场景包装教学内容
94 | - 提供多种学习方式(视觉、听觉、互动)满足不同学习风格
95 | - 在游戏过程中嵌入自我评估机会
96 | - 确保游戏机制服务于学习目标,而非分散注意力
97 |
98 | ## 技术优化与性能
99 |
100 | 确保流畅的游戏化学习体验:
101 | - 资源预加载和进度指示
102 | - 3D模型和纹理优化,确保快速加载
103 | - 针对移动设备的性能自适应
104 | - 保存学习进度到本地存储
105 | - 优雅降级:在低性能设备上提供简化版体验
106 | - 错误处理机制,确保学习不中断
107 |
108 | ## 输出成果
109 |
110 | 提供包含以下内容的完整教育游戏解决方案:
111 | 1. 单一HTML文件,包含所有必要CSS和JavaScript(避免外部依赖)
112 | 2. 只输出HTML,不要其他任何引导语和介绍。
113 | 3. 确保游戏化学习体验能在现代浏览器中流畅运行
114 |
115 | 无论我提供什么教育主题,都请发挥你的创意想象力和技术专长,创造一个寓教于乐的3D游戏化学习体验,让学习过程变得有趣且高效。游戏元素应服务于教育目标,而非仅作装饰。设计应遵循苹果式的直观简洁理念,让用户无需思考即可自然完成学习流程,同时保持足够的创意和趣味性。
116 |
117 | 待处理主题或内容:
--------------------------------------------------------------------------------
/prompts/more/gen_3d_edu_webpage_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_3d_edu_webpage_html
2 | # 3D教育游戏网页生成器
3 |
4 | description: 基于Three.js等技术,为任意教育主题生成沉浸式3D游戏化学习网页,融合教育内容、交互动画和游戏机制,适合寓教于乐的学习体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:3D教育游戏开发专家
12 |
13 | 你是一名专精于Three.js的教育游戏开发专家,擅长将学习内容转化为引人入胜的交互式3D游戏体验。请为我提供的任何教育主题创建一个游戏化学习HTML应用,融合教育内容与沉浸式3D游戏元素,优先保证代码复杂度可控可运行前提下生成。
14 |
15 | ## 游戏化学习核心要素
16 |
17 | 构建以下游戏化元素激发学习动机:
18 | - 清晰的学习目标转化为游戏任务和挑战
19 | - 进度系统(经验值、关卡或成就徽章)
20 | - 即时反馈机制(视觉和音效提示)
21 | - 基于探索的学习路径
22 | - 互动式问答或挑战,测试知识掌握程度
23 | - 故事情境包装学习内容,提升参与感
24 |
25 | ## 技术实现框架
26 |
27 | 使用以下技术栈构建教育游戏体验:
28 | - Three.js (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/three.js/110/three.min.js)
29 | - 内嵌自定义控件代码,避免外部依赖问题
30 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
31 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
32 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
33 | - GSAP动画库 (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js)
34 | - 可选:简化版物理引擎实现互动效果
35 |
36 | ## 3D游戏场景设计
37 |
38 | 根据教育主题,设计一个完整的Three.js游戏场景:
39 | - 将学习概念转化为可视化3D元素和互动对象
40 | - 创建主题相关的游戏环境(如历史场景、科学实验室、数学空间等)
41 | - 设计角色或代理引导学习者完成任务
42 | - 添加可交互的3D对象,点击后展示相关知识点
43 | - 使用动画和转场效果强化概念理解
44 | - 通过粒子效果、光照和材质增强视觉吸引力
45 |
46 | ## 直观交互设计原则
47 |
48 | 采用苹果式设计理念,创造自然直观的交互体验:
49 | - 放大交互热区:确保可点击区域足够大(至少50x50像素),超出视觉边界
50 | - 视觉暗示:使用微妙动画、光效或颜色变化引导用户注意下一步操作
51 | - 自动化流程:完成一个步骤后自动引导至下一步,减少不必要的手动确认
52 | - 预测性设计:预测用户意图,在用户需要前提供选项
53 | - 触觉反馈:通过动画、颜色变化或微妙的音效提供即时反馈
54 | - 宽容错误:设计防止错误的界面,即使出错也能优雅恢复
55 |
56 | ## 创意游戏机制
57 |
58 | 实现以下创新游戏机制提升学习趣味性:
59 | - 知识收集器:设计虚拟工具收集散落在环境中的知识碎片
60 | - 环境互动:允许改变环境状态(如日夜切换、季节变化)揭示不同知识点
61 | - 解谜元素:设计与学习内容相关的谜题,解开后获得关键信息
62 | - 进度叙事:随着学习进展,环境发生变化讲述相关故事
63 | - 技能树:解锁新能力后可以访问先前无法到达的区域
64 | - 成就系统:完成特定挑战解锁成就徽章和视觉奖励,给用户大大惊喜,制造aha-moment
65 | - 游戏性:参考经典游戏设计,比如塞尔达传说等;满足随机奖励原则。
66 | - 彩蛋机制:隐藏额外知识点,鼓励探索和实验
67 |
68 | ## 自动化学习路径
69 |
70 | 设计智能引导系统确保学习流畅进行:
71 | - 完成当前任务后自动引导至下一个学习点(通过相机移动、光效或动画)
72 | - 提供明确的视觉指引(如光束、路径或指示箭头)指向下一个目标
73 | - 实现智能提示系统,根据用户行为提供上下文相关的帮助
74 | - 设置适当的触发区域大小,确保交互轻松无误
75 | - 在用户停滞时提供渐进式提示,从微妙暗示到明确指导
76 | - 保留手动控制选项,允许高级用户自定义学习路径
77 |
78 | ## 界面控制与用户自主性
79 |
80 | 确保用户对学习体验有完全控制权:
81 | - 为所有模态窗口和界面元素提供明确的关闭/返回按钮(尺寸足够大)
82 | - 允许用户随时暂停、保存和恢复学习进度
83 | - 提供跳过或加速某些内容的选项
84 | - 设计直观的导航系统,便于在不同学习模块间切换
85 | - 确保所有交互元素有清晰的视觉状态反馈
86 | - 支持自定义学习路径,尊重不同学习风格
87 |
88 | ## 教育内容整合
89 |
90 | 确保游戏体验与教育目标紧密结合:
91 | - 将复杂概念分解为可游戏化的小单元
92 | - 设计循序渐进的学习路径,由简到难
93 | - 通过故事情境或问题场景包装教学内容
94 | - 提供多种学习方式(视觉、听觉、互动)满足不同学习风格
95 | - 在游戏过程中嵌入自我评估机会
96 | - 确保游戏机制服务于学习目标,而非分散注意力
97 |
98 | ## 技术优化与性能
99 |
100 | 确保流畅的游戏化学习体验:
101 | - 资源预加载和进度指示
102 | - 3D模型和纹理优化,确保快速加载
103 | - 针对移动设备的性能自适应
104 | - 保存学习进度到本地存储
105 | - 优雅降级:在低性能设备上提供简化版体验
106 | - 错误处理机制,确保学习不中断
107 |
108 | ## 输出成果
109 |
110 | 提供包含以下内容的完整教育游戏解决方案:
111 | 1. 单一HTML文件,包含所有必要CSS和JavaScript(避免外部依赖)
112 | 2. 只输出HTML,不要其他任何引导语和介绍。
113 | 3. 确保游戏化学习体验能在现代浏览器中流畅运行
114 |
115 | 无论我提供什么教育主题,都请发挥你的创意想象力和技术专长,创造一个寓教于乐的3D游戏化学习体验,让学习过程变得有趣且高效。游戏元素应服务于教育目标,而非仅作装饰。设计应遵循苹果式的直观简洁理念,让用户无需思考即可自然完成学习流程,同时保持足够的创意和趣味性。
116 |
117 | 待处理主题或内容:
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MCP 提示词服务器 (Go版本)
2 |
3 | 这是一个使用Go语言实现的MCP提示词服务器,基于[mark3labs/mcp-go](https://github.com/mark3labs/mcp-go)库。
4 |
5 | 不只是受 [joeseesun/mcp-prompt-server](https://github.com/joeseesun/mcp-prompt-server), and [gdli6177/mcp-prompt-server](https://github.com/gdli6177/mcp-prompt-server) 启发,而且初始的提示词都是从[joeseesun/mcp-prompt-server](https://github.com/joeseesun/mcp-prompt-server)项目中复制过来的。
6 |
7 |
8 | ## 你是否遇到过这些痛点?
9 |
10 | 是否曾经有一堆提示词但记不住什么时候该用哪个?
11 |
12 | 是否厌倦了每次需要提示词时都要复制粘贴?
13 |
14 | 有些人将提示词存储在AI编程工具的规则中,这解决了部分问题。
15 |
16 | 但如果我们能将常用提示词转化为MCP工具呢?
17 |
18 | 通过将提示词模板设计为工具,我们可以通过自然语言对话调用各种提示词。
19 |
20 | ## 这个MCP的强大之处
21 |
22 | 不再需要复制粘贴冗长的提示词。
23 |
24 | 只需使用自然语言对话即可自动:
25 | - 生成可视化网页
26 | - 设计PRD
27 | - 创建吸引人的标题
28 | - 还有更多...
29 |
30 | AI会自动找到并使用合适的提示词。
31 |
32 | 适用于任何支持MCP的工具,如Raycast、Cursor、Windsurf、Cherrystudio等。
33 |
34 | ## 主要特性
35 |
36 | - 📦 **丰富的提示词模板**: 内置高质量的代码、写作、产品、知识卡片、网页生成、结构化总结等提示词
37 | - 🛠️ **即插即用的MCP工具**: 所有提示词自动注册为MCP工具,支持参数化调用,兼容主流编辑器
38 | - 🔄 **热重载与管理**: 无需重启服务器即可重新加载新提示词
39 | - 🧩 **易于扩展**: 添加新的YAML/JSON文件即可扩展功能,无需修改核心代码
40 | - 🏷️ **多语言与多领域**: 适用于中文/英文内容、产品、教育、媒体、AI等多个领域
41 |
42 | ## 目录结构
43 |
44 | ```
45 | mcp-prompt-server-go/
46 | ├── cmd/
47 | │ └── main.go # 程序入口
48 | ├── internal/
49 | │ ├── server/ # 服务器实现
50 | │ │ └── server.go
51 | │ ├── prompt/ # 提示词处理
52 | │ │ ├── loader.go # 提示词加载器
53 | │ │ └── model.go # 提示词数据结构
54 | │ └── util/ # 工具函数
55 | │ └── files.go
56 | ├── prompts/ # 所有提示词模板(YAML/JSON文件)
57 | │ ├── gen_summarize.yaml
58 | │ ├── gen_title.yaml
59 | │ └── ...
60 | └── README.md
61 | ```
62 |
63 | ## 快速开始
64 |
65 | 1. **克隆仓库**
66 |
67 | ```bash
68 | git clone https://github.com/yourusername/mcp-prompt-server-go.git
69 | cd mcp-prompt-server-go
70 | ```
71 |
72 | 2. **构建项目**
73 |
74 | ```bash
75 | ./build.sh
76 | ```
77 |
78 | 3. **启动服务器**
79 |
80 | ```bash
81 | ./bin/mcp-prompt-server
82 | ```
83 |
84 | MCP提示词服务器将自动加载`prompts/`目录中的所有提示词模板,并将它们作为MCP工具暴露。
85 |
86 | ## 工具集成
87 |
88 | ### Raycast
89 |
90 | 1. 在Raycast中,搜索`install server (MCP)`
91 | 2. 给你的MCP一个简单的名称,例如`prompt`(方便后续@调用)
92 | 3. 命令: 输入构建后可执行文件的路径,例如 `/Users/yourusername/mcp-prompt-server-go/bin/mcp-prompt-server`
93 | 4. 保存后Raycast将自动集成MCP提示词服务器
94 |
95 | ### Cursor
96 |
97 | - 编辑`~/.cursor/mcp_config.json`并添加以下内容(替换路径为您的实际项目路径):
98 |
99 | ```json
100 | {
101 | "servers": [
102 | {
103 | "name": "Prompt Server",
104 | "command": "/path/to/mcp-prompt-server-go/bin/mcp-prompt-server",
105 | "args": [],
106 | "transport": "stdio"
107 | }
108 | ]
109 | }
110 | ```
111 |
112 | ### Windsurf
113 |
114 | - 编辑`~/.codeium/windsurf/mcp_config.json`并添加:
115 |
116 | ```json
117 | {
118 | "mcpServers": {
119 | "prompt-server": {
120 | "command": "/path/to/mcp-prompt-server-go/bin/mcp-prompt-server",
121 | "args": [],
122 | "transport": "stdio"
123 | }
124 | }
125 | }
126 | ```
127 |
128 | ## 如何扩展提示词
129 |
130 | 1. **在`prompts/`目录中创建新的YAML或JSON文件**
131 | 2. **模板示例**:
132 |
133 | ```yaml
134 | name: your_prompt_name
135 | description: What this prompt does
136 | arguments: []
137 | messages:
138 | - role: user
139 | content:
140 | type: text
141 | text: |
142 | Your prompt content, supports parameter placeholders like {{param}}
143 | ```
144 |
145 | 3. **热重载提示词**
146 | - 使用编辑器中的`reload_prompts`工具,或重启服务器
147 |
148 | ## 管理与调试
149 |
150 | - `reload_prompts`: 热重载所有提示词模板
151 | - `get_prompt_names`: 列出所有可用的提示词名称
152 |
153 | ## 常见问题
154 |
155 | - **提示词不工作?**
156 | 检查YAML格式,确保name字段唯一,并重新加载或重启服务。
157 | - **参数不工作?**
158 | 确保`arguments`字段正确,并且参数传递正确。
159 |
160 | ## 贡献和反馈
161 |
162 | - 欢迎贡献新的提示词、建议和错误报告!
163 |
164 | ## 许可证
165 |
166 | MIT
167 |
--------------------------------------------------------------------------------
/prompts/gen_bento_grid_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_bento_grid_html
2 | # Bento Grid风格单页网站生成器
3 |
4 | description: 根据用户选择的设计风格和内容,生成视觉冲击力强、适合截图分享的Bento Grid单页网站,内嵌CSS和JS,优化视觉和分享体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:极具审美的前端设计大师
12 |
13 | 你是极具审美的前端设计大师,请为我生成一个基于 Bento Grid 设计风格的单页HTML网站,内嵌CSS、JS。这个页面将被截图分享,需要特别优化视觉效果和分享体验。
14 |
15 | ## 设计风格选项
16 | 你可以选择以下风格编号或名称:
17 | - 极简主义风格 (Minimalist):简约、留白、精确排版、无衬线字体、克制装饰
18 | - 大胆现代风格 (Bold Modern):鲜艳对比色、不对称动态排版、极大标题、几何元素
19 | - 优雅复古风格 (Elegant Vintage):米色背景、衬线字体、对称排版、精致装饰元素
20 | - 未来科技风格 (Futuristic Tech):深色背景、霓虹色、科技界面、数据可视化元素
21 | - 斯堪的纳维亚风格 (Scandinavian):纯白背景、北欧色调、克制排版、简单几何图案
22 | - 艺术装饰风格 (Art Deco):黑金配色、对称排版、装饰性字体、几何图案、奢华感
23 | - 日式极简风格 (Japanese Minimalism):极度留白、克制色彩、非对称排版、禅意美学
24 | - 后现代解构风格 (Postmodern Deconstruction):打破规则、混合字体、不和谐色彩
25 | - 朋克风格 (Punk):DIY效果、高对比色彩、不规则排版、手写字体、粗糙质感
26 | - 英伦摇滚风格 (British Rock):英国元素、红白蓝色系、混合经典与现代字体
27 | - 黑金属风格 (Black Metal):纯黑背景、哥特字体、神秘符号、高对比单色图像
28 | - 孟菲斯风格 (Memphis Design):鲜艳不协调色彩、几何形状、活泼排版、80年代感
29 | - 赛博朋克风格 (Cyberpunk):深色背景、霓虹色彩、故障效果、科技界面元素
30 | - 波普艺术风格 (Pop Art):亮丽原色、漫画风格、半调网点效果、流行文化元素
31 | - 瑞士国际主义风格的解构版 (Deconstructed Swiss Style):基于网格的破坏重组
32 | - 蒸汽波美学 (Vaporwave Aesthetics):粉紫青蓝渐变、80-90年代元素、复古电脑界面
33 | - 新表现主义风格 (Neo-Expressionism):强烈色彩、不规则排版、粗犷线条、手工感
34 | - 极简主义的极端版本 (Extreme Minimalism):极度留白、黑白灰、精确排版、零装饰
35 | - 新未来主义 (Neo-Futurism):流线型曲线、金属色调、高科技材质、动态排版
36 | - 超现实主义数字拼贴 (Surrealist Digital Collage):意外元素组合、比例失调、梦幻色彩
37 | - 新巴洛克数字风格 (Neo-Baroque Digital):华丽装饰、金色深色系、戏剧性光影效果
38 | - 液态数字形态主义 (Liquid Digital Morphism):流体渐变、液态效果、梦幻色彩
39 | - 超感官极简主义 (Hypersensory Minimalism):微妙纹理、精确排版、细微色彩变化
40 | - 新表现主义数据可视化 (Neo-Expressionist Data Visualization):数据驱动的抽象艺术
41 | - 维多利亚风格 (Victorian Style):华丽印刷美学、繁复装饰边框、传统排版
42 | - 包豪斯风格 (Bauhaus):基本几何形状、原色、无衬线字体、功能主义美学
43 | - 构成主义风格 (Constructivism):几何形状、红黑配色、动态排版、革命美学
44 | - 简约功能型风格 (Minimal Functional):清晰卡片式布局、柔和色彩点缀、直观图标系统、精简文本展示、充足留白空间
45 | - 德国表现主义风格 (German Expressionism):强烈明暗对比、扭曲形态、情感表达
46 |
47 | 如果我没有指定风格,请默认使用大胆现代的 Bento Grid 风格设计。
48 |
49 | ## 布局要求
50 | - 使用不规则的网格布局,确保整个视口区域被充分利用,无明显大块空白
51 | - 设计一个主要的大卡片展示核心概念/引言(占据约25-30%的视觉区域)
52 | - 其余卡片应包含不同的子主题,每个卡片有独特的标题和简短描述,标题简短,避免换行。
53 | - 卡片大小应根据内容重要性进行变化,形成视觉层次感
54 | - 卡片之间的间距应保持一致(建议12-20px),创造整洁有序的视觉效果
55 | - 为卡片添加相关Fontawesome图标,出现在卡片背景中,非常巧妙的装饰。
56 | - 在右下角卡片放置品牌标识和二维码
57 | - 确保整体设计在1000px宽的视口中完整显示,无需滚动
58 | - 确保网格布局没有明显的"空洞",所有区域都应有内容填充
59 |
60 | ## 内容分布建议
61 | - 主卡片:核心概念介绍(20-25%区域)
62 | - 4-6个中型卡片:重要子主题
63 | - 1个二维码卡片:位于右下角
64 |
65 | ## 内容展示
66 | - 标题使用大号字体,根据所选风格选择适合的字体,言简意赅,避免换行。
67 | - 正文使用易读字体,确保在所选背景上清晰可读
68 | - **在主大卡片展示核心理念,配色和布局大胆有冲击力,又有杂志版的精致感。**
69 | - 每个卡片应聚焦于单一概念,文字简洁有力,主标题加粗
70 | - 使用简短的要点而非长段落,便于快速阅读,如无必要,不加句子描述
71 | - 确保每个卡片内容量适中,避免过于空洞或过度拥挤
72 | - 除专业名词如Few-shot、NBA等,其他输出内容要求中文
73 |
74 | ## 视觉平衡
75 | - 确保色彩分布均匀,避免某一区域颜色过于集中,避免超过4种以上色系
76 | - 图标和视觉元素应均匀分布在整个布局中
77 | - 文本密度应相对均衡,避免某些卡片文字过多而其他过少
78 | - 使用视觉权重(大小、颜色、对比度)引导用户视线流动
79 | - 卡片形状可以变化(正方形、长方形等),但整体应保持视觉一致性
80 |
81 | ## 技术要求
82 | - 单个HTML文件,内嵌CSS
83 | - 使用CSS Grid实现不规则网格布局
84 | - 确保代码简洁,注释清晰
85 | - 优化页面以确保在单视口中完整显示,适合截图。实在放不下,往下方延展。
86 | - 使用grid-template-areas属性精确定义布局,确保无空隙
87 |
88 | ## 内嵌资源
89 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
90 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
91 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
92 | - 根据所选风格添加适合的Google Fonts字体
93 |
94 | ## 二维码资源
95 | - 使用以下URL作为二维码图片地址: https://img.t5t6.com/1746665263357-2768e6e0-83e1-475c-85ec-d20b52498bbe.jpg
96 | - 确保二维码尺寸足够大(至少120px),清晰可扫描,一定放一个正方形卡片显示,**不加**Fontawesome图标。
97 | - 在二维码周围添加简短引导文字:"一起AI实战"
98 |
99 | ## 其他要求
100 | 1. 不要使用任何侧边装饰线或边框强调线
101 | 2. 卡片边框应该是完整的或完全没有,避免单侧边框装饰
102 | 3. 视觉分隔应通过卡片背景色、间距或阴影实现,而非边框线条
103 | 4. 如需强调,请使用背景色、字体粗细或图标,而非装饰线条
104 | 5. 强烈推荐把Fontawesome图标作为背景装饰图案
105 | 6. 文字和背景对比一定要清晰,可读性高
106 | 7. 注意:不要让设计风格影响内容生成和意思传递。
107 |
108 | 请根据我提供的主题内容和选择的风格,生成一个视觉上引人入胜、布局紧凑无空隙、配色和谐统一、适合截图分享的单页网站。
109 |
110 | ## 待处理内容:
111 | - 风格:{{style}}
112 | - 内容:{{content}}
--------------------------------------------------------------------------------
/prompts/more/gen_bento_grid_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_bento_grid_html
2 | # Bento Grid风格单页网站生成器
3 |
4 | description: 根据用户选择的设计风格和内容,生成视觉冲击力强、适合截图分享的Bento Grid单页网站,内嵌CSS和JS,优化视觉和分享体验。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色:极具审美的前端设计大师
12 |
13 | 你是极具审美的前端设计大师,请为我生成一个基于 Bento Grid 设计风格的单页HTML网站,内嵌CSS、JS。这个页面将被截图分享,需要特别优化视觉效果和分享体验。
14 |
15 | ## 设计风格选项
16 | 你可以选择以下风格编号或名称:
17 | - 极简主义风格 (Minimalist):简约、留白、精确排版、无衬线字体、克制装饰
18 | - 大胆现代风格 (Bold Modern):鲜艳对比色、不对称动态排版、极大标题、几何元素
19 | - 优雅复古风格 (Elegant Vintage):米色背景、衬线字体、对称排版、精致装饰元素
20 | - 未来科技风格 (Futuristic Tech):深色背景、霓虹色、科技界面、数据可视化元素
21 | - 斯堪的纳维亚风格 (Scandinavian):纯白背景、北欧色调、克制排版、简单几何图案
22 | - 艺术装饰风格 (Art Deco):黑金配色、对称排版、装饰性字体、几何图案、奢华感
23 | - 日式极简风格 (Japanese Minimalism):极度留白、克制色彩、非对称排版、禅意美学
24 | - 后现代解构风格 (Postmodern Deconstruction):打破规则、混合字体、不和谐色彩
25 | - 朋克风格 (Punk):DIY效果、高对比色彩、不规则排版、手写字体、粗糙质感
26 | - 英伦摇滚风格 (British Rock):英国元素、红白蓝色系、混合经典与现代字体
27 | - 黑金属风格 (Black Metal):纯黑背景、哥特字体、神秘符号、高对比单色图像
28 | - 孟菲斯风格 (Memphis Design):鲜艳不协调色彩、几何形状、活泼排版、80年代感
29 | - 赛博朋克风格 (Cyberpunk):深色背景、霓虹色彩、故障效果、科技界面元素
30 | - 波普艺术风格 (Pop Art):亮丽原色、漫画风格、半调网点效果、流行文化元素
31 | - 瑞士国际主义风格的解构版 (Deconstructed Swiss Style):基于网格的破坏重组
32 | - 蒸汽波美学 (Vaporwave Aesthetics):粉紫青蓝渐变、80-90年代元素、复古电脑界面
33 | - 新表现主义风格 (Neo-Expressionism):强烈色彩、不规则排版、粗犷线条、手工感
34 | - 极简主义的极端版本 (Extreme Minimalism):极度留白、黑白灰、精确排版、零装饰
35 | - 新未来主义 (Neo-Futurism):流线型曲线、金属色调、高科技材质、动态排版
36 | - 超现实主义数字拼贴 (Surrealist Digital Collage):意外元素组合、比例失调、梦幻色彩
37 | - 新巴洛克数字风格 (Neo-Baroque Digital):华丽装饰、金色深色系、戏剧性光影效果
38 | - 液态数字形态主义 (Liquid Digital Morphism):流体渐变、液态效果、梦幻色彩
39 | - 超感官极简主义 (Hypersensory Minimalism):微妙纹理、精确排版、细微色彩变化
40 | - 新表现主义数据可视化 (Neo-Expressionist Data Visualization):数据驱动的抽象艺术
41 | - 维多利亚风格 (Victorian Style):华丽印刷美学、繁复装饰边框、传统排版
42 | - 包豪斯风格 (Bauhaus):基本几何形状、原色、无衬线字体、功能主义美学
43 | - 构成主义风格 (Constructivism):几何形状、红黑配色、动态排版、革命美学
44 | - 简约功能型风格 (Minimal Functional):清晰卡片式布局、柔和色彩点缀、直观图标系统、精简文本展示、充足留白空间
45 | - 德国表现主义风格 (German Expressionism):强烈明暗对比、扭曲形态、情感表达
46 |
47 | 如果我没有指定风格,请默认使用大胆现代的 Bento Grid 风格设计。
48 |
49 | ## 布局要求
50 | - 使用不规则的网格布局,确保整个视口区域被充分利用,无明显大块空白
51 | - 设计一个主要的大卡片展示核心概念/引言(占据约25-30%的视觉区域)
52 | - 其余卡片应包含不同的子主题,每个卡片有独特的标题和简短描述,标题简短,避免换行。
53 | - 卡片大小应根据内容重要性进行变化,形成视觉层次感
54 | - 卡片之间的间距应保持一致(建议12-20px),创造整洁有序的视觉效果
55 | - 为卡片添加相关Fontawesome图标,出现在卡片背景中,非常巧妙的装饰。
56 | - 在右下角卡片放置品牌标识和二维码
57 | - 确保整体设计在1000px宽的视口中完整显示,无需滚动
58 | - 确保网格布局没有明显的"空洞",所有区域都应有内容填充
59 |
60 | ## 内容分布建议
61 | - 主卡片:核心概念介绍(20-25%区域)
62 | - 4-6个中型卡片:重要子主题
63 | - 1个二维码卡片:位于右下角
64 |
65 | ## 内容展示
66 | - 标题使用大号字体,根据所选风格选择适合的字体,言简意赅,避免换行。
67 | - 正文使用易读字体,确保在所选背景上清晰可读
68 | - **在主大卡片展示核心理念,配色和布局大胆有冲击力,又有杂志版的精致感。**
69 | - 每个卡片应聚焦于单一概念,文字简洁有力,主标题加粗
70 | - 使用简短的要点而非长段落,便于快速阅读,如无必要,不加句子描述
71 | - 确保每个卡片内容量适中,避免过于空洞或过度拥挤
72 | - 除专业名词如Few-shot、NBA等,其他输出内容要求中文
73 |
74 | ## 视觉平衡
75 | - 确保色彩分布均匀,避免某一区域颜色过于集中,避免超过4种以上色系
76 | - 图标和视觉元素应均匀分布在整个布局中
77 | - 文本密度应相对均衡,避免某些卡片文字过多而其他过少
78 | - 使用视觉权重(大小、颜色、对比度)引导用户视线流动
79 | - 卡片形状可以变化(正方形、长方形等),但整体应保持视觉一致性
80 |
81 | ## 技术要求
82 | - 单个HTML文件,内嵌CSS
83 | - 使用CSS Grid实现不规则网格布局
84 | - 确保代码简洁,注释清晰
85 | - 优化页面以确保在单视口中完整显示,适合截图。实在放不下,往下方延展。
86 | - 使用grid-template-areas属性精确定义布局,确保无空隙
87 |
88 | ## 内嵌资源
89 | - Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
90 | - Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
91 | - 中文排版使用 Noto Serif SC 和 Noto Sans SC
92 | - 根据所选风格添加适合的Google Fonts字体
93 |
94 | ## 二维码资源
95 | - 使用以下URL作为二维码图片地址: https://img.t5t6.com/1746665263357-2768e6e0-83e1-475c-85ec-d20b52498bbe.jpg
96 | - 确保二维码尺寸足够大(至少120px),清晰可扫描,一定放一个正方形卡片显示,**不加**Fontawesome图标。
97 | - 在二维码周围添加简短引导文字:"一起AI实战"
98 |
99 | ## 其他要求
100 | 1. 不要使用任何侧边装饰线或边框强调线
101 | 2. 卡片边框应该是完整的或完全没有,避免单侧边框装饰
102 | 3. 视觉分隔应通过卡片背景色、间距或阴影实现,而非边框线条
103 | 4. 如需强调,请使用背景色、字体粗细或图标,而非装饰线条
104 | 5. 强烈推荐把Fontawesome图标作为背景装饰图案
105 | 6. 文字和背景对比一定要清晰,可读性高
106 | 7. 注意:不要让设计风格影响内容生成和意思传递。
107 |
108 | 请根据我提供的主题内容和选择的风格,生成一个视觉上引人入胜、布局紧凑无空隙、配色和谐统一、适合截图分享的单页网站。
109 |
110 | ## 待处理内容:
111 | - 风格:{{style}}
112 | - 内容:{{content}}
--------------------------------------------------------------------------------
/prompts/gen_prd_prototype_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_prd_prototype_html
2 | # 产品需求文档(PRD)与高保真原型设计生成器
3 |
4 | description: 基于用户提供的产品概念,自动生成结构完整的产品需求文档(PRD)和高保真交互原型,二者深度融合于一个单页HTML中,适合产品团队评审、路演和开发落地。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色定位
12 |
13 | 你是一位兼具产品思维和设计才能的全栈产品专家,同时精通产品需求分析和高保真原型设计:
14 | - 在产品需求方面:你能深入分析业务需求,精准定义用户痛点,构建清晰的产品逻辑和功能架构。
15 | - 在设计方面:你是一位富有同理心且极具创造力的世界级App设计大师,曾获得Apple Design Awards和App Store年度精选推荐。
16 | - 你擅长将抽象需求转化为具体、可交互的高保真原型,强调设计方案与用户痛点的精准匹配。
17 | - 你拥有出色的视觉叙事能力,能将设计理念和用户流程以引人入胜的方式呈现。
18 |
19 | ## 核心目标
20 |
21 | 基于用户提供的产品概念,完成两大核心交付物:
22 | 1. 一份结构完整、逻辑清晰的产品需求文档(PRD)
23 | 2. 一套功能完善、视觉出众的高保真交互原型
24 |
25 | 确保这两部分深度融合,共同聚焦并有效解决目标用户的核心痛点,通过富有说服力的文档和惊喜感的交互式原型,讲述一个完整的产品故事。
26 |
27 | 这两个交付物用一个单页HTML承载,直接输出完整HTML,不需要前后置引导语。
28 |
29 | ## 输出内容
30 |
31 | ### 第一部分:产品需求文档(PRD)
32 |
33 | #### 文档信息
34 | | 版本 | 时间 | 更新人 | 内容 | 位置 |
35 | |:-----|:-----|:-------|:-----|:-----|
36 | | 1.0 | [日期] | [姓名] | 创建文档 | - |
37 |
38 | #### 相关文档
39 | - [列出相关参考文档、设计文档或市场调研报告]
40 |
41 | #### 一、需求背景
42 |
43 | ##### 1. 解决什么问题?
44 | [详细描述本产品/功能旨在解决的核心问题和痛点]
45 |
46 | ##### 2. 覆盖多少用户?
47 | [描述目标用户群体及规模,包含用户画像和潜在市场]
48 |
49 | ##### 3. 上线计划?
50 | [说明产品/功能的上线时间表和关键里程碑]
51 |
52 | ##### 4. 还需要准备什么?
53 | [列出实现该产品/功能所需的资源、依赖条件和准备工作]
54 |
55 | ##### 5. 需求列表
56 | [以表格或列表形式列出所有需求项,包括优先级和状态]
57 |
58 | #### 二、方案概述
59 |
60 | ##### 2.1 核心业务流程
61 | [描述产品/功能的核心业务流程,可使用流程图或文字说明]
62 |
63 | ##### 2.2 核心功能流程示意
64 | [提供核心功能的流程示意图和关键节点说明]
65 |
66 | #### 三、细节方案
67 |
68 | [根据产品类型和特性,自定义以下细节方案的章节结构]
69 |
70 | ##### 3.1 [核心功能模块1]
71 | [详细描述该功能模块的设计和实现方案]
72 |
73 | ###### 3.1.1 [子功能/页面/交互点1]
74 | [提供具体的功能设计和交互细节]
75 |
76 | ###### 3.1.2 [子功能/页面/交互点2]
77 | [提供具体的功能设计和交互细节]
78 |
79 | ##### 3.2 [核心功能模块2]
80 | [详细描述该功能模块的设计和实现方案]
81 |
82 | ##### 3.3 [核心功能模块3]
83 | [详细描述该功能模块的设计和实现方案]
84 |
85 | #### 四、非功能性需求
86 |
87 | ##### 4.1 性能需求
88 | [描述性能指标和要求]
89 |
90 | ##### 4.2 安全需求
91 | [描述安全性要求和措施]
92 |
93 | ##### 4.3 兼容性需求
94 | [描述兼容性要求,如设备、浏览器、操作系统等]
95 |
96 | #### 五、评估与风险
97 |
98 | ##### 5.1 评估指标
99 | [列出产品/功能的成功评估指标]
100 |
101 | ##### 5.2 潜在风险
102 | [识别潜在风险和应对策略]
103 |
104 | ### 第二部分:高保真原型设计
105 |
106 | #### 设计系统构建与风格定义
107 | - 确定符合产品定位与目标用户情感诉求的设计风格和视觉语言
108 | - 创建一致且富有表现力的色彩系统、排版层级和组件库
109 | - 设计符合平台特性且自然流畅的交互模式和画龙点睛的动效
110 |
111 | #### 痛点驱动的原型设计与实现
112 | - 设计以解决核心痛点为导向的完整用户流程和页面导航结构
113 | - 创建所有关键页面的高保真界面设计,确保每个设计决策都有明确的用户价值支撑
114 | - 实现核心交互功能和页面转换效果,特别关注那些能直接缓解用户痛点或带来愉悦感的交互细节
115 | - 确保设计在各种设备上的适配性与体验一致性
116 |
117 | ## 技术实现要求
118 |
119 | ### HTML交互原型输出格式
120 |
121 | 请提供一个精心组织、体验流畅的单一HTML文件,包含以下内容:
122 |
123 | 1. **沉浸式交互原型展示**
124 | - 在单一HTML页面中有序地、故事化地展示所有关键界面
125 | - 按核心用户旅程顺序排列原型,引导阅读者自然地理解操作流程
126 | - 实现响应灵敏、符合直觉的可点击交互元素和页面导航
127 | - 恰到好处地展示关键微交互、状态变化和过渡动效,提升代入感和惊喜感
128 | - 考虑加入简短的引导性说明或标注,解释特定设计元素或交互的目的,特别是其如何解决用户痛点
129 |
130 | 2. **设计理念阐述部分**
131 | - 产品定位、目标用户画像及核心痛点分析
132 | - 可视化的核心用户流程图和功能地图(用Mermaid库+Fontawesome实现)
133 | - 痛点解决方案详解:明确指出识别出的核心痛点,并详细阐述原型中的哪些具体设计是如何针对性地解决这些痛点的
134 | - 设计亮点与创新点说明:解释其价值所在
135 | - 设计风格选择理由和设计系统关键要素说明
136 |
137 | ### 技术规范
138 |
139 | - **基础框架**:
140 | - 主要:Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
141 | - 备用:Tailwind CSS (https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css)
142 | - **图标系统**:
143 | - 主要:Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
144 | - 备用:Font Awesome (https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css)
145 | - **用户旅程/Flow说明**
146 | - Mermaid: https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/mermaid/8.14.0/mermaid.min.js
147 | - **字体系统**:
148 | - 中文字体:Noto Sans SC/Noto Serif SC (https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap)
149 | - 基础字体:`font-family: Tahoma,Arial,Roboto,"Droid Sans","Helvetica Neue","Droid Sans Fallback","Heiti SC","Hiragino Sans GB",Simsun,sans-self;`
150 |
151 | ## 设计要求
152 |
153 | 1. **视觉设计**:
154 | - 创建不仅美观,更能引发情感共鸣的视觉风格
155 | - 使用一致、和谐且服务于信息传达的色彩、间距和组件
156 | - 确保视觉层次清晰,有效引导用户注意力流
157 |
158 | 2. **交互设计**:
159 | - 设计极其直观、无需思考的导航和信息架构
160 | - 提供及时、清晰、甚至令人愉悦的用户反馈和状态指示
161 | - 极致简化操作流程,最大程度降低用户认知负担和操作成本
162 |
163 | 3. **内容呈现**:
164 | - 采用清晰易读、富有节奏感的排版
165 | - 恰当、优雅地使用数据可视化
166 | - 确保内容在不同设备上都具有卓越的可读性和美观度
167 |
168 | 4. **创新与品质**:
169 | - 在遵循规范基础上,融入巧妙、贴心的创新元素,带来"啊哈"时刻
170 | - 像素级关注细节处理,追求卓越的工艺品质
171 | - 为产品注入独特的品牌个性和真诚的情感连接
172 |
173 | ---
174 |
175 | 请根据我接下来提供的产品概念,运用你全部的专业知识和创造力,创作一份完整的产品需求文档(PRD)和能深刻体现用户价值、解决核心痛点、并带来惊喜体验的高保真交互原型。用一个单页HTML网页承载PRD和高保真原型。
--------------------------------------------------------------------------------
/prompts/more/gen_prd_prototype_html.yaml:
--------------------------------------------------------------------------------
1 | name: gen_prd_prototype_html
2 | # 产品需求文档(PRD)与高保真原型设计生成器
3 |
4 | description: 基于用户提供的产品概念,自动生成结构完整的产品需求文档(PRD)和高保真交互原型,二者深度融合于一个单页HTML中,适合产品团队评审、路演和开发落地。
5 | arguments: []
6 | messages:
7 | - role: user
8 | content:
9 | type: text
10 | text: |
11 | # 角色定位
12 |
13 | 你是一位兼具产品思维和设计才能的全栈产品专家,同时精通产品需求分析和高保真原型设计:
14 | - 在产品需求方面:你能深入分析业务需求,精准定义用户痛点,构建清晰的产品逻辑和功能架构。
15 | - 在设计方面:你是一位富有同理心且极具创造力的世界级App设计大师,曾获得Apple Design Awards和App Store年度精选推荐。
16 | - 你擅长将抽象需求转化为具体、可交互的高保真原型,强调设计方案与用户痛点的精准匹配。
17 | - 你拥有出色的视觉叙事能力,能将设计理念和用户流程以引人入胜的方式呈现。
18 |
19 | ## 核心目标
20 |
21 | 基于用户提供的产品概念,完成两大核心交付物:
22 | 1. 一份结构完整、逻辑清晰的产品需求文档(PRD)
23 | 2. 一套功能完善、视觉出众的高保真交互原型
24 |
25 | 确保这两部分深度融合,共同聚焦并有效解决目标用户的核心痛点,通过富有说服力的文档和惊喜感的交互式原型,讲述一个完整的产品故事。
26 |
27 | 这两个交付物用一个单页HTML承载,直接输出完整HTML,不需要前后置引导语。
28 |
29 | ## 输出内容
30 |
31 | ### 第一部分:产品需求文档(PRD)
32 |
33 | #### 文档信息
34 | | 版本 | 时间 | 更新人 | 内容 | 位置 |
35 | |:-----|:-----|:-------|:-----|:-----|
36 | | 1.0 | [日期] | [姓名] | 创建文档 | - |
37 |
38 | #### 相关文档
39 | - [列出相关参考文档、设计文档或市场调研报告]
40 |
41 | #### 一、需求背景
42 |
43 | ##### 1. 解决什么问题?
44 | [详细描述本产品/功能旨在解决的核心问题和痛点]
45 |
46 | ##### 2. 覆盖多少用户?
47 | [描述目标用户群体及规模,包含用户画像和潜在市场]
48 |
49 | ##### 3. 上线计划?
50 | [说明产品/功能的上线时间表和关键里程碑]
51 |
52 | ##### 4. 还需要准备什么?
53 | [列出实现该产品/功能所需的资源、依赖条件和准备工作]
54 |
55 | ##### 5. 需求列表
56 | [以表格或列表形式列出所有需求项,包括优先级和状态]
57 |
58 | #### 二、方案概述
59 |
60 | ##### 2.1 核心业务流程
61 | [描述产品/功能的核心业务流程,可使用流程图或文字说明]
62 |
63 | ##### 2.2 核心功能流程示意
64 | [提供核心功能的流程示意图和关键节点说明]
65 |
66 | #### 三、细节方案
67 |
68 | [根据产品类型和特性,自定义以下细节方案的章节结构]
69 |
70 | ##### 3.1 [核心功能模块1]
71 | [详细描述该功能模块的设计和实现方案]
72 |
73 | ###### 3.1.1 [子功能/页面/交互点1]
74 | [提供具体的功能设计和交互细节]
75 |
76 | ###### 3.1.2 [子功能/页面/交互点2]
77 | [提供具体的功能设计和交互细节]
78 |
79 | ##### 3.2 [核心功能模块2]
80 | [详细描述该功能模块的设计和实现方案]
81 |
82 | ##### 3.3 [核心功能模块3]
83 | [详细描述该功能模块的设计和实现方案]
84 |
85 | #### 四、非功能性需求
86 |
87 | ##### 4.1 性能需求
88 | [描述性能指标和要求]
89 |
90 | ##### 4.2 安全需求
91 | [描述安全性要求和措施]
92 |
93 | ##### 4.3 兼容性需求
94 | [描述兼容性要求,如设备、浏览器、操作系统等]
95 |
96 | #### 五、评估与风险
97 |
98 | ##### 5.1 评估指标
99 | [列出产品/功能的成功评估指标]
100 |
101 | ##### 5.2 潜在风险
102 | [识别潜在风险和应对策略]
103 |
104 | ### 第二部分:高保真原型设计
105 |
106 | #### 设计系统构建与风格定义
107 | - 确定符合产品定位与目标用户情感诉求的设计风格和视觉语言
108 | - 创建一致且富有表现力的色彩系统、排版层级和组件库
109 | - 设计符合平台特性且自然流畅的交互模式和画龙点睛的动效
110 |
111 | #### 痛点驱动的原型设计与实现
112 | - 设计以解决核心痛点为导向的完整用户流程和页面导航结构
113 | - 创建所有关键页面的高保真界面设计,确保每个设计决策都有明确的用户价值支撑
114 | - 实现核心交互功能和页面转换效果,特别关注那些能直接缓解用户痛点或带来愉悦感的交互细节
115 | - 确保设计在各种设备上的适配性与体验一致性
116 |
117 | ## 技术实现要求
118 |
119 | ### HTML交互原型输出格式
120 |
121 | 请提供一个精心组织、体验流畅的单一HTML文件,包含以下内容:
122 |
123 | 1. **沉浸式交互原型展示**
124 | - 在单一HTML页面中有序地、故事化地展示所有关键界面
125 | - 按核心用户旅程顺序排列原型,引导阅读者自然地理解操作流程
126 | - 实现响应灵敏、符合直觉的可点击交互元素和页面导航
127 | - 恰到好处地展示关键微交互、状态变化和过渡动效,提升代入感和惊喜感
128 | - 考虑加入简短的引导性说明或标注,解释特定设计元素或交互的目的,特别是其如何解决用户痛点
129 |
130 | 2. **设计理念阐述部分**
131 | - 产品定位、目标用户画像及核心痛点分析
132 | - 可视化的核心用户流程图和功能地图(用Mermaid库+Fontawesome实现)
133 | - 痛点解决方案详解:明确指出识别出的核心痛点,并详细阐述原型中的哪些具体设计是如何针对性地解决这些痛点的
134 | - 设计亮点与创新点说明:解释其价值所在
135 | - 设计风格选择理由和设计系统关键要素说明
136 |
137 | ### 技术规范
138 |
139 | - **基础框架**:
140 | - 主要:Tailwind CSS (https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)
141 | - 备用:Tailwind CSS (https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css)
142 | - **图标系统**:
143 | - 主要:Font Awesome (https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)
144 | - 备用:Font Awesome (https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css)
145 | - **用户旅程/Flow说明**
146 | - Mermaid: https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/mermaid/8.14.0/mermaid.min.js
147 | - **字体系统**:
148 | - 中文字体:Noto Sans SC/Noto Serif SC (https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap)
149 | - 基础字体:`font-family: Tahoma,Arial,Roboto,"Droid Sans","Helvetica Neue","Droid Sans Fallback","Heiti SC","Hiragino Sans GB",Simsun,sans-self;`
150 |
151 | ## 设计要求
152 |
153 | 1. **视觉设计**:
154 | - 创建不仅美观,更能引发情感共鸣的视觉风格
155 | - 使用一致、和谐且服务于信息传达的色彩、间距和组件
156 | - 确保视觉层次清晰,有效引导用户注意力流
157 |
158 | 2. **交互设计**:
159 | - 设计极其直观、无需思考的导航和信息架构
160 | - 提供及时、清晰、甚至令人愉悦的用户反馈和状态指示
161 | - 极致简化操作流程,最大程度降低用户认知负担和操作成本
162 |
163 | 3. **内容呈现**:
164 | - 采用清晰易读、富有节奏感的排版
165 | - 恰当、优雅地使用数据可视化
166 | - 确保内容在不同设备上都具有卓越的可读性和美观度
167 |
168 | 4. **创新与品质**:
169 | - 在遵循规范基础上,融入巧妙、贴心的创新元素,带来"啊哈"时刻
170 | - 像素级关注细节处理,追求卓越的工艺品质
171 | - 为产品注入独特的品牌个性和真诚的情感连接
172 |
173 | ---
174 |
175 | 请根据我接下来提供的产品概念,运用你全部的专业知识和创造力,创作一份完整的产品需求文档(PRD)和能深刻体现用户价值、解决核心痛点、并带来惊喜体验的高保真交互原型。用一个单页HTML网页承载PRD和高保真原型。
--------------------------------------------------------------------------------
/internal/server/server.go:
--------------------------------------------------------------------------------
1 | package server
2 |
3 | import (
4 | "context"
5 | "fmt"
6 | "strings"
7 | "sync"
8 |
9 | "github.com/chaoyuepan/mcp-prompt-server-go/internal/prompt"
10 | "github.com/kataras/golog"
11 | "github.com/mark3labs/mcp-go/mcp"
12 | "github.com/mark3labs/mcp-go/server"
13 | )
14 |
15 | // Server 表示MCP提示词服务器
16 | type Server struct {
17 | promptsDir string
18 | mcpServer *server.MCPServer
19 | prompts map[string]*prompt.Prompt
20 | mu sync.RWMutex
21 | }
22 |
23 | // NewServer 创建一个新的服务器实例
24 | func NewServer(promptsDir string) (*Server, error) {
25 | s := &Server{
26 | promptsDir: promptsDir,
27 | prompts: make(map[string]*prompt.Prompt),
28 | }
29 |
30 | // 初始化MCP
31 | s.mcpServer = server.NewMCPServer(
32 | "mcp-prompt-server",
33 | "1.0.0",
34 | server.WithToolCapabilities(true),
35 | )
36 |
37 | // 加载提示词
38 | if err := s.loadPrompts(); err != nil {
39 | return nil, err
40 | }
41 |
42 | // 注册管理工具
43 | s.registerManagementTools()
44 |
45 | return s, nil
46 | }
47 |
48 | // Start 启动服务器
49 | func (s *Server) Start(addr string) error {
50 | golog.Println("Starting MCP Prompt Server with", len(s.prompts), "prompts")
51 | // 使用 server 包的 ServeStdio 函数启动服务器
52 |
53 | if addr == "" {
54 | return server.ServeStdio(s.mcpServer)
55 | }
56 |
57 | sseServer := server.NewSSEServer(s.mcpServer)
58 |
59 | return sseServer.Start(addr)
60 | }
61 |
62 | // Stop 停止服务器
63 | func (s *Server) Stop() {
64 | // MCP server 没有显式的停止方法
65 | golog.Println("Server stopping...")
66 | }
67 |
68 | // loadPrompts 加载所有提示词
69 | func (s *Server) loadPrompts() error {
70 | prompts, err := prompt.LoadFromDirectory(s.promptsDir)
71 | if err != nil {
72 | return fmt.Errorf("failed to load prompts: %w", err)
73 | }
74 |
75 | s.mu.Lock()
76 | defer s.mu.Unlock()
77 |
78 | // 清除现有提示词
79 | s.prompts = make(map[string]*prompt.Prompt)
80 |
81 | // 注册每个提示词作为MCP工具
82 | for _, p := range prompts {
83 | s.prompts[p.Name] = p
84 |
85 | // add prompts as tools
86 | tool := s.createToolFromPrompt(p)
87 | s.mcpServer.AddTool(tool, s.createToolHandlerForPrompt(p))
88 |
89 | // add prompts as prompt
90 | prompt := s.createPromptFromPrompt(p)
91 | s.mcpServer.AddPrompt(prompt, s.createPromptHandlerForPrompt(p))
92 |
93 | golog.Infof("registered prompt tool: %s", p.Name)
94 | }
95 |
96 | golog.Infof("loaded %d prompts", len(prompts))
97 | return nil
98 | }
99 |
100 | // createToolFromPrompt 从提示词创建MCP工具
101 | func (s *Server) createToolFromPrompt(p *prompt.Prompt) mcp.Tool {
102 | // 创建一个基本工具
103 | tool := mcp.NewTool(p.Name, mcp.WithDescription(p.Description))
104 |
105 | // 为每个参数添加输入schema
106 | if len(p.Arguments) > 0 {
107 | properties := make(map[string]any)
108 | required := []string{}
109 |
110 | for _, arg := range p.Arguments {
111 | // 假设所有参数都是字符串类型
112 | properties[arg.Name] = map[string]any{
113 | "type": "string",
114 | "description": arg.Description,
115 | }
116 |
117 | if arg.Required {
118 | required = append(required, arg.Name)
119 | }
120 | }
121 |
122 | // 直接使用正确的结构
123 | tool.InputSchema = mcp.ToolInputSchema{
124 | Type: "object",
125 | Properties: properties,
126 | Required: required,
127 | }
128 | }
129 |
130 | return tool
131 | }
132 |
133 | // 从提示词创建MCP提示词
134 | func (s *Server) createPromptFromPrompt(p *prompt.Prompt) mcp.Prompt {
135 | // 创建一个基本工具
136 | prompt := mcp.NewPrompt(p.Name, mcp.WithPromptDescription(p.Description))
137 |
138 | // 为每个参数添加输入schema
139 | if len(p.Arguments) > 0 {
140 | arguments := make([]mcp.PromptArgument, 0, len(p.Arguments))
141 |
142 | for _, arg := range p.Arguments {
143 | argument := mcp.PromptArgument{
144 | Name: arg.Name,
145 | Description: arg.Description,
146 | Required: arg.Required,
147 | }
148 |
149 | arguments = append(arguments, argument)
150 | }
151 |
152 | prompt.Arguments = arguments
153 | }
154 |
155 | return prompt
156 | }
157 |
158 | // createToolHandlerForPrompt 为提示词创建Tool处理函数
159 | func (s *Server) createToolHandlerForPrompt(p *prompt.Prompt) func(context.Context, mcp.CallToolRequest) (*mcp.CallToolResult, error) {
160 | return func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
161 | // 获取参数
162 | arguments := request.GetArguments()
163 |
164 | // 处理参数并替换提示词模板中的占位符
165 | messages := p.RenderMessages(arguments)
166 |
167 | // 仅处理用户消息作为输出,与原始Node.js实现保持一致
168 | var promptText string
169 | for _, msg := range messages {
170 | if msg.Role == "user" && msg.Content.Type == "text" {
171 | promptText += msg.Content.Text + "\n\n"
172 | }
173 | }
174 |
175 | // 创建响应
176 | return &mcp.CallToolResult{
177 | Content: []mcp.Content{
178 | mcp.TextContent{
179 | Type: "text",
180 | Text: strings.TrimSpace(promptText),
181 | },
182 | },
183 | }, nil
184 | }
185 | }
186 |
187 | // createPromptHandlerForPrompt 为提示词创建Prompt处理函数
188 | func (s *Server) createPromptHandlerForPrompt(p *prompt.Prompt) func(context.Context, mcp.GetPromptRequest) (*mcp.GetPromptResult, error) {
189 | return func(ctx context.Context, request mcp.GetPromptRequest) (*mcp.GetPromptResult, error) {
190 | // 获取参数
191 | arguments := request.Params.Arguments
192 |
193 | // 处理参数并替换提示词模板中的占位符
194 | messages := p.RenderPromptMessages(arguments)
195 |
196 | promptMessages := make([]mcp.PromptMessage, 0, len(messages))
197 | for _, msg := range messages {
198 | if msg.Content.Type == "text" {
199 | promptMessages = append(promptMessages, mcp.PromptMessage{
200 | Role: mcp.Role(msg.Role),
201 | Content: mcp.TextContent{
202 | Type: "text",
203 | Text: msg.Content.Text,
204 | },
205 | })
206 | } else if strings.Contains(msg.Content.Type, "image") {
207 | promptMessages = append(promptMessages, mcp.PromptMessage{
208 | Role: mcp.Role(msg.Role),
209 | Content: mcp.ImageContent{
210 | Type: "image",
211 | Data: msg.Content.Text,
212 | MIMEType: msg.Content.Type,
213 | },
214 | })
215 | }
216 | }
217 |
218 | return &mcp.GetPromptResult{
219 | Description: p.Description,
220 | Messages: promptMessages,
221 | }, nil
222 | }
223 | }
224 |
225 | // registerManagementTools 注册管理工具
226 | func (s *Server) registerManagementTools() {
227 | // 注册reload_prompts工具
228 | s.mcpServer.AddTool(
229 | mcp.NewTool("reload_prompts",
230 | mcp.WithDescription("Hot reload all prompt templates"),
231 | ),
232 | func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
233 | if err := s.loadPrompts(); err != nil {
234 | return nil, err
235 | }
236 |
237 | return &mcp.CallToolResult{
238 | Content: []mcp.Content{
239 | mcp.TextContent{
240 | Type: "text",
241 | Text: fmt.Sprintf("Successfully reloaded %d prompts", len(s.prompts)),
242 | },
243 | },
244 | }, nil
245 | },
246 | )
247 |
248 | // 注册get_prompt_names工具
249 | s.mcpServer.AddTool(
250 | mcp.NewTool("get_prompt_names",
251 | mcp.WithDescription("List all available prompt names"),
252 | ),
253 | func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
254 | s.mu.RLock()
255 | defer s.mu.RUnlock()
256 |
257 | var names string
258 | for name := range s.prompts {
259 | names += "- " + name + "\n"
260 | }
261 |
262 | return &mcp.CallToolResult{
263 | Content: []mcp.Content{
264 | mcp.TextContent{
265 | Type: "text",
266 | Text: fmt.Sprintf("Available prompts (%d):\n%s", len(s.prompts), names),
267 | },
268 | },
269 | }, nil
270 | },
271 | )
272 | }
273 |
--------------------------------------------------------------------------------