mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-29 17:55:24 +00:00

* feat: add customize toolkit (#3205) * chaoyang * fix-auth * add toolkit * add order * plugin usage * fix * delete console: * Fix: Fix fullscreen preview top positioning and improve Markdown rendering logic (#3247) * 完成任务:修复全屏预览顶部固定问题,优化 Markdown 渲染逻辑 * 有问题修改 * 问题再修改 * 修正问题 * fix: plugin standalone display issue (#3254) * 4.8.15 test (#3246) * o1 config * perf: system plugin code * 调整系统插件代码。增加html 渲染安全配置。 (#3258) * perf: base64 picker * perf: list app or dataset * perf: plugin config code * 小窗适配等问题 (#3257) * 小窗适配等问题 * git问题 * 小窗剩余问题 * feat: system plugin auth and lock version (#3265) * feat: system plugin auth and lock version * update comment * 4.8.15 test (#3267) * tmp log * perf: login direct * perf: iframe html code * remove log * fix: plugin standalone display (#3277) * refactor: 页面拆分&i18n拆分 (#3281) * refactor: account组件拆成独立页面 * script: 新增i18n json文件创建脚本 * refactor: 页面i18n拆分 * i18n: add en&hant * 4.8.15 test (#3285) * tmp log * remove log * fix: watch avatar refresh * perf: i18n code * fix(plugin): use intro instead of userguide (#3290) * Universal SSO (#3292) * tmp log * remove log * feat: common oauth * readme * perf: sso provider * remove sso code * perf: refresh plugins * feat: add api dataset (#3272) * add api-dataset * fix api-dataset * fix api dataset * fix ts * perf: create collection code (#3301) * tmp log * remove log * perf: i18n change * update version doc * feat: question guide from chatId * perf: create collection code * fix: request api * fix: request api * fix: tts auth and response type (#3303) * perf: md splitter * fix: tts auth and response type * fix: api file dataset (#3307) * perf: api dataset init (#3310) * perf: collection schema * perf: api dataset init * refactor: 团队管理独立页面 (#3302) * ui: 团队管理独立页面 * 代码优化 * fix * perf: sync collection and ui check (#3314) * perf: sync collection * remove script * perf: update api server * perf: api dataset parent * perf: team ui * perf: team 18n * update team ui * perf: ui check * perf: i18n * fix: debug variables & cronjob & system plugin callback load (#3315) * fix: debug variables & cronjob & system plugin callback load * fix type * fix * fix * fix: plugin dataset quote;perf: system variables init (#3316) * fix: plugin dataset quote * perf: system variables init * perf: node templates ui;fix: dataset import ui (#3318) * fix: dataset import ui * perf: node templates ui * perf: ui refresh * feat:套餐改名和套餐跳转配置 (#3309) * fixing:except Sidebar * 去除了多余的代码 * 修正了套餐说明的代码 * 修正了误删除的show_git代码 * 修正了名字部分等代码 * 修正了问题,遗留了其他和ui讨论不一致的部分 * 4.8.15 test (#3319) * remove log * pref: bill ui * pref: bill ui * perf: log * html渲染文档 (#3270) * html渲染文档 * 文档有点小问题 * feat: doc (#3322) * 集合重训练 (#3282) * rebaser * 一点补充 * 小问题 * 其他问题修正,删除集合保留文件的参数还没找到... * reTraining * delete uesless * 删除了一行错误代码 * 集合重训练部分 * fixing * 删除console代码 * feat: navbar item config (#3326) * perf: custom navbar code;perf: retraining code;feat: api dataset and dataset api doc (#3329) * feat: api dataset and dataset api doc * perf: retraining code * perf: custom navbar code * fix: ts (#3330) * fix: ts * fix: ts * retraining ui * perf: api collection filter * perf: retrining button --------- Co-authored-by: heheer <heheer@sealos.io> Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com> Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
196 lines
5.2 KiB
TypeScript
196 lines
5.2 KiB
TypeScript
import { replaceVariable } from '@fastgpt/global/common/string/tools';
|
||
import { createChatCompletion } from '../config';
|
||
import { ChatItemType } from '@fastgpt/global/core/chat/type';
|
||
import { countGptMessagesTokens } from '../../../common/string/tiktoken/index';
|
||
import { chatValue2RuntimePrompt } from '@fastgpt/global/core/chat/adapt';
|
||
import { getLLMModel } from '../model';
|
||
import { llmCompletionsBodyFormat } from '../utils';
|
||
import { addLog } from '../../../common/system/log';
|
||
|
||
/*
|
||
query extension - 问题扩展
|
||
可以根据上下文,消除指代性问题以及扩展问题,利于检索。
|
||
*/
|
||
|
||
const title = global.feConfigs?.systemTitle || 'FastAI';
|
||
const defaultPrompt = `作为一个向量检索助手,你的任务是结合历史记录,从不同角度,为“原问题”生成个不同版本的“检索词”,从而提高向量检索的语义丰富度,提高向量检索的精度。
|
||
生成的问题要求指向对象清晰明确,并与“原问题语言相同”。
|
||
|
||
参考 <Example></Example> 标中的示例来完成任务。
|
||
|
||
<Example>
|
||
历史记录:
|
||
"""
|
||
"""
|
||
原问题: 介绍下剧情。
|
||
检索词: ["介绍下故事的背景。","故事的主题是什么?","介绍下故事的主要人物。"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 对话背景。
|
||
A: 当前对话是关于 Nginx 的介绍和使用等。
|
||
"""
|
||
原问题: 怎么下载
|
||
检索词: ["Nginx 如何下载?","下载 Nginx 需要什么条件?","有哪些渠道可以下载 Nginx?"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 对话背景。
|
||
A: 当前对话是关于 Nginx 的介绍和使用等。
|
||
Q: 报错 "no connection"
|
||
A: 报错"no connection"可能是因为……
|
||
"""
|
||
原问题: 怎么解决
|
||
检索词: ["Nginx报错"no connection"如何解决?","造成'no connection'报错的原因。","Nginx提示'no connection',要怎么办?"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 护产假多少天?
|
||
A: 护产假的天数根据员工所在的城市而定。请提供您所在的城市,以便我回答您的问题。
|
||
"""
|
||
原问题: 沈阳
|
||
检索词: ["沈阳的护产假多少天?","沈阳的护产假政策。","沈阳的护产假标准。"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 作者是谁?
|
||
A: ${title} 的作者是 labring。
|
||
"""
|
||
原问题: Tell me about him
|
||
检索词: ["Introduce labring, the author of ${title}." ," Background information on author labring." "," Why does labring do ${title}?"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 对话背景。
|
||
A: 关于 ${title} 的介绍和使用等问题。
|
||
"""
|
||
原问题: 你好。
|
||
检索词: ["你好"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: ${title} 如何收费?
|
||
A: ${title} 收费可以参考……
|
||
"""
|
||
原问题: 你知道 laf 么?
|
||
检索词: ["laf 的官网地址是多少?","laf 的使用教程。","laf 有什么特点和优势。"]
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: ${title} 的优势
|
||
A: 1. 开源
|
||
2. 简便
|
||
3. 扩展性强
|
||
"""
|
||
原问题: 介绍下第2点。
|
||
检索词: ["介绍下 ${title} 简便的优势", "从哪些方面,可以体现出 ${title} 的简便"]。
|
||
----------------
|
||
历史记录:
|
||
"""
|
||
Q: 什么是 ${title}?
|
||
A: ${title} 是一个 RAG 平台。
|
||
Q: 什么是 Laf?
|
||
A: Laf 是一个云函数开发平台。
|
||
"""
|
||
原问题: 它们有什么关系?
|
||
检索词: ["${title}和Laf有什么关系?","介绍下${title}","介绍下Laf"]
|
||
</Example>
|
||
|
||
-----
|
||
|
||
下面是正式的任务:
|
||
|
||
历史记录:
|
||
"""
|
||
{{histories}}
|
||
"""
|
||
原问题: {{query}}
|
||
检索词: `;
|
||
|
||
export const queryExtension = async ({
|
||
chatBg,
|
||
query,
|
||
histories = [],
|
||
model
|
||
}: {
|
||
chatBg?: string;
|
||
query: string;
|
||
histories: ChatItemType[];
|
||
model: string;
|
||
}): Promise<{
|
||
rawQuery: string;
|
||
extensionQueries: string[];
|
||
model: string;
|
||
tokens: number;
|
||
}> => {
|
||
const systemFewShot = chatBg
|
||
? `Q: 对话背景。
|
||
A: ${chatBg}
|
||
`
|
||
: '';
|
||
const historyFewShot = histories
|
||
.map((item) => {
|
||
const role = item.obj === 'Human' ? 'Q' : 'A';
|
||
return `${role}: ${chatValue2RuntimePrompt(item.value).text}`;
|
||
})
|
||
.join('\n');
|
||
const concatFewShot = `${systemFewShot}${historyFewShot}`.trim();
|
||
|
||
const modelData = getLLMModel(model);
|
||
|
||
const messages = [
|
||
{
|
||
role: 'user',
|
||
content: replaceVariable(defaultPrompt, {
|
||
query: `${query}`,
|
||
histories: concatFewShot
|
||
})
|
||
}
|
||
] as any;
|
||
|
||
const { response: result } = await createChatCompletion({
|
||
body: llmCompletionsBodyFormat(
|
||
{
|
||
stream: false,
|
||
model: modelData.model,
|
||
temperature: 0.01,
|
||
messages
|
||
},
|
||
modelData
|
||
)
|
||
});
|
||
|
||
let answer = result.choices?.[0]?.message?.content || '';
|
||
if (!answer) {
|
||
return {
|
||
rawQuery: query,
|
||
extensionQueries: [],
|
||
model,
|
||
tokens: 0
|
||
};
|
||
}
|
||
|
||
// Intercept the content of [] and retain []
|
||
answer = answer.match(/\[.*?\]/)?.[0] || '';
|
||
answer = answer.replace(/\\"/g, '"');
|
||
|
||
try {
|
||
const queries = JSON.parse(answer) as string[];
|
||
|
||
return {
|
||
rawQuery: query,
|
||
extensionQueries: Array.isArray(queries) ? queries : [],
|
||
model,
|
||
tokens: await countGptMessagesTokens(messages)
|
||
};
|
||
} catch (error) {
|
||
addLog.error(`Query extension error`, error);
|
||
return {
|
||
rawQuery: query,
|
||
extensionQueries: [],
|
||
model,
|
||
tokens: 0
|
||
};
|
||
}
|
||
};
|