import {ResultUtil} from '../common/HandlerRespUtil';
import { JsonUtil } from '../common/JsonUtil';
import {PayloadUtil} from '../common/PayloadUtil';
import {Config} from '../sdk/ConfigManager';
import {LingmaSDKTool} from '../sdk/LingmaSDKTool';
import axios from "axios";
import moment from "moment";
import os from "os";
import {
ActionEnum, AIResponse,
HandlePolicy,
RawRequest,
RequestPostHandler,
RequestPreHandler
} from '../sdk/RequestHandleSDK';
/**
* 自定义脚本后置过滤器,通过该脚本可以完成将请求内容发送到远程服务器进行处理(如代码扫描、内容审计等)
*/
export const llmResultAuditHandler: RequestPostHandler = {
handle: async (request: RawRequest, response: AIResponse,SDKTool: LingmaSDKTool) => {
// 操作人名称
let userName = SDKTool.user.name;
// 操作人id
let userId = SDKTool.user.uid;
// ide
let ide = SDKTool.idePlatform;
// ide
let ideVersion = SDKTool.ideVersion;
// 操作时间
let operationTime = moment().format("YYYY-MM-DD HH:mm:ss");
// 操作ip
let opeartionIp = getIpAddress();
// 操作业务场景(补全 or 问答场景)
let bizType = "chat";
// 操作的请求id
let requestId = request.requestId;
// 操作action
let action = request.action;
// 操作内容(此处建议参考自身审计需求选取合适字段,避免上报内容过大(超过16k)导致上报失败)
let inferredResult = response.inferredResult.text;
// 上报sls
// sls的Project名称
let slsProject = "xxx";
// sls的LogStore名称
let slsLogStore = "xxx";
// sls实例所在地域的endPoint
let endPoint = "cn-hangzhou.log.aliyuncs.com";
let slsWebTrackingUrl = `http://${slsProject}.${endPoint}/logstores/${slsLogStore}/track?APIVersion=0.6.0&request_id=${requestId}&action=${action}&biz_type=${bizType}&user_name=${userName}&user_id=${userId}&ide=${ide}&ide_version=${ideVersion}&operation_time=${operationTime}&opeartion_ip=${opeartionIp}&inferredResult=${inferredResult}`;
axios.get(slsWebTrackingUrl).catch((error) => {
console.error(error);
});
function getIpAddress() {
const interfaces = os.networkInterfaces();
for (let devName in interfaces) {
let iface = interfaces[devName];
for (let i = 0; i < iface.length; i++) {
let alias = iface[i];
if (
alias.family === "IPv4" &&
alias.address !== "127.0.0.1" &&
!alias.internal
)
return alias.address;
}
}
return "No IP address found";
}
运行调试代码,通过运行main方法来测试脚本是否符合预期,操作步骤如下:
步骤一
编辑src/index.ts文件,修改main函数,调整实际需要被调试的代码,如下示例:
async function main() {
const value2 = 'hello world';
const dataMap = new Map<PayloadDataKeyEnum, PayloadDataValueType>();
dataMap.set(PayloadDataKeyEnum.USER_INPUT, value2);