Skip to main content
Glama
glm-service.ts3.33 kB
import axios from 'axios'; import { config } from '../config/index'; import { GLMRequest, GLMResponse, GLMMessage } from '../types/index'; import { logger } from '../utils/logger'; export class GLMService { private headers = { 'Authorization': `Bearer ${config.zhipuAI.apiKey}`, 'Content-Type': 'application/json', }; async sendMessage(messages: GLMMessage[], options?: { temperature?: number; maxTokens?: number; }): Promise<GLMResponse> { try { const request: GLMRequest = { model: config.zhipuAI.model, messages, temperature: options?.temperature ?? config.modelDefaults.temperature, max_tokens: options?.maxTokens ?? config.modelDefaults.maxTokens, }; logger.info('发送请求到 GLM API', { model: request.model, messageCount: messages.length }); const response = await axios.post<GLMResponse>( `${config.zhipuAI.baseURL}/chat/completions`, request, { headers: this.headers } ); logger.info('GLM API 响应成功', { id: response.data.id, usage: response.data.usage, }); return response.data; } catch (error) { if (axios.isAxiosError(error)) { logger.error('GLM API 请求失败', { status: error.response?.status, data: error.response?.data, message: error.message, }); throw new Error(`GLM API 错误: ${error.response?.data?.error?.message || error.message}`); } logger.error('GLM 服务未知错误', error); throw error; } } async analyzeImage(imageBase64: string, prompt: string): Promise<string> { const messages: GLMMessage[] = [ { role: 'user', content: [ { type: 'text', text: prompt, }, { type: 'image_url', image_url: { url: `data:image/jpeg;base64,${imageBase64}`, }, }, ], }, ]; const response = await this.sendMessage(messages); return response.choices[0]?.message?.content as string || ''; } async analyzeCode(imageBase64: string, focusArea: 'code' | 'architecture' | 'error' | 'documentation' = 'code'): Promise<string> { let prompt = ''; switch (focusArea) { case 'code': prompt = `请描述这张图片的内容,包括: 1. 图片中显示了什么 2. 包含了哪些文字内容 3. 有什么视觉元素和布局 4. 整体的视觉效果 请提供客观的描述,不要进行代码分析。`; break; case 'architecture': prompt = `请描述这张图片的视觉结构和布局: 1. 图片的整体布局 2. 主要的视觉元素 3. 文字和图形的排列方式 4. 颜色和样式的特点`; break; case 'error': prompt = `请描述这张图片中可能需要注意的地方: 1. 图片的清晰度 2. 文字的可读性 3. 视觉上的问题点 4. 需要特别关注的地方`; break; case 'documentation': prompt = `请详细描述这张图片的内容: 1. 图片的主题和内容 2. 包含的所有文字信息 3. 视觉元素和布局 4. 整体的视觉印象`; break; } return await this.analyzeImage(imageBase64, prompt); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lengbone/mcp-vl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server