feat(API): 聊天接口支持 Pyodide 图形代码执行

- 添加图表绘制规范到系统提示词
- 支持发送 pyodide_execution_required 事件通知前端
- 工具执行结果增加图片数据传递
- 优化图表绘制指导(单次绘图、子图展示、中文支持)
This commit is contained in:
gaoziman 2025-12-19 20:19:51 +08:00
parent 5cc4fbb7a0
commit 5fe0552338

View File

@ -92,7 +92,15 @@ const DEFAULT_SYSTEM_PROMPT = `你是一个专业、友好的 AI 助手。请遵
## ##
- -
- -
- `; -
##
使 code_execution
1. **** code_execution
2. ****
3. **使** seaborn-whitegrid plt.style.use()
4. ****Noto Sans SC使
5. ****使使(subplot)`;
// POST /api/chat - 发送消息并获取 AI 回复 // POST /api/chat - 发送消息并获取 AI 回复
export async function POST(request: Request) { export async function POST(request: Request) {
@ -393,6 +401,26 @@ export async function POST(request: Request) {
// 执行工具 // 执行工具
const result = await executeTool(tc.name, tc.input); const result = await executeTool(tc.name, tc.input);
// 检查是否需要浏览器端 Pyodide 执行
if (result.requiresPyodide) {
// 发送 Pyodide 执行请求事件
controller.enqueue(encoder.encode(`data: ${JSON.stringify({
type: 'pyodide_execution_required',
id: tc.id,
name: tc.name,
code: result.code,
language: result.language,
})}\n\n`));
// 将占位工具结果发送给 AI稍后会被前端执行结果替换
toolResults.push({
type: 'tool_result',
tool_use_id: tc.id,
content: '代码正在浏览器端执行中,请稍候...',
});
continue;
}
// 发送工具执行结果事件(使用简短版本) // 发送工具执行结果事件(使用简短版本)
controller.enqueue(encoder.encode(`data: ${JSON.stringify({ controller.enqueue(encoder.encode(`data: ${JSON.stringify({
type: 'tool_execution_result', type: 'tool_execution_result',
@ -400,6 +428,7 @@ export async function POST(request: Request) {
name: tc.name, name: tc.name,
success: result.success, success: result.success,
result: result.displayResult, result: result.displayResult,
images: result.images,
})}\n\n`)); })}\n\n`));
// 将简短的工具结果显示给用户 // 将简短的工具结果显示给用户