-
Notifications
You must be signed in to change notification settings - Fork 8.1k
函数插件指南
binary-husky edited this page Feb 2, 2024
·
16 revisions
-
在
crazy_functions
路径下,放置您编写的新插件。 -
在
crazy_functional.py
中,仿照其他插件的格式,把新插件加入到列表中。 -
(非必要步骤) 在
tests/test_plugins.py
中,添加单元测试,进行无UI的快速Debug。
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 >)。"
)
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
)
函数插件支持热更新,您在改写的任何代码都会即刻生效,不需要重启项目。实现方法很简单,在crazy_functional.py
中用HotReload修饰器包一下即可,例如:
"[仅供开发调试] 批量总结PDF文档": {
"Color": "stop",
"Function": HotReload(批量总结PDF文档) # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
},
Important
新版本您还需要修改config.py中的配置 PLUGIN_HOT_RELOAD = True
才能激活插件热加载
可在tests/test_plugins.py
中编写测试代码。
-
函数插件如果能单独成立一个
.py
文件,把新写的函数都放在其中,再好不过了。如果新增函数很多,请在crazy_functions
新建一个二级文件夹盛放您的工具。 -
新增的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
- 在函数开头说明功能,如果您希望标注您的昵称、联系方式、合作声明或者更个性化一点的东西等都是完全ok的,比如
crazy_functions/批量总结PDF文档.py
当中:
# 基本信息:功能、贡献者
chatbot.append([
"函数插件功能?",
"批量总结PDF文档。函数插件贡献者: ValeriaWong"])
yield chatbot, history, '正常'