Microsoft PromptFlow项目:如何在流程中引用外部文件和文件夹
引言
在开发基于Microsoft PromptFlow的流程时,我们经常会遇到需要复用已有代码资源的情况。虽然将这些资源打包成Python包是一种解决方案,但有时创建包可能过于繁琐或不切实际。本文将详细介绍PromptFlow提供的"additional_includes"功能,这是一种高效引用外部文件和文件夹的机制。
为什么需要引用外部资源
在实际项目开发中,我们经常会遇到以下场景:
- 多个流程需要共享相同的工具脚本
- 某些功能模块已经开发完成,但尚未打包
- 需要临时引用测试环境中的特定文件版本
这些情况下,"additional_includes"功能就能派上用场,它允许我们在不修改原有文件结构的情况下,灵活地将外部资源整合到当前流程中。
基本使用方法
要在流程中引用外部文件或文件夹,只需在flow.dag.yaml配置文件中添加additional_includes
字段。这个字段的值是一个列表,包含相对于当前流程文件夹的外部文件或文件夹路径。
additional_includes:
- ../shared_scripts/text_processing.py
- ../utils/data_preparation/
- ../../common_templates/classification.jinja2
工具节点配置
在定义工具节点时,可以直接使用文件名而不需要重复指定相对路径:
nodes:
- name: text_processing
type: python
source:
type: code
path: text_processing.py # 实际路径已在additional_includes中指定
inputs:
input_text: ${inputs.text}
优先级规则
理解文件引用的优先级规则对于正确使用此功能至关重要:
- 同名文件冲突:如果在
additional_includes
中列出了多个同名文件,系统将使用最后出现的那个 - 与流程文件夹内文件冲突:如果外部文件和流程文件夹内文件同名,系统会优先使用
additional_includes
中指定的文件
示例场景
假设有以下配置:
additional_includes:
- ../version1/process_data.py
- ../version2/process_data.py
节点配置:
nodes:
- name: data_processor
type: python
source:
type: code
path: process_data.py
在这种情况下,系统将使用../version2/process_data.py
作为工具节点的入口文件。
最佳实践
-
路径管理:
- 使用相对路径时,确保路径相对于流程文件夹
- 考虑使用统一的共享资源目录结构
-
版本控制:
- 对于关键组件,建议在文件名中包含版本信息
- 例如:
data_processor_v1.2.py
-
调试技巧:
- 在复杂引用情况下,可以先打印文件路径确认实际加载的是哪个文件
- 使用日志记录文件加载过程
高级用法
文件夹引用
除了单个文件,还可以引用整个文件夹:
additional_includes:
- ../common_utils/
引用文件夹时,该文件夹下的所有内容都会被视为流程的一部分。
模板文件引用
对于Jinja2模板文件,引用方式与Python文件相同:
additional_includes:
- ../templates/classification_prompt.jinja2
然后在节点中直接使用文件名引用:
nodes:
- name: classify
type: llm
source:
type: code
path: classification_prompt.jinja2
注意事项
- 路径正确性:确保所有路径在流程执行环境中都是有效的
- 文件权限:引用的外部文件需要有适当的读取权限
- 环境一致性:在不同环境部署时,确保外部资源的路径结构一致
- 性能考虑:大量外部引用可能会影响流程加载速度
总结
Microsoft PromptFlow的"additional_includes"功能为流程开发提供了极大的灵活性,使得代码复用和资源管理变得更加简单高效。通过合理使用这一功能,开发者可以:
- 避免不必要的代码复制
- 保持代码库的整洁性
- 实现跨流程的组件共享
- 灵活管理不同版本的资源文件
掌握这一功能将显著提升您在PromptFlow项目中的开发效率和代码可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考