dify "自定义工具"无法导入qdrant OpenAPI,

3bygqnnd  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(25)

自我检查

  • 这仅用于提交错误报告,如果您想提问,请访问 Discussions
  • 我已在 search for existing issues 中搜索了现有问题,包括已关闭的问题。
  • 我确认我使用英语提交此报告(我已阅读并同意 Language Policy )。
  • 请不要修改此模板 :) 并填写所有必需的字段。

Dify版本

0.6.11

云或自托管

自托管(Docker)

重现步骤

  1. 在顶部导航栏中,选择 "Tools" -> "Custom" -> "Create Custom Tool"。
  2. 点击 "+ Import from URL" 按钮,输入qdrant的API定义URL:https://raw.githubusercontent.com/qdrant/qdrant/master/docs/redoc/master/openapi.json ,然后点击 "OK"。
  3. 在界面上显示错误消息。

  1. 将JSON内容复制到下面的文本框中也会导致错误消息。

  1. 使用官方推荐的Swagger工具在 https://petstore.swagger.io/ 成功解析qdrant OpenAPI URL。

✔️ 预期行为

Qdrant OpenAPI定义应正确导入工具。如果有任何不兼容的端点,建议在UI中突出显示特定端点信息。

❌ 实际行为

它只会弹出错误消息,用户不知道如何解决它。

ut6juiuv

ut6juiuv1#

要解决将Qdrant OpenAPI定义导入Dify工具版本0.6.11的问题,您需要确保模式是有效的并正确解析。ApiBasedToolSchemaParser类提供了处理模式解析和验证的方法。
以下是逐步排查和解决问题的步骤:

  1. 验证模式:确保OpenAPI模式有效。您可以使用parse_openapi_yaml_to_tool_bundle方法验证模式。
  2. 检查模式类型:确保模式类型受支持。auto_parse_to_tool_bundle方法检查模式类型是否有效。
  3. 解析模式:使用parse_openapi_to_tool_bundle方法将模式解析为工具包。
  4. 处理错误:捕获并处理在解析过程中发生的任何异常。
    以下是一个代码片段,演示了这些步骤:
from core.tools.utils.parser import ApiBasedToolSchemaParser
from core.tools.entities.tool_entities import ApiProviderSchemaType
from core.tools.errors import ToolApiSchemaError, ToolNotSupportedError, ToolProviderNotFoundError

def resolve_schema_validation_error(schema: str):
    try:
        # Step 1: Validate and parse the schema
        extra_info = {}
        warning = {}
        tool_bundles, schema_type = ApiBasedToolSchemaParser.auto_parse_to_tool_bundle(schema, extra_info=extra_info, warning=warning)
        
        # Step 2: Check for schema type (assuming 'openapi' for this example)
        if schema_type != ApiProviderSchemaType.OPENAPI.value:
            raise ValueError(f'Invalid schema type {schema_type}')
        
        # Step 3: Handle the parsed tool bundles (e.g., create a provider)
        # This is an example, adjust according to your actual implementation
        provider_name = "Qdrant"
        tenant_id = "your_tenant_id"
        user_id = "your_user_id"
        icon = {}  # Your icon data
        credentials = {"auth_type": "none"}  # Your credentials
        privacy_policy = "Your privacy policy"
        custom_disclaimer = "Your custom disclaimer"
        labels = ["label1", "label2"]
        
        result = ApiToolManageService.create_api_tool_provider(
            user_id=user_id,
            tenant_id=tenant_id,
            provider_name=provider_name,
            icon=icon,
            credentials=credentials,
            schema_type=schema_type,
            schema=schema,
            privacy_policy=privacy_policy,
            custom_disclaimer=custom_disclaimer,
            labels=labels
        )
        
        return result
    except (ToolApiSchemaError, ToolNotSupportedError, ToolProviderNotFoundError) as e:
        return {'error': str(e)}

# Example usage
schema = "your_openapi_schema_here"
result = resolve_schema_validation_error(schema)
print(result)

这段代码将帮助您验证和解析OpenAPI模式,并处理在过程中可能发生的任何错误。如果模式有效且正确解析,它将继续创建API工具提供程序1(https://github.com/langgenius/dify/blob/main/api/core/tools/utils/parser.py)2(https://github.com/langgenius/dify/blob/main/api/services/tools/api_tools_manage_service.py)。

  • 要继续与Dosu交谈,请提及@dosu。*

相关问题