利用C++与Python调用千帆免费大模型,构建个性化AI对话系统

千帆大模型已于2024年4月25日正式免费,调用这个免费的模型以实现自己的AI对话功能,遵循以下步骤:

了解千帆大模型:

千帆大模型是百度智能云推出的一个平台,提供了一系列AI能力和工具,用于快速开发和应用AI技术。该平台提供了从数据管理、数据标注、模型开发、模型纳管到部署上线的全生命周期AI能力研发与应用管理服务。

注册与登录:

如果已经是开发者,可以直接登录百度智能云千帆大模型平台。如果没有账号,需要先进行注册,并按照提示完成账号的创建和登录。

数据准备:

在开始之前,需要准备用于训练和测试的数据。这些数据应该包含对话的输入和期望的输出。千帆大模型平台支持多种数据格式和导入方式,可以根据实际情况选择合适的方式进行数据导入。

数据标注:

对于导入的数据,需要进行标注,以便模型能够理解和学习对话的模式和规则。在千帆大模型平台上,可以使用平台提供的工具进行数据的标注工作。

模型训练:

在完成数据标注后,可以使用千帆大模型平台提供的工具进行模型的训练。训练过程中,可以根据需要调整模型的参数和配置,以获得更好的对话效果。

模型评估与优化:

训练完成后,可以对模型进行评估,查看其在测试数据上的表现。如果模型的表现不佳,可以根据评估结果进行模型的优化和调整。

部署与测试:

当模型训练和优化完成后,可以将其部署到千帆大模型平台上,并进行实际的测试。通过与模型进行对话,验证模型的性能和效果,并根据需要进行进一步的调整和优化。

集成与应用:

如果模型的表现符合预期,可以将其集成到自己的应用中,实现自己的AI对话功能。在集成过程中,需要注意与千帆大模型平台的接口和协议进行匹配和对接。需要注意的是,虽然千帆大模型已经免费,但在使用过程中可能会产生一些额外的费用,如数据存储、计算资源等。因此,在使用之前需要了解平台的收费标准和计费方式,以便做好预算和规划。

python实现与千帆大模型交互

import sys

sys.path.append(r'C:\Users\XXX\AppData\Local\Programs\Python\Python312-32\Lib\site-packages')

import requests

import json

def getcookies():  

  url = " https://aip.baidubce.com/oauth/2.0/token"  

  params = {  

      'grant_type': 'client_credentials',  

      'client_id':'4O0GgKpCfUT5mxZ4s3f',  # 替换为你的客户端ID  

      'client_secret': 'RKETeu3iLn4YbCclMUei21ZVVnD6Y' # 替换为你的客户端密钥  

    }  

  headers = {  

      'Content-Type': 'application/x-www-form-urlencoded',  

      'Accept': 'application/json'  

    }  

     

  response = requests.post(url, params=params, headers=headers)  

  if response.status_code == 200:  

      data = response.json()  

      if'access_token' in data:  

          print(data['access_token'])

          return data['access_token']  

      else:  

          print("服务器响应中未找到 access_token")  

          return None  

  else:  

      print(f"请求失败,状态码:{response.status_code}")  

      returnNone

   

def getvalue(content, token):  

  token = getcookies()        

#如果成功获取的token格式如下,一个月获取一次

 # token = "24.0a2e1101e19ebe5e500a0962b30468fb.2592000.1700073516.282335-70004478"

  url = " https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token=" + token

  #content为填充的润色语句,要求可以自行改进

  payload = json.dumps({

      "messages": [

            {    

              "content": "原文内容:{{" + content + "}}\

要求:\

1. 使用更专业与精准的词汇,提取关键内容,重构文本表达更加简洁、准确和有层次。\

2. 调整结构顺序,使文字更具吸引力、可读性和说服力,内容简短精炼,字数不超过原始内容的70%。\

3. 重构后的文本相较于原文有较大的提升和改良,无需展示修改过程。\

4. 直接按新序号展示最终修订后的内容,无需添加任何说明。",

"role": "user"

            }

        ]

    })

  headers = {

      'Content-Type': 'application/json'

    }

   

  response = requests.request("POST", url, headers=headers, data=payload)

   

  #print(response.text)

  return response.text

C++调用pyhton文件中的函数

头文件定义

#ifndef PYTHONCALLER_H

#define PYTHONCALLER_H

#include <Python.h>

#include <string>

class PythonCaller {

private:

  PyObject* pModule;

  PyObject* pGetvalueFunc;

  PyObject* pGetcookiesFunc;

public:

  PythonCaller();

  ~PythonCaller();

  bool Initialize(std::string path, std::string name);

  void Finalize();

  std::string CallGetValue(const std::string& url, const std::string& cookies);

  std::string CallGetCookies();

};

#endif  // PYTHONCALLER_H

#else

#endif

源文件定义

#include "PythonCaller.h"

PythonCaller::PythonCaller() : pModule(nullptr) {}

PythonCaller::~PythonCaller() {

  Finalize();

}

bool PythonCaller::Initialize(std::string path, std::string name) {

  Py_Initialize();

  PyRun_SimpleString("import sys");

  PyRun_SimpleString(("sys.path.append('" + path + "')").c_str());

  PyObject* pName = PyUnicode_DecodeFSDefault(name.c_str());

  pModule = PyImport_Import(pName);

  Py_DECREF(pName);

  if (pModule == nullptr) {

      return0;

    }

  pGetvalueFunc = PyObject_GetAttrString(pModule,"getvalue");

  if (!pGetvalueFunc || !PyCallable_Check(pGetvalueFunc)) {

      Py_XDECREF(pGetvalueFunc);

      return0;

    }

  pGetcookiesFunc = PyObject_GetAttrString(pModule,"getcookies");

  if (!pGetcookiesFunc || !PyCallable_Check(pGetcookiesFunc)) {

      Py_XDECREF(pGetcookiesFunc);

      return0;

    }

  return 1;

}

void PythonCaller::Finalize() {

  if (pModule != nullptr) {

      Py_DECREF(pModule);

      pModule = nullptr;  //将 pModule 置为 nullptr

    }

  if (pGetvalueFunc != nullptr) {

      Py_DECREF(pGetvalueFunc);

      pGetvalueFunc = nullptr;  //将 pModule 置为 nullptr

    }

  if (pGetcookiesFunc != nullptr) {

      Py_DECREF(pGetcookiesFunc);

      pGetcookiesFunc = nullptr;  //将 pModule 置为 nullptr

    }

  Py_Finalize();

}

std::string PythonCaller::CallGetValue(const std::string& url, const std::string& cookies) {

  if (!pGetvalueFunc || !PyCallable_Check(pGetvalueFunc)) {

      Py_XDECREF(pGetvalueFunc);

      return"";

    }

   

  PyObject* pArgs = PyTuple_New(2);

  PyTuple_SetItem(pArgs, 0, PyUnicode_FromString(url.c_str()));

  PyTuple_SetItem(pArgs, 1, PyUnicode_FromString(cookies.c_str()));// 设置第二个参数为字符串

  PyObject* pValue = PyObject_CallObject(pGetvalueFunc, pArgs);

  Py_DECREF(pArgs);

  if (pValue == nullptr) {

      PyErr_Print();

      return"Error: Call to 'getvalue' failed";

    }

  std::string result;

  if (pValue == Py_None) {

      result = "Result of call: None";

    }

  else {

      PyObject* pStr = PyObject_Str(pValue);

      if (pStr != nullptr) {

          const char* utf8_str = PyUnicode_AsUTF8(pStr);

          result = std::string(utf8_str);

          Py_DECREF(pStr);

        }

      else {

          result = "Error: Unable to convert result to string";

        }

    }

  Py_DECREF(pValue);

  return result;

}

std::string PythonCaller::CallGetCookies() {

  if (!pGetcookiesFunc || !PyCallable_Check(pGetcookiesFunc)) {

      Py_XDECREF(pGetcookiesFunc);

      return"";

    }

  PyObject* pArgs = PyTuple_New(0);

  PyObject* pValue = PyObject_CallObject(pGetcookiesFunc, pArgs);

  Py_DECREF(pArgs);

  if (pValue == nullptr) {

      PyErr_Print();

      return"Error: Call to 'getvalue' failed";

    }

  std::string result;

  if (pValue == Py_None) {

      result = "Result of call: None";

    }

  else {

      PyObject* pStr = PyObject_Str(pValue);

      if (pStr != nullptr) {

          const char* utf8_str = PyUnicode_AsUTF8(pStr);

          result = std::string(utf8_str);

          Py_DECREF(pStr);

        }

      else {

          result = "Error: Unable to convert result to string";

        }

    }

  Py_DECREF(pValue);

  return result;

}

C++与python函数的交互过程

  if (mgIspythonCaller == 0) {

      mgIspythonCaller = mgpythonCaller.Initialize(mgSelfPath, "ai");

    }

   

  if (!mgIspythonCaller) {

      return1;

    }

  string str = mgpythonCaller.CallGetValue(content, "");

visualstudio中python环境设置

根据程序环境,选择对应版本的python安装

图片

图片

图片

下载源码地址:https://www.lanzoub.com/iAFK0203yd4h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Three.js 中的场景与相机基础

Three.js 中的场景与相机基础 一、场景&#xff08;Scene&#xff09; 在 Three.js 中&#xff0c;场景是所有 3D 对象存在和交互的容器。艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨&#xff1a;它就像是一个虚拟的 3D 空间&#xff0c;我们可以在其中…

docker安装nacos单机部署

话不多说,直接进入主题 1.查看nacos镜像 docker search nacos 一般选第一个也就是starts最高的。 2.拉取nacos镜像 docker pull nacos/nacos-serverdocker pull nacos/nacos-server:1.4.1 由于我使用的项目alibabacloud版本对应的是nacos1.4.1版本的,所以我安装的是1.4.1…

Data Lakehouse:你的下一个数据仓库

作者&#xff1a;张友东 StarRocks TSC member/镜舟科技 CTO 数据分析是现代企业和组织决策过程中不可或缺的一部分&#xff0c;数据分析技术经过数十年的发展&#xff0c;需求场景从 BI 报表到数据探寻、实时预测、用户画像等不断丰富&#xff0c;技术架构经历从数据仓库、数据…

中学生学人工智能系列:如何用AI学英语

经常有读者朋友给公众号《人工智能怎么学》留言咨询如何使用人工智能学习语文、数学、英语等科目。这些都是中学教师、中学生朋友及其家长们普遍关注的问题。仅仅使用留言回复的方式&#xff0c;不可能对这些问题做出具体和透彻的解答&#xff0c;因此本公众号近期将推出中学生…

【Spring框架全系列】IOC DI案例,setter方法和构造方法注入(详解) + 思维导图

文章目录 一.概念实操Maven父子工程 二. IOC和DI入门案例【重点】1 IOC入门案例【重点】问题导入1.1 门案例思路分析1.2 实现步骤2.1 DI入门案例思路分析2.2 实现步骤2.3 实现代码2.4 图解演示 三、Bean的基础配置问题导入问题导入1 Bean是如何创建的【理解】2 实例化Bean的三种…

一年收入大几十个的副业兼职,闲鱼新玩法,新手小白可做,无门槛

在开始分享之前&#xff0c;我想先了解一下&#xff0c;大家是否曾在各大公众号上参与过各种打卡活动&#xff1f;比如减肥打卡、英语阅读打卡、考研考公打卡等等。如今&#xff0c;打卡已经成为现代人生活中不可或缺的一部分。无论是学习、健身还是工作&#xff0c;打卡都能有…

生成模型 | 从 VAE 到 Diffusion Model (下)

&#x1f427;大模型系列篇章 &#x1f496; 多模态大模型 &#x1f50e; GroundingDINO 论文总结 &#x1f496; 端到端目标检测 &#x1f50e; 从DETR 到 GroundingDINO &#x1f496; 多模态大模型 &#x1f449; CLIP论文总结 &#x1f496; 多模态大模型 &#x1f449; E…

【C语言】strstr函数的使用和模拟

前言 今天给大家带来一个字符串函数&#xff0c;strstr()的使用介绍和模拟实现。 模拟实现这个函数&#xff0c;可以帮助我们更深刻地理解这个函数的功能和提高解决字符串相关问题的能力&#xff0c;有兴趣的话就请往下看吧。 strstr函数介绍 函数功能&#xff1a; strstr函…

STL:string

文章目录 标准库中的string类string的构造string的赋值重载string的容量size(length)max_sizeresizereservecapacityclearemptyshink_to_fit string的元素访问operator[] 和 atfront 和 back string的迭代器 和 范围forstring的修改operatorappendpush_backassigninserterasere…

Spring OAuth2:开发者的安全盾牌!(上)

何利用Spring OAuth2构建坚不可摧的安全体系&#xff1f;如何使用 OAuth2 从跨域挑战到性能优化&#xff0c;每一个环节都为你的应用保驾护航&#xff1f; 文章目录 Spring OAuth2 详解1. 引言简述OAuth2协议的重要性Spring Framework对OAuth2的支持概述 2. 背景介绍2.1 OAuth2…

上位机图像处理和嵌入式模块部署(f103 mcu中的串口接口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在mcu开发中&#xff0c;mcu扮演着非常重要的角色。一方面&#xff0c;串口可以帮助我们对固件功能进行调试&#xff0c;另外一方面&#xff0c;串…

微信图片识别文字怎么弄?介绍三个识别方法

微信图片识别文字怎么弄&#xff1f;在信息爆炸的时代&#xff0c;我们每天都会接触到大量的图片信息&#xff0c;其中包含的文字内容往往是我们获取信息的重要途径。然而&#xff0c;手动输入图片中的文字既费时又费力&#xff0c;这时&#xff0c;一款能够准确识别微信图片中…

2024受欢迎的便签app是哪个

在繁忙的工作和生活中&#xff0c;便签app成为了我们不可或缺的小助手。2024年&#xff0c;随着人们对高效工作和生活品质的追求&#xff0c;选择一款功能强大且用户友好的便签app显得尤为重要。在众多选择中&#xff0c;敬业签以其出色的记录与提醒功能&#xff0c;脱颖而出&a…

MQ第②讲~保证消息可靠性

前言 上一讲我们讲了MQ实际工作中常见的应用场景&#xff0c;这一节讲一下消息的可靠性&#xff0c;如果对MQ掌握程度比较高的铁子&#xff0c;可以不用看&#xff0c;节省您宝贵的时间。 消息的大致链路 消息从投递到消费需要考虑如下几个问题 生产者的消息是否成功投递到消…

隐藏在OceanBase ODC中的运维神器

近期OceanBase 的ODC 推出的新版 v4.2.4中&#xff0c;提供了内置运维代码&#xff0c;让我们一起来看看吧。 DBA 可能会喜欢的功能 查看集群可用的资源 统计数据库内表的数据大小 用 SQL 创建租户不再复杂 请注意&#xff0c;在修改租户名字时&#xff0c;unit config和reso…

2024 最新版 Navicat 17 下载与安装步骤及演示 (图文版)

Navicat 是一款专业的数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL、MariaDB、Redis、MongoDB 和 SQLite。Navicat17包含的版本如下Navicat Premium 17, Navicat 17 for MySQL, Navicat 17 for Oracle, Navicat 17 fo…

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释&#xff0c;这里就直接上代码啦&#xff0c;里面用到的bxm-ui3组件库是博主基于element-Plus做的&#xff0c;可以通过npm i bxm-ui3自行安装使用 // 识别方法&#xff1a; // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…

Java设计模式 _行为型模式_观察者模式

一、观察者模式 1、观察者模式 观察者模式 ( Observer Pattern )是一种行为型模式。 常用于对象间存在一对多关系时&#xff0c;比如&#xff0c;当一个对象被修改时&#xff0c;需要自动通知它的依赖对象。 2、实现思路 &#xff08;1&#xff09;、定义被观察者的行为&…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

c++(六)

c&#xff08;六&#xff09; 多态概念在c中是如何实现多态静态多态&#xff08;绑定&#xff09;动态多态&#xff08;绑定&#xff09; 动态多态的实现原理动态内存分配中遇到的问题 重载、重定义、重写的区别抽象类接口类---抽象类空类对象的内存大小explicitfinal修饰类修饰…