Fxiaoke Developer Manual Fxiaoke Developer Manual
  • APL Development Manual
  • PWC Development Manual
  • OpenAPI Documentation
APL Code Introduction
API Reference
Development Tools
Release Notes
  • 简体中文
  • English
APL Code Introduction
API Reference
Development Tools
Release Notes
  • 简体中文
  • English
  • Getting Started

  • APL Function Open Scenarios

  • APL Class Open Scenarios

    • Common Library

    • Electronic Signature

    • Authentication Provider

    • Available Business Types

    • Object Controller Plugin

    • Event Listener

    • Object Export Plugin

    • ERP Integration Platform

    • Field Service Type Function Validation

    • FMCG Order Business Plugin

    • Object Business Handler

    • Online Documentation

    • Custom Model

      • 1.Overview
      • 2.Configuration Steps
      • 3.Groovy Code Examples
      • 4.FAQ
    • Environment Deployment

Groovy Code Example

/**
 * AI Custom Model
 * @type classes
 * @namespace ai_custom_model
 * @returntype
 */
class CustomModelManageImpl implements CustomModelManage {

    // API key for the model
    String apiKey = "Bearer xxxx-be91-4adb-8acc-xxxxxx"
    // URL endpoint for the model
    String url = "https://xxx.xxx.com/api/v3/chat/completions"
    // Model identifier
    String model = "chat-4"

    ChatCompletion.Result chatCompletion(ChatCompletion.Arg arg) {
        // Complete message list
        def messageList = arg.getMessages() as List
        // Message content
        String content = arg.getMessages().get(0).getContent()
        // Message role
        String user = arg.getMessages().get(0).getRole()

        // Build message payload
        def messages = []
        messageList.each { message ->
            messages << [
                    "content": message['content'],
                    "role"   : message['role']
            ]
        }

        Map bodyMap = [
                "messages": messages,
                "model"   : model,
                "stream"  : false
        ]
        log.info(bodyMap)
        StringBody body = StringBody.builder().content(bodyMap).build()
        Request request = Request.builder()
                .method("POST")
                .url(url)
                .timeout(7000)
                .retryCount(0)
                .header("Content-Type", "application/json")
                .header("Authorization", apiKey)
                .body(body)
                .build()

        // Model invocation - replace with your actual model calling logic
        def (Boolean error, HttpResult ret, String message) = Fx.http.execute(request)

        // Log model output
        log.info(ret)

        // Convert result to Fenxiang standard format
        ChatCompletion.Result newResult = convertResult(ret)

        // Return final result
        return newResult
    }

    // Converts model output to Fenxiang standard result format
    private ChatCompletion.Result convertResult(HttpResult result) {
        log.info(result)
        ChatCompletion.Result res = new ChatCompletion.Result()
        if (result.statusCode != 200) {
            return res
        }

        // Extract first choice's message content
        def choices = result.content["choices"] as List
        def content = choices[0]["message"]["content"] as String

        ChatCompletion.Choice newChoice = new ChatCompletion.Choice()
        // finish_reason - termination reason for model inference
        newChoice.setFinish_reason("")

        ChatCompletion.Message newMessage = new ChatCompletion.Message()
        newMessage.setRole("user")
        newMessage.setContent(content)
        newChoice.setMessage(newMessage)

        ChatCompletion.Choice[] newChoices = [newChoice] as ChatCompletion.Choice[]
        res.setChoices(newChoices)
        return res
    }

    // Debug entry point
    static void main(String[] args) {

    }

}
2.Configuration Steps
4.FAQ

← 2.Configuration Steps 4.FAQ→

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式