MetaGLM / glm-cookbook

Examples and guides for using the GLM APIs
https://open.bigmodel.cn/
Apache License 2.0
726 stars 79 forks source link

在智能体中"用生成的代码"做为参数传递时的建议 #25

Open ichat001 opened 4 months ago

ichat001 commented 4 months ago

Feature request / 功能建议

我创建的智能体需要 "用生成的代码做为参数传递" 的功能, 例如, 我在配置信息中的描述如下:

请编写"获取当前电脑上默认打印机"的powershell代码, 然后将代码url编码后做为参数调用API中的 sendCode 函数, 不要复述或解释

用上面的提示, 在实际测试时, 将代码url编码 没有执行, 好像没有识别这个提示词似的 之所以要进行url编码是因为powershell代码中有很多字符需要转义, 如: 双引号, 单引号, 换行符等, 转成url后就不用考虑转义的问题了 如果不进行url编码, 可以成功把powershell代码做为参数传递给 sendCode参数, 但在服务器端收到的文本却在双引号的地方就截断了, 所以只能提前进行url编码一下

另外: 我直接在GLM4智能体下输入上面的提示词, 将代码url编码 提示词极少数情况可以成功识别, 但在转换成url编码的时候, 是逐个字符生成的, 实在太慢了; Kimi可准确识别url编码的提示词, 如下图所示

建议: 在智谱清言智能体中涉及到做为参数传递的文本都应该默认进行url处理, 否则绝对会出现转义问题

请问,有没有更快, 更好, 更稳定的办法来解决我上述的问题(传递GLM4生成的powershell代码,且url编码后的文本)? @zRzRzRzRzRzRzR @Vinlic 能支招一下吗? 非常感谢

下面图片是分别在GLM4和Kimi的回复结果: QY kimi

Motivation / 动机

给API中的函数传递参数时更快更稳

Your contribution / 您的贡献

ichat001 commented 4 months ago

@zRzRzRzRzRzRzR 刚刚又发现另外的一直没解决的老问题, 在清言中生成的powershell很多代码是拼在一起(但API调用时生成的代码是正确的, 没有拼在一起), 丢了空格或换行, 如下图所示, 这样的话, 代码就是错的, url编码后更是错上加错, 还有就是, 此种情况(做为参考传递给API函数)的url编码不能逐字符生成了, 这是不值的, 太消耗时间了, 有时甚至多达几分钟了, 仍在一个字符一个字符的生成. 而gpts, 在这方面是瞬时生成, 所以需要改进一下生成方式 esc

zRzRzRzRzRzRzR commented 3 months ago

好,我反馈一下,智谱清言的API是单独做的

ichat001 commented 3 months ago

好,我反馈一下,智谱清言的API是单独做的

真心期待能解决一下, 各种渠道的反馈都石沉大海了.... GPTs没有这个问题, 但是我在学校的网络, 挂梯子实在不允许, 再次感谢! 另外下面的例子, 更直观点, 供参考:

提示词: 请编写"判断电脑桌面上有没有ABC.docx文件"的powershell代码, 然后将代码url编码后做为参数调用API中的 sendCode 函数, 不要复述或解释

智能体编写的代码如下: Test-Path "C:\Users\$env:USERNAME\Desktop\ABC.docx"

智能体发送的请求如下: command='Test-Path "C:\Users\$env:USERNAME\Desktop\ABC.docx"'

接收请求的服务器端收到的文本如下: Test-Path "C:\Users\$env:USERNAME\Desktop\ABC.docx

请注意接收的文本结尾: 把 " 丢了, 所以断定智能体在传参时没有url编码