如何在ACT开发中应用LLM能力
在之前的文章里,我分享了一下在ACT开发中应该充分利用LLM的能力。那在这篇中,我就分享一下在实际开发过程中需要调用的方法。
主要方法就3个:
# LLM
k_semantic_chat # 大模型对话
# 提示词工程
k_prompt_with_json_format # 提示词添加 JSON 输出修饰
k_prompt_parse_json_output # 从对话输出中解析 JSON 对象
k_semantic_chat
k_semantic_chat
就是没有修饰词的对话,就和平时使用的各种LLM APP一样,直接把提示词作为参数,他就会返回对话的结果。
它的签名中只有一个参数,返回字符串的对话结果:
def k_semantic_chat(prompt: str) -> str
而在ACT开发过程中,我觉得和两个提示词工程配合的情况更多一些。
k_prompt_with_json_format 和 k_prompt_parse_json_output
k_prompt_with_json_format
从ACT的debug信息中就能看出来k_prompt_with_json_format
只是用我们提供的参数生成了一个自定义的prompt,它的签名是这样的:
def k_prompt_with_json_format(prompt: str, json_format: dict) -> str
第一个参数就是我们普通的提示词,第二个参数就是我们希望输出的JSON格式,它会将这些信息连接起来,生成一个prompt:
如果提供的是相对日期,例如,明天,后天,9天后,下个月,下下个月,则将它转换为数字相对值,并将类型设置为relative
如果提供的是绝对日期则提取出日期。先判断日期和时间是否满足这些要求,月份最大是12,日最大是31,小时最多是24,分钟最多60,秒最多60。
今年是2024年,是闰年,所以2月有29日。如果不正确则写明原因并标记结果为失败。正确则将类型设置为absolute
提取出时间和要安排的事情。
如果日期和时间都没有问题,则标记成功,否则标记失败。
务必输出JSON,格式如下:
```json
{"date_type": "relative", "day_offset": 0, "month_offset": 0, "date": "2024-12-23", "time": "15:23:00", "object": "年终会议", "result": true, "error_reason": "您提供的日期有误,月份最大是12月"}
上面空行下面就是它做的核心工作,添加了一句务必输出JSON,格式如下:
然后将我们提供的dict转换成了JSON格式拼接了起来。
虽然我们自己也可以直接和用k_semantic_chat
自己提供prompt完成这个需求,但官方可能认为这是一个比较通用的操作,所以做了封装。
需要特别注意的是,这个方法只输出提示词,并没有在内部调用LLM对话,所以需要将生成的提示词传给k_semantic_chat才能正确得到结果,我第一次使用这个方法时候就想当然地它会通过对话给我结果,还费了点时间调试。
k_prompt_parse_json_output
k_prompt_parse_json_output
就很简单了,它是和k_prompt_with_json_format
配对使用的方法,用于将对话结果中的JSON解析出来并转换成Python的dict以供后续直接在程序中使用。
因为chat对话结果是str类型的,这个方法免去了我们自己去解析了。