v3.0.1, 改成tools调用方式
This commit is contained in:
@@ -5,6 +5,7 @@ const { broadcastToRoomExcludeSelf, broadcastToRoom } = require('../ws');
|
||||
const { buildSystemPrompt } = require('../ai/prompt');
|
||||
const { validate, normalize } = require('../ai/validator');
|
||||
const { callDeepSeek } = require('../ai/client');
|
||||
const { TOOLS } = require('../ai/tools');
|
||||
const { getHistory, addToHistory, hasPendingAction, handleAIResult, executePendingAction } = require('../handlers');
|
||||
const db = require('../db');
|
||||
const { timestamp } = require('../utils');
|
||||
@@ -69,7 +70,39 @@ async function analyzeWithDeepSeek(text, historyMessages, username, isAdmin, roo
|
||||
];
|
||||
historyMessages.forEach(function(m) { messages.push(m); });
|
||||
messages.push({ role: 'system', content: '当前服务器时间:' + new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai', hour12: false }) });
|
||||
const content = await callDeepSeek(messages, username);
|
||||
const message = await callDeepSeek(messages, username, 0.1, true, TOOLS);
|
||||
|
||||
// 1) 工具调用路径:模型调用了 create_purchase / query_purchases / reply_chat / ignore
|
||||
if (message && Array.isArray(message.tool_calls) && message.tool_calls.length) {
|
||||
message.tool_calls.forEach(function(tc, i) {
|
||||
const fn = tc.function || {};
|
||||
console.log('🤖 AI 工具调用[' + i + ']: ' + (fn.name || '?') + ' args=' + (fn.arguments || '').substring(0, 300));
|
||||
});
|
||||
const results = [];
|
||||
message.tool_calls.forEach(function(tc) {
|
||||
const fn = tc.function || {};
|
||||
const name = fn.name || '';
|
||||
let args = {};
|
||||
try { args = JSON.parse(fn.arguments || '{}'); } catch(e) { console.warn('⚠️ 工具参数解析失败:', name, (fn.arguments || '').substring(0, 100)); args = {}; }
|
||||
if (name === 'create_purchase') {
|
||||
// 工具参数已是结构化对象,补上 action 字段以复用现有 handleAIResult 的 purchase 分支
|
||||
results.push(Object.assign({ action: 'purchase' }, args));
|
||||
} else if (name === 'query_purchases') {
|
||||
// 复用现有 query 分支(本地查库 + 二次汇总),不依赖模型返回结果
|
||||
results.push({ action: 'query', keywords: args.keywords || '' });
|
||||
} else if (name === 'reply_chat') {
|
||||
results.push({ action: 'chat', reply: args.reply || '好的。' });
|
||||
} else {
|
||||
// ignore 或未知工具 → 忽略
|
||||
console.warn('⚠️ 未识别的工具名:', name);
|
||||
results.push({ action: 'ignore' });
|
||||
}
|
||||
});
|
||||
return results;
|
||||
}
|
||||
|
||||
// 2) 纯文本/JSON 路径:query / delete / clear_all 等按旧逻辑解析
|
||||
const content = (message && typeof message === 'object') ? (message.content || '') : (message || '');
|
||||
console.log('🤖 AI 返回:', content.substring(0, 200));
|
||||
try {
|
||||
var cleaned = content.replace(/```json|```/g, '').trim();
|
||||
|
||||
Reference in New Issue
Block a user