You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AI SDK使LLM仅生成工具结果摘要而非重复Markdown内容?

问题描述

使用AI SDK v4.1.42 + @ai-sdk/openai v1.1.13 + React 19时,调用streamText()返回的消息包含两部分:

  • 工具结果:结构化数据对象,已通过专用UI组件(如ProductTable)渲染
  • LLM文本结果:会重复输出工具结果的完整Markdown格式内容,导致和UI组件展示重复

期望LLM仅生成与工具结果相关的简短说明或上下文,不重复输出Markdown格式的工具内容,同时保留工具结果的UI组件渲染。之前hemabil( mix mornCard ioDec专家守.options导致ain调整系统提示明确要求仅返回简短摘要,但未生效。

解决方案

1. 强化系统提示指令

系统提示需要更明确、强制地告知LLM:工具结果会通过UI组件展示,无需在文本中重复输出,仅需提供简短的上下文说明或引用。

修改/api/chat/route.ts中的systemPrompt:

const systemPrompt = `
你是助手,调用工具获取结果后:
1. 绝对不要在文本响应中重复工具返回的结构化数据,也不要将其格式化为Markdown(比如表格)
2. 仅生成简短自然语言说明,告知用户工具已获取到相关信息,或补充必要上下文
3. 文本响应必须简洁,只聚焦辅助理解工具结果的内容
`;

2. 配置工具调用后的行为

AI SDK支持通过toolCallBehavior参数控制LLM在工具调用后的响应逻辑,可在streamText中添加该配置:

const result = streamText({
  model: openai('gpt-4o-mini'),
  system: systemPrompt,
  messages,
  maxSteps: 10,
  tools,
  toolCallBehavior: {
    type: 'auto',
    promptInstructions: '工具结果将通过专用UI组件展示,你只需生成简短文本说明,无需重复工具数据'
  }
});

3. 前端文本过滤(备选方案)

若上述SDK配置仍不生效,可在前端渲染文本时过滤掉重复的Markdown内容。以getProducts工具为例,检测并移除文本中的表格格式:

// 在ChatInterface.tsx的文本渲染逻辑中修改
if (part.type === 'text') {
  let filteredText = part.text;
  // 匹配并移除Markdown表格格式,可根据实际工具输出调整正则
  filteredText = filteredText.replace(/(\|.*\|[\r\n])+/g, '');
  return <Message key={`text-${index}`} role={message.role} text={filteredText} />;
}
关键注意事项
  • 系统提示指令必须清晰无歧义,避免LLM误解需要输出工具结果格式
  • 若gpt-4o-mini对指令遵循度不足,可尝试切换到gpt-4o等更强大的模型测试
  • 检查工具定义是否包含多余描述,导致LLM认为需要输出格式内容

内容的提问来源于stack exchange,提问作者Loiic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:10:55