简介:这份资源是面向 AI 应用爱好者、内容创作者与产品从业者的中文提示语合集,共收录 260 条 ChatGPT 角色提示语,覆盖计算机、心理学、健康等多个行业与领域,可帮助读者快速为对话模型设定专业身份,解决提示词编写门槛高、角色设定缺乏参考的问题。压缩包内共 1 个文件,为 json 格式,体积约 40KB,结构轻量,便于直接导入或按需检索调用。内容按角色名称与对应提示语组织,例如计算机领域涵盖 UX/UI 开发人员、开发者关系顾问、IT 架构师、全栈软件开发人员、高级前端开发人员等角色,心理学领域包含心理健康顾问、心理学家,健康领域则涉及私人厨师、人生教练、牙医、虚拟医生等,场景跨度较大。目前已有 1057 人学习下载,适合希望提升提示词质量、拓展角色库或进行二次整理的中级使用者参考借鉴。
1. 260 条中文提示语资源:一份能直接抄的角色库到底长什么样
很多人第一次接触提示词工程,都是从「收藏一堆提示词」开始的。我也不例外。但收藏夹里躺着的那些零散截图、聊天记录片段,真正要用的时候根本找不到,更别说复用。这份 260 条 ChatGPT 中文提示语资源,解决的就是这个问题——它把散落在各个领域的角色提示语整理成了一个结构化的 JSON 文件,每个条目包含角色名称和对应的角色提示语,覆盖计算机、心理学、健康、教育、商业等多个行业。
它适合谁?如果你刚开始用 ChatGPT 做具体任务,不知道怎么给模型设定角色,这份资源可以当字典查;如果你已经在做 AI 编程提示词或提示词设计,它可以当基线模板,省去从零写系统提示的时间。不适合谁?指望复制粘贴就能让模型输出完美结果的人——提示语只是起点,参数调优和上下文管理才是后面的事。
2. 拆开 JSON 看结构:260 条提示语的组织逻辑与字段含义
2.1 文件格式与字段设计
拿到压缩包后,解压出来是一个.json文件。常见做法是把它当成一个数组,每个元素是一个对象,包含角色名称和提示语正文。我用 Python 读了一下,结构大致如下:
import json with open("260_chatgpt_prompts.json", "r", encoding="utf-8") as f: prompts = json.load(f) # 查看第一条数据的字段 print(prompts[0].keys()) # 输出示例:dict_keys(['role', 'prompt', 'category']) # 查看计算机领域的前三条 for item in prompts: if item.get("category") == "计算机": print(item["role"], "->", item["prompt"][:60])这段代码做了三件事:加载 JSON、查看字段名、按分类筛选。role是角色名称,prompt是具体的角色提示语,category是行业分类。如果你的文件字段名不同,先打印keys()确认,别硬套。
参数说明:encoding="utf-8"必须加,中文提示语不加编码会报UnicodeDecodeError。item.get("category")用get而不是[],是因为部分条目可能没有分类字段,直接索引会抛KeyError。
2.2 分类分布与角色粒度
260 条不是均匀分布的。计算机领域占比最大,包括 UX/UI 开发人员、开发者关系顾问、IT 架构师、全栈软件开发人员、高级前端开发人员、软件开发人员等角色。心理学领域有心理健康顾问、心理学家;健康领域有私人厨师、人生教练、牙医、虚拟医生。
这种粒度意味着什么?同一个领域下,不同角色的提示语侧重点不同。比如「IT 架构师」的提示语会强调系统设计、技术选型、可扩展性;「高级前端开发人员」则聚焦组件设计、性能优化、浏览器兼容。你选角色时,不是选领域,而是选具体职责。
我一般会先按category分组,统计每个分类下的角色数量,再决定用哪个。下面这段代码可以快速生成分类统计:
from collections import Counter categories = [item.get("category", "未分类") for item in prompts] counter = Counter(categories) for cat, count in counter.most_common(): print(f"{cat}: {count} 条")Counter会自动按数量降序排列,most_common()不传参数返回全部。这样你能一眼看出哪个领域的角色最丰富,优先从那里找模板。
2.3 提示语长度与信息密度
我统计了一下prompt字段的字符长度,大部分在 100 到 300 字之间。这个长度是有讲究的:太短,模型抓不住角色边界;太长,挤占上下文窗口,影响后续对话。常见做法是把角色提示语控制在 200 字左右,既说清职责,又不至于让模型「演过头」。
你可以用下面这段代码看长度分布:
lengths = [len(item["prompt"]) for item in prompts] print(f"最短: {min(lengths)}, 最长: {max(lengths)}, 平均: {sum(lengths)//len(lengths)}")如果发现某条特别长,比如超过 500 字,用的时候可以手动精简,去掉重复的修饰词。提示词设计的一个基本原则是:每个词都要有信息量,形容词堆砌反而会让模型困惑。
3. 把提示语接进工作流:从 JSON 到可复用系统提示的完整操作
3.1 提取单条提示语并注入对话
最直接的用法是:找到你需要的角色,把prompt字段的内容复制出来,作为系统提示(system prompt)发给 ChatGPT。手动复制适合偶尔用一次,但如果你要频繁切换角色,最好写个脚本自动提取。
def get_prompt_by_role(prompts, role_name): """根据角色名称精确匹配提示语""" for item in prompts: if item["role"] == role_name: return item["prompt"] return None # 示例:提取 IT 架构师的提示语 architect_prompt = get_prompt_by_role(prompts, "IT 架构师") if architect_prompt: print(architect_prompt) else: print("未找到该角色,检查名称是否完全匹配")逻辑说明:get_prompt_by_role做的是精确匹配,角色名称必须完全一致。如果你不确定名称,可以先打印所有角色名:
roles = [item["role"] for item in prompts] for r in roles: print(r)参数说明:role_name传入字符串,区分大小写和空格。常见翻车点是名称里有全角空格或不可见字符,复制的时候容易带进去。解决方法是先用strip()清洗:
role_name = role_name.strip()3.2 批量导出为 Markdown 或纯文本
如果你想把提示语导入到其他工具,比如 Notion、Obsidian,或者做成自己的提示词库,批量导出更实用。下面这段代码把每条提示语写成一个独立的 Markdown 文件:
import os output_dir = "prompts_md" os.makedirs(output_dir, exist_ok=True) for item in prompts: # 用角色名做文件名,替换掉不能用于文件名的字符 safe_name = item["role"].replace("/", "_").replace("\\", "_").replace(":", "_") filepath = os.path.join(output_dir, f"{safe_name}.md") with open(filepath, "w", encoding="utf-8") as f: f.write(f"# {item['role']}\n\n") f.write(f"分类:{item.get('category', '未分类')}\n\n") f.write(item["prompt"])逻辑说明:os.makedirs的exist_ok=True保证目录已存在时不报错。文件名替换是因为角色名里可能有/或:,在 Windows 上会导致OSError。写入时先写标题和分类,再写正文,方便后续检索。
参数说明:output_dir可以改成你想要的路径。如果提示语里有换行,f.write会原样保留,Markdown 渲染时正常显示。
3.3 在 API 调用中动态切换角色
如果你用 OpenAI API 做自动化任务,可以把这份 JSON 当成角色库,根据任务类型动态加载对应的系统提示。下面是一个最小示例:
import openai openai.api_key = "你的 API Key" def chat_with_role(prompts, role_name, user_input): system_prompt = get_prompt_by_role(prompts, role_name) if not system_prompt: return "角色不存在" response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_input} ], temperature=0.7 ) return response.choices[0].message.content逻辑说明:system消息承载角色提示语,user消息是具体问题。temperature=0.7是通用起点,需要严谨输出时降到 0.3,需要创意时升到 1.0。
参数说明:model按你实际可用的填,别照抄。messages列表的顺序不能乱,system必须在最前面。常见错误是把角色提示语放在user里,模型会把它当成普通输入,角色设定效果大打折扣。
提示:API 调用有成本,批量测试时先用短提示语验证流程,确认无误再换完整角色提示。
4. 避坑与排查:提示语用不对,多半是这几个地方翻了车
4.1 角色提示语被后续对话覆盖
现象:第一轮对话模型还按角色回答,聊到第三四轮就开始「出戏」,回复风格完全变了。
原因:上下文窗口里,后续的 user 和 assistant 消息会稀释 system 提示的权重。模型不是人,它没有「记住角色」的自觉,全靠每次推理时重新读上下文。
解决:每轮对话都重新发送 system 提示,或者把角色关键约束提炼成一句话,放在每轮 user 消息的开头。我一般会在第三轮之后主动补一句「请继续保持 XX 角色的设定」。
4.2 中文提示语里的全角标点导致解析失败
现象:用脚本读取 JSON 时正常,但把提示语拼进 API 请求后报编码错误或返回乱码。
原因:部分提示语里混用了全角逗号、全角引号,某些 HTTP 库在序列化时处理不一致。
解决:在发送前统一做一次清洗:
import re def clean_prompt(text): # 全角转半角(保留中文标点) text = text.replace("“", '"').replace("”", '"') text = text.replace("‘", "'").replace("’", "'") # 去掉不可见字符 text = re.sub(r"[\x00-\x08\x0b\x0c\x0e-\x1f]", "", text) return textre.sub那行是去掉 ASCII 控制字符,这些字符肉眼看不见,但会让 JSON 解析或 HTTP 传输出问题。
4.3 角色名称匹配不上
现象:get_prompt_by_role返回None,但你明明看到列表里有这个角色。
原因:名称里有空格差异、全角半角差异,或者你复制的时候带了换行符。
解决:打印repr(item["role"])看真实字符,repr会把不可见字符显示出来。然后用strip()和replace统一格式。别用in做模糊匹配,容易匹配到错误的角色。
4.4 提示语太长导致截断
现象:API 返回This model's maximum context length is exceeded。
原因:角色提示语加上对话历史超过了模型的 token 上限。
解决:先算 token 数。粗略估算:中文 1 个字约等于 1.5 到 2 个 token。260 条里最长的提示语如果超过 500 字,加上几轮对话就可能超限。精简提示语,或者换用上下文窗口更大的模型。
4.5 直接套用角色提示语但任务不匹配
现象:用了「牙医」的提示语,但问的是编程问题,模型回答得四不像。
原因:角色提示语是为特定任务设计的,跨领域使用会干扰模型判断。
解决:先明确任务类型,再选角色。这份资源的价值在于分类清晰,别偷懒随便抓一条就用。我一般会建一个映射表,把任务关键词和角色名称对应起来,用的时候先查表。
5. 进阶用法:把 260 条提示语变成可检索的本地知识库
手动翻 JSON 找角色,条目少的时候还行,260 条翻起来就累了。我的做法是把它变成一个可检索的本地知识库,用关键词就能定位到相关角色。
5.1 用 TF-IDF 做提示语检索
不需要向量数据库,用 scikit-learn 的 TF-IDF 就能做基础检索。下面这段代码把每条提示语向量化,然后根据查询词返回最相关的角色:
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 准备语料:角色名 + 提示语拼接 corpus = [f"{item['role']} {item['prompt']}" for item in prompts] vectorizer = TfidfVectorizer( analyzer="char", ngram_range=(2, 3), max_features=5000 ) tfidf_matrix = vectorizer.fit_transform(corpus) def search_prompts(query, top_k=5): query_vec = vectorizer.transform([query]) similarities = cosine_similarity(query_vec, tfidf_matrix).flatten() top_indices = similarities.argsort()[-top_k:][::-1] results = [] for idx in top_indices: if similarities[idx] > 0: results.append((prompts[idx]["role"], similarities[idx])) return results # 示例:搜索和「前端性能优化」相关的角色 for role, score in search_prompts("前端性能优化"): print(f"{role} (相关度: {score:.3f})")逻辑说明:analyzer="char"表示按字符切分,适合中文。ngram_range=(2, 3)表示用 2 到 3 个字符的组合做特征,能捕捉「前端」「性能」「优化」这类词组。cosine_similarity计算查询向量和每条提示语向量的夹角余弦值,值越大越相关。
参数说明:max_features=5000控制特征数量,太小会丢信息,太大计算慢。260 条数据用 5000 足够。top_k=5返回前 5 个结果,按需调整。
5.2 检索结果验证与人工兜底
TF-IDF 是统计方法,不理解语义。搜「前端性能优化」可能返回「高级前端开发人员」,也可能返回「IT 架构师」,因为两者都包含相关词汇。我的习惯是:检索结果只作为候选,最终选哪个角色还是人工判断。
验证方法很简单:把检索到的角色提示语打印出来,看它的职责描述和你的任务是否匹配。如果前 5 个都不合适,换关键词再搜。常见做法是准备几个同义词,比如「前端」换成「Web」、「性能」换成「优化」、「调优」。
5.3 把检索封装成命令行工具
如果你经常用,可以封装成一个命令行脚本,输入关键词直接输出角色名和提示语:
import sys if __name__ == "__main__": query = sys.argv[1] if len(sys.argv) > 1 else "软件开发" results = search_prompts(query, top_k=3) for role, score in results: print(f"\n{'='*40}") print(f"角色:{role} 相关度:{score:.3f}") print(f"{'='*40}") prompt = get_prompt_by_role(prompts, role) print(prompt[:200] + "..." if len(prompt) > 200 else prompt)运行方式:python search.py 前端性能。输出会列出最相关的三个角色和提示语摘要。这样你不需要打开 JSON 文件,直接在终端就能查。
从那以后我每次拿到新的提示语资源,都会先跑一遍检索流程,确认能快速定位再入库。提示语本身不是银弹,但一份整理好的角色库能省下大量重复劳动。希望帮到你。
本文还有配套的精品资源,点击获取