Skip to content

Commit

Permalink
🎨 refactor: refactor chain
Browse files Browse the repository at this point in the history
  • Loading branch information
arvinxx committed Oct 18, 2023
1 parent c45526a commit 49c4863
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 129 deletions.
77 changes: 0 additions & 77 deletions src/chains/chat.ts

This file was deleted.

31 changes: 31 additions & 0 deletions src/chains/langDetect.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { OpenAIChatStreamPayload } from '@/types/openai/chat';

export const chainLangDetect = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content:
'你是一名精通全世界语言的语言专家,你需要识别用户输入的内容,以国际标准 locale 进行输出',
role: 'system',
},
{
content: '{你好}',
role: 'user',
},
{
content: 'zh-CN',
role: 'assistant',
},
{
content: '{hello}',
role: 'user',
},
{
content: 'en-US',
role: 'assistant',
},
{
content: `{${content}}`,
role: 'user',
},
],
});
34 changes: 34 additions & 0 deletions src/chains/pickEmoji.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { OpenAIChatStreamPayload } from '@/types/openai/chat';

/**
* pick emoji for user prompt
* @param content
*/
export const chainPickEmoji = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content: '你是一名非常懂设计与时尚的设计师,你需要从用户的描述中匹配一个合适的 emoji。',
role: 'system',
},
{
content: `输入:你是一名精通体验设计的设计系统设计师,设计系统存在诸多类别的 token,比如品牌色、成功色等,你需要为各个类别的 token 提供说明文案。`,
role: 'user',
},
{
content: `💅`,
role: 'assistant',
},
{
content: `输入:用户会输入一串 ts 代码,为了确保所有功能和分支的 100% 的覆盖率,你需要给出需要考虑哪些数据场景。`,
role: 'user',
},
{
content: `🧪`,
role: 'assistant',
},
{
content: `输入:${content}`,
role: 'user',
},
],
});
51 changes: 5 additions & 46 deletions src/chains/agent.ts → src/chains/summaryAgentName.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { OpenAIChatStreamPayload } from '@/types/openai/chat';

// 自动起名
export const promptSummaryAgentName = (content: string): Partial<OpenAIChatStreamPayload> => ({
/**
* summary agent name for user prompt
* @param content
*/
export const chainSummaryAgentName = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content: `你是一名擅长起名的起名大师,你需要将用户的描述总结为 20 个字以内的角色,格式要求如下:
Expand Down Expand Up @@ -30,47 +33,3 @@ export const promptSummaryAgentName = (content: string): Partial<OpenAIChatStrea
{ content: `输入: {${content}}`, role: 'user' },
],
});

// 自动挑选 emoji 和背景色
export const promptPickEmoji = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content: '你是一名非常懂设计与时尚的设计师,你需要从用户的描述中匹配一个合适的 emoji。',
role: 'system',
},
{
content: `输入:你是一名精通体验设计的设计系统设计师,设计系统存在诸多类别的 token,比如品牌色、成功色等,你需要为各个类别的 token 提供说明文案。`,
role: 'user',
},
{
content: `💅`,
role: 'assistant',
},
{
content: `输入:用户会输入一串 ts 代码,为了确保所有功能和分支的 100% 的覆盖率,你需要给出需要考虑哪些数据场景。`,
role: 'user',
},
{
content: `🧪`,
role: 'assistant',
},
{
content: `输入:${content}`,
role: 'user',
},
],
});

export const promptSummaryDescription = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content:
'你是一名擅长会话的助理,你需要将用户的输入的内容总结为一个专家的简介,不超过 20 个字',
role: 'system',
},
{
content: `${content}`,
role: 'user',
},
],
});
15 changes: 15 additions & 0 deletions src/chains/summaryDescription.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { OpenAIChatStreamPayload } from '@/types/openai/chat';

export const chainSummaryDescription = (content: string): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content:
'你是一名擅长会话的助理,你需要将用户的输入的内容总结为一个专家的简介,不超过 20 个字',
role: 'system',
},
{
content: `${content}`,
role: 'user',
},
],
});
32 changes: 32 additions & 0 deletions src/chains/summaryTitle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { chatHelpers } from '@/store/session/slices/chat/helpers';
import { LanguageModel } from '@/types/llm';
import { OpenAIChatMessage, OpenAIChatStreamPayload } from '@/types/openai/chat';

export const chainSummaryTitle = async (
messages: OpenAIChatMessage[],
): Promise<Partial<OpenAIChatStreamPayload>> => {
const finalMessages: OpenAIChatMessage[] = [
{
content:
'你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,不需要包含标点符号',
role: 'system',
},
{
content: `${messages.map((message) => `${message.role}: ${message.content}`).join('\n')}
请总结上述对话为10个字以内的标题,不需要包含标点符号`,
role: 'user',
},
];
// 如果超过 4k,则使用 GPT3.5 16K 模型
const tokens = await chatHelpers.getMessagesTokenCount(finalMessages);
let model: LanguageModel | undefined = undefined;
if (tokens > 4000) {
model = LanguageModel.GPT3_5_16K;
}

return {
messages: finalMessages,
model,
};
};
17 changes: 17 additions & 0 deletions src/chains/translate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { OpenAIChatStreamPayload } from '@/types/openai/chat';

export const chainTranslate = (
content: string,
targetLang: string,
): Partial<OpenAIChatStreamPayload> => ({
messages: [
{
content: '你是一名擅长翻译的助理,你需要将输入的语言翻译为目标语言',
role: 'system',
},
{
content: `请将以下内容 ${content},翻译为 ${targetLang} `,
role: 'user',
},
],
});
10 changes: 6 additions & 4 deletions src/features/AgentSetting/store/action.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { StateCreator } from 'zustand/vanilla';

import { promptPickEmoji, promptSummaryAgentName, promptSummaryDescription } from '@/chains/agent';
import { chainPickEmoji } from '@/chains/pickEmoji';
import { chainSummaryAgentName } from '@/chains/summaryAgentName';
import { chainSummaryDescription } from '@/chains/summaryDescription';
import { MetaData } from '@/types/meta';
import { LobeAgentConfig } from '@/types/session';
import { fetchPresetTaskResult } from '@/utils/fetch';
Expand Down Expand Up @@ -73,7 +75,7 @@ export const store: StateCreator<Store, [['zustand/devtools', never]]> = (set, g
onLoadingChange: (loading) => {
get().updateLoadingState('avatar', loading);
},
params: promptPickEmoji(systemRole),
params: chainPickEmoji(systemRole),
});

if (emoji) {
Expand All @@ -100,7 +102,7 @@ export const store: StateCreator<Store, [['zustand/devtools', never]]> = (set, g
updateLoadingState('description', loading);
},
onMessageHandle: streamUpdateMeta('description'),
params: promptSummaryDescription(systemRole),
params: chainSummaryDescription(systemRole),
});
},
autocompleteAgentTitle: async () => {
Expand All @@ -123,7 +125,7 @@ export const store: StateCreator<Store, [['zustand/devtools', never]]> = (set, g
updateLoadingState('title', loading);
},
onMessageHandle: streamUpdateMeta('title'),
params: promptSummaryAgentName(systemRole),
params: chainSummaryAgentName(systemRole),
});
},
autocompleteAllMeta: (replace) => {
Expand Down
2 changes: 1 addition & 1 deletion src/store/session/slices/chat/actions/topic.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { StateCreator } from 'zustand/vanilla';

import { chainSummaryTitle } from '@/chains/chat';
import { chainSummaryTitle } from '@/chains/summaryTitle';
import { LOADING_FLAT } from '@/const/message';
import { SessionStore } from '@/store/session';
import { fetchPresetTaskResult } from '@/utils/fetch';
Expand Down
3 changes: 2 additions & 1 deletion src/store/session/slices/chat/actions/translate.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { produce } from 'immer';
import { StateCreator } from 'zustand/vanilla';

import { chainLangDetect, chainTranslate } from '@/chains/chat';
import { chainLangDetect } from '@/chains/langDetect';
import { chainTranslate } from '@/chains/translate';
import { supportLocales } from '@/locales/options';
import { SessionStore } from '@/store/session';
import { fetchPresetTaskResult } from '@/utils/fetch';
Expand Down

0 comments on commit 49c4863

Please sign in to comment.