Update from Vibe Studio
This commit is contained in:
94
src/api/spell-check.ts
Normal file
94
src/api/spell-check.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* 错别字检测与修正 API
|
||||
*/
|
||||
export interface SpellCheckRequest {
|
||||
inputs: {
|
||||
text: string;
|
||||
};
|
||||
query: string;
|
||||
response_mode: 'streaming' | 'blocking';
|
||||
conversation_id?: string;
|
||||
user?: string;
|
||||
}
|
||||
|
||||
export interface SpellCheckResponse {
|
||||
event: string;
|
||||
message_id: string;
|
||||
mode: string;
|
||||
answer: string;
|
||||
metadata?: Record<string, any>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用Dify API进行错别字检测与修正
|
||||
*/
|
||||
export async function detectSpellError(
|
||||
text: string,
|
||||
onMessage?: (content: string) => void
|
||||
): Promise<string> {
|
||||
const API_URL = 'https://copilot.sino-bridge.com/v1/chat-messages';
|
||||
const API_KEY = 'app-hH1RS9yot7bI7hHO8AbTlntN';
|
||||
|
||||
const requestData: SpellCheckRequest = {
|
||||
inputs: {
|
||||
text: text,
|
||||
},
|
||||
query: '1',
|
||||
response_mode: 'streaming',
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch(API_URL, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${API_KEY}`,
|
||||
},
|
||||
body: JSON.stringify(requestData),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`API请求失败: ${response.statusText}`);
|
||||
}
|
||||
|
||||
const reader = response.body?.getReader();
|
||||
if (!reader) {
|
||||
throw new Error('无法读取响应流');
|
||||
}
|
||||
|
||||
let result = '';
|
||||
const decoder = new TextDecoder();
|
||||
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
|
||||
const chunk = decoder.decode(value);
|
||||
const lines = chunk.split('\n');
|
||||
|
||||
for (const line of lines) {
|
||||
if (line.startsWith('data: ')) {
|
||||
const data = line.slice(6);
|
||||
if (data === '[DONE]') {
|
||||
return result;
|
||||
}
|
||||
|
||||
try {
|
||||
const parsed: SpellCheckResponse = JSON.parse(data);
|
||||
if (parsed.event === 'message' && parsed.answer) {
|
||||
result += parsed.answer;
|
||||
onMessage?.(result);
|
||||
}
|
||||
} catch (e) {
|
||||
// 忽略解析错误,继续处理下一行
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error('错别字检测失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user