多维表接入第三方AI平台(以硅基流动举例)
前言:在官方没有正式推出AI算力平台前,使用第三方AI算力平台可以提前搭建框架,展现未来多维表格所能达成的效果。
AI算力平台基本都会使用API的形式进行交互操作,随原理相同,但操作起来对于零基础人员来说仍有困难。例如笔者在尝试由@邻家小哥 所展示的接入deepseek官网API代码的时候,它们已经暂停充值API余额(现已恢复),于是使用第三方算力平台进行代替,但代码不能简单复用,只能逐步纠错,好在最后成功运行。
本次尝试的硅基流动仅仅是其中的一家AI算力平台,华为云、阿里云、腾讯云等等都有对应的算力平台服务,根据需求可以自行选择,这里只介绍接入第三方的基本思路。
再次感谢@邻家小哥提供的代码思路。
- 效果
https://kdocs.cn/l/cpJVIXiOfQNL
请注意:笔者的API余额仅支持大概100张照片(或一万次文本)的分析。虽然免费使用,但仅供学习,请不要滥用。
共分两张表:TLM测试 和 VLM 测试,一个是文本Text,一个是视觉Visual。
- 构建js代码
第一步,找到右上角的脚本-AirScript脚本-新建脚本(以后要找的时候就点击“管理脚本”,直接点击已经建好的脚本会运行它),然后,将示例代码删除。
我们以TLM为例,逐步分析代码:
const text_id = Context.argv.id[0]
const text1 = Application.Sheets('TLM测试').RecordRange(text_id,"@问题").Text
const text = "你是一名专业的翻译老师,你只翻译单词,不会输出任何解释,请翻译:" +text1
//请求 API
const url = 'https://api.siliconflow.cn/v1/chat/completions'
const apiKey = "sk-darottdejporyoewkzqfxyeclbyyfhsdajhpwgeideedtzgk"
const data = {
model:"Pro/deepseek-ai/DeepSeek-V3",
messages:[
{"role": "user", "content": text},
],
};
const resp = HTTP.fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
}
})
const resptext= resp.json().choices[0].message.content
Application.Sheets('TLM测试').RecordRange(text_id,"@deepseek回复").Value = resptext
console.log(resptext)
以上是完整代码,你也可以在刚才分享的链接里找到。但要注意,现在的代码是“活代码”,直接复制粘贴是无法使用的。需要修改其中的一些内容:
第二行:将“TLM测试”改为要操作的数据表名称,将@问题改为要输入的字段(别少了@)
第三行:这是提问模板,可以根据自己的要求更改,原理和公式字段类似,不做过多解释。
第六行:请求的网址,需要在各个平台的API手册去找,硅基流动的地址和代码里的一样。
第七行:将API KEY 改为自己的,如何申请需要去对应的第三方平台询问。以硅基流动举例,如下图:
第九行:model,这里可以更改大模型,只要平台里有的,复制过来名字就可以用。
第二十三行:与第二行类似,第一个要改的是数据表的名字,第二个是回答区。
修改完毕后,粘贴到你的多维表脚本里。
三、添加服务授权与自动化流程
如图,点击服务授权,然后添加网络API,之后先运行一次,确认授权(不管错误代码,先授权了再说)
授权完后,新建一个按钮字段,设置“点击后执行Air Script脚本”,然后在自动化流程里的“执行airscript脚本”步骤里,找到右边的“脚本入参”,如下图般填写。
其中,双引号和冒号要用半角,“记录ID”要在右边的蓝色加号里找
最后点击右上角的“保存并启用”。构建就算完成了。
最后的最后,点击按钮,就可以让大模型开始工作了。要注意,只要回复框里没内容,那就是失败了,自行尝试解决,或者在帖子下留言都可以。
另外,VLM的思路类似,只是增加了一个需要操作的图片地址字段。代码如下,自然也可以在示例链接里找到:
const textid = Context.argv.id[0]
const value = Application.Sheets('VLM测试').RecordRange(textid,"@图片和附件").Value
const mid1 = value.Value
const imgurl = mid1[0].LinkUrl
const question = Application.Sheets('VLM测试').RecordRange(textid,"@问题").Text
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer sk-darottdejporyoewkzqfxyeclbyyfhsdajhpwgeideedtzgk',
'Content-Type': 'application/json'
},
body:JSON.stringify({
model: "Qwen/Qwen2-VL-72B-Instruct",
messages: [
{
role: "user",
content: [
{
type: "image_url",
image_url: {
url: imgurl, // 将 imgurl 插入到这里
detail: "auto",
text: "tell me what you have seen in this picture,more detailed the better"
}
}
]
},
]
})};
const resp = HTTP.fetch('https://api.siliconflow.cn/v1/chat/completions', options)
const resptext = resp.json().choices[0].message.content
console.log(resptext)
Application.Sheets('VLM测试').RecordRange(textid,"@回答").Value = resptext
创作者俱乐部成员