[]
        
立即试用
(Showing Draft Content)

AI.QUERY

用户可以向AI.QUERY函数传递指定参数,以从AI模型获取查询结果。

语法

AI.QUERY(prompt1, [data1], [prompt2], [data2] ...)

参数

AI.QUERY函数可以接受任意数量的提示和数据,这些内容将被整理成一个文本块,发送给AI模型进行处理。

该函数包含以下参数:

参数

描述

prompt1

[必需] 用于描述任务或向AI模型提问的文本。每个prompt参数会按顺序与上下文合并,以形成完整的提示信息。

data1

[可选] 为AI模型提供上下文或数据的表格引用,可以是单个单元格或一个区域。

prompt2, data2, …

[可选] 为AI模型提供更多上下文的额外文本和表格引用,数量不限;可以成对使用,也可以只指定prompt

备注

发送给AI模型的提示是通过连接所有promptdata参数生成的。例如,使用公式=COPILOT("Classify", B1:B10, "into one of the following categories ", A1:A4)时,最终发送给AI模型的内容为:“Classify [B1:B10中的值] into the following categories [A1:A4中的值]”。

示例

示例1

以下示例展示了如何向AI.QUERY函数传递多个prompt参数,以便AI能够根据提示对给定文本进行智能分析。

// 要使用此示例,请将以下依赖项添加到项目中:com.openai:openai-java:4.6.1
// 配置模型请求处理程序,并根据需要选择不同的大模型提供商。此处示例使用OpenAI GPT-4.1;使用时请替换为您的API密钥。
Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.openai.com/v1", "sk-xxxx", "gpt-4.1"));
// DeepSeek模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.deepseek.com/v1", "sk-xxxx", "deepseek-chat"));
// 通义千问模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://dashscope.aliyuncs.com/compatible-mode/v1", "sk-xxxx", "qwen-plus"));

// 初始化工作簿并设置数据。
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);
sheet.getColumns().get(0).setColumnWidth(57);
sheet.getColumns().get(1).setColumnWidth(55);
sheet.getColumns().get(2).setColumnWidth(42);
sheet.getRange("A1:C1").合并();
sheet.getRange("A1").setValue("Example1: Customer Product Reviews and Classification");
sheet.getRange("A1").getFont().setBold(true);
sheet.getRange("A1").getFont().setSize(16);
sheet.getRange("A1").getFont().setColor(Color.GetWhite());
sheet.getRange("A1").getInterior().setColor(Color.FromArgb(90, 126, 158));
sheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A1").setVerticalAlignment(VerticalAlignment.Center);
sheet.getRange("A1").setRowHeight(35);
sheet.getRange("A3").setValue("Formula:");
sheet.getRange("A3").getFont().setBold(true);
sheet.getRange("A3").getFont().setSize(11);
sheet.getRange("A3").getInterior().setColor(Color.FromArgb(217, 225, 242));
sheet.getRange("B3").setValue("=AI.QUERY(\"evaluate these reviews\", A6:A13, \"based on these categories\",B5:C5)");
sheet.getRange("B3").getFont().setItalic(true);
sheet.getRange("B3").getFont().setColor(Color.FromArgb(68, 114, 196));
sheet.getRange("A5:C5").setValue(new Object[][]{
        {"Taco Truck Reviews", "Positive or negative", "Topics"}
});
sheet.getRange("A5:C5").getFont().setBold(true);
sheet.getRange("A5:C5").getInterior().setColor(Color.FromArgb(155, 194, 230));
sheet.getRange("A5:C5").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A6:A13").setValue(new Object[][]{
        {"Great tacos with fresh ingredients! Definitely coming back for more."},
        {"The service was slow, but the food was worth the wait."},
        {"Not impressed. The tacos were bland and lacked flavor."},
        {"Amazing variety of salsas and toppings. Loved it!"},
        {"The truck was clean and the staff was friendly."},
        {"Overpriced for the portion size. Won't be returning."},
        {"The tortillas were soggy and the meat was dry."},
        {"Best taco truck in town! Highly recommend the carne asada."}
});

// 定义AI公式;连接后的提示为:"Evaluate these reviews [A6:A13中的值], based on these categories [B5:C5中的值]"
sheet.getRange("B6").setFormula2("=AI.QUERY(\"evaluate these reviews\", A6:A13, \"based on these categories\",B5:C5)");
sheet.getRange("A6:C13").getFont().setSize(11);
sheet.getRange("A6:C13").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A6:C13").getBorders().setLineStyle(BorderLineStyle.Medium);
sheet.getRange("A6:C13").getBorders().setColor(Color.FromArgb(200, 200, 200));

// AI函数作为异步计算函数;您需要等待其计算完成。
workbook.calculate();
workbook.waitForCalculationToFinish();

// 将页面设置为打印单页。
sheet.getPageSetup().setFitToPagesTall(1);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setIsPercentScale(false);

// 另存为PDF文件。
workbook.save("AIQueryDataAnalysis.pdf");
/**
 * 针对OpenAI API的IAIModelRequestHandler实现。
 */
public class OpenAIModelRequestHandler implements IAIModelRequestHandler {
    private String _apiEndpoint;
    private String _apiKey;
    private String _model;
    public OpenAIModelRequestHandler(String apiEndpoint, String apiKey, String model) {
        if (apiEndpoint == null || apiEndpoint.trim().isEmpty())
            throw new IllegalArgumentException("API端点不能为空。");
        if (apiKey == null || apiKey.trim().isEmpty())
            throw new IllegalArgumentException("API密钥不能为空。");
        _apiEndpoint = apiEndpoint.replaceAll("/$", "");
        _apiKey = apiKey;
        _model = model;
    }
    @Override
    public CompletableFuture<AIModelResponse> sendRequestAsync(AIModelRequest request) {
        CompletableFuture<AIModelResponse> result = new CompletableFuture<>();
        if (request == null) {
            AIModelResponse modelResponse = new AIModelResponse();
            modelResponse.setSuccess(false);
            System.err.println("请求不能为空。");
            result.complete(modelResponse);
            return result;
        }
        OpenAIClientAsync openAIClient = OpenAIOkHttpClientAsync.builder()
               .apiKey(_apiKey)
               .baseUrl(_apiEndpoint)
               .build();
        ChatCompletionCreateParams.Builder builder = ChatCompletionCreateParams.builder();
        for (AIMessage item : request.getMessages()) {
            switch (item.getRole().toLowerCase()) {
                case "system":
                    builder.addSystemMessage(item.getContent());
                    break;
                case "user":
                    builder.addUserMessage(item.getContent());
                    break;
                default:
                    throw new RuntimeException("未知的消息角色: " + item.getRole());
            }
        }
        builder.model(_model);
        ChatCompletionCreateParams params = builder.build();
        CompletableFuture<ChatCompletion> chatCompletion = openAIClient.chat().completions().create(params);
        chatCompletion.whenComplete((response, exception) -> {
            try {
                if (exception != null) {
                    AIModelResponse errorResponse = new AIModelResponse();
                    errorResponse.setSuccess(false);
                    System.err.println("发生错误: " + exception.getMessage());
                    result.complete(errorResponse);
                } else {
                    if (response != null &&!response.choices().isEmpty()) {
                        StringBuilder contentBuilder = new StringBuilder();
                        for (ChatCompletion.Choice choice : response.choices()) {
                            choice.message();
                            if (choice.message().content().isPresent()) {
                                contentBuilder.append(choice.message().content().get());
                            }
                        }
                        AIModelResponse successResponse = new AIModelResponse();
                        successResponse.setSuccess(true);
                        successResponse.setContent(contentBuilder.toString());
                        result.complete(successResponse);
                    } else {
                        AIModelResponse noContentResponse = new AIModelResponse();
                        noContentResponse.setSuccess(false);
                        System.err.println("未从模型收到内容。");
                        result.complete(noContentResponse);
                    }
                }
            } finally {
                try {
                    openAIClient.close();
                } catch (Exception e) {
                    System.err.println("关闭OpenAI客户端时出错: " + e.getMessage());
                }
            }
        });
        return result;
    }
}

输出如下所示:

![image](/DOCUMENT_SITE_LINK_PREFIX_HERE/document-site-files/images/7466bdc8-02f8-494c-b60a-49ddbe7c10d4/image.6dd837.png?width = 950)

示例2

以下示例展示了如何使用AI.QUERY函数在电子表格中自动生成文本内容。

// 要使用此示例,请将以下依赖项添加到项目中:com.openai:openai-java:4.6.1
// 配置模型请求处理程序,并根据需要选择不同的大模型提供商。此处示例使用OpenAI GPT-4.1;使用时请替换为您的API密钥。
Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.openai.com/v1", "sk-xxxx", "gpt-4.1"));
// DeepSeek模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.deepseek.com/v1", "sk-xxxx", "deepseek-chat"));
// 通义千问模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://dashscope.aliyuncs.com/compatible-mode/v1", "sk-xxxx", "qwen-plus"));

// 初始化工作簿并设置数据。
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);
sheet.getColumns().get(0).setColumnWidth(28);
sheet.getColumns().get(1).setColumnWidth(35);
sheet.getColumns().get(2).setColumnWidth(18);
sheet.getColumns().get(3).setColumnWidth(18);
sheet.getColumns().get(4).setColumnWidth(25);
sheet.getRange("A1:D1").合并();
sheet.getRange("A1").setValue("Example 2: Content Generation-Ice Cream Flavors");

sheet.getRange("A1").getFont().setBold(true);
sheet.getRange("A1").getFont().setSize(14);
sheet.getRange("A1").getFont().setColor(Color.GetWhite());
sheet.getRange("A1").getInterior().setColor(Color.FromArgb(90, 126, 158));
sheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A1").setVerticalAlignment(VerticalAlignment.Center);
sheet.getRange("A1").setRowHeight(30);

// 定义AI公式以生成5种独特的冰淇淋口味。
String QueryFormula3 = "=AI.QUERY(\"Generate 5 unique ice cream flavors, arranged vertically\")";
sheet.getRange("A3").setValue("Query:");
sheet.getRange("A3").getFont().setBold(true);
sheet.getRange("A3").getFont().setSize(11);
sheet.getRange("A3").getInterior().setColor(Color.FromArgb(217, 227, 242));
sheet.getRange("B3:D3").合并();
sheet.getRange("B3").setValue(QueryFormula3);
sheet.getRange("B3").getFont().setItalic(true);
sheet.getRange("B3").getFont().setColor(Color.FromArgb(68, 114, 196));
sheet.getRange("A5").setValue("Generated Flavors:");
sheet.getRange("A5").getFont().setBold(true);
sheet.getRange("A5").getFont().setSize(11);
sheet.getRange("A5").getInterior().setColor(Color.FromArgb(155, 194, 230));
sheet.getRange("B5").setFormula2(QueryFormula3);
sheet.getRange("B5:B5").getFont().setItalic(true);

// AI函数作为异步计算函数;您需要等待其计算完成。
workbook.calculate();
workbook.waitForCalculationToFinish();

// 将页面设置为打印单页。
sheet.getPageSetup().setFitToPagesTall(1);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setIsPercentScale(false);

// 另存为PDF文件。
workbook.save("AIQueryTextGeneration.pdf");

输出如下所示:

image.bbe9cb.png