You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
6.3 KiB
238 lines
6.3 KiB
package openai_test
|
|
|
|
import (
|
|
"context"
|
|
"yunyan/sys/juhe"
|
|
"yunyan/sys/openai"
|
|
tavily "yunyan/sys/websearch/tavilysearch"
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
ai "github.com/sashabaranov/go-openai"
|
|
)
|
|
|
|
type Tool_Search_Req struct {
|
|
Query string `json:"query"`
|
|
}
|
|
type search struct{}
|
|
|
|
func (this *search) GetToolInfo() ai.Tool {
|
|
// 定义工具列表
|
|
tool := ai.Tool{
|
|
Type: "function",
|
|
Function: &ai.FunctionDefinition{
|
|
Name: "search",
|
|
Description: "通过Tavily搜索引擎获取实时网络信息,例如查询股票id,实时新闻等",
|
|
Parameters: openai.Parameters{
|
|
Type: "object",
|
|
Properties: map[string]openai.Property{
|
|
"query": {
|
|
Type: "string",
|
|
Description: "搜索关键词",
|
|
},
|
|
},
|
|
Required: []string{"query"},
|
|
},
|
|
},
|
|
}
|
|
return tool
|
|
}
|
|
func (this *search) Execute(args json.RawMessage) (data any, text string, err error) {
|
|
var (
|
|
req Tool_Search_Req
|
|
result *tavily.TavilyResponse
|
|
)
|
|
fmt.Println("search", string(args))
|
|
if err := json.Unmarshal(args, &req); err != nil {
|
|
return nil, "输入参数错误", fmt.Errorf("参数解析失败: %v", err)
|
|
}
|
|
if result, err = tavily.Search(context.Background(), req.Query, 10, 24); err != nil {
|
|
return
|
|
}
|
|
data = result
|
|
text = result.Results[0].Content
|
|
return
|
|
}
|
|
|
|
type Tool_Finance_Req struct {
|
|
Gid string `json:"gid"`
|
|
}
|
|
type finance struct{}
|
|
|
|
func (this *finance) GetToolInfo() ai.Tool {
|
|
// 定义工具列表
|
|
tool := ai.Tool{
|
|
Type: "function",
|
|
Function: &ai.FunctionDefinition{
|
|
Name: "finance",
|
|
Description: "通过股票ID的可以查询当前实时股票的数据",
|
|
Parameters: openai.Parameters{
|
|
Type: "object",
|
|
Properties: map[string]openai.Property{
|
|
"gid": {
|
|
Type: "string",
|
|
Description: "股票ID,需要按照 sh开头的格式,例如:sh601009",
|
|
},
|
|
},
|
|
Required: []string{"gid"},
|
|
},
|
|
},
|
|
}
|
|
return tool
|
|
}
|
|
func (this *finance) Execute(args json.RawMessage) (data any, context string, err error) {
|
|
var (
|
|
req Tool_Finance_Req
|
|
result *juhe.StockResponse
|
|
)
|
|
fmt.Println("finance", string(args))
|
|
if err := json.Unmarshal(args, &req); err != nil {
|
|
return nil, "输入参数错误", fmt.Errorf("参数解析失败: %v", err)
|
|
}
|
|
if result, err = juhe.Financebygid(req.Gid); err != nil {
|
|
return
|
|
}
|
|
data = result
|
|
context = fmt.Sprintf("当前%s股票情况:今日开盘价:%s,昨日收盘价:%s,当前价格:%s,今日最高价:%s,今日最低价:%s,成交量:%s,成交金额:%s",
|
|
result.FinanceResult[0].Data.Name,
|
|
result.FinanceResult[0].Data.TodayStartPri,
|
|
result.FinanceResult[0].Data.YestodEndPri,
|
|
result.FinanceResult[0].Data.NowPri,
|
|
result.FinanceResult[0].Data.TodayMax,
|
|
result.FinanceResult[0].Data.TodayMin,
|
|
result.FinanceResult[0].Data.TraNumber,
|
|
result.FinanceResult[0].Data.TraAmount,
|
|
)
|
|
return
|
|
}
|
|
|
|
func Test_Sys_Chat(t *testing.T) {
|
|
if sys, err := openai.NewSys(
|
|
openai.SetBaseURL("https://api.deepseek.com/v1"),
|
|
openai.SetToken("sk-3adfd188a3134e718bbf704f525aff17"),
|
|
openai.SetModel("deepseek-chat"),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
var resp *openai.ChatResponse
|
|
// 初始化对话
|
|
messages := []openai.ChatReq{
|
|
{
|
|
Role: ai.ChatMessageRoleUser,
|
|
Content: "你好呀",
|
|
},
|
|
}
|
|
resp, err = sys.Chat(context.Background(), messages)
|
|
fmt.Printf("resp:%+v err:%v", resp, err)
|
|
}
|
|
}
|
|
|
|
func Test_Sys_ChatSteam(t *testing.T) {
|
|
tavily.OnInit(nil,
|
|
tavily.SetApiKey("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"),
|
|
)
|
|
juhe.OnInit(nil,
|
|
juhe.SetFinance_ApiKey("50a101c9c5ff7c967598cea4bcc8ebbd"),
|
|
)
|
|
if sys, err := openai.NewSys(
|
|
openai.SetBaseURL("https://api.deepseek.com/v1"),
|
|
openai.SetToken("sk-3adfd188a3134e718bbf704f525aff17"),
|
|
openai.SetModel("deepseek-chat"),
|
|
openai.SetMaxfunccall(5),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
// 初始化对话
|
|
messages := []openai.ChatReq{
|
|
{
|
|
Role: ai.ChatMessageRoleUser,
|
|
Content: "茅台的今日股价如何?",
|
|
},
|
|
}
|
|
sys.RegisterTools(&search{})
|
|
sys.RegisterTools(&finance{})
|
|
choiceChan := make(chan *openai.ChatResponseChoice, 1)
|
|
go sys.ChatForSteams(context.Background(), messages, choiceChan)
|
|
for v := range choiceChan {
|
|
fmt.Printf("%+v\n", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_Sys_doubao(t *testing.T) {
|
|
if sys, err := openai.NewSys(
|
|
openai.SetBaseURL("https://ark.cn-beijing.volces.com/api/v3/bots"),
|
|
openai.SetToken("418ec475-e2dc-4b76-8aca-842d81bc3466"),
|
|
openai.SetModel("bot-20250328144214-rrln6"),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
var resp *openai.ChatResponse
|
|
// 初始化对话
|
|
messages := []openai.ChatReq{
|
|
{
|
|
Role: ai.ChatMessageRoleUser,
|
|
Content: "茅台今日股价?",
|
|
},
|
|
}
|
|
resp, err = sys.Chat(context.Background(), messages)
|
|
fmt.Printf("resp:%+v err:%v", resp, err)
|
|
}
|
|
}
|
|
func Test_Sys_doubao_steam(t *testing.T) {
|
|
tavily.OnInit(nil,
|
|
tavily.SetApiKey("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"),
|
|
)
|
|
if sys, err := openai.NewSys(
|
|
openai.SetBaseURL("https://ark.cn-beijing.volces.com/api/v3/bots"),
|
|
openai.SetToken("418ec475-e2dc-4b76-8aca-842d81bc3466"),
|
|
openai.SetModel("bot-20250328144214-rrln6"),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
// 初始化对话
|
|
messages := []openai.ChatReq{
|
|
{
|
|
Role: ai.ChatMessageRoleUser,
|
|
Content: "茅台的今日股价如何?",
|
|
},
|
|
}
|
|
choiceChan := make(chan *openai.ChatResponseChoice, 1)
|
|
go sys.ChatForSteams(context.Background(), messages, choiceChan)
|
|
for v := range choiceChan {
|
|
fmt.Printf("%+v\n", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_Sys_oneapi_steam(t *testing.T) {
|
|
// tavily.OnInit(nil,
|
|
// tavily.SetApiKey("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"),
|
|
// )
|
|
juhe.OnInit(nil,
|
|
juhe.SetFinance_ApiKey("50a101c9c5ff7c967598cea4bcc8ebbd"),
|
|
)
|
|
if sys, err := openai.NewSys(
|
|
openai.SetBaseURL("http://127.0.0.1:3000/v1"),
|
|
openai.SetToken("sk-gMpCSTxYSpMoMHXz25B9Bc6598Bd431b8cCe6996625c8fD1"),
|
|
openai.SetModel("gpt-3.5-turbo"),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
// 初始化对话
|
|
messages := []openai.ChatReq{
|
|
{
|
|
Role: ai.ChatMessageRoleUser,
|
|
Content: "股票代码:sh601009,今日行情咋样",
|
|
},
|
|
}
|
|
choiceChan := make(chan *openai.ChatResponseChoice, 1)
|
|
// sys.RegisterTools(&search{})
|
|
sys.RegisterTools(&finance{})
|
|
go sys.ChatForSteams(context.Background(), messages, choiceChan)
|
|
for v := range choiceChan {
|
|
fmt.Printf("%+v\n", v)
|
|
}
|
|
}
|
|
}
|
|
|