157 lines
3.6 KiB
Markdown
157 lines
3.6 KiB
Markdown
# OpenAI Service
|
|
|
|
This package provides an OpenAI-powered service for job analysis and CV generation using the official OpenAI Go SDK.
|
|
|
|
## Features
|
|
|
|
- **Job Analysis**: Analyze job descriptions against CVs to determine fit and provide recommendations
|
|
- **CV Generation**: Create tailored CVs based on job descriptions
|
|
- **Cover Letter Generation**: Generate personalized cover letters
|
|
|
|
## Setup
|
|
|
|
1. Install the OpenAI Go SDK:
|
|
```bash
|
|
go get github.com/sashabaranov/go-openai
|
|
```
|
|
|
|
2. Set your OpenAI API key as an environment variable:
|
|
```bash
|
|
export OPENAI_API_KEY="your-api-key-here"
|
|
```
|
|
|
|
3. (Optional) Set a custom base URL:
|
|
```bash
|
|
export OPENAI_BASE_URL="https://your-custom-endpoint.com/v1"
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Job Analysis
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/jobs-scraper/internal/pkg/domain"
|
|
"github.com/jobs-scraper/internal/pkg/openai"
|
|
)
|
|
|
|
func main() {
|
|
// Create service
|
|
apiKey := os.Getenv("OPENAI_API_KEY")
|
|
service := openai.NewOpenAIService(apiKey, "gpt-4o-mini")
|
|
|
|
// Prepare job description
|
|
jobDesc := domain.JobDescription{
|
|
JobID: 1,
|
|
Description: "Looking for a Go developer...",
|
|
Criteria: map[string]string{
|
|
"experience": "5+ years",
|
|
"languages": "Go, JavaScript",
|
|
},
|
|
}
|
|
|
|
// Analyze job
|
|
result, err := service.AnalyzeJobDescription(cv, jobDesc)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Printf("Should apply: %t\n", result.ShouldApply())
|
|
fmt.Printf("Confidence: %d%%\n", result.ConfidenceScore)
|
|
}
|
|
```
|
|
|
|
### Using Custom Base URL
|
|
|
|
You can configure a custom base URL in two ways:
|
|
|
|
**Method 1: Environment Variable**
|
|
```bash
|
|
export OPENAI_BASE_URL="https://api.openai-proxy.com/v1"
|
|
# Service will automatically use this URL
|
|
service := openai.NewOpenAIService(apiKey, "gpt-4o-mini")
|
|
```
|
|
|
|
**Method 2: Direct Parameter**
|
|
```go
|
|
// Use a custom base URL directly
|
|
service := openai.NewOpenAIServiceWithBaseURL(apiKey, "gpt-4o-mini", "https://api.openai-proxy.com/v1")
|
|
|
|
// Or use Azure OpenAI
|
|
service := openai.NewOpenAIServiceWithBaseURL(apiKey, "gpt-4", "https://your-resource.openai.azure.com/")
|
|
```
|
|
|
|
### Generate Tailored CV
|
|
|
|
```go
|
|
tailoredCV, err := service.GenerateCV(originalCV, jobDesc)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println(tailoredCV)
|
|
```
|
|
|
|
### Generate Cover Letter
|
|
|
|
```go
|
|
coverLetter, err := service.GenerateCoverLetter(cv, jobDesc, "Tech Company Inc")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println(coverLetter)
|
|
```
|
|
|
|
## Models
|
|
|
|
The service supports all OpenAI models. Common choices:
|
|
|
|
- `gpt-4o-mini` - Cost-effective, good performance (default)
|
|
- `gpt-4o` - Higher quality, more expensive
|
|
- `gpt-3.5-turbo` - Fastest, most cost-effective
|
|
|
|
## Environment Variables
|
|
|
|
- `OPENAI_API_KEY` - Your OpenAI API key (required)
|
|
- `OPENAI_BASE_URL` - Custom base URL for OpenAI API (optional)
|
|
- `OPENAI_MODEL` - Default model to use (optional)
|
|
|
|
## Response Structure
|
|
|
|
### JobAnalysisResult
|
|
|
|
```go
|
|
type JobAnalysisResult struct {
|
|
Recommendation string // "apply" or "do_not_apply"
|
|
ConfidenceScore int // 0-100
|
|
MatchingSkills []string
|
|
MissingSkills []string
|
|
ExperienceMatch string // "excellent", "good", "fair", "poor"
|
|
Summary string
|
|
ImprovementSuggestions []string
|
|
}
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The service handles common errors:
|
|
- API authentication issues
|
|
- Rate limiting
|
|
- Invalid JSON responses
|
|
- Network timeouts
|
|
|
|
Always check for errors when calling service methods.
|
|
|
|
## Testing
|
|
|
|
Run the example test:
|
|
```bash
|
|
cd internal/pkg/openai
|
|
go test -v
|
|
```
|
|
|
|
Make sure to set `OPENAI_API_KEY` environment variable before running tests that make actual API calls.
|