常见问题
问:为什么生成输出需要这么长时间?
A: 在默认设置下,TaskWeaver通常会经过以下步骤来生成输出:
- 用户向Planner发送查询请求。
- 规划器(Planner)根据查询生成计划,并将该计划发送给代码解释器(CodeInterpreter)。
- 代码解释器执行计划并将执行结果返回给规划器。
- 规划器(Planner)汇总执行结果并将摘要发送给用户。
- 用户从规划器(Planner)接收到摘要信息。
在某些情况下,规划器(Planer)和代码解释器(CodeInterpreter)可能需要多次来回交互才能生成输出结果。 这个过程可能会耗费较长时间,主要原因是调用大语言模型(LLMs)存在延迟。 为了加快处理速度,您可以尝试以下方法:
- 使用较小的LLM模型,例如GPT-3.5而非GPT-4。不过您需要针对具体用例进行测试,以确认较小的模型是否仍能正确生成输出。
- 仅使用代码解释器模式,该模式会跳过规划器,直接从用户查询生成代码。此模式速度更快,因为它跳过了规划步骤。但您应检查您的用例是否需要规划步骤。
问题:为什么TaskWeaver失败且日志显示"无法连接到docker.daemon"?
A: 这个错误通常发生在TaskWeaver以container模式运行且无法连接Docker守护进程时。
我们默认切换到container模式是为了为代码执行提供更安全的环境。
要退出container模式,您可以在taskweaver_config.json文件中将execution_service.kernel_mode参数设置为local。
但请注意,在local模式下TaskWeaver可以直接与主机交互,这可能会带来安全风险。
问:为什么我会看到错误提示说Planner未能生成send_to、message或其他字段?
A: 这通常是由于大语言模型未能按照我们的模式生成输出。在Planner的提示中,我们要求大语言模型生成一个包含send_to、message、init_plan、plan和current_plan_step的JSON对象。缺少其中任何字段都会导致解析错误。缓解此问题最有效的方法是切换到更强大的大语言模型,例如GPT-3.5或GPT-4。
Q: 如何确认TaskWeaver能识别我的插件?
A: 检查TaskWeaver是否能识别您的插件,一个简单方法是询问TaskWeaver"你能做什么?"。 典型的响应会列出所有可用插件,如下所示:
I can assist you with various tasks, including:
- Detecting anomalies in time series data.
- Rendering text into ASCII art.
- Searching and comparing prices from thousands of online shops (US only).
- Telling a joke.
If you have a specific task in mind, please let me know, and I'll do my best to assist you.
如果在列表中看到您的插件,说明TaskWeaver能够识别到该插件。
但这并非验证TaskWeaver是否识别插件的可靠方法,因为该响应是由大语言模型生成的。
更可靠的方式是检查规划器(Planner)的提示词。您可以通过
project/workspace/sessions/文件
查找提示词内容。然后按以下方式搜索对应段落:
CodeInterpreter has the following plugin functions and their required parameters need to be provided before the execution:
- anomaly_detection: anomaly_detection function identifies anomalies from an input DataFrame of time series. It will add a new column \"Is_Anomaly\", where each entry will be marked with \"True\" if the value is an anomaly or \"False\" otherwise. Arguments required: df: DataFrame, time_col_name: str, value_col_name: str
- ascii_render: This plugin renders the input text into ASCII art form. Arguments required: text: str
- klarna_search: Search and compare prices from thousands of online shops. Only available in the US. This plugin only takes user requests when searching for merchandise. If not clear, confirm with the user if they want to search for merchandise from Klarna. Arguments required: query: str
- tell_joke: Call this plugin to tell a joke.
检查你的插件是否在列表中。如果在,表示TaskWeaver可以识别到你的插件。
问题:为什么TaskWeaver无法识别我的插件?
首先,请确保您已仔细阅读我们的插件介绍和本教程。
您应该在plugins文件夹中包含两个文件,例如ascii_render.py和ascii_render.yaml。
现在,如果TaskWeaver无法识别您的插件,通常是由于yaml文件中的语法错误导致的。 如果您使用的是命令行界面,请检查控制台输出;如果您使用的是网页界面,请检查控制台日志。 您可能会看到以下错误信息:
failed to loading component from <name>.yaml, skipping: Yaml loading failed due to: <reason>
错误信息会告诉你为什么无法加载yaml文件。 通常使用yaml语法检查工具(例如Visual Studio Code中的)或在线yaml语法检查器可以轻松修复语法错误。
如果您已检查过yaml文件的语法但TaskWeaver仍无法识别您的插件,请检查yaml文件是否包含所有必填字段,例如parameters和returns字段。
问:为什么TaskWeaver能看到我的插件但无法调用它?
A: 在这种情况下,您可能会看到生成的代码调用了插件函数,但执行结果却显示插件函数未定义的错误信息。如果发生这种情况,请检查控制台输出(如果您使用的是命令行界面)或控制台日志(如果您使用的是网页界面)。
您可能会看到以下错误信息:
Plugin <name> failed to load: Plugin <name> failed to register: failed to load plugin <name> <reason>
此错误信息会告诉你插件函数无法加载的原因。 通常通过检查控制台输出或日志可以轻松修复这些错误。 根本原因通常是Python文件中的错误导致插件函数无法加载。 典型错误包括语法错误、缺少导入或缺少包。
请注意,这类错误并非由插件函数"内部"的实现所导致。 否则,错误会在插件函数执行期间被捕获, 而非在插件函数加载过程中出现。
Q: 如何调试我的插件?
A: 我们正在开发一个调试工具来帮助您调试插件。目前,一个简单的调试方法是在Python文件中定义一个main函数并在本地环境中运行它。
例如,您可以在ascii_render.py中定义一个main函数如下:
if __name__ == "__main__":
from taskweaver.plugin.context import temp_context
with temp_context() as temp_ctx:
render = AsciiRenderPlugin(name="ascii_render", ctx=temp_ctx, config={})
print(render(text="hello world!"))
在这个主函数中,我们创建了一个临时上下文并使用一些输入调用了插件函数。 您无需修改插件实现。只需将主函数添加到python文件的末尾。 然后,在本地环境中运行该python文件。如果出现任何错误,您可以在控制台输出中查看它们。
如果在yaml文件中有configurations部分,您可以在插件构造函数的config参数中手动设置配置。
我们目前不会读取yaml文件,因此您需要确保在config参数中正确设置了配置。
例如,如果在yaml文件中定义了一个整数配置max_length,您可以像下面这样在config参数中进行设置:
config = {
"max_length": 100
}
然后,将config传递给插件构造函数。由于yaml对类型敏感,您需要确保配置的类型是正确的。
问题:为什么我会看到错误信息"RuntimeError: This event loop is already running"?
A: 我们使用Jupyter内核在TaskWeaver中执行代码。Jupyter内核通过事件循环来管理代码执行。 如果您看到错误信息"RuntimeError: This event loop is already running.",通常意味着事件循环已经在运行中。 这种情况通常是由TaskWeaver运行环境导致的。例如,当您在Jupyter Notebook中运行TaskWeaver时。
Q: 为什么运行TaskWeaver时看到错误信息"Permissions assignment failed for secure file: Got '0o677' instead of '0o0600'."?
A: 这个错误信息通常发生在TaskWeaver在Windows机器上以容器模式运行并使用WSL时。
可以参考这个issue获取更多详情。
解决方案是为容器设置JUPYTER_ALLOW_INSECURE_WRITES=true。