Commit 708cbf9f authored by Wade's avatar Wade

split doc ok

parent 409192b5
This diff is collapsed.
...@@ -153,86 +153,6 @@ func DefineModelsFlow(g *genkit.Genkit) { ...@@ -153,86 +153,6 @@ func DefineModelsFlow(g *genkit.Genkit) {
}) })
} }
// DefineModelsFlow 定义 models 流
// func DefineModelsFlow(g *genkit.Genkit) {
// genkit.DefineFlow(g, "models", func(ctx context.Context, provider string) ([]ProviderInfo, error) {
// log.Info().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Msg("Listing models and embedders for provider")
// infos := make([]ProviderInfo, 0, 2)
// switch provider {
// case googlegenai.GoogleAIProvider:
// goggleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// log.Error().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Err(err).
// Msg("Failed to list Google AI provider info")
// return nil, err
// }
// goggleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI) //ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// log.Error().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Err(err).
// Msg("Failed to list Google AI provider info")
// return nil, err
// }
// googleInfo := ProviderInfo{
// Provider: googlegenai.GoogleAIProvider,
// Models: goggleModels,
// Embedders: goggleEmbedders,
// }
// infos = append(infos, googleInfo)
// return infos, nil
// case deepseek.Provider:
// dsModels := deepseek.ListModels()
// infos = append(infos, ProviderInfo{
// Provider: deepseek.Provider,
// Models: dsModels,
// })
// return infos, nil
// default:
// infos := make([]ProviderInfo, 0, 2)
// goggleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// return nil, err
// }
// goggleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI) //ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// return nil, err
// }
// googleInfo := ProviderInfo{
// Provider: googlegenai.GoogleAIProvider,
// Models: goggleModels,
// Embedders: goggleEmbedders,
// }
// infos = append(infos, googleInfo)
// dsModels := deepseek.ListModels()
// infos = append(infos, ProviderInfo{
// Provider: deepseek.Provider,
// Models: dsModels,
// })
// fmt.Println(provider,"------default---")
// return infos, err
// }
// })
// }
func DefineGraphFlow(g *genkit.Genkit, graphIndexer ai.Indexer) { func DefineGraphFlow(g *genkit.Genkit, graphIndexer ai.Indexer) {
genkit.DefineFlow(g, "index/graph", func(ctx context.Context, input *GraphInput) (Response, error) { genkit.DefineFlow(g, "index/graph", func(ctx context.Context, input *GraphInput) (Response, error) {
......
package main
import (
"fmt"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
lkeap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lkeap/v20240522"
)
func main() {
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性
// 以下代码示例仅供参考,建议采用更安全的方式来使用密钥
// 请参见:https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
credential := common.NewCredential(
"AKID64oLfmfLtESUJ6i8LPSM4gCVbiniQuBF",
"rX2JMBnBMJ2YqulOo37xa5OUMSN4Xnpd",
)
// 使用临时密钥示例
// credential := common.NewTokenCredential("SecretId", "SecretKey", "Token")
// 实例化一个client选项,可选的,没有特殊需求可以跳过
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "lkeap.tencentcloudapi.com"
// 实例化要请求产品的client对象,clientProfile是可选的
client, _ := lkeap.NewClient(credential, "ap-guangzhou", cpf)
// 实例化一个请求对象,每个接口都会对应一个request对象
request := lkeap.NewReconstructDocumentSSERequest()
request.FileType = common.StringPtr("TXT")
request.FileBase64 = common.StringPtr("data:application/octet-stream;base64,4oCc6L+Z5bCx6LGh6Iqx5LiA5qC344CC5aaC5p6c5L2g54ix5LiK5LqG5LiA5py155Sf6ZW/IArlnKjkuIDpopfmmJ/mmJ/kuIrnmoToirHvvIzpgqPkuYjlpJzpl7TvvIwgCuS9oOeci+edgOWkqeepuuWwseaEn+WIsOeUnOicnOaEiSAK5b+r44CC5omA5pyJ55qE5pif5pif5LiK6YO9CuWlveixoeW8gOedgOiKseOAguKAnQ==")
// 返回的resp是一个ReconstructDocumentSSEResponse的实例,与请求对象对应
response, err := client.ReconstructDocumentSSE(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
// 输出json格式的字符串回包
if response.Response != nil {
// 非流式响应
fmt.Println(response.ToJsonString())
} else {
// 流式响应
for event := range response.Events {
fmt.Println(string(event.Data))
}
}
}
\ No newline at end of file
This diff is collapsed.
...@@ -3,6 +3,7 @@ package knowledge ...@@ -3,6 +3,7 @@ package knowledge
import ( import (
"context" "context"
"os" "os"
"strings"
"testing" "testing"
"github.com/rs/zerolog" "github.com/rs/zerolog"
...@@ -113,79 +114,99 @@ func TestKnowledgeClient_QueryRewrite(t *testing.T) { ...@@ -113,79 +114,99 @@ func TestKnowledgeClient_QueryRewrite(t *testing.T) {
} }
} }
func TestKnowledgeClient_QueryRewriteWithSummary(t *testing.T) {
// Warning: Do not hardcode credentials in production code. Use environment variables or a secure vault.
os.Setenv("TENCENTCLOUD_SECRET_ID", "AKID64oLfmfLtESUJ6i8LPSM4gCVbiniQuBF")
os.Setenv("TENCENTCLOUD_SECRET_KEY", "rX2JMBnBMJ2YqulOo37xa5OUMSN4Xnpd")
defer func() {
os.Unsetenv("TENCENTCLOUD_SECRET_ID")
os.Unsetenv("TENCENTCLOUD_SECRET_KEY")
}()
// Create client configuration
config := ClientConfig{
Endpoint: "lkeap.tencentcloudapi.com",
Region: "ap-guangzhou",
}
// Initialize client
client := NewKnowledgeClient(config)
ctx := context.Background()
// Test cases
tests := []struct {
name string
userQuestion string
assistantAnswer string
historySummary string
expectError bool
}{
{
name: "ValidWithSummary",
userQuestion: "你的家在哪里",
assistantAnswer: "国内",
historySummary: "null", //"User asked about location preferences earlier.",
expectError: true, // Expect error due to potentially invalid credentials
},
}
for _, tt := range tests { func TestKnowledgeClient_ReconstructDocumentSSE(t *testing.T) {
t.Run(tt.name, func(t *testing.T) { // Warning: Do not hardcode credentials in production code. Use environment variables or a secure vault.
// Initialize client for each test os.Setenv("TENCENTCLOUD_SECRET_ID", "AKID64oLfmfLtESUJ6i8LPSM4gCVbiniQuBF")
if err := client.Init(ctx); err != nil { os.Setenv("TENCENTCLOUD_SECRET_KEY", "rX2JMBnBMJ2YqulOo37xa5OUMSN4Xnpd")
t.Fatalf("Failed to initialize KnowledgeClient: %v", err) defer func() {
} os.Unsetenv("TENCENTCLOUD_SECRET_ID")
os.Unsetenv("TENCENTCLOUD_SECRET_KEY")
// Perform query rewrite with summary }()
resp, err := client.QueryRewriteWithSummary(ctx, tt.userQuestion, tt.assistantAnswer, tt.historySummary)
// Create client configuration
// Check error expectation config := ClientConfig{
if tt.expectError { Endpoint: "lkeap.tencentcloudapi.com",
if err == nil { Region: "ap-guangzhou",
t.Error("Expected error, got none") }
} else {
log.Debug(). // Initialize client
Str("method", "TestKnowledgeClient_QueryWithSummary"). client := NewKnowledgeClient(config)
Str("test_name", tt.name). ctx := context.Background()
Str("error", err.Error()).
Msg("Received expected error") // Test cases
} tests := []struct {
return name string
} text string
initClient bool
// Check response expectError bool
if err != nil { }{
t.Errorf("QueryRewriteWithSummary failed: %v", err) {
} name: "ValidText",
if resp.RewrittenQuery == "" { text: "Sample text for reconstruction.\nAnother line.",
t.Error("Expected non-empty rewritten query") initClient: true,
} expectError: true, // Expect error due to potentially invalid credentials
},
log.Info(). {
Str("method", "TestKnowledgeClient_QueryWithSummary"). name: "EmptyText",
Str("test_name", tt.name). text: "",
Str("rewritten_query", resp.RewrittenQuery). initClient: true,
Msg("Query rewrite with summary successful") expectError: true,
}) },
} {
} name: "LargeText",
text: strings.Repeat("a", 9*1024*1024), // ~9MB
initClient: true,
expectError: true,
},
{
name: "UninitializedClient",
text: "Sample text.",
initClient: false,
expectError: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Initialize client if required
if tt.initClient {
if err := client.Init(ctx); err != nil {
t.Fatalf("Failed to initialize KnowledgeClient: %v", err)
}
}
// Perform document reconstruction
result, err := client.ReconstructDocumentSSE(ctx, tt.text)
// Check error expectation
if tt.expectError {
if err == nil {
t.Error("Expected error, got none")
} else {
log.Debug().
Str("method", "TestKnowledgeClient_ReconstructDocumentSSE").
Str("test_name", tt.name).
Str("error", err.Error()).
Msg("Received expected error")
}
return
}
// Check response
if err != nil {
t.Errorf("ReconstructDocumentSSE failed: %v", err)
}
if result == "" {
t.Error("Expected non-empty response JSON")
}
log.Info().
Str("method", "TestKnowledgeClient_ReconstructDocumentSSE").
Str("test_name", tt.name).
Str("response_json", result[:min(100, len(result))]).
Msg("Document reconstruction successful")
})
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment