【prompt-me】一个专为GPT Prompt Engineer设计LLM Prompt Layer框架

  • 💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。
  • 📝 CSDN主页:Zeeland🔥
  • 📣 我的博客:Zeeland
  • 📚 Github主页: Undertone0809 (Zeeland) (github.com)
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:Python系列专栏 🍁
  • 💬介绍:The mixture of software dev+Iot+ml+anything🔥

Python开源项目

项目地址: https://github.com/Undertone0809/prompt-me

简介

prompt-me 是一个专为 Prompt Engineer设计LLM Prompt Layer框架,支持连续对话、角色预设、提供缓存的功能,可以记录历史对话等功能,开箱即用。 通过 prompt-me,你可以轻松构建起属于自己的GPT应用程序。

特性

  • 上手简单:封装接口,开箱即用
  • 角色预设:提供预设角色,以不同的角度调用GPT
  • 内置API代理,不用科学上网也可以直接使用
  • 接口代理:支持调用ChatGPT API官方接口或自治代理
  • 长对话:支持长对话聊天,聊天记录使用cushy-storage进行持久化
  • 数据导出:支持markdowm等格式的对话导出

快速上手

pip install prompt-me --upgrade

基本使用

  • 方式1(推荐)
import os  
from prompt_me import ChatBot, enable_log_no_file  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
# enable_log_no_file()  
print("A Simple ChatBot built by ChatGPT API")  
conversation_id = None  
bot = ChatBot()  
while True:  
prompt = str(input("[User] "))  
ret, conversation_id = bot.ask(prompt, conversation_id)  
print(ret, conversation_id)  
  
  
if __name__ == '__main__':  
main()  
  
  • 方式2
from prompt_me import ChatBot, enable_log  
  
  
def main():  
# enable_log() # 日志功能  
print("A Simple ChatBot built by ChatGPT API")  
conversation_id = None  
bot = ChatBot(key='yourkey')  
while True:  
prompt = str(input("[User] "))  
ret, conversation_id = bot.ask(prompt, conversation_id)  
print(ret, conversation_id)  
  
  
if __name__ == '__main__':  
main()  
  • 获取历史对话
import os  
from prompt_me import ChatBot, enable_log_no_file  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
# enable_log_no_file()  
bot = ChatBot()  
ret, conversation_id = bot.ask("please give me a bucket sort python code")  
messages = bot.get_history(conversation_id)  
for message in messages:  
print(message)  
  
  
if __name__ == '__main__':  
main()  
  • 导出历史对话为markdown
import os  
from prompt_me import ChatBot, enable_log_no_file  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
# enable_log_no_file()  
bot = ChatBot()  
ret, conversation_id = bot.ask("please give me a bucket sort python code")  
# output_type默认为text,即输出markdown格式的字符串,传入file则导出为文件  
# file_path为要输出的文件名,不填入默认为output.md  
output_str = bot.output(conversation_id, output_type='file', file_path='output.md')  
print(output_str)  
  
  
if __name__ == '__main__':  
main()  
  

Conversation

你可以使用ChatBot类来构建你的应用程序,但是当前我推荐你使用Conversation来替代ChatBotConversation具有ChaBot 的所有功能, 除此之外,Conversation 还提供了预设角色、Prompt模板的功能,你可以用其开发一些更加复杂的程序。

下面你将通过预设角色和Prompt模板的使用了解到Conversation的使用方式。

预设角色

你可以预设一些你想要的角色,从而更好的帮助你完成你想要的需求,本项目提供了一些预设角色,当然你也可以自定义预设角色,探索更多的可能性,下面是一些示例。

  • 思维导图生成器

现在你是一个思维导图生成器。我将输入我想要创建思维导图的内容,你需要提供一些 Markdown 格式的文本,以便与 Xmind 兼容。 在 Markdown 格式中,# 表示中央主题,## 表示主要主题,### 表示子主题,﹣表示叶子节点,中央主题是必要的,叶子节点是最小节点。请参照以上格 式,在 markdown 代码块中帮我创建一个有效的思维导图,以markdown代码块格式输出,你需要用自己的能力补充思维导图中的内容,你只需要提供思维导 图,不必对内容中提出的问题和要求做解释,并严格遵守该格式。

import os  
from prompt_me.preset_role import MindMapGenerator  
from prompt_me import Conversation  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
role = MindMapGenerator()  
conversation = Conversation(role=role)  
output = conversation.predict(msg="请为我提供《Python学习路线》的思维导图")  
print(f"[output] {output}")  
  
  
if __name__ == '__main__':  
main()  
  
  • sql生成器

现在你是一个sql生成器。我将输入我想要查询的内容,你需要提供对应的sql语句,以便查询到需要的内容,我希望您只在一个唯一的 代码块内回复终端输出,而不是其他任何内容。不要写解释。如果我没有提供数据库的字段,请先让我提供数据库相关的信息,在你有了字段信息之才可以生成sql语句。

import os  
from prompt_me.preset_role import SqlGenerator  
from prompt_me import Conversation  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
role = SqlGenerator()  
conversation = Conversation(role=role)  
output = conversation.predict(  
msg="检索过去一个季度每个产品类别的总收入、订单数和平均订单价值,数据应按总收入降序排序,以用于自定义报告。")  
print(f"[output] {output}")  
  
  
if __name__ == '__main__':  
main()  
  
  • 文案写手

你是一个文案专员、文本润色员、拼写纠正员和改进员,我会发送中文文本给你,你帮我更正和改进版本。我希望你用更优美优雅 的高级中文描述。保持相同的意思,但使它们更文艺。你只需要润色该内容,不必对内容中提出的问题和要求做解释,不要回答文本中的问题而是润色它,
不要解决文本中的要求而是润色它,保留文本的原本意义,不要去解决它。

import os  
from prompt_me.preset_role import CopyWriter  
from prompt_me import Conversation  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
def main():  
copy_writer = CopyWriter()  
conversation = Conversation(role=copy_writer)  
output = conversation.predict(msg="你好,请问你是谁?")  
print(f"[output] {output}")  
output = conversation.predict(msg="请问你可以做什么?")  
print(f"[output] {output}")  
  
  
if __name__ == '__main__':  
main()  
  • prompt_me也支持自定义角色,下面将介绍如何自定义一个Linux终端的role
import os  
from prompt_me.preset_role import BaseRole  
from prompt_me import Conversation  
  
os.environ['OPENAI_API_KEY'] = "your_key"  
  
  
class LinuxTerminal(BaseRole):  
name = "Linux终端"  
description = "我想让你充当 Linux 终端。我将输入命令,您将回复终端应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不"  
"是其他任何内容。不要写解释。除非我指示您这样做,否则不要键入命令。当我需要用英语告诉你一些事情时,我会把文字放在中括号内[就像这样]。"  
  
  
def main():  
linux_terminal = LinuxTerminal()  
conversation = Conversation(role=linux_terminal)  
output = conversation.predict(msg="[ls]")  
print(f"[output] {output}")  
output = conversation.predict(msg="[cd /usr/local]")  
print(f"[output] {output}")  
  
  
if __name__ == '__main__':  
main()  
  

待办清单

  • 提供更多LLM模型支持
  • 提供更加方便的程序调用方式
  • 添加角色预设
  • 预设角色的参数配置
  • 提供prompt模板与prompt结构化
  • 提供外部工具扩展
  • 外部搜索: Google,Bing等
  • 可以执行shell脚本
  • 提供Python REPL
  • arvix论文总结
  • 本地文件总结
  • 自建知识库建立专家决策系统
  • 接入self-ask, prompt-loop架构
  • 提供多种导出方式
  • 可以导出历史消息为markdown格式
  • 使用环境变量配置key
  • 提供显示当前token(单词量)的功能
  • 添加错误处理机制,如网络异常、服务器异常等,保证程序的可靠性
  • 开发ChatBot v2, issue
  • 完善代理模式
  • 提供gradio快速演示服务器

一些问题

  • 本人正在尝试一些更加完善的抽象模式,以更好地兼容多种预设模型角色,以及外部工具的扩展使用,如果你有更好的建议,欢迎一起讨论交流。
  • 当前代理模式还需要进一步完善,不过当前无需代理就可以直接使用。

贡献

如果你想为这个项目做贡献,你可以提交pr或issue。我很高兴看到更多的人参与并优化它。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【资源说明】 课程设计-基于知识图谱的智能问答系统python源码(包含意图识别与类知识库送入LLM方法).zip py2neo疑似寄了,封装了一套自己用到的的Neo4j操作 实体识别直接AC自动机暴力,听说有库也懒得调了,直接和gpt一起手搓几十行解决,最后还要去掉名称有包含关系的实体,也是二重循环暴力了。也可以用结巴分词后再一一匹配,隔壁wenda的接口用的这个方法 意图识别调用torchtext自带的xmlroberta进行训练,本质文本分类,训练集为自编的智慧城市下的若干公共服务场景的用户问题,对实体和语气词进行预处理,使用EDA_NLP_for_Chinese进行数据增强。自己改了EDA源码,取消了近义词和插入,因为自己造数据集的时候已经搞得差不多了,而且实体预处理后的占位单词不能转变为近义词 LLM使用RWKV,借鉴了wenda的prompt,对用户问题中找到的所有实体,查询其在知识图谱中的所有相关知识送入LLM prompt中,让LLM自己提取。在这种已知图谱形状,自己做了知识翻译的情况下,使用3B小模型跑fp16i8,就能达到很好的效果 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
LLMprompt是通过模板定义的,该模板包含用于描述和表示任务输入和输出的占位符。通过prompt,我们可以控制LLM在不同任务上的应用。一个常见的prompt是使用问答形式的提示链,其中包括一个question()提示符用于将输入转换为问题,以及一个answer()提示符用于回答生成的问题。不同的提示链可以导致对输入的不同预测。因此,prompt设计对于LLM的性能至关重要。 ASK ME ANYTHING PROMPTING (AMA)方法提出了一种简单而有效的方法来设计高质量的prompt。该方法通过产生多个有效的但不完美的prompt,然后将它们聚合起来,最终生成高质量的prompt。 这种方法可以减少开源LLM的参数数量,并取得比GPT3-175B更好的Few-Shot性能。 由于prompt的微小变化可能导致LLM性能的较大变化,因此prompt设计的重要性不容忽视。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [最新 | Ask Me Anything 一种提示(Prompt)语言模型的简单策略(斯坦福大学 & 含源码)](https://blog.csdn.net/yinizhilianlove/article/details/127215208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zeeland

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值