我正在尝试在一个项目中使用promptflow-evals SDK,并在其中使用相对导入。由于我调用模块的方式(使用python -m modulename),这可以正常工作。然而,PromptFlow出于某种原因尝试导入我的文件,然后报错:
File "/Users/pamelafox/ai-rag-chat-evaluator/scripts/evaluate.py", line 142, in run_evaluation
results = evaluate(
^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/evals/evaluate/_evaluate.py", line 252, in evaluate
input_data_df, target_generated_columns, target_run = _apply_target_to_data(target, data, pf_client,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/evals/evaluate/_evaluate.py", line 128, in _apply_target_to_data
run = pf_client.run(
^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_pf_client.py", line 301, in run
return self._run(
^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_pf_client.py", line 226, in _run
return self.runs.create_or_update(run=run, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_telemetry/activity.py", line 265, in wrapper
return f(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/operations/_run_operations.py", line 134, in create_or_update
created_run = RunSubmitter(client=self._client).submit(run=run, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_orchestrator/run_submitter.py", line 42, in submit
self._run_bulk(run=run, stream=stream, **kwargs)
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_orchestrator/run_submitter.py", line 111, in _run_bulk
with flow_overwrite_context(flow_obj, tuning_node, variant, connections=run.connections) as flow:
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 137, in __enter__
return next(self.gen)
^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_orchestrator/utils.py", line 264, in flow_overwrite_context
override_flow_yaml(
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_orchestrator/utils.py", line 219, in override_flow_yaml
update_signatures(code=flow_dir_path, data=flow_dag)
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_utilities/signature_utils.py", line 148, in update_signatures
signatures, _, _ = infer_signature_for_flex_flow(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_sdk/_utilities/signature_utils.py", line 72, in infer_signature_for_flex_flow
flow_meta = inspector_proxy.get_entry_meta(entry=entry, working_dir=code)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_proxy/_python_inspector_proxy.py", line 47, in get_entry_meta
return _generate_flow_meta(
^^^^^^^^^^^^^^^^^^^^
File "/Users/pamelafox/ai-rag-chat-evaluator/.venv/lib/python3.11/site-packages/promptflow/_core/entry_meta_generator.py", line 84, in _generate_flow_meta
raise GenerateFlowMetaJsonError(error_message)
promptflow.core._errors.GenerateFlowMetaJsonError: Generate meta failed, detail error:
["Failed to load python module from file '/Users/pamelafox/ai-rag-chat-evaluator/scripts/evaluate.py': (ImportError) attempted relative import with no known parent package"]
。因此,我现在不得不重新组织我的项目以避免使用相对导入。请放宽这个限制。
9条答案
按热度按时间pdkcd3nj1#
你好@pamelafox,在我们的概念中,流程应该是自包含的。这使得从本地到云端构建流程快照和共享变得更加容易。当流程具有相对外部导入时,我们无法为其构建快照。但是我们可以改进错误消息,使其对客户更加友好。
kyvafyod2#
你好,我们发送这个友好的提醒是因为我们在30天内没有收到你的回复。我们需要更多关于这个问题的信息来帮助解决它。请务必给我们提供你的反馈。如果我们在7天内没有收到你的回复,问题将自动关闭。谢谢!
xfb7svmp3#
我认为promptflow应该能够处理导入其他文件的文件,因为大多数开发者使用模块来提高代码的可重用性。如果我不能引入任何其他文件,那么我将不得不在我的代码库的各个部分无谓地重复常见的代码。
nnvyjq4y4#
为这个添加了一个长期标签。我有一个提议,要将
code
字段引入到 flow 的 YAML 中。如果用户需要在当前工作目录之外导入,他们可以将 flow 的code
设置为基础文件夹。例如,一个组织得像这样
的项目
flow1
和flow2
可以像这样在 flow YAML 中设置code
但是,您需要使用绝对导入,如下所示
而不是相对导入,如下所示
因为我们使用了多进程来执行 flow,而相对导入可能会找不到其父包。
4uqofj5v5#
在同一个问题上被阻塞。
vuv7lop36#
我也在这个问题上遇到了阻碍,同一个项目中有2个流程,这两个流程都需要共享的代码逻辑,但是VS Code扩展无法将共享模块导入为Python节点/工具。
只有当根级别只有一个流程时,重新组织项目才能正常工作。
toe950277#
你好,MingStar。根据你的描述,这是一个关于prompt流的当前设计行为的问题。一个解决方法是将这两个流程文件放在根目录下,如下所示。如果这有帮助,请告诉我。
$x_1^a_0b_1^x$
fnvucqvd8#
@MingStar,由于当前的prompt flow是设计行为。一个解决方法是将这两个流程文件放在根目录下,如下所示。如果这有帮助,请告诉我。
但是,使用这个解决方法后,VS Code扩展程序无法识别这两个DAG yaml文件...它似乎只寻找
flow.dag.yaml
vohkndzv9#
@MingStar,由于当前的prompt flow是设计成这样的行为。一个解决方法是将两个流程文件放在根目录下,如下所示。如果这有帮助,请告诉我。
但是,使用这个解决方法,VS Code扩展程序无法识别这两个DAG yaml文件...它似乎只寻找
flow.dag.yaml
我提供的解决方法仅适用于SDK/CLI,目前VS Code扩展程序只能识别
flow.dag.yaml
是一个单独的文件夹。如果你需要使用VS Code扩展程序,也许你可以将通用库制作成可编辑的本地包并安装在你的本地环境中,或者将lib
文件夹复制到两个流程文件夹中。一旦支持在flow中切换工作目录,我们会在这里进行更新。