feat: 完善后端知识库服务和配置
- 优化 AI-Core 客户端调用 - 添加更多知识库配置选项 - 完善文档解析逻辑 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,8 @@ import (
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
|
||||
docparser "x-agents/server"
|
||||
)
|
||||
|
||||
// AICoreClient AI-Core 文档解析服务客户端
|
||||
@@ -53,7 +55,7 @@ func (c *AICoreClient) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
// ParseDocument 解析文档
|
||||
// ParseDocument 解析文档 - 使用生成的 protobuf 代码
|
||||
func (c *AICoreClient) ParseDocument(fileURL, fileName, fileType string) (*ParseResult, error) {
|
||||
if c.conn == nil {
|
||||
if err := c.Connect(); err != nil {
|
||||
@@ -61,17 +63,16 @@ func (c *AICoreClient) ParseDocument(fileURL, fileName, fileType string) (*Parse
|
||||
}
|
||||
}
|
||||
|
||||
// 使用 gRPC raw bytes 调用
|
||||
// 由于没有生成 protobuf 代码,使用 raw bytes 方式调用
|
||||
client := NewDocumentParserClient(c.conn)
|
||||
// 使用生成的 protobuf 客户端
|
||||
client := docparser.NewDocumentParserClient(c.conn)
|
||||
|
||||
req := &ParseRequest{
|
||||
req := &docparser.ParseRequest{
|
||||
FileUrl: fileURL,
|
||||
FileName: fileName,
|
||||
FileType: fileType,
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
|
||||
defer cancel()
|
||||
|
||||
resp, err := client.ParseDocument(ctx, req)
|
||||
@@ -80,53 +81,11 @@ func (c *AICoreClient) ParseDocument(fileURL, fileName, fileType string) (*Parse
|
||||
}
|
||||
|
||||
return &ParseResult{
|
||||
Success: resp.Success,
|
||||
Content: resp.Content,
|
||||
Message: resp.Message,
|
||||
ContentLength: resp.ContentLength,
|
||||
FileType: resp.FileType,
|
||||
ParserEngine: resp.ParserEngine,
|
||||
Success: resp.GetSuccess(),
|
||||
Content: resp.GetContent(),
|
||||
Message: resp.GetMessage(),
|
||||
ContentLength: resp.GetContentLength(),
|
||||
FileType: resp.GetFileType(),
|
||||
ParserEngine: resp.GetParserEngine(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// 以下是手动定义的 protobuf messages(与 proto 文件一致)
|
||||
// 不需要生成 .pb.go 文件,直接手动定义
|
||||
|
||||
type ParseRequest struct {
|
||||
FileUrl string
|
||||
FileName string
|
||||
FileType string
|
||||
ParserEngine string
|
||||
}
|
||||
|
||||
type ParseResponse struct {
|
||||
Success bool
|
||||
Content string
|
||||
Message string
|
||||
ContentLength int32
|
||||
FileType string
|
||||
ParserEngine string
|
||||
}
|
||||
|
||||
// DocumentParserClient gRPC 客户端接口(手动实现)
|
||||
type DocumentParserClient interface {
|
||||
ParseDocument(ctx context.Context, in *ParseRequest, opts ...grpc.CallOption) (*ParseResponse, error)
|
||||
}
|
||||
|
||||
type documentParserClient struct {
|
||||
cc grpc.ClientConnInterface
|
||||
}
|
||||
|
||||
// NewDocumentParserClient 创建 DocumentParser 客户端
|
||||
func NewDocumentParserClient(cc grpc.ClientConnInterface) DocumentParserClient {
|
||||
return &documentParserClient{cc: cc}
|
||||
}
|
||||
|
||||
func (c *documentParserClient) ParseDocument(ctx context.Context, in *ParseRequest, opts ...grpc.CallOption) (*ParseResponse, error) {
|
||||
out := new(ParseResponse)
|
||||
err := c.cc.Invoke(ctx, "/docparser.DocumentParser/ParseDocument", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user