c++的实现也差不多的, 就是简化了发送http的请求的过程.
用ai写的:
- #include <iostream>
- #include <vector>
- #include <string>
- #include <json/json.h> // 需要一个JSON库
- #include <thread>
- #include <chrono>
- #include <functional>
-
- class ChatAI {
- private:
- std::string api_key;
- std::string base_url;
- std::string model;
- int max_tokens;
- int history_limit;
- double temperature;
- std::vector<std::pair<std::string, std::string>> messages;
- std::vector<std::function<void()>> queue;
-
- public:
- ChatAI(const std::string& api_key, const std::string& base_url, const std::string& model)
- : api_key(api_key), base_url(base_url), model(model), max_tokens(2000), history_limit(0), temperature(0.5) {
- messages.push_back(std::make_pair("system", ""));
- }
-
- void setSystemMessage(const std::string& system_content) {
- messages[0].second = system_content;
- }
-
- void setTemperature(double temperature) {
- this->temperature = temperature;
- }
-
- void setHistoryLimit(int limit) {
- history_limit = limit;
- }
-
- void setMaxTokens(int tokens_count) {
- max_tokens = tokens_count;
- }
-
- void addMessage(const std::string& role, const std::string& content) {
- messages.push_back(std::make_pair(role, content));
- }
-
- std::vector<std::pair<std::string, std::string>> prepareMessages() {
- std::vector<std::pair<std::string, std::string>> preparedMessages;
- if (history_limit == 0 || history_limit + 1 >= messages.size()) {
- preparedMessages.push_back(messages[0]);
- } else {
- for (int i = messages.size() - history_limit - 1; i >= 0; --i) {
- preparedMessages.push_back(messages[i]);
- }
- }
- return preparedMessages;
- }
-
- // 省略了saveHistoryMessage和loadHistoryMessage函数,因为它们涉及到文件操作
-
- void processQueue() {
- if (!queue.empty()) {
- auto func = queue.front();
- queue.erase(queue.begin());
- func();
- }
- }
-
- void send(std::function<void()> callback) {
- queue.push_back(callback);
- }
-
- // 省略了HttpRequest和PrintError函数,因为它们需要网络和日志系统支持
- };
-
- int main() {
- // 示例使用
- ChatAI chatAI("your_api_key", "your_base_url", "your_model");
- chatAI.setSystemMessage("Initial system message");
- chatAI.addMessage("user", "Hello, AI!");
- chatAI.addMessage("assistant", "Hello, user! How can I assist you today?");
-
- // 模拟周期性处理队列
- std::thread queueThread([&chatAI]() {
- while (true) {
- chatAI.processQueue();
- std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟queueDelay
- }
- });
-
- // 这里可以添加更多的逻辑和测试代码
-
- queueThread.join();
- return 0;
- }
复制代码
c++你实现一下HttpRequest的处理就行了(可以直接复制az的相关处理), 基本上大差不差的
|