帆软报表接入大模型实战测试

楼主
我是社区第101117位番薯,欢迎点我头像关注我哦~

某天老板拍了拍我:"小魏啊,听说隔壁老王家Excel都能用DeepSeek生成彩虹屁周报了?帆软报表还在手动敲公式?这能忍?咱们报表也整个大模型,要能写诗会算命那种!"

我(瞳孔地震):"尊嘟假嘟?现在连BI都要当六边形战士了??"

(于是开启了一段与API斗智斗勇の奇妙旅程...)

(扶了扶赛博墨镜,敲键盘的手微微颤抖)家人们谁懂啊!当代打工人为了给帆软报表整点「AI智商」有多拼!本人在「赛博炼丹炉」里炸了三天三夜,终于把DeepSeek大模型塞进了帆软!教程这就端上来,全程高能,建议搭配电子榨菜食用~

一、前期准备

获取大模型 API 权限

一开始选了 DeepSeek 大模型,在官网注册账号时,居然遇到人脸认证,我当时头发没洗,照片惨不忍睹,反复认证了好几次才成功,大家一定要吸取我的教训。不过后来 DeepSeek 官方因服务器资源紧张暂停 API 服务充值,我又转而使用了阿里百炼的 deepseek - r1 - distill - llama - 70b 模型,主要是看中它能免费使用。

认证获取:

登录阿里百炼控制台

创建应用并获取API Key(需妥善保存)

二、核心接入方案(通过HTTP数据连接)(已放弃)

本来打算使用服务器数据连接json连接

配置数据连接

进入FineReport设计器 → 服务器 → 定义数据连接 → 选择「HTTP」类型。

填写API地址:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions ,请求方式为POST。

添加Headers:

  {
        "Authorization": "Bearer [你的API Key]",
        "Content-Type": "application/json"
        }

 构建请求体参数

参考阿里百炼 API文档格式,示例JSON请求体:

{
        "model": "deepseek-r1-distill-llama-70b",
        "messages": [{"role": "user", "content": "=参数名"}],
        "temperature": 0.7
        }

可通过FineReport参数动态传递查询内容(如文本框输入值)。

解析返回数据

使用JSONPath或JavaScript解析API返回的JSON结构,提取choices.0.message.content 字段8。

示例解析路径:$.choices[0].message.content

但是json数据连接不支持Bearer token 试了好几遍 都没有用

 

三 决定使用自定义函数/插件,

通过Java开发自定义函数

使用阿里百炼官方Apache HttpClient封装API调用逻辑。

代码片段:

package com.fr.function; 
 
import com.fr.script.AbstractFunction; 
import org.apache.http.HttpEntity; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.util.EntityUtils; 
import java.nio.charset.StandardCharsets; 
 
public class DeepSeekQuery extends AbstractFunction {
       private static final String API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"; 
    private static final String API_KEY = "sk-d962d1e47d18c"; // 替换实际API密钥 
 
    @Override 
    public Object run(Object[] args) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault())  {
            HttpPost httpPost = new HttpPost(API_URL);
            
            // 构建请求头 
            httpPost.setHeader("Authorization",  "Bearer " + API_KEY);
            httpPost.setHeader("Content-Type",  "application/json");
            
            // 构建请求体(适配通义千问格式)
            String requestBody = String.format("{" 
                + "\"model\":\"deepseek-r1-distill-llama-70b\","
                + "\"messages\":[{\"role\":\"user\",\"content\":\"%s\"}],"
                + "\"temperature\":0.7}", args[0].toString());
            
            httpPost.setEntity(new  StringEntity(requestBody, StandardCharsets.UTF_8));
            
            // 执行请求并解析响应 
            try (CloseableHttpResponse response = httpClient.execute(httpPost))  {
                HttpEntity entity = response.getEntity(); 
                String result = EntityUtils.toString(entity); 
                return extractContent(result); // 提取响应内容 
            }
        } catch (Exception e) {
            return "API调用失败: " + e.getMessage(); 
        }
    }
 
    private String extractContent(String jsonResponse) {
        // 根据阿里响应结构提取内容(参考搜索结果[1][5])
        int startIndex = jsonResponse.indexOf("\"content\":\"")  + 11;
        int endIndex = jsonResponse.indexOf("\"",  startIndex);
        return jsonResponse.substring(startIndex,  endIndex).replace("\\n", "\n");
    }
}

在报表中使用公式 =DeepSeekQuery(输入参数) 调用。

结果 公司把api屏蔽了

没法预览效果

哪位公网同志试试 看可行不

用法:

 

一、基础调用方法

1.单元格直接调用

在需要显示AI结果的单元格输入公式:

=DeepSeekQuery("用户输入内容")

示例:=DeepSeekQuery("分析华北区Q4销售额趋势")

2.参数扩展:支持动态参数传递

=DeepSeekQuery(A1)(A1为包含用户问题的单元格)

参数面板交互

添加文本框控件,绑定参数input_text

目标单元格公式改为:

=DeepSeekQuery($input_text)

二、高级功能实现

 

1.数据驱动分析

结合SQL数据集结果调用AI:

=DeepSeekQuery("解释以下销售数据:" + C1 + ",并提出改进建议")

2.多步骤对话

通过单元格串联实现上下文记忆:

B1: =DeepSeekQuery("生成华东区产品推广策略")

B2: =DeepSeekQuery(B1 + ",请细化执行步骤")

三、典型应用场景

1.智能报表注释

=DeepSeekQuery("用200字解释图表趋势:" + CHAR(10) + GRAPH_DATA(A1:E10))

2.数据校验自动化

=IF(ISERROR(VLOOKUP(...)),

DeepSeekQuery("校验失败原因:" + ERROR.TEXT + ",建议修正方法"),

"数据正常")

分享扩散:

沙发
发表于 6 天前
有一说一,有点鸡肋加不明所以……这玩意你接入大模型还不如手动复制过去问的快啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表