随着ChatGPT火爆,LLM应用如雨后春笋,层出不穷。几乎任何人都可以基于大预言模型开发出自己的天猫精灵、小爱同学、小度小度…
今天我将向大家介绍一个基于ChatGPT开发的使用自然语言控制微信方案。使用LLM控制wechaty机器人执行各种命令,wechaty+ TypeChat 的结合,已实现以下功能(完整代码查看type-wechaty https://github.com/atorber/type-wechaty体验):
-
使用自然语言给指定好友或群发消息(如果你是一个日常需要协调和安排各种不同的人或群的角色,这将非常有帮助)
-
更多…嗯,还没有实现
得益于微软的TypeChat https://github.com/microsoft/TypeChat,方案中我们仅仅通过定义类型即快速实现了上述功能,而拓展功能仅仅需要继续拓展更多的type。
首先,介绍一下TypeChat https://github.com/microsoft/TypeChat
TypeChat
官方介绍:
TypeChat is a library that makes it easy to build natural language interfaces using types.
Building natural language interfaces has traditionally been difficult. These apps often relied on complex decision trees to determine intent and collect the required inputs to take action. Large language models (LLMs) have made this easier by enabling us to take natural language input from a user and match to intent. This has introduced its own challenges including the need to constrain the model's reply for safety, structure responses from the model for further processing, and ensuring that the reply from the model is valid. Prompt engineering aims to solve these problems, but comes with a steep learning curve and increased fragility as the prompt increases in size.
TypeChat replaces prompt engineering with schema engineering.
Simply define types that represent the intents supported in your natural language application. That could be as simple as an interface for categorizing sentiment or more complex examples like types for a shopping cart or music application. For example, to add additional intents to a schema, a developer can add additional types into a discriminated union. To make schemas hierarchical, a developer can use a "meta-schema" to choose one or more sub-schemas based on user input.
After defining your types, TypeChat takes care of the rest by:
Constructing a prompt to the LLM using types.
Validating the LLM response conforms to the schema. If the validation fails, repair the non-conforming output through further language model interaction.
Summarizing succinctly (without use of a LLM) the instance and confirm that it aligns with user intent.
Types are all you ne