使用C++控制台调用deepseekapi,实现流式输出且能够定义输出风格

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

如题,基于上一篇实现对deepseek的接口调用,这次搞一个高级版的,主要目标:
1、实现对话的流式输出(减少长文本输出的等待,增加交互感)
2、实现对AI的定制,比如要求AI实现定向的对话内容(下文以调教一个text-to-sql 工具为例)
3、实现对AI返回的代码进行识别和截取,以便于后续的动作
ok,废话不多说,先上代码
关于代码方面:主要用到deepseek和智谱AI来帮助完善(帮我写)

#include <iostream>
#include <json/json.h>
#include <curl/curl.h>
#include <vector>
#include <Windows.h>
#include <sstream>
#include <regex>
using namespace std;


// 流式输出专用变量
struct StreamContext {
    string buffer;          // 原始数据缓冲区
    string accumulated;     // 累积的完整内容
    string currentCode;     // 当前代码块内容
    vector<string> codes;   // 所有提取的代码块
    bool inCodeBlock = false; // 代码块状态标记
};

// 回调函数处理流式数据
static size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {
    StreamContext* ctx = static_cast<StreamContext*>(userdata);
    size_t realSize = size * nmemb;

    // 累积原始数据
    ctx->buffer.append(ptr, realSize);

    // 处理完整事件(SSE格式以\n\n结尾)
    while (true) {
        size_t pos = ctx->buffer.find("\n\n");
        if (pos == string::npos) break;

        string event = ctx->buffer.substr(0, pos);
        ctx->buffer.erase(0, pos + 2);

        // 处理有效数据(跳过心跳包等)
        if (event.find("data:") == 0) {
            string jsonStr = event.substr(5); // 去掉"data: "
            if (jsonStr == "[DONE

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值