Skip to content

Commit 86484a3

Browse files
committed
added:think model support for ai module
1 parent 91c4b0c commit 86484a3

File tree

4 files changed

+79
-15
lines changed

4 files changed

+79
-15
lines changed

XEngine_Example/AIApi_APPExample/AIApi_APPExample.cpp

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,56 @@ using namespace std;
3333

3434
//Linux Macos::g++ -std=c++17 -Wall -g AIApi_APPExample.cpp -o AIApi_APPExample.exe -L ../../XEngine_Module/XEngine_AIApi -lXEngine_AIApi
3535

36-
void XCALLBACK XEngine_AIApi_CBRecv(XNETHANDLE xhToken, LPCXSTR lpszModelName, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam)
36+
void XCALLBACK XEngine_AIApi_CBRecv(XNETHANDLE xhToken, LPCXSTR lpszModelName, LPCXSTR lpszMsgBuffer, int nMsgLen, bool bThink, XPVOID lParam)
3737
{
38-
printf("%lld,Name:%s:%d=%s\n", xhToken, lpszModelName, nMsgLen, lpszMsgBuffer);
38+
if (bThink)
39+
{
40+
printf("think:%lld,Name:%s:%d=%s\n", xhToken, lpszModelName, nMsgLen, lpszMsgBuffer);
41+
}
42+
else
43+
{
44+
printf("chat:%lld,Name:%s:%d=%s\n", xhToken, lpszModelName, nMsgLen, lpszMsgBuffer);
45+
}
3946
}
40-
int main()
47+
48+
int Test_Think()
4149
{
4250
XNETHANDLE xhToken = 0;
4351

44-
LPCXSTR lpszAPIUrl = _X("https://api.zhizengzeng.com/v1/chat/completions");
45-
LPCXSTR lpszAPIKey = _X("sk-zk2e0065dd7c8411828ce612337c2f9d1086841436f63c48");
46-
LPCXSTR lpszAPIModel = _X("gpt-4o");
52+
LPCXSTR lpszAPIUrl = _X("https://ark.cn-beijing.volces.com/api/v3/chat/completions");
53+
LPCXSTR lpszAPIKey = _X("1");
54+
LPCXSTR lpszAPIModel = _X("doubao-seed-1-6-thinking-250615");
55+
56+
if (!AIApi_Chat_Create(&xhToken, lpszAPIUrl, lpszAPIKey, XEngine_AIApi_CBRecv))
57+
{
58+
printf("AIApi_Chat_Create:%lX\n", AIApi_GetLastError());
59+
return 0;
60+
}
61+
AIApi_Chat_SetRole(xhToken, _X("You are a helpful assistant."));
62+
LPCXSTR lpszMSGBuffer = _X("李白是谁?");
63+
int nMSGLen = strlen(lpszMSGBuffer);
64+
if (!AIApi_Chat_Excute(xhToken, lpszAPIModel, lpszMSGBuffer, nMSGLen, true))
65+
{
66+
printf("AIApi_Chat_Excute:%lX\n", AIApi_GetLastError());
67+
return 0;
68+
}
69+
bool bCompleted = false;
70+
AIApi_Chat_GetStatus(xhToken, &bCompleted);
71+
AIApi_Chat_Destory(xhToken);
72+
return 1;
73+
}
74+
int Test_Chat()
75+
{
76+
XNETHANDLE xhToken = 0;
77+
78+
//LPCXSTR lpszAPIUrl = _X("https://api.zhizengzeng.com/v1/chat/completions");
79+
//LPCXSTR lpszAPIKey = _X("sk-1");
80+
//LPCXSTR lpszAPIModel = _X("gpt-4o");
81+
82+
LPCXSTR lpszAPIUrl = _X("https://api.hunyuan.cloud.tencent.com/v1/chat/completions");
83+
LPCXSTR lpszAPIKey = _X("sk-1");
84+
LPCXSTR lpszAPIModel = _X("hunyuan-turbos-latest");
4785

48-
//LPCXSTR lpszAPIUrl = _X("https://api.hunyuan.cloud.tencent.com/v1/chat/completions");
49-
//LPCXSTR lpszAPIKey = _X("sk-dXVprOeQSWrodQcTYuHoGytHaifId7QlwaBebeWxfyPUipFk");
50-
//LPCXSTR lpszAPIModel = _X("hunyuan-turbos-latest");
51-
5286
if (!AIApi_Chat_Create(&xhToken, lpszAPIUrl, lpszAPIKey, XEngine_AIApi_CBRecv))
5387
{
5488
printf("AIApi_Chat_Create:%lX\n", AIApi_GetLastError());
@@ -86,4 +120,10 @@ int main()
86120
AIApi_Chat_GetStatus(xhToken, &bCompleted);
87121
AIApi_Chat_Destory(xhToken);
88122
return 1;
123+
}
124+
int main()
125+
{
126+
Test_Think();
127+
Test_Chat();
128+
return 0;
89129
}

XEngine_Module/XEngine_AIApi/AIApi_Chat/AIApi_Chat.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -438,23 +438,35 @@ bool CAIApi_Chat::AIApi_Chat_Parse(AICLIENT_CHAT* pSt_AIClient, LPCXSTR lpszMSGB
438438
{
439439
_xstrcpy(st_AIHistory.tszRoleName, st_JsonMessage["role"].asCString(), sizeof(st_AIHistory.tszRoleName));
440440
}
441-
int nGBKLen = st_JsonMessage["content"].asString().length();
442-
_xstrcpy(st_AIHistory.tszRoleContent, st_JsonMessage["content"].asString().c_str(), sizeof(st_AIHistory.tszRoleContent));
441+
int nGBKLen = 0;
442+
443+
if (st_JsonMessage["reasoning_content"].isNull())
444+
{
445+
//为空,表示对话
446+
nGBKLen = st_JsonMessage["content"].asString().length();
447+
_xstrcpy(st_AIHistory.tszRoleContent, st_JsonMessage["content"].asString().c_str(), sizeof(st_AIHistory.tszRoleContent));
448+
}
449+
else
450+
{
451+
//不为空,表示思考模型
452+
nGBKLen = st_JsonMessage["reasoning_content"].asString().length();
453+
_xstrcpy(st_AIHistory.tszThinkContent, st_JsonMessage["reasoning_content"].asString().c_str(), sizeof(st_AIHistory.tszThinkContent));
454+
}
443455
//某些回复没有内容
444456
if (_tcsxlen(st_AIHistory.tszRoleContent) > 0)
445457
{
446458
#ifdef _MSC_BUILD
447459
XCHAR tszGBKBuffer[8192] = {};
448460
BaseLib_Charset_UTFToAnsi(st_JsonMessage["content"].asString().c_str(), tszGBKBuffer, &nGBKLen);
449-
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), tszGBKBuffer, nGBKLen, pSt_AIClient->lParam);
461+
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), tszGBKBuffer, nGBKLen, false, pSt_AIClient->lParam);
450462
if (bSSEReply)
451463
{
452464
//流式数据需要单独处理保存
453465
memcpy(pSt_AIClient->st_HisStream.tszRoleContent + pSt_AIClient->st_HisStream.nCLen, tszGBKBuffer, nGBKLen);
454466
pSt_AIClient->st_HisStream.nCLen += nGBKLen;
455467
}
456468
#else
457-
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), st_JsonMessage["content"].asString().c_str(), st_JsonMessage["content"].asString().length(), pSt_AIClient->lParam);
469+
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), st_JsonMessage["content"].asString().c_str(), st_JsonMessage["content"].asString().length(), false, pSt_AIClient->lParam);
458470
if (bSSEReply)
459471
{
460472
memcpy(pSt_AIClient->st_HisStream.tszRoleContent + pSt_AIClient->st_HisStream.nCLen, st_JsonMessage["content"].asString().c_str(), st_JsonMessage["content"].asString().length());
@@ -466,6 +478,17 @@ bool CAIApi_Chat::AIApi_Chat_Parse(AICLIENT_CHAT* pSt_AIClient, LPCXSTR lpszMSGB
466478
pSt_AIClient->pStl_ListHistory->push_back(st_AIHistory);
467479
}
468480
}
481+
//思考对话
482+
if (_tcsxlen(st_AIHistory.tszThinkContent) > 0)
483+
{
484+
#ifdef _MSC_BUILD
485+
XCHAR tszGBKBuffer[8192] = {};
486+
BaseLib_Charset_UTFToAnsi(st_JsonMessage["reasoning_content"].asString().c_str(), tszGBKBuffer, &nGBKLen);
487+
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), tszGBKBuffer, nGBKLen, true, pSt_AIClient->lParam);
488+
#else
489+
pSt_AIClient->lpCall_Chat(pSt_AIClient->xhToken, st_JsonRoot["model"].asCString(), st_JsonMessage["content"].asString().c_str(), st_JsonMessage["content"].asString().length(), true, pSt_AIClient->lParam);
490+
#endif
491+
}
469492
}
470493

471494
return true;

XEngine_Module/XEngine_AIApi/AIApi_Chat/AIApi_Chat.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
typedef struct
1414
{
1515
int nCLen;
16+
XCHAR tszThinkContent[8192];
1617
XCHAR tszRoleContent[8192];
1718
XCHAR tszRoleName[128];
1819
}AICLIENT_HISTORY;

XEngine_Module/XEngine_AIApi/AIApi_Define.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//////////////////////////////////////////////////////////////////////////
1414
// 导出的回调函数
1515
//////////////////////////////////////////////////////////////////////////
16-
typedef void(XCALLBACK* CALLBACK_XENGINE_MODULE_AIAPI_CHAT)(XNETHANDLE xhToken, LPCXSTR lpszModelName, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam);
16+
typedef void(XCALLBACK* CALLBACK_XENGINE_MODULE_AIAPI_CHAT)(XNETHANDLE xhToken, LPCXSTR lpszModelName, LPCXSTR lpszMsgBuffer, int nMsgLen, bool bThink, XPVOID lParam);
1717
//////////////////////////////////////////////////////////////////////////
1818
// 导出函数
1919
//////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)