Files
ai_job_chat_agent/README.md

427 lines
11 KiB
Markdown
Raw Normal View History

2026-01-12 11:33:43 +08:00
# 青岛岗位匹配系统
基于Go开发的智能岗位匹配系统兼容OpenAI `/v1/chat/completions` API接口。
## 配置文档
### 完整配置示例
编辑 `config.yaml`
```yaml
# 服务器配置
server:
port: 8080 # 服务端口
host: "0.0.0.0" # 监听地址
read_timeout: 30s # 读取请求超时
write_timeout: 300s # 写入响应超时(流式响应需要更长时间)
# LLM配置
llm:
base_url: "https://your-llm-api.com/v1" # LLM API地址
api_key: "sk-xxx" # LLM API密钥
model: "gpt-4o" # 默认模型
timeout: 120s # 请求超时
max_retries: 3 # 最大重试次数
# 高德地图配置
amap:
api_key: "your-amap-key" # 高德地图API密钥
base_url: "https://restapi.amap.com/v3" # 高德API地址
timeout: 10s # 请求超时
# 岗位API配置
job_api:
base_url: "https://job-api.example.com" # 岗位API地址
timeout: 30s # 请求超时
# OCR服务配置文件解析
ocr:
base_url: "https://your-ocr-api.example.com" # OCR服务地址外网
# base_url: "http://127.0.0.1:9001" # OCR服务地址内网
timeout: 120s # 请求超时
# 政策咨询配置
policy:
base_url: "http://policy-api.example.com" # 政策API地址
login_name: "your_login_name" # 登录用户名
user_key: "your_user_key" # 用户密钥
service_id: "your_service_id" # 服务ID
timeout: 60s # 请求超时
# 日志配置
logging:
level: "info" # 日志级别debug, info, warn, error
format: "json" # 日志格式json, text
# 性能配置
performance:
max_goroutines: 10000 # 最大并发goroutine数
goroutine_pool_size: 5000 # goroutine池大小
task_queue_size: 10000 # 任务队列大小
enable_pprof: true # 启用pprof性能分析设为 false 可关闭 /debug/pprof/*
enable_metrics: true # 启用指标收集(设为 false 可关闭 /metrics 与指标中间件)
gc_percent: 100 # GC触发百分比
```
### 环境变量配置
环境变量会自动覆盖配置文件中的值(推荐生产环境使用):
```bash
# 服务器
export SERVER_PORT="8080"
export SERVER_HOST="0.0.0.0"
# LLM
export LLM_API_KEY="sk-xxx"
export LLM_BASE_URL="https://your-llm-api.com/v1"
export LLM_MODEL="gpt-4o"
# 高德地图
export AMAP_API_KEY="your-amap-key"
# OCR服务
export OCR_BASE_URL="https://your-ocr-api.example.com"
# 岗位API
export JOB_API_BASE_URL="https://job-api.example.com"
# 政策API
export POLICY_BASE_URL="http://policy-api.example.com"
export POLICY_LOGIN_NAME="your_login_name"
export POLICY_USER_KEY="your_user_key"
export POLICY_SERVICE_ID="your_service_id"
```
## 运行
```bash
# 安装依赖
go mod download
# 直接运行
go run cmd/server/main.go
# 或编译后运行
make build
./qd-sc-server
# 使用自定义配置文件
./qd-sc-server -config=/path/to/config.yaml
```
服务启动在 `http://localhost:8080`
## API端点
系统提供以下端点:
| 端点 | 方法 | 说明 |
|------|------|------|
| `/` | GET | API信息和端点列表 |
| `/health` | GET | 健康检查 |
| `/metrics` | GET | 性能指标(需启用 `performance.enable_metrics` |
| `/v1/chat/completions` | POST | OpenAI兼容的聊天接口主要接口 |
| `/debug/pprof/*` | GET | 性能分析pprof需启用 `performance.enable_pprof` |
## API调用
### 1. 普通对话
```bash
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qd-job-turbo",
"messages": [
{"role": "user", "content": "帮我推荐城阳区的Java开发岗位"}
],
"stream": true
}'
```
### 2. 带文件URLVision API 兼容格式)
通过 `image_url` 字段发送文件 URL支持图片、PDF、Excel、PPT 等格式:
```bash
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qd-job-turbo",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "根据这份简历推荐岗位"},
{"type": "image_url", "image_url": {"url": "https://example.com/resume.pdf"}}
]
}
],
"stream": true
}'
```
> **说明**: `image_url` 是 OpenAI Vision API 的兼容字段名实际支持图片、PDF、Excel、PPT 等多种文件格式。
### 3. 多轮对话
支持上下文对话,只需在 `messages` 中包含历史消息:
```bash
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qd-job-turbo",
"messages": [
{"role": "user", "content": "我想找Java开发岗位"},
{"role": "assistant", "content": "好的,请问您希望在哪个区域找工作?"},
{"role": "user", "content": "城阳区"}
],
"stream": true
}'
```
### 4. 请求参数说明
```json
{
"model": "qd-job-turbo", // 必填:固定模型名称
"messages": [ // 必填:对话消息列表
{
"role": "user", // 角色user, assistant, system
"content": "你的问题" // 消息内容
}
],
"stream": true, // 可选是否流式输出推荐true
"temperature": 0.7, // 可选温度参数0-2
"max_tokens": 2000, // 可选最大生成token数
"top_p": 1.0, // 可选nucleus采样参数
"presence_penalty": 0.0, // 可选:存在惩罚
"frequency_penalty": 0.0 // 可选:频率惩罚
}
```
### 5. 响应格式
**流式响应**`stream: true`
```
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1234567890,"model":"qd-job-turbo","choices":[{"index":0,"delta":{"role":"assistant","content":"您好"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1234567890,"model":"qd-job-turbo","choices":[{"index":0,"delta":{"content":""},"finish_reason":null}]}
data: [DONE]
```
**非流式响应**`stream: false`
```json
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1234567890,
"model": "qd-job-turbo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "您好,我可以帮您推荐岗位..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 100,
"completion_tokens": 50,
"total_tokens": 150
}
}
```
## 内置功能
系统会根据对话自动调用以下工具:
1. **queryLocation** - 查询地点坐标(高德地图)
2. **queryJobsByArea** - 按区域查询岗位
3. **queryJobsByLocation** - 按坐标查询岗位
4. **queryPolicy** - 政策咨询
5. **parsePDF** - PDF解析OCR服务
6. **parseImage** - 图片识别OCR服务
### 工具参数说明
#### queryJobsByArea按区域查询岗位
```json
{
"area": 5, // 区域代码0-9
"keyword": "Java", // 可选:关键词
"education": 4, // 可选:学历代码
"experience": 5, // 可选:经验代码
"page": 1, // 可选:页码
"pageSize": 20 // 可选:每页数量
}
```
#### queryJobsByLocation按坐标查询岗位
```json
{
"latitude": "36.307527", // 纬度
"longitude": "120.467121", // 经度
"keyword": "Java", // 可选:关键词
"radius": 5000, // 可选:搜索半径(米)
"education": 4, // 可选:学历代码
"experience": 5 // 可选:经验代码
}
```
#### queryPolicy政策咨询
```json
{
"message": "咨询问题", // 必填:咨询内容
"chatId": "xxx", // 可选会话ID多轮对话
"conversationId": "xxx", // 可选对话ID多轮对话
"realName": false, // 可选:是否实名咨询
"aac001": "个人编号", // 实名时必填
"aac147": "身份证号", // 实名时必填
"aac003": "姓名" // 实名时必填
}
```
### 代码对照表
#### 区域代码
- 0:市南区, 1:市北区, 2:李沧区, 3:崂山区, 4:黄岛区
- 5:城阳区, 6:即墨区, 7:胶州市, 8:平度市, 9:莱西市
#### 学历代码
- -1:不限, 0:初中及以下, 1:中专/中技, 2:高中, 3:大专
- 4:本科, 5:硕士, 6:博士, 7:MBA/EMBA, 8-10:留学
#### 经验代码
- 0:不限, 1:实习生, 2:应届, 3:1年以下
- 4:1-3年, 5:3-5年, 6:5-10年, 7:10年以上
## 其他端点
### 健康检查
```bash
curl http://localhost:8080/health
```
响应:
```json
{
"status": "ok",
"timestamp": "2024-01-01T12:00:00Z"
}
```
### 性能指标
```bash
curl http://localhost:8080/metrics
```
响应:
```json
{
"requests_total": 1234,
"requests_success": 1200,
"requests_failed": 34,
"avg_response_time_ms": 150.5,
"goroutines": 42,
"memory_alloc_mb": 45.6
}
```
### 性能分析pprof
```bash
# CPU性能分析采集30秒
curl http://localhost:8080/debug/pprof/profile?seconds=30 -o cpu.prof
# 内存分析
curl http://localhost:8080/debug/pprof/heap -o heap.prof
# Goroutine分析
curl http://localhost:8080/debug/pprof/goroutine -o goroutine.prof
# 查看分析结果
go tool pprof cpu.prof
```
## 性能配置
### 限流
系统默认配置:
- **桶容量**: 200突发请求
- **补充速率**: 50/秒持续QPS
超过限流会返回 `429 Too Many Requests`
### 连接池
- LLM API: 100最大连接20/host
- 其他API: 50最大连接10/host
### 超时配置
- 读取请求: 30秒
- 写入响应: 300秒流式响应
- LLM请求: 120秒
- 其他API: 10-60秒
## Docker部署
### 使用docker-compose推荐
```bash
docker-compose up -d
```
### 手动构建
```bash
docker build -t qd-sc-server .
docker run -d -p 8080:8080 \
-e LLM_API_KEY="sk-xxx" \
-e LLM_BASE_URL="https://your-api.com/v1" \
-e AMAP_API_KEY="xxx" \
-e OCR_BASE_URL="https://your-ocr-api.example.com" \
--name qd-sc-server \
qd-sc-server
```
### 多架构镜像amd64/arm64
> 说明:仓库内 `Dockerfile` 已支持 buildx 的 `TARGETARCH/TARGETOS`,可直接构建 `linux/amd64` + `linux/arm64` 的同 tag 多架构镜像manifest
```bash
# 一次推送多架构(推荐)
docker buildx build --platform linux/amd64,linux/arm64 -t t0ng7u/qd-sc:latest --push .
# 或仅推送 arm64可选
docker buildx build --platform linux/arm64 -t t0ng7u/qd-sc:arm64 --push .
```
### 查看日志
```bash
docker logs -f qd-sc-server
```