Administrator Lingma Edisi Perusahaan dan administrator tingkat organisasi pada Edisi Eksklusif Perusahaan dapat mengonfigurasi kebijakan penyaringan keamanan untuk developer. Kebijakan ini berlaku untuk Chat AI, penyelesaian kode, dan unggahan basis pengetahuan.
Fitur ini hanya mendukung ekstensi Visual Studio Code dan JetBrains IDE. Fitur ini tidak tersedia di Lingma IDE.
Versi yang didukung | dan Edisi Eksklusif Perusahaan |
Akses fitur
Login ke Lingma console sebagai administrator Lingma atau administrator tingkat organisasi (hanya untuk Edisi Eksklusif Perusahaan). Di panel navigasi kiri, pilih .
Di bagian atas halaman, pilih tab berdasarkan skenario tempat Anda ingin menerapkan filter: AI Chat, Inline Code Generation, atau Knowledge Base Upload (hanya untuk Edisi Eksklusif Perusahaan).
Aktifkan sakelar untuk setiap filter yang Anda perlukan, lalu konfigurasikan parameter terkait. Tabel berikut mencantumkan jenis filter yang didukung di setiap skenario:
Skenario
Jenis filter
Deskripsi
AI Chat
AI Chat pre-filter
Saat Anda menggunakan fitur AI Chat Lingma, input pengguna yang dikirim ke Large Language Model (LLM) melewati pre-filter. Output LLM melewati post-filter.
AI Chat post-filter
Inline Code Generation
Inline Code Generation pre-filter
Saat Anda menggunakan fitur Inline Code Generation Lingma, input pengguna yang dikirim ke LLM melewati pre-filter. Output LLM melewati post-filter.
Inline Code Generation post-filter
Knowledge Base Upload
Knowledge Base Upload pre-filter
File yang diunggah ke basis pengetahuan Lingma harus melewati filter ini sebelum unggahan berhasil.
PentingPastikan developer melakukan upgrade ekstensi Lingma ke versi 1.4.0 atau lebih baru. Jika tidak, filter yang dikonfigurasi tidak akan berlaku.
Setelah Anda mengaktifkan atau memodifikasi AI Chat filter atau Inline Code Generation filter, perubahan memerlukan waktu sekitar 5 hingga 10 menit untuk berlaku bagi developer yang menggunakan ekstensi Lingma.
Setelah Anda mengaktifkan atau memodifikasi Knowledge Base Upload filter, perubahan berlaku segera. File yang diunggah ke basis pengetahuan perusahaan Anda langsung difilter.
Konfigurasi pre-filter untuk AI Chat dan Inline Code Generation
Metode 1: Konfigurasi dengan ekspresi reguler
Administrator harus menguji ekspresi reguler secara menyeluruh untuk menghindari degradasi performa atau masalah lain saat developer menggunakan ekstensi IDE.
Metode pemrosesan: Konfigurasikan filter menggunakan ekspresi reguler. Tiga mode didukung.
No action on match
Tidak mengambil tindakan apa pun saat terjadi kecocokan.
Block on match
Memblokir permintaan dan menghentikan panggilan model saat terjadi kecocokan.
Replace on match
Mengganti konten sesuai konfigurasi saat terjadi kecocokan.
Notifikasi: Aktifkan notifikasi untuk mengirim peringatan ke platform pesan pilihan Anda menggunakan webhook.
Urutan eksekusi: Filter dijalankan sesuai urutan konfigurasi Anda.
Jumlah maksimum ekspresi reguler: Anda dapat menambahkan hingga 10 ekspresi.
Standar ekspresi reguler: Ekspresi mengikuti standar ECMAScript. Flag umum seperti
i(case-insensitive),g(global), dans(DOTALL) didukung.Contoh konfigurasi:
Nama aturan
Ekspresi reguler
Pengganti
Teks asli
Teks yang diganti
ID number
(?<pre>.*)(\d{15})((\d{2})([0-9Xx]))(?<post>.*)
$<pre>***$<post>
ID number: 330204197709022312.
ID number: ***.
Email address
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
***
My email is lin***@aliyunmail.com
My email is ***
Password
(.*password=)([\w\d]+)(.*)
$1***$3
{password=1213213}
{password=***}
Metode 2: Konfigurasi dengan skrip kustom (hanya untuk Edisi Eksklusif Perusahaan)
Edisi Eksklusif Perusahaan mendukung penyaringan berbasis skrip kustom untuk menangani skenario pre-filtering yang kompleks. Ikuti langkah-langkah berikut:
Langkah 1: Kembangkan skrip
Anda dapat menulis skrip dalam TypeScript. Gunakan contoh kode sebagai referensi. Untuk memulai:
Unduh repositori templat: Klik URL repositori: lingma-extension-template. Templat ini mencakup kerangka dasar untuk pengembangan skrip. Baca file
README.mddan contoh kode dengan cermat.Implementasikan antarmuka pra-pemrosesan: Implementasikan antarmuka
RequestPreHandler. Untuk detail API, lihat Custom Script API. Berikut adalah contoh implementasi dalamSensitiveContentFilter.ts:/** * Sensitive content filter. Pre-processes data sent to the model. */ export const sensitiveContentFilter: RequestPreHandler = { handle: async (request: RawRequest, SDKTool: LingmaSDKTool) => { const dataMap = PayloadUtil.getPayloadData(request.payload); for (const [key, value] of dataMap.entries()) { if (value.includes('password')) { return ResultUtil.buildBlockResult('Content contains password'); } } // Handle different actions differently switch (request.action) { case ActionEnum.COMPLETION: // do something break; case ActionEnum.CODE_PROBLEM_SOLVE: // do something break; default: return ResultUtil.buildNoOpsResult(); } return ResultUtil.buildNoOpsResult(); }, };Jalankan dan debug skrip. Uji dengan menjalankan fungsi
main. Ikuti langkah-langkah berikut:Langkah 1
Edit file
src/index.ts. Ubah fungsimainuntuk menguji skrip Anda. Contoh:async function main() { const value1 = ['password=123', 'abc']; const value2 = 'hello world'; const dataMap = new Map<PayloadDataKeyEnum, PayloadDataValueType>(); dataMap.set(PayloadDataKeyEnum.SELECTED_CODE, value1); dataMap.set(PayloadDataKeyEnum.USER_INPUT, value2); const mockRequest: RawRequest = { action: ActionEnum.CODE_GENERATE_COMMENT, payload: { associatedContexts: [], data: dataMap, }, requestId: '123', }; const response = await sensitiveContentFilter.handle(mockRequest, SDKTool); console.log(response); }Langkah 2
Buka file skrip di VS Code dan atur breakpoint. Lalu, di tampilan Debug, pilih Launch Program dan klik Run.

Langkah 2: Kompilasi dan Build
Kompilasi file TypeScript yang telah selesai menjadi JavaScript. Misalnya, kompilasi SensitiveContentFilter.ts menjadi SensitiveContentFilter.js. Ikuti langkah-langkah berikut:
Buka file konfigurasi
src/build.js. Perbarui parameterentryPointsdanoutfile. AturentryPointske path file TypeScript Anda. Aturoutfileke path output untuk file JavaScript yang dikompilasi.Jalankan perintah
node build.jsdari direktori root repositori Anda. Setelah berhasil dieksekusi, file JavaScript akan muncul di path yang ditentukan dalamoutfile.
Langkah 3: Uji secara lokal
Sebelum mengunggah skrip Anda ke konsol konfigurasi perusahaan, uji secara lokal. Ini memastikan skrip terintegrasi dengan benar ke ekstensi IDE Lingma dan menerapkan penyaringan keamanan dengan benar untuk skenario penyelesaian kode atau Chat AI. Ikuti langkah-langkah berikut:
Salin file JavaScript yang telah dikompilasi ke direktori
/extension/local/script/di bawah path penyimpanan lokal Lingma.Edit file
config.json. File ini terletak di direktori/extension/local/di bawah path penyimpanan lokal Lingma. Bukaconfig.jsondan caricontentHandlerScripts. Tambahkan konfigurasi skrip Anda. JikacontentHandlerScriptstidak ada, buat array baru. Contoh:{ "contentHandlerScripts": [ { "identifier": "SensitiveContentFilter", "name": "Sensitive Content Filter", "version": "1.0.0", "scriptPath": "~/.lingma/extension/local/script/SensitiveContentFilter.js", "state": "enabled", "bizType": "completion" } ] }Deskripsi parameter:
Parameter
Deskripsi
identifier
ID skrip. Harus unik.
name
Nama skrip.
version
Versi skrip. Tingkatkan nomor versi setelah mengubah skrip. Jika tidak, skrip tidak akan berlaku.
scriptPath
Path file skrip. Catatan:
Skrip harus ditempatkan di direktori
/extension/local/script/di bawah path penyimpanan lokal.Nama file JavaScript (misalnya,
SensitiveContentFilter.js) harus sesuai dengan nilaiidentifier.
state
Status skrip.
enabledmengaktifkan skrip.disabledmenonaktifkannya.bizType
Skenario bisnis.
completionberlaku untuk inline code generation.chatberlaku untuk AI chat.
Langkah 4: Unggah skrip
Setelah pengujian dan validasi lokal selesai, unggah skrip tersebut. Ikuti langkah-langkah berikut:
Buka Lingma console. Pilih Policy Management. Pilih skenario tempat Anda ingin mengaktifkan filter keamanan.
Pilih Custom Script sebagai opsi filter.
Unggah file JavaScript yang telah dikompilasi.
Klik Save Configuration. Konfigurasi akan berlaku pada ekstensi dalam waktu sekitar 5 menit.
Custom Script API
Skrip kustom mendukung tiga metode pemrosesan:
Block: Menghentikan pemrosesan lebih lanjut. Tidak ada panggilan inferensi ke LLM. Permintaan saat ini diakhiri.
Filter: Memodifikasi data yang dikirim (misalnya, mengaburkan, menghapus, atau mengganti konten), lalu melanjutkan pemrosesan.
No operation: Mengembalikan data tanpa perubahan dan melanjutkan pemrosesan.
Definisi antarmuka
/**
* Pre-processing interface for Tongyi Lingma
*/
export interface RequestPreHandler {
// Process the request
handle: (request: RawRequest, SDKTool: LingmaSDKTool) => Promise<HandlerResponse>;
}Parameter input
/**
* Request object. Includes the action and raw data sent to the LLM.
*/
export interface RawRequest {
// Unique identifier for the request. Used for tracing.
action: ActionEnum;
// Enum for the action that triggered the request.
payload: ContentPayload;
// Payload containing raw data.
requestId: string;
}
// Value type for ContentPayload.data
export type PayloadDataValueType = string | number | string[];
/**
* Payload containing raw data sent to the LLM.
*/
export class ContentPayload {
// Collection of data to process. Keys are defined in ContextValueKeyEnum.
data: Map<PayloadDataKeyEnum, PayloadDataValueType>;
// Context associated with the processing.
associatedContexts: ContextItem[];
constructor() {
this.data = new Map<PayloadDataKeyEnum, PayloadDataValueType>();
this.associatedContexts = [];
}
}
/**
* Keys for ContentPayload.data
*/
export enum PayloadDataKeyEnum {
// Selected code snippet
SELECTED_CODE ='lingma:code',
// User input text
USER_INPUT = 'lingma:text',
// Error messages
ERROR_MESSAGES = 'lingma:error_messages',
// Terminal log output
TERMINAL_CONTENT = 'lingma:terminal_content',
// Code before cursor for code completion
PREFIX_CODE = 'lingma:code_prefix',
// Code after cursor for code completion
SUFFIX_CODE = 'lingma:code_suffix',
// Similar code snippets
SIMILAR_CODE = 'lingma:similar_code',
}
/**
* Enum for request actions
*/
export enum ActionEnum {
// Unit test
GENERATE_TESTCASE = 'GENERATE_TESTCASE',
// Generate comments
CODE_GENERATE_COMMENT = 'CODE_GENERATE_COMMENT',
// Explain code
EXPLAIN_CODE = 'EXPLAIN_CODE',
// Optimize code
OPTIMIZE_CODE = 'OPTIMIZE_CODE',
// Free input (direct text entry in the chat box)
FREE_INPUT = 'FREE_INPUT',
// Quick fix for code issues
CODE_PROBLEM_SOLVE = 'CODE_PROBLEM_SOLVE',
// Generate shell commands
TERMINAL_COMMAND_GENERATION = 'TERMINAL_COMMAND_GENERATION',
// Fix terminal errors
TERMINAL_EXPLAIN_FIX = 'TERMINAL_EXPLAIN_FIX',
// Code completion
COMPLETION = 'COMPLETION',
}Parameter output
/**
* Pre-processing result
*/
export class HandlerResponse {
// Processing policy. Controls subsequent logic.
handlePolicy: HandlePolicy;
// Reason description
reason?: string;
// Required when handlePolicy=FILTER. Contains filtered data. Must match ContentRequest.payload structure.
payload?: ContentPayload;
constructor() {
// Default values
// eslint-disable-next-line @typescript-eslint/no-use-before-define
this.handlePolicy = HandlePolicy.NO_OPS;
this.reason = '';
this.payload = new ContentPayload();
}
}
/**
* Processing policy enum
*/
export enum HandlePolicy {
// Block the request
BLOCK = 'BLOCK',
// Filter the request and modify the payload
FILTER = 'FILTER',
// Take no action
NO_OPS = 'NO_OPS',
}Konfigurasi post-filter untuk AI Chat dan Inline Code Generation
Metode 1: Konfigurasi dengan ekspresi reguler
Administrator harus menguji ekspresi reguler secara menyeluruh untuk menghindari degradasi performa atau masalah lain saat developer menggunakan ekstensi IDE.
Metode pemrosesan: Konfigurasikan filter menggunakan ekspresi reguler. Hanya satu mode yang didukung:
No action on match
Tidak mengambil tindakan apa pun saat terjadi kecocokan.
Notifikasi: Aktifkan notifikasi untuk mengirim peringatan ke platform pesan pilihan Anda menggunakan webhook.
Urutan eksekusi: Filter dijalankan sesuai urutan konfigurasi Anda.
Jumlah maksimum ekspresi reguler: Anda dapat menambahkan hingga 10 ekspresi.
Standar ekspresi reguler: Ekspresi mengikuti standar ECMAScript. Flag umum seperti
i(case-insensitive),g(global), dans(DOTALL) didukung.Contoh konfigurasi:
Nama aturan
Ekspresi reguler
Teks asli
ID number
(?<pre>.*)(\d{15})((\d{2})([0-9Xx]))(?<post>.*)
ID number: 330204197709022312.
Email address
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
My email is lin***@aliyunmail.com
Password
(.*password=)([\w\d]+)(.*)
{password=1213213}
Metode 2: Konfigurasi dengan skrip kustom (hanya untuk Edisi Eksklusif Perusahaan)
Edisi Eksklusif Perusahaan mendukung penyaringan berbasis skrip kustom untuk menangani skenario post-filtering yang kompleks. Ikuti langkah-langkah berikut:
Langkah 1: Kembangkan skrip
Anda dapat menulis skrip dalam TypeScript. Gunakan contoh kode sebagai referensi. Untuk memulai:
Unduh repositori templat: Klik URL repositori: lingma-extension-template. Templat ini mencakup kerangka dasar untuk pengembangan skrip. Baca file
README.mddan contoh kode dengan cermat.Implementasikan antarmuka pasca-pemrosesan: Implementasikan antarmuka
RequestPostHandler. Untuk API-nya, lihat Custom Script API. Berikut adalah contoh implementasi dari potongan kodeLLMChatAuditHandler.ts, yang melakukan audit operasi AIChat Lingma dan melaporkan konten audit ke Alibaba Cloud SLS.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'; /** * Custom post-filter script. Sends request content to a remote server for processing (such as code scanning or content auditing). */ export const llmResultAuditHandler: RequestPostHandler = { handle: async (request: RawRequest, response: AIResponse,SDKTool: LingmaSDKTool) => { // Operator name let userName = SDKTool.user.name; // Operator ID let userId = SDKTool.user.uid; // IDE let ide = SDKTool.idePlatform; // IDE version let ideVersion = SDKTool.ideVersion; // Operation time let operationTime = moment().format("YYYY-MM-DD HH:mm:ss"); // Operation IP let opeartionIp = getIpAddress(); // Business scenario (completion or chat) let bizType = "chat"; // Request ID let requestId = request.requestId; // Action let action = request.action; // Operation content (select fields based on your audit needs. Avoid large payloads over 16 KB.) let inferredResult = response.inferredResult.text; // Report to SLS // SLS project name let slsProject = "xxx"; // SLS LogStore name 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); }); // Return filter result return ResultUtil.buildPostHandlerResponse(HandlePolicy.NO_OPS, response.inferredResult,'No action required'); }, }; /** * Add the custom script filter to the configuration * @param config Config object provided by LingmaExtensionSDK */ export function modifyConfig(config: Config) { config.postContentHandlers.push(llmResultAuditHandler); return config; } 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"; }Jalankan dan debug skrip. Uji dengan menjalankan fungsi
main. Ikuti langkah-langkah berikut:Langkah 1
Edit file
src/index.ts. Ubah fungsimainuntuk menguji skrip Anda. Contoh:async function main() { const value2 = 'hello world'; const dataMap = new Map<PayloadDataKeyEnum, PayloadDataValueType>(); dataMap.set(PayloadDataKeyEnum.USER_INPUT, value2); const request: RawRequest = { action: ActionEnum.CODE_GENERATE_COMMENT, payload: { associatedContexts: [], data: dataMap, }, requestId: 'test-request-id', }; const aiResponse: AIResponse = { inferredResult: { text: 'reply hello world', }, }; const response = await llmResultAuditHandler.handle(request, aiResponse, SDKTool); console.log(response); }Langkah 2
Buka file skrip di VS Code dan atur breakpoint. Lalu, di tampilan Debug, pilih Launch Program dan klik Run.

Langkah 2: Kompilasi dan Build
Kompilasi file TypeScript yang telah selesai menjadi JavaScript. Misalnya, kompilasi LLMChatAuditHandler.ts menjadi LLMChatAuditHandler.js. Ikuti langkah-langkah berikut:
Buka file konfigurasi
src/build.js. Perbarui parameterentryPointsdanoutfile. AturentryPointske path file TypeScript Anda. Aturoutfileke path output untuk file JavaScript yang dikompilasi.Jalankan perintah
node build.jsdari direktori root repositori Anda. Setelah berhasil dieksekusi, file JavaScript akan muncul di path yang ditentukan dalamoutfile.
Langkah 3: Uji secara lokal
Sebelum mengunggah skrip Anda ke konsol konfigurasi perusahaan, uji secara lokal. Ini memastikan skrip terintegrasi dengan benar ke ekstensi IDE Lingma dan menerapkan penyaringan keamanan dengan benar untuk skenario penyelesaian kode atau Chat AI. Ikuti langkah-langkah berikut:
Salin file JavaScript yang telah dikompilasi ke direktori
/extension/local/script/di bawah path penyimpanan lokal Lingma.Edit file
config.json. File ini terletak di direktori/extension/local/di bawah path penyimpanan lokal Lingma. Bukaconfig.jsondan caricontentHandlerScripts. Tambahkan konfigurasi skrip Anda. JikacontentHandlerScriptstidak ada, buat array baru. Contoh:{ "contentHandlerScripts": [ { "identifier": "LLMChatAuditHandler", "name": "AI Chat Audit", "version": "1.0.0", "scriptPath": "~/.lingma/extension/local/script/LLMChatAuditHandler.js", "state": "enabled", "stage":"post", "bizType": "completion" } ] }Deskripsi parameter:
Parameter
Deskripsi
identifier
ID skrip. Harus unik.
name
Nama skrip.
version
Versi skrip. Tingkatkan nomor versi setelah mengubah skrip. Jika tidak, skrip tidak akan berlaku.
scriptPath
Path file skrip. Catatan:
Skrip harus ditempatkan di direktori
/extension/local/script/di bawah path penyimpanan lokal.Nama file JavaScript (misalnya,
LLMChatAuditHandler.js) harus sesuai dengan nilaiidentifier.
state
Status skrip.
enabledmengaktifkan skrip.disabledmenonaktifkannya.stage
Tahap pemrosesan.
postberarti post-filter.preberarti pre-filter. Nilai default adalahpre.bizType
Skenario bisnis.
completionberlaku untuk inline code generation.chatberlaku untuk AI chat.
Langkah 4: Unggah skrip
Setelah pengujian dan validasi lokal selesai, unggah skrip tersebut. Ikuti langkah-langkah berikut:
Buka Lingma console. Pilih Policy Management. Pilih skenario tempat Anda ingin mengaktifkan filter keamanan.
Pilih Custom Script sebagai opsi filter.
Unggah file JavaScript yang telah dikompilasi.
Klik Save Configuration. Konfigurasi akan berlaku pada ekstensi dalam waktu sekitar 5 menit.
Custom Script API
Skrip kustom hanya mendukung satu metode pemrosesan:
No operation: Mengembalikan data tanpa perubahan dan melanjutkan pemrosesan.
Definisi antarmuka
/**
* Post-processing interface for Tongyi Lingma
* @param request User request
* @param response Inference result from the LLM
* @param SDKTool SDK utility class. Provides IDE and plugin information.
* @returns Result after post-processing
*/
export interface RequestPostHandler {
// Post-processing method
handle: (request: RawRequest, response: AIResponse, SDKTool: LingmaSDKTool) => Promise<PostHandlerResponse>;
}Parameter input
/**
* Request object. Includes the action and raw data sent to the LLM.
*/
export interface RawRequest {
// Unique identifier for the request. Used for tracing.
action: ActionEnum;
// Enum for the action that triggered the request.
payload: ContentPayload;
// Payload containing raw data.
requestId: string;
}
/**
* Inference result from the model
*/
export class InferredResult {
// Text generated by the LLM
text: string;
constructor() {
this.text = '';
}
}
// Value type for ContentPayload.data
export type PayloadDataValueType = string | number | string[];
/**
* Payload containing raw data sent to the LLM.
*/
export class ContentPayload {
// Collection of data to process. Keys are defined in ContextValueKeyEnum.
data: Map<PayloadDataKeyEnum, PayloadDataValueType>;
// Context associated with the processing.
associatedContexts: ContextItem[];
constructor() {
this.data = new Map<PayloadDataKeyEnum, PayloadDataValueType>();
this.associatedContexts = [];
}
}
/**
* Keys for ContentPayload.data
*/
export enum PayloadDataKeyEnum {
// Selected code snippet
SELECTED_CODE ='lingma:code',
// User input text
USER_INPUT = 'lingma:text',
// Error messages
ERROR_MESSAGES = 'lingma:error_messages',
// Terminal log output
TERMINAL_CONTENT = 'lingma:terminal_content',
// Code before cursor for code completion
PREFIX_CODE = 'lingma:code_prefix',
// Code after cursor for code completion
SUFFIX_CODE = 'lingma:code_suffix',
// Similar code snippets
SIMILAR_CODE = 'lingma:similar_code',
// File path for code completion
FILE_PATH = 'lingma:file_path',
}
/**
* Enum for request actions
*/
export enum ActionEnum {
// Unit test
GENERATE_TESTCASE = 'GENERATE_TESTCASE',
// Generate comments
CODE_GENERATE_COMMENT = 'CODE_GENERATE_COMMENT',
// Explain code
EXPLAIN_CODE = 'EXPLAIN_CODE',
// Optimize code
OPTIMIZE_CODE = 'OPTIMIZE_CODE',
// Free input (direct text entry in the chat box)
FREE_INPUT = 'FREE_INPUT',
// Quick fix for code issues
CODE_PROBLEM_SOLVE = 'CODE_PROBLEM_SOLVE',
// Generate shell commands
TERMINAL_COMMAND_GENERATION = 'TERMINAL_COMMAND_GENERATION',
// Fix terminal errors
TERMINAL_EXPLAIN_FIX = 'TERMINAL_EXPLAIN_FIX',
// Code completion
COMPLETION = 'COMPLETION',
}Parameter output
/**
* Post-processing result
*/
export class PostHandlerResponse {
// Processing policy. Controls subsequent logic.
handlePolicy: HandlePolicy;
// Reason description
reason?: string;
// Processed inference result
processedResult: InferredResult;
constructor() {
// Default values
this.handlePolicy = HandlePolicy.NO_OPS;
this.reason = '';
this.processedResult = new InferredResult();
}
}
/**
* Encapsulates the LLM response
*/
export class AIResponse {
// Inference result
inferredResult: InferredResult;
constructor() {
this.inferredResult = new InferredResult();
}
}
/**
* Inference result from the model
*/
export class InferredResult {
// Text generated by the LLM
text: string;
constructor() {
this.text = '';
}
}
/**
* Processing policy enum (post-filters support only NO_OPS)
*/
export enum HandlePolicy {
// Block the request
BLOCK = 'BLOCK',
// Filter the request and modify the payload
FILTER = 'FILTER',
// Take no action
NO_OPS = 'NO_OPS',
}Konfigurasi Filter Unggahan Basis Pengetahuan (hanya untuk Edisi Eksklusif Perusahaan)
Pada Edisi Eksklusif Perusahaan, administrator dan Lingma serta administrator global dapat mengonfigurasi filter basis pengetahuan dalam konfigurasi kebijakan. Setelah dikonfigurasi, file basis pengetahuan akan ditinjau sebelum diunggah untuk memenuhi kebutuhan penyaringan pra-unggah konten basis pengetahuan dalam skenario tertentu.
Detail konfigurasi filter
Langkah 1: Aktifkan dan edit filter basis pengetahuan
Di panel navigasi kiri, klik Policy Configuration. Di sebelah kanan, klik tab Knowledge Base Filter.
Di halaman konfigurasi Knowledge Base Filter, aktifkan sakelar Enable or disable knowledge base upload pre-filter untuk mengedit parameter.
URL
Wajib
Titik akhir untuk layanan pemindaian pihak ketiga Anda. Layanan ini harus menerima permintaan POST.
Token field name
Wajib
Nama bidang header yang digunakan untuk menyimpan token.
Secret key
Wajib
Kunci rahasia yang digunakan untuk menghasilkan token akses. Token ditempatkan di bidang header yang ditentukan untuk memverifikasi legitimasi permintaan. Untuk informasi selengkapnya, lihat bagian Secure Token.
Langkah 2: Uji konektivitas
Setelah memasukkan informasi yang benar, klik Test Connection. Pengujian berhasil jika filter pihak ketiga mengembalikan kode status HTTP
2xx.Jika kode status lain dikembalikan, pengujian gagal. Periksa entri Anda dan coba lagi.
Langkah 3: Simpan filter basis pengetahuan
Klik Save Configuration untuk menyimpan pengaturan filter Anda. Filter berlaku segera setelah disimpan.
Spesifikasi antarmuka layanan pemindaian pihak ketiga
Perusahaan Anda harus menyediakan layanan pemindaian pihak ketiga. Filter basis pengetahuan menggunakan layanan ini untuk memindai konten yang diunggah. Hanya konten yang telah dipindai yang dapat diunggah. Untuk memastikan filter Anda berfungsi dengan benar, antarmuka layanan pemindaian harus memenuhi persyaratan berikut:
Header permintaan
Nama parameter | Wajib | Deskripsi | Contoh parameter |
X-Auth-Raw | Ya | Parameter otentikasi. Nama parameter sesuai dengan Token field name yang Anda masukkan dalam konfigurasi filter. Nilai parameter adalah token akhir yang dihasilkan dari kunci rahasia menggunakan algoritma enkripsi. Lihat bagian Secure Token untuk detailnya. | 6c3baa76c62550eab864e6f75c4bb |
Content-Type | Ya | Jenis media untuk permintaan dan respons. | multipart/form-data |
Secure Token: Tanda tangan aman yang dirancang oleh Alibaba Cloud untuk mencegah penyerang jahat membajak izin layanan cloud Anda. Menghasilkan token memerlukan kunci rahasia, timestamp saat ini, data tambahan, dan algoritma enkripsi.
Generasi token: Saat Lingma memanggil layanan pemindaian pihak ketiga, token aman disertakan dalam header permintaan untuk otentikasi. Hitung token menggunakan parameter berikut:
token = sha256Hex(method + url + timestamp + tokenSecret) + timestampHexmethod
Metode POST.
url
URL titik akhir layanan pemindaian yang Anda masukkan dalam konfigurasi filter basis pengetahuan.
timestamp
Timestamp saat ini.
tokenSecret
Kunci rahasia yang Anda masukkan dalam konfigurasi filter basis pengetahuan.
timestampHex
Timestamp yang dikonversi ke heksadesimal.
Verifikasi token: Layanan pemindaian pihak ketiga Anda dapat menggunakan kode berikut untuk memvalidasi token.
PentingTimestamp: Pastikan jam klien dan server disinkronkan untuk menghindari kegagalan validasi token akibat perbedaan waktu.
Manajemen kunci: Lindungi
tokenSecret. Jangan bagikan kepada pengguna yang tidak berwenang.Kadaluarsa: Sesuaikan masa berlaku token berdasarkan kebutuhan bisnis Anda. Contoh menetapkannya selama 60 detik, tetapi Anda dapat mengubahnya.
/* * Method parameters: * receivedHash: Received hash, which includes the timestamp. * tokenSecret: Secret key used to generate the hash. * url: Request URL. */ public boolean validateAuthRaw(String receivedHash, String tokenSecret, String url) { final String method = "POST"; // Extract timestamp from receivedHash String tsHex = receivedHash.substring(receivedHash.length() - 8); long tsSec = Long.parseLong(tsHex, 16); // Compare timestamps. Allow up to 60 seconds difference. long now = System.currentTimeMillis() / 1000L; if (Math.abs(now - tsSec) > 60) { return false; // Timestamp outside allowed range } // Build string to sign String plain = method + url + tsSec + tokenSecret; // Generate expected hash String expectedHash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(plain); // Compare hashes return expectedHash.equals(receivedHash.substring(0, receivedHash.length() - 8)); }
Parameter permintaan
Nama parameter | Type | Wajib | Deskripsi | Contoh Parameter |
metadata | string | Ya | Metadata bisnis. Content-Type: application/json | {"user": "user0000001", "queryId": "cd2fd109-c4d4-489f-9b27-53752f7827d6"} |
file | file | Ya | File untuk dipindai |
Contoh permintaan:
Content-Type: multipart/form-data; boundary=${bound}
--${bound}
Content-Disposition: form-data; name="metadata"
Content-Type: application/json
{
"user":"user0000001",
"queryID":"cd2fd109-c4d4-489f-9b27-53752f7827d6"
}
--${bound}
Content-Disposition: form-data; name="file"; filename="test-file.pdf"
Content-Type: application/pdf
%binary-file-content-here%Struktur respons
Antarmuka harus mengembalikan kode status HTTP 200 dan format badan respons berikut.
Nama parameter | Tipe | Wajib | Deskripsi | Contoh Parameter |
forbidden | boolean | Ya | Hasil pemeriksaan keamanan. true berarti pemeriksaan gagal. | false |
errorMsg | string | Tidak | Pesan kesalahan yang menjelaskan mengapa pemeriksaan gagal. | "File contains malicious content. Modify and re-upload." |
queryId | string | Tidak | ID permintaan. Harus sesuai dengan bidang queryId dalam metadata permintaan. | "cd2fd109-c4d4-489f-9b27-53752f7827d6" |
user | string | Tidak | ID pengguna. Harus sesuai dengan bidang user dalam metadata permintaan. | "user0001" |