函数插件指南 (original) (raw)

1 新增函数插件只需要改两个文件

2 单线程插件Demo(只有20多行代码)

高级功能函数模板

i_say = f'历史中哪些事件发生在{currentMonth}月{currentDay}日?列举两条并发送相关图片。发送图片时,请使用Markdown,将Unsplash API中的PUT_YOUR_QUERY_HERE替换成描述该事件的一个最重要的单词。' gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive( inputs=i_say, # 提问的内容,给chatgpt看的 inputs_show_user=i_say, # 提问的内容,给用户看的(可以隐藏啰嗦的细节) llm_kwargs=llm_kwargs, # 无聊的chatgpt内部参数 chatbot=chatbot, # 聊天框句柄,原样传递 history=[], # 之前的聊天内容,只有之前的聊天内容中有值得抽取的信息时,才是必要的 sys_prompt="当你想发送一张照片时,请使用Markdown, 并且不要有反斜线, 不要用代码块。使用 Unsplash API (https://source.unsplash.com/1280x720/? < PUT_YOUR_QUERY_HERE >)。" )

3 多线程插件Demo

源代码解析_多线程

for index, fp in enumerate(file_manifest): # 这个for循环历遍列表中的每一个文件 with open(fp, 'r', encoding='utf-8', errors='replace') as f: file_content = f.read() # 读取文件 prefix = "接下来请你逐文件分析下面的工程" if index==0 else "" i_say = prefix + f'请对下面的程序文件做一个概述文件名是{os.path.relpath(fp, project_folder)},文件代码是 {file_content}' i_say_show_user = prefix + f'[{index}/{len(file_manifest)}] 请对下面的程序文件做一个概述: {os.path.abspath(fp)}' # 装载请求内容,这里有四个列表,列表的长度就是子任务的数。比如10个文件,列表的长度就是10。 inputs_array.append(i_say) # 要求解读10个文件的指令 inputs_show_user_array.append(i_say_show_user) # 要求解读10个文件的指令,给用户看的时候,只显示一个文件名,避免被满屏代码糊脸上 history_array.append([]) # 和读论文不一样,这里不需要上下文也能分析的很出色 sys_prompt_array.append("你是一个程序架构分析师,正在分析一个源代码项目。你的回答必须简单明了。")

gpt_response_collection = yield from request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency( inputs_array = inputs_array, inputs_show_user_array = inputs_show_user_array, history_array = history_array, sys_prompt_array = sys_prompt_array, llm_kwargs = llm_kwargs, chatbot = chatbot, show_user_at_complete = True )

4 小Tip:函数插件热更新

函数插件支持热更新,您在改写的任何代码都会即刻生效,不需要重启项目。实现方法很简单,在crazy_functional.py中用HotReload修饰器包一下即可,例如:

"[仅供开发调试] 批量总结PDF文档": { "Color": "stop", "Function": HotReload(批量总结PDF文档) # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 },

Important

新版本您还需要修改config.py中的配置 PLUGIN_HOT_RELOAD = True才能激活插件热加载

5 插件快速调试 / 单元测试

可在tests/test_plugins.py中编写测试代码。

6 插件PR小建议

  1. 函数插件如果能单独成立一个.py文件,把新写的函数都放在其中,再好不过了。如果新增函数很多,请在crazy_functions新建一个二级文件夹盛放您的工具。

  2. 新增的pip依赖不需要放进requirements.txt,但是需要在函数开头试着import一下,如果失败,给一下安装指令,比如crazy_functions/批量总结PDF文档.py当中:

    尝试导入依赖,如果缺少依赖,则给出安装建议

    try: import fitz # 尝试导入依赖 except: # 如果缺少依赖fitz,则给出安装建议,这里是建议安装pymupdf,安装完pymupdf就有了fitz report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"导入软件依赖失败。使用该模块需要额外依赖,安装方法pip install --upgrade pymupdf。") yield chatbot, history, '正常' return

  3. 在函数开头说明功能,如果您希望标注您的昵称、联系方式、合作声明或者更个性化一点的东西等都是完全ok的,比如crazy_functions/批量总结PDF文档.py当中:

    基本信息:功能、贡献者

    chatbot.append([ "函数插件功能?", "批量总结PDF文档。函数插件贡献者: ValeriaWong"]) yield chatbot, history, '正常'