init
This commit is contained in:
84
services/ai/ai.go
Normal file
84
services/ai/ai.go
Normal file
@ -0,0 +1,84 @@
|
||||
package ai
|
||||
|
||||
import (
|
||||
"code-review/services"
|
||||
"code-review/services/types"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// AI 实现了 CodeReviewer 和 AIPool 接口
|
||||
type AI struct {
|
||||
model string
|
||||
systemMsg string
|
||||
client AIClient
|
||||
}
|
||||
|
||||
// NewAI 创建新的 AI 实例
|
||||
func NewAI(model, systemMsg string, client AIClient) *AI {
|
||||
return &AI{
|
||||
model: model,
|
||||
systemMsg: systemMsg,
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAI 实现 AIPool 接口
|
||||
func (a *AI) GetAI() services.CodeReviewer {
|
||||
return a
|
||||
}
|
||||
|
||||
// Review 实现 CodeReviewer 接口
|
||||
func (a *AI) Review(changes *types.CodeChanges) (*types.ReviewResult, error) {
|
||||
log.Printf("AI 开始审查代码: model=%s", a.model)
|
||||
|
||||
// 构建审查请求
|
||||
prompt := a.buildPrompt(changes)
|
||||
|
||||
// 调用 AI API
|
||||
response, err := a.client.Chat(a.systemMsg, prompt)
|
||||
if err != nil {
|
||||
log.Printf("AI API 调用失败: model=%s, error=%v", a.model, err)
|
||||
return nil, fmt.Errorf("AI API 调用失败: %w", err)
|
||||
}
|
||||
|
||||
// 解析审查结果
|
||||
result, err := a.parseResponse(response)
|
||||
if err != nil {
|
||||
log.Printf("解析 AI 响应失败: model=%s, error=%v", a.model, err)
|
||||
return nil, fmt.Errorf("解析 AI 响应失败: %w", err)
|
||||
}
|
||||
|
||||
log.Printf("AI 代码审查完成: model=%s", a.model)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// buildPrompt 构建代码审查的提示词
|
||||
func (a *AI) buildPrompt(changes *types.CodeChanges) string {
|
||||
var prompt strings.Builder
|
||||
|
||||
prompt.WriteString("请审查以下代码变更:\n\n")
|
||||
|
||||
for _, file := range changes.Files {
|
||||
prompt.WriteString(fmt.Sprintf("文件: %s\n", file.Path))
|
||||
prompt.WriteString("diff:\n")
|
||||
prompt.WriteString(file.Content)
|
||||
prompt.WriteString("\n---\n\n")
|
||||
}
|
||||
|
||||
return prompt.String()
|
||||
}
|
||||
|
||||
// parseResponse 解析 AI 的响应
|
||||
func (a *AI) parseResponse(response string) (*types.ReviewResult, error) {
|
||||
return &types.ReviewResult{
|
||||
Comments: []types.Comment{
|
||||
{
|
||||
Path: "全局",
|
||||
Content: response,
|
||||
},
|
||||
},
|
||||
Summary: "代码审查完成",
|
||||
}, nil
|
||||
}
|
Reference in New Issue
Block a user