基于Semantic Kernel的浏览器技能问题:ChatGPT无法识别页面内容求助
Semantic Kernel浏览器技能问题解决方案
一、HTML过长无法传递的解决思路
- 精简页面内容:使用HTML解析工具(如HtmlAgilityPack)过滤掉脚本、样式、注释及不可见元素,只保留页面核心DOM结构与可见文本;或者提取关键元素的标识(id、class、文本内容)生成极简描述,而非全量HTML。
- 生成结构化摘要:将页面转化为自然语言+关键标识的结构化描述,例如“页面顶部导航栏含‘首页’‘产品’按钮,主体区有id为‘search-box’的输入框和文本为‘提交’的按钮”,大幅压缩传递内容。
- 增量更新状态:通过DOM监听(如MutationObserver)捕获页面变化的部分,仅传递更新内容而非全量页面,减少每次交互的数据量。
二、XPath与HTML不符的优化方案
- 强化标识引导:在传递给模型的页面信息中,明确标注元素的唯一标识(id、name、data属性),引导模型优先基于这些标识生成XPath(如
//*[@id='search-box']),避免依赖易变的层级结构。 - 增加XPath校验步骤:在执行模型返回的XPath前,先调用浏览器的DOM查询接口(如
document.evaluate)验证有效性;若无效,自动触发模型基于校验结果重新生成,或使用备选查询方式(如文本内容+class组合)。 - 提供示例规范:在模型prompt中加入符合当前页面结构的XPath示例,明确生成格式,降低模型输出偏差。
代码层面优化建议
在BrowserSkill中新增两个核心方法:
GetPageSummary():负责处理HTML的过滤、结构化摘要生成,替代直接传递原始HTML的逻辑。ValidateXPath(string xpath):调用浏览器API验证XPath有效性,返回校验结果用于后续逻辑判断。
内容的提问来源于stack exchange,提问作者David Bauer
相关产品推荐
相关产品推荐

