79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package tools
|
||
|
||
import (
|
||
"ai_scheduler/internal/entitys"
|
||
"ai_scheduler/internal/pkg"
|
||
"ai_scheduler/internal/pkg/utils_ollama"
|
||
"context"
|
||
"encoding/json"
|
||
"fmt"
|
||
|
||
"github.com/ollama/ollama/api"
|
||
)
|
||
|
||
// NormalChatTool 普通对话
|
||
type NormalChatTool struct {
|
||
llm *utils_ollama.Client
|
||
}
|
||
|
||
// NewNormalChatTool 实例普通对话
|
||
func NewNormalChatTool(llm *utils_ollama.Client) *NormalChatTool {
|
||
return &NormalChatTool{llm: llm}
|
||
}
|
||
|
||
// Name 返回工具名称
|
||
func (w *NormalChatTool) Name() string {
|
||
return "normalChat"
|
||
}
|
||
|
||
// Description 返回工具描述
|
||
func (w *NormalChatTool) Description() string {
|
||
return "用户想进行一般性问答"
|
||
}
|
||
|
||
type NormalChat struct {
|
||
ChatContent string `json:"chat_content"`
|
||
}
|
||
|
||
// Definition 返回工具定义
|
||
func (w *NormalChatTool) Definition() entitys.ToolDefinition {
|
||
return entitys.ToolDefinition{}
|
||
}
|
||
|
||
// Execute 执行直连天下订单详情查询
|
||
func (w *NormalChatTool) Execute(ctx context.Context, requireData *entitys.RequireData) error {
|
||
var req NormalChat
|
||
if err := json.Unmarshal([]byte(requireData.Match.Parameters), &req); err != nil {
|
||
return fmt.Errorf("invalid zltxOrderDetail request: %w", err)
|
||
}
|
||
if req.ChatContent == "" {
|
||
req.ChatContent = "介绍一下你能做什么"
|
||
}
|
||
|
||
// 这里可以集成真实的直连天下订单详情API
|
||
return w.chat(requireData, &req)
|
||
}
|
||
|
||
// getMockZltxOrderDetail 获取模拟直连天下订单详情数据
|
||
func (w *NormalChatTool) chat(requireData *entitys.RequireData, chat *NormalChat) (err error) {
|
||
err = w.llm.ChatStream(context.TODO(), requireData.Ch, []api.Message{
|
||
{
|
||
Role: "system",
|
||
Content: "你是一个聊天助手",
|
||
},
|
||
{
|
||
Role: "assistant",
|
||
Content: fmt.Sprintf("聊天记录:%s", pkg.JsonStringIgonErr(requireData.Histories)),
|
||
},
|
||
{
|
||
Role: "user",
|
||
Content: requireData.UserInput,
|
||
},
|
||
}, w.Name())
|
||
if err != nil {
|
||
return fmt.Errorf(":%s", err)
|
||
}
|
||
|
||
return
|
||
}
|