一篇构建 MyShell 工具类 bot 的概述和逐步指南
本文面向经常使用 ChatGPT 的用户,特别是那些希望通过它来解决定制需求的读者。
文章专注工具类 bot 的创建,不涉及角色扮演类 bot 的创作,但基本原理是相同的。
简要概述:本文介绍了 AI 创作者平台 MyShell 是什么、 prompt 编写技巧以及如何制作 MyShell 工具类 bot。
介绍#
MyShell 是什么#
MyShell 是全球首个去中心化生成式 AI 创作者平台。平台内有社区开发的各种 AI 原生应用,其中包括具有鲜明个性和声音的 AI 角色、用于学习新科目的交互式 AI 导师,以及帮助你创建图像甚至视频的 AI 艺术家。
大多数 AI+Web3 领域的研究报告推荐 MyShell 作为 Agent 板块首选项:
为什么要使用 MyShell,而不是 ChatGPT#
我曾是 ChatGPT 重度用户,自 2023 年 4 月起,我转而使用 MyShell 进行编程、编辑文章、检索资料和翻译工作。
使用 MyShell 有以下好处:
- 可一站式免费使用包括 GPT 4.0 以内的多种 AI 大模型
- 许多用户在 OpenAI 平台上遭遇过封号问题;选择 MyShell,在合理使用下无需担心此类风险。
- 通过创建和赞助 bot 获取积分奖励,未来可兑换成系统流通的代币
- 论坛提供了许多优质创作技巧,社区有良好的交流氛围,有助于学习 AI 技术
- 不用再支付 ChatGPT 每月 $20 的会员费
为什么要学会创作工具类 bot#
使用 MyShell 时,我注意到由官方 API 创建的 "GPT 4" bot 解决问题的能力有时候并不稳定。此外,每次对话需要输入提示词(prompt:旨在引导模型产生更精确和相关输出内容的文本或指令)进行角色扮演。这极大降低了效率并增加了操作复杂度。
尽管其他社区成员开发的 bot 可以解决一些问题,例如我常使用 Mr.Rachelle 学习新知识 和 bestTranslater 中翻英,但更多的需求无法找到合适的 bot。
我研究了众多关于 prompt 工程的资料,创建了多个不同作用的 bot,并琢磨出了一套成熟的流程。
我创建过的工具类 bot 有:
名称 | 作用 |
---|---|
OpenAICEO Sam Altman | 一句话直接了当回答简单问题 |
Summary master | 可设定语言风格的长文总结 |
Cryptocurrency Analyst | 中文总结 Web3 项目介绍 |
Tech writing editor | 润色技术写作文章 |
Epic Code Dev | Debug 和优化代码 |
Web code expert | 编写前端代码 |
Think Tank | 多领域专家智囊团讨论复杂问题 |
Song Lyrics Search | 找到符合语境的中文歌词 |
Pass card 的作用#
当前版本免费用户只能创建一个私有 bot。若要创建公开 bot,必须持有 Genesis Pass。获得 Genesis Pass 的最佳方式是参与 MyShell Genesis Pass Incubator 活动,详见 https://twitter.com/myshell_ai/status/1759941273509593166 。或者,你可以选择使用 ETH 在市场上直接购买 Genesis Pass,其价格大致相当于十年的 ChatGPT 会员费。
学习资料#
prompt 工程作为一门新兴学科,涉及以下核心概念:
- zero-shot
- few-shot
- chain-of-thought
- Prompt Chaining
如果不熟悉以上术语,建议先浏览一遍 Prompt Engineering Guide 和 Prompt engineering by OpenAI 。网上能搜到中文版本。
若尚未了解 MyShell 的基本操作,请参考 product manual,
本文不会详述操作步骤。
使用英文编写 prompt 可减少 Token 消耗,所以我都用英文编写它。
prompt 通常写为Markdown格式,因为 Markdown 是互联网的语法,有利于大模型理解输入。一些符号有固定意义,例如:<>
表示注释部分;而 """ """
则用来标记用户输入。
创作流程#
通常,我会先编写 bot 的 prompt。该 Tech writing editor 的 prompt 是开源的,可在 https://app.myshell.ai/widget/Fzu2Uz 找到。
定义角色#
在构建 prompt 时,核心步骤是定义角色 = 描述 + 目的。首先根据需求确定 bot 的角色和目标。
描述部分应与公司招聘时提供的职位说明相仿,例如,“写作编辑” 或是 “新媒体文案编辑”,描述越精确越好,“熟悉科技领域的技术写作编辑” 和 “写作编辑” 输出的结果会不一样。
目标是要达成的工作,对于技术写作编辑来说,“撰写文档”、“提供灵感”,以及 “润色文稿” 是完全不同的工作目标。
你可以直接问 GPT,一个"xxx"样的"xxx"拥有哪些特征
,或者描述"xxxx"需要定义什么关键纬度
,从回复中选择部分形容词来修饰角色。
此外,你还可以参照编写招聘说明书方式,编写 “岗位职责” 给 bot 设定 "Goals";编写 “任职要求” 来赋予 bot “Skills”。
You are a technical writing editor who provides concise suggestions for improving articles and explain the reasons for the suggested changes.
## skills
You are familiar with the principles of various technical writings, including but not limited to:
- Use terms consistently.
- Avoid ambiguous pronouns.
- Prefer active voice to passive voice.
- Pick specific verbs over vague ones.
- Focus each sentence on a single idea.
- Convert some long sentences to lists.
- Eliminate unneeded words.
- Use a numbered list when ordering is important and a bulleted list when ordering is irrelevant.
- Keep list items parallel.
- Start numbered list items with imperative words.
- Introduce lists and tables appropriately.
- Create great opening sentences that establish a paragraph's central point.
- Focus each paragraph on a single topic.
- Determine what your audience needs to learn.
- Fit documentation to your audience.
- Establish your document's key points at the start of the document.
请注意,类似于 ## skills
的模板写法旨在方便 prompt 的维护。你可以选择用一段连贯的文字来表述,也可使用如 [Skills]
样式的标题来编写。
定义规则(可选)#
规则定义了 bot 应该执行的操作以及避免的行为,并可设定输出内容的字数上限、使用语言、风格和语气等。
我经常使用以下 Prompt:
## rules
- MUST Reply in the same language as the input language. # 多语言支持
- ALWAYS omit all polite language. # 减少客套话
- DON'T worry about your response being cut off # 避免急于总结
一开始编写 Prompt 可以不设定规则,如果不满意输出内容,再添加规则。
定义工作流(可选)#
工作流通过 Prompt Chaining 技术将一个大任务拆分成多个子任务,每个子任务的输出顺序地成为下一个子任务的输入,逐步实现最终目标。
在定义 Tech writing editor 时,我采用以下 Prompt 以实现这些步骤:检查文章需要修改的句子 -> 依次输出修改前、修改后、修改的原因 -> 评分。
## workflow
1. Browse the article and find any sentence that need to be modified
2. Output all Original, Modified, Reason groups in sequence
3. Evaluate articles from a technical writing perspective and assign scores on a 10-point scale
如果需要类似编程语言中的条件判断、变量赋值、状态重置的复杂工作流,也可以采用函数式编写风格,可参考Mr. Ranedeer 。
提供例子或输出格式(可选)#
利用 Prompt 工程的 few-shot 技术使输出符合指定格式。以下是我在 Tech writing editor 中采用的输出格式,你也可以将 <> 中的说明替换为具体示例。
## outputFormat
1.
**O**: <Then paragraph need to modify>
**M**: <The improved paragraph>
**R**: <Rule to follow for modifications>
2.
**O**: <Then paragraph need to modify>
**M**: <The improved paragraph>
**R**: <Rule to follow for modifications>
……
---
<The evaluation and the score>
选择模型#
在选择模型时,我优先使用 GPT 4 Turbo。该模型不仅智能性高于其他选项,还支持超过 1500 Token 的输入长度。
若需处理纯中文内容,选择使用 Claude V2 模型也能获得良好效果。
针对不同使用场景,可适当调整其他参数。相关具体设置,请参考此篇帖子中的详细说明。
强化 prompt(可选)#
在多轮对话中,模型可能会基于上下文信息而非 Prompt 内定义的规则来回答问题。为确保在整个多轮对话过程中遵循统一规则,可以将这些规则包含进强化 prompt,更多详情见官方文档。
其他设置#
Avatar:利用 AvatarMagician 创建个性头像。
Name:设定让用户通过主页搜索特定关键词以发现 bot;此项受长度限制,并起到 SEO 作用。
NSFW:标记内容是否不宜在工作场合查看,默认选择 “否”。
Tag:根据功能选择 “工具” 或 “学习”,部分含 “中文” 或 “英文” 的标签指示已添加语音功能。
Description:提供对 bot 目的和功能概述。
Intro Message:设计一个引导式招呼语以告知用户如何交互,并可加入图片及外链增强体验。
Voice(TTS):对于工具类 bot 通常无需设置声音功能。
Apps Integration:支持通过 Telegram 接入以吸引外部流量
Knowledge Base: 若需教授 bot 特定领域的冷门知识,请先编写 GitBook,并将其内容加入知识库以供 bot 学习。
Banner:使用 BannerMagician 创建 banner。创作者可选择对所有 bot 统一使用带有个人联系信息的 banner 进行品牌宣传及吸引潜在客户。
ScreenShot:上传展示输入和输出的截图,以向用户说明 bot 功能。
测试#
打造优质的 bot 需要经过多次测试和迭代。以下是一些技巧:
- 准备多个具有固定内容的输入文本,用于测试不同模型、参数及提示语句的效果。
- 在调试到令人满意之后,将其发布到社区让他人尝试,并依据反馈作出相应修改。
宣传#
由于平台上专业用户和特定工具类应用的活跃度不高,推荐将 bot 推广到需要此类服务的领域群体中以增加使用频率,以此带动积分收益提升。
考虑联系 MyShell 官方进行评测,这有助于你的 bot 获得首页展示机会。
未来展望#
目前角色扮演型 bot 在本平台可能有更高收益;然而,在未来版本中 MyShell 将支持多组件组合,这将促进构建功能强大的 AI 应用;同时激励模型也会偏向解决实际效率问题的实用 bot。从现在开始可以挖掘需求,建立符合自己工作流的实用 bot,为未来做准备吧。
Claude3 提示词编写技巧#
3 月 25 日晚上,MyShell 接入了性能卓越的 Claude3 新模型,适用于绝大多数原本使用 GPT-4 的场景。
同时,Claude 官方也推出了「Prompt Engineering 指南」,以下是与 GPT 系列不同的几个重要技巧:
- 利用语义明确的 XML 标签区分文档部分、说明及输入内容。例如
<instructions>
、<example>
和<input>
- 将
<instructions>
置于<input>
之后可获得更好效果,可通过 强化 Prompt 后缀 选项来实现该目标 - 输入变量应当使用双花括号
{{}}
进行标记
如下图所示,应用了上述技巧的 Summary master 包括:
- 使用了
<configuration> <rules> <example> <input> <instructions>
XML 标签把提示词划分为不同部分。 - 将
<instructions>
标签嵌入强化 Prompt 后缀,目的是提升效果并保持输出一致性。 - 利用
{{CONFIGURATION}}
和{{DOCUMENT}}
来标记用户输入的变量,并在<instructions>
中引用标记后的变量
总结#
现在你应该能够根据我的指南创建自己的工具 bot。如需帮助,在 MyShell Discord 中搜索 script 并 @我,或通过Twitter发私信联系。
若尚未加入 MyShell,请通过此链接https://app.myshell.ai/invite/8cdbbd 注册,即可获得 7 天高级 Pass 卡。