Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
agentchat
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李伟@五瓣科技
agentchat
Commits
708cbf9f
Commit
708cbf9f
authored
Jun 07, 2025
by
Wade
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
split doc ok
parent
409192b5
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
455 additions
and
318 deletions
+455
-318
agent_chat.log
agent_chat.log
+0
-164
flow.go
flow.go
+0
-80
main.go
plugins/knowledge/example/main.go
+54
-0
knowledge.go
plugins/knowledge/knowledge.go
+306
-0
knowledge_test.go
plugins/knowledge/knowledge_test.go
+95
-74
No files found.
agent_chat.log
deleted
100644 → 0
View file @
409192b5
This diff is collapsed.
Click to expand it.
flow.go
View file @
708cbf9f
...
@@ -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
)
{
...
...
plugins/knowledge/example/main.go
0 → 100644
View file @
708cbf9f
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
plugins/knowledge/knowledge.go
View file @
708cbf9f
This diff is collapsed.
Click to expand it.
plugins/knowledge/knowledge_test.go
View file @
708cbf9f
...
@@ -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.
\n
Another 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment