python: 扣子工作流创建与dbpystream api 自主插件开发

利用扣子开发智能体、工作流程和应用已经成为新的热点。下面说说我的一些尝试。

一、利用现有资源生成工作流

此前已经利用已经上架的插件、大模型,编排了一个数据取数的工作流。

具体如下:

可以实现:

输入文本:

"比如请帮我取一下招商银行(600036)过去8周的日度数据"

输出:

生成csv的文件链接在浏览器上,直接下载即可。

在这个创建的扣子工作流中,利用平台上架的资源,共设置了5个具体的工作流:

工作流1:通过设置相应的大模型,把"取一下招商银行(600036)过去8周的日度数据"转换成相应的json,喂给下一个插件;【文本转json】

工作流2:把工作流1生成的相关输入,输入插件stock_quote_fetch中,并生成新的输出;【输入字段,输出json数据】

工作流3:把工作2的输出,输入到jsontocsv中,把json文件转换到csv数据;【json转csv】

工作流4:把csv数据文件生成相应的文件;【csv数据生成csv文件】

工作流5:生成csv文件链接,供直接下载。【提供csv文件的链接和下载】

上面就是在平台上测试的情况。

总的来讲,利用大模型、现有的插件资源,来提供相应的服务,还是比较有意思的(关键是服务能力将有质的提升)。

二、关于自有插件的创建

上面的扣子工作流,都是利用现成的上架的资源(智能体、大模型、插件)来实现的。

毕竟有一些插件需要自定义,做特定的工作流或智能体呢,那只能进行自开发了。

那么,如何利用自身开的发插件,来实现自己的工作流或智能体?

首先,点击"资源库",并找到"+资源"
打开后,出现下面输入界面,并填好。

需要说明的是,目前开发语言只有node.js和python两种选项。

填后确认后,可以进入编写插件的平台。

并点击生成工具。就会开现相关代码平台。

里面有几个重点内容:

1、Input和Output;2、代码和元数据

当然,可以看到里面有一段关于Input和Output的说明,可以了解一下。

下面以dbpystream api为基础,创建自主插件的Input和Output来进行具体说明。

关于Input

css 复制代码
args: Args[Input]:代表是输入的参数体。具体的参数字段在args.input里面。 在写代码时需要注意。

如果你点击一下元数据,security这个字段,可以对应写代码可以:

css 复制代码
args.input.security

其它对应即可。

关于Output

在代码编写时不用管。这里只需要注意,把格式要进行一一对应即可。

输出参数坑比较多。比如,pandas中有一些数据结构并不支持,需要进行特别处理。

我已经在下面尝试了一些复杂的数据结构。具体可以参考。

三、dbpystream api插件开发的python代码

1、dbpystream api

dbpystream api 项目具体见:

css 复制代码
https://github.com/songroom2016/dbpystream

2、插件代码

把dbpystream api 做成扣子中自主插件,以下是全部的代码:

css 复制代码
from runtime import Args
import requests
import pyzstd
import pandas as pd
import pickle
import json

from typings.get_bar_data.get_bar_data import Input, Output

    
dbpystream_login_url = "http://101.132.253.192/login"
dbpystream_get_price_url  ="http://101.132.253.192/history_price"


def get_headers(token) ->dict:
    headers = {"Content-Type": "application/json",
                "Authorization": token,
                "lang" :"python",
                "compression":"zstd"
                }
    return headers

def get_token() -> str:
    username = "************" # 此处隐去!
    password = "*************" # 此处隐去!
    payload = {"username":username,"password":password}
    response = requests.post(dbpystream_login_url, json=payload)
    token = response.text
    return token
# 有关input
def get_params(args: Args[Input]) ->dict:
    params  = {"security" : args.input.security,
    "start_date":args.input.start_date,
    "end_date":args.input.end_date,
    "frequency":args.input.frequency,
    "fq":args.input.fq,
    "fields":args.input.fields};
    
    return params
    
def handler(args: Args[Input] ) ->Output:
    df = pd.DataFrame()
    params = get_params(args)
    data = json.dumps(params)
    token = get_token()
    headers = get_headers(token)
    response = requests.post(dbpystream_get_price_url,data = data,headers = headers) 
    result = response.content #得到服务端传过来的zstd压缩后的字节流文件 
    _msg = pyzstd.decompress(result) #默认是zstd方式解压

    if  _msg != b'':
        decompress_data = pickle.loads(_msg) # 需要通过pickle来反序列化,得到dict
        df   = pd.DataFrame(decompress_data) # 生产datafram
    # 相关数据处理
    dt = list(map(str,list(df.datetime))) #不支持原生的格式,需要进行处理
    code =list(df.code)
    open = list(df.open)
    close = list(df.close)
    high = list(df.high)
    low = list(df.low)
    volume = list(df.volume)
    amount = list(df.money)
  
    result = {"close":close,"datetime":dt,"code":code,"high":high,"open":open,"low":low,"volume":volume,"amount":amount}
    return result

四、测试

在开发平台上可以进行相关的测试。上面的代码也通过了相应的测试,总体上和写其它的代码差异不大,主要是Output格式上。

五、其它

扣子原生的开发平台目前支持还比较弱,报错信息和输出不太友好。可以先把代码放到原生IDE中进行调试。再搬回这个平台,这样效率高一些。

此外,一些数据支持的格式,需要进行摸索,有点费人。

希望大家一起来开发智能体,提高工作效率。

相关推荐
Yuner200026 分钟前
Python机器学习:从入门到精通
python
Amelia1111111 小时前
day47
python
Chris_12191 小时前
Halcon学习笔记-Day6进阶:工业级视觉系统核心技术详解
人工智能·python·深度学习·halcon
飞鸟真人2 小时前
关于python -m http.server的一些安全问题
python·安全·http
tjjucheng2 小时前
小程序定制开发哪家性价比高
python
No0d1es2 小时前
2025年12月 GESP CCF编程能力等级认证Python六级真题
python·青少年编程·gesp·ccf·六级
亮子AI3 小时前
【Python】比较两个cli库:Click vs Typer
开发语言·python
CappuccinoRose3 小时前
流计算概述
python·flink·流计算·数据流·pyflink
Dragon水魅3 小时前
Fandom Wiki 网站爬取文本信息踩坑实录
爬虫·python