出于自己的需要,为了更好地使用 OpenAI 的 Function calling 功能,做了一些微小的工作。
思路是读取函数的类型注解和文档,从中解析出函数注释、参数类型和描述,然后自动构建出能够用于 Function calling 的参数。
目前仅支持我用到的一些基本类型,发出来希望可以帮助到有同样需要的人,也希望能帮助我一起完善。
仓库: https://github.com/laipz8200/openai-agent
Function calling 文档: https://platform.openai.com/docs/guides/gpt/function-calling
1
abersheeran 2023-06-24 18:52:55 +08:00
哈哈哈,看到帖子已经想到了是用 pydantic 。看了一下,function 描述生成可以考虑调用 pydantic 的,然后手动去除一些多余的信息。因为 pydantic 生成的描述对枚举类型之类的复杂类型有更好的支持。
|
2
featureoverload 2023-06-25 10:09:18 +08:00
@abersheeran 确实,fastapi 的 Route 类已经处理过了。pip install fastapi; restapi = route(restapi); json.loads(restapi.xxx.json_schema());
|
3
featureoverload 2023-06-25 10:10:07 +08:00
@featureoverload (没写完给发送了)
差不多思路这样就可以: pip install fastapi; restapi = route(restapi); json.loads(restapi.xxx.json_schema()); |
4
abersheeran 2023-06-25 15:13:10 +08:00
@featureoverload 几行代码搞定的东西非要下载个更大的库,而且我记得 fastapi 没有对外保证这个 API 吧?内部接口教人拿来用,
|
5
lanlanye OP @abersheeran #1 我没找到 pydantic 有可以处理函数的方法,目前用的__doc__是 Python 自己的特性,pydantic 只用来定义数据结构了,求问 pydantic 的哪个特性可以用来生成描述?
|
6
abersheeran 2023-06-26 17:39:17 +08:00
|
7
lanlanye OP @abersheeran #6 入参部分使用的话构造请求应该能更方便,但我的初衷是希望可以把现成的函数加上注释直接拿来用,如果强求用户这样定义入参或许不好,总之还是感谢。
|
8
abersheeran 2023-06-26 20:35:51 +08:00
@lanlanye 就是加上类型标注直接生成了。
|