eduwin AI 大模型 API

头文件:eduwin_ai.h(或通过 eduwin.h 统一引用)

基于 WinHTTP 调用大语言模型 API,提供同步、异步、窗口异步三种调用方式。依赖 eduwin_net 的 HTTP 能力。线程安全——异步接口内部使用 eduwin_threadthread_run 管理线程。

初始化

void ai_setup(const char *api_key, const char *model, const char *base_url);

配置 API Key、模型名、Base URL。必须先调 net_init()

net_init();
ai_setup("sk-xxx", "deepseek-chat", "https://api.deepseek.com/v1");

同步调用

char* ai_chat(const char *prompt);
void  ai_free(char *ptr);

发送 prompt,阻塞等待完整回复。返回的字符串需用 ai_free 释放。

char *reply = ai_chat("用 C 语言实现冒泡排序");
if (reply) {
    printf("%s", reply);
    ai_free(reply);
}

注意: 同步调用会阻塞当前线程。GUI 程序请用异步或窗口异步接口。

异步调用

typedef void (*ai_callback_t)(const char *reply, void *userdata);

void ai_chat_async(const char *prompt, ai_callback_t callback, void *userdata);

不阻塞调用线程,请求完成后通过回调返回结果。userdata 在回调中原样传回。

void on_reply(const char *reply, void *userdata) {
    if (reply) set_text(g_label, L"AI 回复已收到");
    ai_free((void*)reply);
}
ai_chat_async("你好", on_reply, NULL);

窗口异步调用

void ai_chat_async_to_hwnd(HWND hwnd, const char *prompt, void *userdata);
int  ai_handle_async_msg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
                                void (*on_result)(const char *reply, void *userdata));

请求完成后通过 PostMessage 通知指定窗口,在窗口过程中用 ai_handle_async_msg 处理。

// 窗口过程中
LRESULT CALLBACK WndProc(HWND h, UINT m, WPARAM w, LPARAM l) {
    if (ai_handle_async_msg(h, m, w, l, on_result))
        return 0;
}

// 任意位置发起请求
ai_chat_async_to_hwnd(g_win, "写一首诗", NULL);

完整示例

参见 samples/ai_chat_demo/

模型兼容性

eduwin_ai 使用 OpenAI 兼容 API 格式(Chat Completion),支持:

  • DeepSeek (api.deepseek.com)
  • 智谱 GLM (open.bigmodel.cn)
  • 阿里通义千问 (dashscope.aliyuncs.com/compatible-mode)
  • 任何提供 /v1/chat/completions 端点的服务

编译要求

eduwin_net 相同,需要在 link 命令中添加:

ws2_32.lib winhttp.lib