1.准备好url的字符串(以deepseek为例)和api key(发送的字符串前面需要”Bearer “以告诉服务器后面是key
var _url="https://api.deepseek.com/chat/completions" var _api_key="sk-1234567" var _api_key_bearer="Bearer "+_api_key
2. 创建请求头,主意Gamemaker里使用map要即时销毁(可能不销毁也没事,我没压力测试过)
var _headers = ds_map_create(); ds_map_add(_headers, "Content-Type", "application/json"); ds_map_add(_headers, "Authorization",_api_key_bearer);
3.建立信息,是一个装了json的数组
var _messages = [
{ "role": "system", "content": _system_prompt },
{ "role": "user", "content": _message}
];_system_prompt是类似”你是一个XXX,请怎么怎么样“之类的系统提示词
_message是你发的内容
4.打包
var _payload = {
"model": "deepseek-chat",
"messages": _messages,
};
var _json_body = json_stringify(_payload);将信息打包成一个json,这里可以加入"max_completion_tokens": 1234等其他信息
5.发送
http_request(_url, "POST", _headers, _json_body);http_request()会返回一个id,可以将这个_request_id记下来,即_request_id=http_request(……)以便后续操作
然后销毁map
6.Async-HTTP
Gamemaker接收信息在异步-HTTP事件中,该事件会在http请求得到响应时触发。若有多个并行http请求则各自触发互不干扰(希望如此,我也不太清楚)
var _id = ds_map_find_value(async_load, "id");
async_load记录了触发该事件的请求的信息,可以读取其id判断这个返回值如何使用
7.读取http状态码
var _status = ds_map_find_value(async_load, "http_status");
200是成功,400是请求写错了(json格式问题或者关键字写错了),401是验证失败(key失效或者写错了),404找不到请求的资源(可能是url或者model名字写错了),5xx是服务器的问题。可以用show_debug_message来显示状态码
8.读取信息,可以加个状态码200的判断
var _result_string = ds_map_find_value(async_load, "result"); var _response_struct = json_parse(_result_string); _response=_response_struct.choices[0].message.content;
根据api不同,内容在返回的json文件中的位置也不同,Deepseek和OpenAI是json.choices[0].message.content,Anthropic则是json.content[0].text,总之将返回的result读取字符串,分析为json,然后找到信息
这个_response就可以拿来用了
9.要求以json回复
现在的主流模型都很智能了,你让他们以json回复基本都行,不过可能有错所以还是要加个判断
此时_response是个json(的字符串),将其_response=json_parse(_response)后变成一个struct。再通过_response.question之类的分别读取信息,可以用于进行一些数据处理之类的
注意虽然现在的主流模型都能做这种事,该出错还是要出错的,注意try catch
第二天学到的新知识,可以通过在payload里加入
"response_format": { "type": "json_object" }
来强制要求输出json
注意这样的话需要在prompt里包含json字段,否则会400 bad request,这是个api额外进行的合法性检查


茶佬的游戏还在做吗?
@像素罐头FF1:算是在做但感觉做不完