Update and rename 4.13LLMAgent之结构化输出.md to 4.12LLMAgent之结构化输出.md

This commit is contained in:
少轻狂
2023-07-26 14:38:52 +08:00
committed by GitHub
parent 8ffe0fe690
commit f1693e8865

View File

@@ -187,13 +187,13 @@ program(description="A quick and nimble fighter.", valid_weapons=valid_weapons)
### lmql
在 guidance 的基础上lmql这个项目进一步把“prompt 模板”这个概念推进到了一种新的编程语言。从官网能看到给出的一系列示例。语法结构看起来有点像 SQL但函数与缩进都是 Python 的风格。
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B92E71406-7249-4345-894C-AC646F47D05A%7D.png?q-sign-algorithm=sha1&q-ak=AKIDADgW-17gEbYE8KXI4SJ-K2nFiytVPhWKD-X5eSBblobvDdAR7RKY6w7gB_04DAmk&q-sign-time=1690352350;1690355950&q-key-time=1690352350;1690355950&q-header-list=host&q-url-param-list=ci-process&q-signature=599bcb08fed33a3f9b8837bbda9122ec30f84a7e&x-cos-security-token=vImUXgI9C7vzsrv3ymAMkcEtPyQCcNda5e18e3cceae357cb9f2c6aefb068cbf8BqMypgx5-DNHrViAIgr8Gwpv2s_YChAAcqsbePywl4zwaWRrN4Sn6G3EsrxeO-Br2t3RmsIG_CUz7yNSMst7MKjAZiD8bGbU1F_9KDTNkyGD5shMz19ZW12vbLk2p4XE6YuXTymlad4Q4pTsfg9-ogD73wkge16Ypk9O2jqY1-k65Nf_UW0rLXP4RgweMht5&ci-process=originImage)
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B92E71406-7249-4345-894C-AC646F47D05A%7D.png)
从支持的功能来看,相比 guidance 毫不逊色。例如各种限制条件,代码调用,各种 caching 加速,工具集成等基本都具备。这个框架的格式化输出是其次,其各种可控的输出及语言本身或许更值得关注。
### TypeChat
TypeChat 将 prompt 工程替换为 schema 工程:无需编写非结构化的自然语言 prompt 来描述所需输出的格式,而是编写 TS 类型定义。TypeChat 可以帮助 LLM 以 JSON 的形式响应,并且响应结果非常合理:例如用户要求将这句话「我可以要一份蓝莓松饼和一杯特级拿铁咖啡吗?」转化成 JSON 格式TypeChat 响应结果如下:
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7BECFBBC78-BFE8-45d0-99EF-5E13E30E2A18%7D.png?q-sign-algorithm=sha1&q-ak=AKIDVU4ys39l5t63hNLtyC0ksCxX3kZox5vnG1g0mcLcMCqeOM5TeB1yCKPGhMgkg3rc&q-sign-time=1690352395;1690355995&q-key-time=1690352395;1690355995&q-header-list=host&q-url-param-list=ci-process&q-signature=a9b1d0fc9cd831b9f38a1fb932fbc61a7d7bb507&x-cos-security-token=AM7z4h9zPrm9LtZSTUHjC6sQi7Tl2rGa395e2017ccc68e3db68e4619d2c7d600ElWASYe21NEJMw2S1tmMmFY2ZbL1qHTiASObl9bIDyNcR84QxYYgiQzCBlRKG14m-bkpDFOwQE4NADCWi3-DT7I5xMNNjCN277p4mEcyMZT5cZGeNumhqTrdhFcuvpGwNqUaZqd_FmoaNhoai9cRwbV121qC6JJfDQ1sYxF-3Ix7Ij36vJreXKakxpD6qSws&ci-process=originImage)
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7BECFBBC78-BFE8-45d0-99EF-5E13E30E2A18%7D.png)
其本质原理是把interface之类的ts代码作为prompt模板。因此它不仅可以对输出结果进行ts校验甚至能够输入注释描述不可谓非常方便js开发者。不过近日typechat爆火很多开发者企图尝试将typechat移植到python笔者认为这是缘木求鱼因为其校验本身依赖的是ts。笔者在开发过程中将typechat融合到自己的库中效果不错。但是它本身自带的prompt和笔者输入的prompt还是存在冲突还是需要扣扣源码。
### Langchain
@@ -234,9 +234,9 @@ LLM 的可控性、稳定性、事实性、安全性等问题是推进企业级
### 位置信息
是否有人注意到llm对于关键信息在prompt中的位置会对结果产生影响呢在设计 prompt 方面,人们通常建议为语言模型提供详尽的任务描述和背景信息。近期的一些语言模型有能力输入较长的上下文,但它究竟能多好地利用更长的上下文?这一点却相对少有人知。近日,有学者研究发现如果上下文太长,语言模型会更关注其中的前后部分,中间部分却几乎被略过不看,导致模型难以找到放在输入上下文中部的相关信息。下文部分是该论文一些核心内容:
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B59E03114-A066-4394-B1F0-B09357F76B39%7D.png?q-sign-algorithm=sha1&q-ak=AKID3Qjrq4B5rrfZJ43bA2-DzVM4VY00o8ezYuxUko6fAqmDLjhoOwotz5XRLv_dbkkg&q-sign-time=1690352192;1690355792&q-key-time=1690352192;1690355792&q-header-list=host&q-url-param-list=ci-process&q-signature=dba160c7dc037dd82da4369aeec5b0cb6dbb3b71&x-cos-security-token=AM7z4h9zPrm9LtZSTUHjC6sQi7Tl2rGa015c924fbce22b15fb653c312f9eacefElWASYe21NEJMw2S1tmMmLXT2LZXr8mDdl1aXw-1VW1HbxRi1g8g0byRr71z6c2nz0SacBqjL1dkPx-5M7JLZ8db9FLvYcS6Bo7ik6qC9OgvdNTuWUvq3ZpJM1eNsQCwQhH7aE-xfKuJFxYjb6djI8RsaSluGxA-Ge-AJdA88Bt6FmPZtB5eAeSMVxy4XJgP&ci-process=originImage)
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B59E03114-A066-4394-B1F0-B09357F76B39%7D.png)
这是由其本身训练和结构设计有关的,但却对于我们开发有着莫大的帮助和指导意义。
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B9EA47A4E-3EF3-4800-99F4-109EE713746B%7D.png?q-sign-algorithm=sha1&q-ak=AKIDZFVrNY6cL5qVwE2kCfs9WNCfdI0PBP6Osra6n1LheqR7H3LBDhw1CtJ8VWrLdfzO&q-sign-time=1690352372;1690355972&q-key-time=1690352372;1690355972&q-header-list=host&q-url-param-list=ci-process&q-signature=fe9bba1a172cb0acdac9edd7f89eada769827cff&x-cos-security-token=vImUXgI9C7vzsrv3ymAMkcEtPyQCcNda45893d9b48546b1c95a990df3ca3dce3BqMypgx5-DNHrViAIgr8G_QhbbRoQScnMoTAho5427U_znDhIp96z4lpo9YKRbLTwayGowbKhCFbfOT00FU-1Er_2ETk83nlEY0JlIHbJcahXR65eA5CRY0lOTFUs7eaCNb0txmhUxjDN2rTYmZdwySTzPI-pc3FHUPQv5dnC7-f_z0diRCWFRloxci9wVnz&ci-process=originImage)
![](https://marlene-1254110372.cos.ap-shanghai.myqcloud.com/blog/%7B9EA47A4E-3EF3-4800-99F4-109EE713746B%7D.png)
相比之下,在多文档问答任务上,查询感知型上下文化的影响很小。特别指出,当相关信息位于输入上下文的最开始时,它可以提高性能,但在其他设置中会稍微降低性能。借此,我们可以认为,将重要的信息放在开头,结尾放置结构化模板,或许是一种优质选择。
那么如果真的为其提供这么多 token那会真的有用吗这个问题的答案是由下游任务决定。因为这取决于所添加上下文的边际价值以及模型有效使用长输入上下文的能力。所以如果能有效地对检索文档排序让相关信息与输入上下文的起始处更近或对已排序的列表进行截断处理必要时返回更少的文档那么也许可以提升基于语言模型的阅读器使用检索上下文的能力。