-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutilFunctionCalling.go
97 lines (87 loc) · 2.64 KB
/
utilFunctionCalling.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright (c) 2025 minRAG Authors.
//
// This file is part of minRAG.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses>.
package main
import (
"context"
"encoding/json"
)
var functionCallingMap = make(map[string]IToolFunctionCalling, 0)
func init() {
fcWeather := FCWeather{}
fc, err := fcWeather.Initialization(context.TODO(), get_weather_json)
if err == nil {
functionCallingMap["get_weather"] = fc
}
}
// IToolFunctionCalling 函数调用接口
type IToolFunctionCalling interface {
// Initialization 初始化方法
Initialization(ctx context.Context, descriptionJson string) (IToolFunctionCalling, error)
//获取描述的Map
Description(ctx context.Context) interface{}
// Run 执行方法
Run(ctx context.Context, arguments string) (string, error)
}
var get_weather_json = `{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location, the user shoud supply a location first",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
}`
// FCWeather 天气函数
type FCWeather struct {
//接受模型返回的 arguments
Location string `json:"location,omitempty"`
DescriptionMap map[string]interface{} `json:"-"`
}
func (fc FCWeather) Initialization(ctx context.Context, descriptionJson string) (IToolFunctionCalling, error) {
dm := make(map[string]interface{})
if descriptionJson == "" {
return fc, nil
}
err := json.Unmarshal([]byte(descriptionJson), &dm)
if err != nil {
return fc, err
}
fc.DescriptionMap = dm
return fc, nil
}
// 获取描述的Map
func (fc FCWeather) Description(ctx context.Context) interface{} {
return fc.DescriptionMap
}
// Run 执行方法
func (fc FCWeather) Run(ctx context.Context, arguments string) (string, error) {
if arguments != "" {
err := json.Unmarshal([]byte(arguments), &fc)
if err != nil {
return "", nil
}
}
return fc.Location + "的气温是25度", nil
}