基于 AI 實現(xiàn)阿里云的智能財務(wù)管家
為了解決傳統(tǒng)賬單處理中人工查詢效率低下、響應(yīng)速度慢及易出錯等問題,同時順應(yīng)AI技術(shù)發(fā)展趨勢,提升服務(wù)智能化水平。隨著業(yè)務(wù)規(guī)模擴大和賬單數(shù)據(jù)復(fù)雜度增加,人工處理已難以滿足高效管理需求。我們想到通過AI技術(shù),制作一個賬單機器人,自動化完成賬單查詢與分析,節(jié)省人力成本,讓用戶快速獲取準(zhǔn)確信息,提升滿意度。
流程圖
上圖為基于阿里云百煉實現(xiàn)賬單機器人的完整流程。具體步驟如下:
- 用戶通過私聊或者@飛書機器人的方式提出賬單相關(guān)的問題。
- 計算巢AppFlow通過飛書接收消息事件觸發(fā)連接流,將問題傳遞給大模型服務(wù)平臺百煉。
- 大模型服務(wù)平臺百煉利用其強大的AI能力生成相應(yīng)的查詢SQL語句。
- 生成的SQL語句被發(fā)送到函數(shù)計算(FC)服務(wù),由FC 執(zhí)行SQL查詢,從SLS中獲取所需的賬單數(shù)據(jù)。
- 百煉平臺根據(jù)返回的賬單數(shù)據(jù)生成最終的答案。
- 答案通過計算巢 AppFlow 返回給飛書機器人。
- 最后,飛書機器人將答案呈現(xiàn)給用戶。
注意:關(guān)于為什么從SLS里獲取賬單數(shù)據(jù),請見新版成本管家可視化賬單報表實踐、阿里云多賬號財務(wù)管理最佳實踐。
FC函數(shù)計算
點擊https://fcnext.console.aliyun.com/cn-shanghai/functions此鏈接,在右側(cè)菜單欄中選擇“函數(shù)”,在函數(shù)界面上點擊“創(chuàng)建函數(shù)”按鈕。
圖片
選擇“事件函數(shù)”,在基本設(shè)置里填寫“函數(shù)名稱”。在函數(shù)代碼中,選擇“內(nèi)置運行時/Python/Python3.12”運行環(huán)境,代碼上傳方式暫時選擇“使用示例代碼”中的“Hello,world!示例”。高級配置里的請求處理程序變更為“index.main”,“時區(qū)”選擇“Asia/Shanghai 北京時間”,“函數(shù)角色”選擇“AliyunFcDefaultRole”,“允許訪問 VPC”選擇“否”,“允許函數(shù)默認(rèn)網(wǎng)卡訪問公網(wǎng)”選擇“是”,“日志功能”選擇啟用,其他配置保持默認(rèn)就行。完成上述配置后點擊“創(chuàng)建按鈕”。
1、百煉中只支持北京、杭州、上海、深圳地域的函數(shù)計算,故在創(chuàng)建函數(shù)時只能選擇這些地域。
2、賬單數(shù)據(jù)存儲在華北6(烏蘭察布)地域中,函數(shù)計算無法通過內(nèi)網(wǎng)查詢,所以函數(shù)計算必須要開公網(wǎng)。
3、開啟日志功能,便于排查報錯。
圖片
點擊剛創(chuàng)建的函數(shù),進(jìn)行下一步配置。
圖片
菜單欄中選擇“代碼”,將下面的代碼填寫到index.py里(注意需要修改代碼里的配置!)。完成后點擊右上方的?按鈕。
from aliyun.log import LogClient
from aliyun.log import *
import logging,json,re
from datetime import datetime
logger = logging.getLogger()
def datetime_to_timestamp(date_string, date_format="%Y-%m-%d %H:%M:%S"):
dt = datetime.strptime(date_string, date_format)
return int(dt.timestamp())
def query_bill_logs(json_data):
accessKeyId = "" #填寫accessKeyId
accessKey = "" #填寫accessKey
endpoint = "cn-wulanchabu.log.aliyuncs.com" #填寫賬單數(shù)據(jù)所在的endpoint
project = "bill-analysis-xxxx" #填寫賬單數(shù)據(jù)所在的project
logstore = "aliyun_bill" #填寫賬單數(shù)據(jù)所在的logstore
client = LogClient(endpoint, accessKeyId, accessKey)
query = json_data["query"]
# from_time和to_time表示查詢?nèi)罩镜臅r間范圍,UNIX時間戳格式。
from_time = datetime_to_timestamp(json_data["from_time"])
to_time = datetime_to_timestamp(json_data["to_time"])
# query參數(shù)用于設(shè)置查詢語句;line參數(shù)用于控制返回日志條數(shù),line取值為3。
request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
response = client.get_logs(request)
# 查詢結(jié)果。
log_res_list=[]
for log in response.get_logs():
log_res = log.contents.items()
log_res_list.append(dict(log_res))
return log_res_list
def main(event,context):
data = event.decode('utf-8')
logger.info("收到的數(shù)據(jù):{}".format(data))
data=json.loads(data)["sql"]
match = re.search(r'\{.*?\}', data,re.DOTALL)
if match:
json_res = json.loads(match.group(0))
# 查詢?nèi)罩? log_res=str(query_bill_logs(json_res))
log_res = json.dumps(log_res, ensure_ascii=False, indent=4)
logger.info("查詢到的數(shù)據(jù):{}".format(log_res))
return log_res
else:
logger.info("未匹配到j(luò)son")
return "無法匹配到SQL"
圖片
在TERMINAL中執(zhí)行下面的語句,通過控制臺Web IDE終端安裝依賴。完成后點擊“部署代碼”按鈕,完成該函數(shù)的部署。
pip install -U aliyun-log-python-sdk -t .
圖片
部署完成后,需要測試一下,驗證是否可以正常查詢。在菜單欄中點擊“測試”,填寫測試名稱和傳參(傳參可以參考下面的代碼),完成后點擊“測試”按鈕。
{
"sql": "{\"from_time\":\"2025-01-01 00:00:00\",\"to_time\":\"2025-02-01 00:00:00\",\"query\":\"*|select round(coalesce(sum(PretaxAmount),0),3) from splititem_bill_transform\"}"
}
圖片
如下圖所示,即為執(zhí)行成功。
圖片
大模型服務(wù)平臺百煉
知識庫
大模型缺乏私有知識,根據(jù)用戶輸入從外部信息源檢索相關(guān)信息,然后將檢索到的內(nèi)容整合到用戶輸入中,從而幫助大模型生成更準(zhǔn)確的回答。將賬單相關(guān)數(shù)據(jù)引入專有知識庫后,大模型就能準(zhǔn)確回答賬單方面的問題。
點擊https://bailian.console.aliyun.com/?tab=app#/data-center此鏈接,在左側(cè)菜單欄中選擇“應(yīng)用數(shù)據(jù)”,選擇“非結(jié)構(gòu)化數(shù)據(jù)”,點擊類目管理旁的“+”。
圖片
填寫“目錄名稱”,完成后點擊“確定”按鈕。
選擇剛創(chuàng)建的類目,點擊右上角的“導(dǎo)入數(shù)據(jù)”按鈕。
導(dǎo)入方式選擇“本地上傳”,將下面的文件《分賬賬單字段.xlsx》傳入到百煉中,完成后點擊確認(rèn)。
《分賬賬單字段.xlsx》為分賬賬單各個字段的名稱及解釋,便于百煉生成SQL語句。
字段名稱 | 字段類型 | 示例值 | 說明 |
__time__ | INTEGER | 1739721600 | 賬單時間,Unix 時間戳,以秒為單位 |
instanceconfig | STRING | 地域:華東2(上海) | 實例詳細(xì)配置 |
internetip | STRING | 139.122.22.22 | 公網(wǎng)IP地址 |
pretaxamount | DOUBLE | 0.01 | 應(yīng)付金額,獲取賬單金額,一般就是指這個應(yīng)付金額,保留2位小數(shù) |
subscriptiontype | STRING | PayAsYouGo | 消費類型:Subscription:預(yù)付費;PayAsYouGo:后付費。 |
billingitem | STRING | ECS整機備份數(shù)量 | 計費項 |
pretaxgrossamount | DOUBLE | 0.033 | 原始金額 |
usage | DOUBLE | 1.0 | 使用量 |
splitbillingcycle | STRING | 2025-02 | 分賬月 |
producttype | STRING | hbrpost | 產(chǎn)品類型 |
paymentamount | DOUBLE | 0.0 | 現(xiàn)金支付(通過賬戶余額或線上支付渠道直接支付的金額,信控用戶包含使用退款賬本支付的金額) |
listprice | DOUBLE | 0.033333 | 單價 |
splitbillingdate | STRING | 2025-02-17 | 賬期 |
zone | STRING | cn-shanghai-g | 可用區(qū) |
usageunit | STRING | 臺 | 使用量單位 |
tag | STRING | key:environment value:prod; key:costcenter value:11111 | 標(biāo)簽 |
splitaccountname | STRING | 12@test.com | 分拆項所屬賬號名稱 |
splititemid | STRING | xxx-oss | 分拆項ID |
item | STRING | SubscriptionOrder | 賬單類型。包括: |
__source__ | STRING | splititem_bill | 分賬賬單 |
deductedbyprepaidcard | DOUBLE | 0.0 | 儲值卡抵扣 |
commoditycode | STRING | rds | 商品 Code |
ownerid | STRING | 1888888883 | 子賬號 AccountID(多賬號代付場景) |
adjustamount | DOUBLE | 0.0 | 信用額度退款抵扣。 |
billingdate | STRING | 2025-02-23 | 賬單日期,格式 YYYY-MM-DD |
deductedbycoupons | DOUBLE | 0.0 | 優(yōu)惠券優(yōu)惠金額 |
instanceid | STRING | rm-xxxxxxxx | 實例 ID |
serviceperiod | DOUBLE | 1.0 | 服務(wù)時長,單位:秒 |
splitaccountid | STRING | 122 | 分拆項所屬賬號 AccountID |
billingtype | STRING | 其它 | 計費方式 |
region | STRING | 華東2(上海) | 地域 |
intranetip | STRING | 172.168.0.200 | 內(nèi)網(wǎng) IP |
productcode | STRING | rds | 產(chǎn)品代碼 |
outstandingamount | DOUBLE | 302.5 | 未結(jié)清金額 |
instancespec | STRING | mysql.x2.medium.2c | 實例規(guī)格 |
splitcommoditycode | STRING | snapshot | 分拆項商品 Code |
serviceperiodunit | STRING | 月 | 服務(wù)時長單位 |
splititemname | STRING | test | 分拆項名稱 |
nickname | STRING | test | 實例昵稱、實例名稱 |
productname | STRING | 云數(shù)據(jù)庫 RDS | 產(chǎn)品名稱 |
currency | STRING | CNY | 幣種:CNY、 USD、 JPY |
invoicediscount | DOUBLE | 247.5 | 優(yōu)惠金額 |
productdetail | STRING | 關(guān)系型數(shù)據(jù)庫RDS(包月) | 產(chǎn)品明細(xì) |
resourcegroup | STRING | xxx Group | 資源組 |
deductedbycashcoupons | DOUBLE | 0.0 | 代金券抵扣 |
splitproductdetail | STRING | 云服務(wù)器ECS-快照 | 分拆項產(chǎn)品明細(xì)名稱 |
listpriceunit | STRING | 元/臺 | 單價單位 |
costunit | STRING | 未分配 | 財務(wù)單元 |
biztype | STRING | trusteeship | 業(yè)務(wù)類型 |
cashamount | DOUBLE | 0.0 | 現(xiàn)金支付(不包含信用額度退款抵扣) |
deductedbyresourcepackage | DOUBLE | 0.0 | 資源包抵扣 |
圖片
數(shù)據(jù)導(dǎo)入完成后,如下圖所示:
在左側(cè)菜單欄中選擇“知識庫”,點擊右上角的“+ 創(chuàng)建知識庫”。
填寫“知識庫名稱”,數(shù)據(jù)類型選擇“非結(jié)構(gòu)化數(shù)據(jù)”,其他配置保持默認(rèn),完成后點擊“下一步”按鈕。
圖片
選擇數(shù)據(jù)選擇“選擇類目”,類目選擇剛創(chuàng)建的類目“阿里云賬單機器人”,完成后點擊“下一步”按鈕。
圖片
其他配置保持默認(rèn),完成后點擊“導(dǎo)入完成”按鈕。
知識庫創(chuàng)建完成后,如下圖所示:
圖片
樣例庫
樣例庫功能作為百煉的FewShot能力,通過錄入用戶輸入(Query)和期望的模型回復(fù)(Answer)作為樣例信息源,在模型調(diào)用時根據(jù)用戶輸入,檢索召回相關(guān)樣例信息,以此作為輸出參考,從而提高大模型的回答準(zhǔn)確性,適用于問答等場景。
在左側(cè)菜單欄中選擇“組件管理”,在組件管理界面的頂部菜單中選擇“樣例庫”,點擊“樣例庫管理”旁的“+”。
圖片
填寫“樣例庫名稱”,導(dǎo)入方式選擇“手動輸入”,將下表數(shù)據(jù)填入到“樣例示例”,完成后點擊“確定”按鈕。
圖片
樣例庫配置完成后,如下圖所示:
圖片
應(yīng)用
大模型具備強大的語言能力,但仍有一定的局限性,例如難以處理私有領(lǐng)域問題、獲取最新信息、遵循固定流程,以及自動規(guī)劃復(fù)雜項目。為此,阿里云百煉推出了三種大模型應(yīng)用:智能體、工作流與智能體編排,增加了知識庫檢索、互聯(lián)網(wǎng)搜索、工作流設(shè)計及智能體協(xié)作等功能,顯著擴展了大模型的應(yīng)用范圍。下表說明三種大模型應(yīng)用的簡介及示例場景。
生成SQL
點擊https://bailian.console.aliyun.com/?tab=app#/app-center此鏈接,在左側(cè)菜單欄中選擇“應(yīng)用管理”,在應(yīng)用管理界面的右上角點擊“+ 新增應(yīng)用”按鈕。
圖片
選擇“智能體應(yīng)用”,點擊“立即創(chuàng)建 ↗”按鈕。
圖片
選擇“通義千問-Max”,提示詞填“需要從用戶的問題中梳理出要查詢哪些信息,輸出要查詢數(shù)據(jù)的SQL。如果無法生成要查詢的SQL則回復(fù)“抱歉,您的問題暫時無法回復(fù),請聯(lián)系工程師””,選擇剛創(chuàng)建的知識庫和樣例庫。完成后在右側(cè)輸入問題“查詢2月阿里云花費金額”,點擊發(fā)送按鈕,查看回答是否如下圖所示。若與下圖答復(fù)一致,則點擊右上角的“發(fā)布”按鈕。
圖片
發(fā)布完成后,會在剛創(chuàng)建的智能體應(yīng)右上角顯示“已發(fā)布”。注意:未發(fā)布會導(dǎo)致下面的流程出現(xiàn)問題!
圖片
查詢賬單
在應(yīng)用管理界面的右上角點擊“+ 新增應(yīng)用”。
圖片
選擇“工作流應(yīng)用”,點擊“創(chuàng)建任務(wù)型工作流 ↗”按鈕。
圖片
按下圖所示進(jìn)行配置,引用上文創(chuàng)建的FC函數(shù)查詢賬單數(shù)據(jù),結(jié)合用戶的問題和查到的賬單數(shù)據(jù),通過大模型組織答案。
圖片
完成配置后,點擊“測試”按鈕,輸入query:“查詢1月阿里云花費金額”,sql:“{"from_time":"2025-01-01 00:00:00","to_time":"2025-02-01 00:00:00","query":"*|select round(coalesce(sum(PretaxAmount),0),3) from splititem_bill_transform"}”。完成后點擊“執(zhí)行”按鈕。
圖片
若結(jié)果如下圖所示,則說明配置成功。
圖片
更改應(yīng)用名稱,點擊右上角的“發(fā)布”按鈕。
圖片
發(fā)布完成后,如下圖所示:
圖片
賬單機器人
在應(yīng)用管理界面的右上角點擊“+ 新增應(yīng)用”。
選擇“智能體編排應(yīng)用”,點擊“創(chuàng)建智能體編排應(yīng)用↗”按鈕。
圖片
按下圖所示進(jìn)行配置,將剛創(chuàng)建的兩個應(yīng)用串聯(lián)起來,先根據(jù)用戶的問題生成查詢SQL,再執(zhí)行SQL獲取賬單數(shù)據(jù),最終根據(jù)用戶的問題組織答案。
圖片
注意:查詢賬單工作流配置,要輸入兩個變量,一個是用戶的問題,一個是智能體應(yīng)用輸出的SQL。
圖片
完成后點擊“測試”按鈕,輸入query:“查詢2月阿里云花費金額”,點擊“執(zhí)行”按鈕。
圖片
若運行結(jié)果如下圖所示,則說明執(zhí)行成功。成功后點擊“發(fā)布”按鈕。
圖片
發(fā)布完成后,如下圖所示:
圖片
KPI-Key
點擊https://bailian.console.aliyun.com/?tab=app#/api-key此鏈接,在左側(cè)菜單欄中選擇“API-Key”,點擊API Key管理界面右上角的“創(chuàng)建我的API-KEY”按鈕。
圖片
選擇應(yīng)用所在的歸屬業(yè)務(wù)空間,完成后點擊“確定”按鈕。
圖片
API-Key創(chuàng)建完成后,如下圖所示:
圖片
飛書應(yīng)用
點擊https://open.feishu.cn/app此鏈接,在企業(yè)自建應(yīng)用界面,點擊“創(chuàng)建企業(yè)自建應(yīng)用”按鈕。
圖片
填寫應(yīng)用名稱和應(yīng)用描述,完成后點擊“創(chuàng)建”按鈕。
圖片
在左側(cè)菜單欄中選擇“添加應(yīng)用能力”,找到機器人,點擊“+添加”按鈕。
圖片
在左側(cè)菜單欄中選擇“事件與回調(diào)”,選擇“加密策略”,復(fù)制Encrypt Key和Verification Token,用于下文配置計算巢AppFlow。
圖片
在左側(cè)菜單欄中選擇“事件與回調(diào)”,在事件配置界面,訂閱方式選擇“將事件發(fā)送至 開發(fā)者服務(wù)器”,填寫請求地址(這個請求地址在下文計算巢AppFlow配置中),完成后點擊“保存”按鈕。點擊“添加事件”按鈕,添加“用戶進(jìn)入與機器人的會話”、“接收消息”、“機器人自定義菜單事件”這三個事件。
圖片
在回調(diào)配置界面,像事件配置一樣,配置訂閱方式,并添加“卡片回傳交互”回調(diào)。
圖片
計算巢AppFlow配置完成后會得到IP白名單,將這些IP配置到飛書應(yīng)用的IP白名單中。
圖片
計算巢AppFlow
計算巢AppFlow通過界面化快速編排的方式,組合多個連接器的觸發(fā)事件和執(zhí)行動作,從而連接多個應(yīng)用系統(tǒng),實現(xiàn)業(yè)務(wù)流程自動化。使用計算巢AppFlow對接飛書和百煉,無需用戶寫代碼實現(xiàn),而且計算巢AppFlow是免費的。
點擊
https://appflow.console.aliyun.com/vendor/cnhangzhou/flowTemplate/manage
此鏈接,在左側(cè)菜單欄中選擇“模板中心”,找到“飛書自建應(yīng)用 X 阿里云百煉”。
圖片
點擊“立即使用”按鈕。
圖片
點擊“添加新憑證”創(chuàng)建飛書自建應(yīng)用機器人憑證。
圖片
填寫“憑證名稱”、“App ID”、“App Secret”、“AES Key”、“token”,這些在飛書應(yīng)用中可以找到。底下的“IP白名單”添加到飛書應(yīng)用白名單中。完成后點擊“確定”按鈕。
圖片
點擊“添加新憑證”創(chuàng)建阿里云百煉憑證。
圖片
填寫“憑證名稱”和“API-KEY”(請見上文創(chuàng)建API-Key)。完成后點擊“確定”按鈕,再點擊“下一步”按鈕。
圖片
填寫“應(yīng)用Id”(名為“賬單機器人”的百煉智能體編排應(yīng)用Id ),完成后點擊“下一步”按鈕。
圖片
填寫“連接流名稱”和“連接流描述”,完成后點擊“下一步”按鈕。
圖片
這個WebhookUrl地址,即為上文飛書應(yīng)用配置事件與回調(diào)的請求地址。點擊“發(fā)布”按鈕。
圖片
飛書
在飛書App左側(cè)菜單欄中選擇“工作臺”,點擊右上角“?設(shè)置”。
圖片
在我的工作臺中,點擊右上角的“添加應(yīng)用”按鈕,將剛創(chuàng)建的“阿里云賬單機器人”添加進(jìn)來。
圖片
點擊進(jìn)入阿里云賬單機器人。
圖片
發(fā)送“查詢1月阿里云花費金額”,若機器人回答如下圖所示,說明配置成功了。
圖片
小結(jié)
至此,阿里云賬單機器人配置完成。此外,借助AI技術(shù)的智能分析能力,機器人可進(jìn)一步挖掘賬單數(shù)據(jù)價值,優(yōu)化資源配置,助力企業(yè)降本增效,適應(yīng)數(shù)字化轉(zhuǎn)型需求。