作者 202304001

增加重写功能提示词

export const maxWord = 5000;
export const minWord = 200;
export const rewriteItems = [
"全文润色",
"全文缩写",
"全文扩写",
"语气更专业",
"语气更口语化",
"语气更易读",
"语气更含蓄",
"语气更学术化",
"语气更有文采",
"语气更有网感",
];
export type writePromptParam = {
writingPurposeName: string;
writingStyleName: string;
writingLanguageName: string;
prompt: string;
writingTypeName: string;
isImgName: string;
writingCount: string;
fileData: string;
};
export interface WritePanelProps {
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
loading: boolean;
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
setWidth: React.Dispatch<React.SetStateAction<string>>;
setHtmlheader: React.Dispatch<React.SetStateAction<string>>;
}
export const rewriteItemsMap: Record<string, string> = {
全文润色: "请重新写,全文润色",
全文缩写: "请重新写,全文缩写",
全文扩写: "请重新写,全文扩写",
语气更专业: "请重新写,语气更专业",
语气更口语化: "请重新写,语气更口语化",
语气更易读: "请重新写,语气更易读",
语气更含蓄: "请重新写,语气更含蓄",
语气更学术化: "请重新写,语气更学术化",
语气更有文采: "请重新写,语气更有文采",
语气更有网感: "请重新写,语气更有网感",
};
export const mergedData = [
{
... ... @@ -84,6 +104,20 @@ export const mergedData = [
},
];
export function getNavgParam(writeMessage: string) {
const param: writePromptParam = {
writingPurposeName: mergedData[0].default,
writingStyleName: mergedData[2].default,
writingLanguageName: mergedData[3].default,
prompt: writeMessage,
writingTypeName: mergedData[4].default,
isImgName: mergedData[5].default,
writingCount: "200",
fileData: "",
};
return param;
}
// 20250408新增写作风格选项映射
export const getWritingStyleOptions = (purpose: string) => {
switch (purpose) {
... ... @@ -117,17 +151,3 @@ export const getWritingStyleOptions = (purpose: string) => {
];
}
};
export interface writeMessage {
role: string;
content: string;
}
export interface WritePanelProps {
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
loading: boolean;
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
setWidth: React.Dispatch<React.SetStateAction<string>>;
setHtmlheader: React.Dispatch<React.SetStateAction<string>>;
}
... ...
... ... @@ -6,7 +6,6 @@ import { IconButton } from "../button";
import { message as msgModal } from "antd";
import { useChatStore } from "@/app/store";
import { getWrtingPrompt } from "@/app/utils/prompt";
import type { writePromptParam } from "@/app/types/prompt";
import { processChatFile } from "@/app/utils/fileUtil";
import Locale from "@/app/locales";
import styles from "./wrtie-panel.module.scss";
... ... @@ -16,10 +15,11 @@ import {
maxWord,
mergedData,
minWord,
writeMessage,
WritePanelProps,
writePromptParam,
} from "./menuData";
import { writeModel } from "@/app/constant";
import { RequestMessage } from "@/app/typing";
export function WritingPanel(props: WritePanelProps) {
const {
... ... @@ -44,7 +44,7 @@ export function WritingPanel(props: WritePanelProps) {
const [fileData, setFileData] = useState("");
const [fileName, setFileName] = useState("");
const messages: writeMessage[] = [];
const messages: RequestMessage[] = [];
// 生成动态数据
const dynamicMergedData = mergedData.map((item) => {
... ...
... ... @@ -44,9 +44,9 @@ import { HTMLPreview } from "../artifacts";
import { getMindPrompt, getWrtingPrompt } from "@/app/utils/prompt";
import { htmlToPdf2 } from "@/app/utils/fileExport/toPdf";
import { hasTable, htmlToExcel } from "@/app/utils/fileExport/export2Excel";
import { writePromptParam } from "@/app/types/prompt";
import dynamic from "next/dynamic";
import { rewriteItems, mergedData } from "./menuData";
import { getNavgParam, rewriteItemsMap } from "./menuData";
import { RequestMessage } from "@/app/typing";
const EditorComponent = dynamic(
async () => (await import("./editor")).EditorComponent,
... ... @@ -75,73 +75,63 @@ export function WritingPage() {
const query = useLocation(); //获取路由参数
let { msg, writeMessage } = query.state || {}; //获取路由参数
const items: MenuProps["items"] = rewriteItems.map((item, index) => ({
key: (index + 1).toString(),
label: (
<a
target="_blank"
rel="noopener noreferrer"
href="#"
onClick={(e) => {
e.preventDefault(); // 阻止默认行为
rewrite(item); // 调用 rewrite 函数并传递菜单项文本
}}
>
{item}
</a>
),
}));
const items: MenuProps["items"] = Object.entries(rewriteItemsMap).map(
([key, value]) => ({
key,
label: (
<a
target="_blank"
rel="noopener noreferrer"
href="#"
onClick={(e) => {
e.preventDefault(); // 阻止默认行为
rewrite(value); // 调用 rewrite 函数并传递对应的值
}}
>
{key}
</a>
),
}),
);
useEffect(() => {
if (!msg) {
return;
}
if (!writeMessage) {
return;
const requestWrite = async (content: string, messages: RequestMessage[]) => {
try {
setLoading(true);
messages.push({ role: "user", content: content });
const response = await chatStore.sendContext(messages, writeModel);
messages.push({ role: "assistant", content: response });
let cleanedContent = response.startsWith("```html")
? response.substring(8)
: response;
if (cleanedContent.endsWith("```")) {
cleanedContent = cleanedContent.substring(0, cleanedContent.length - 4);
}
const bodyTagRegex = /<body[^>]*>/i;
const bodyTagMatch = cleanedContent.match(bodyTagRegex);
if (bodyTagMatch?.index !== undefined) {
setHtmlheader(
cleanedContent.slice(0, bodyTagMatch.index + bodyTagMatch[0].length),
);
}
localStorage.setItem("htmlCode", cleanedContent);
localStorage.setItem("aiWrite", JSON.stringify(messages));
setHtmlCode(cleanedContent);
} catch (error) {
msgModal.error("生成失败,请重试");
} finally {
setLoading(false);
}
};
useEffect(() => {
if (!msg) return;
if (!writeMessage) return;
const navigateGetData = async () => {
try {
const param: writePromptParam = {
writingPurposeName: mergedData[0].default,
writingStyleName: mergedData[2].default,
writingLanguageName: mergedData[3].default,
prompt: writeMessage,
writingTypeName: mergedData[4].default,
isImgName: mergedData[5].default,
writingCount: "200",
fileData: "",
};
const input = getWrtingPrompt(param);
setLoading(true);
console.log("------------------------" + input);
const response = await chatStore.directLlmInvoke(input, writeModel);
let cleanedContent = response.startsWith("```html")
? response.substring(8)
: response;
if (cleanedContent.endsWith("```")) {
cleanedContent = cleanedContent.substring(
0,
cleanedContent.length - 4,
);
}
//保存html头部
const bodyTagRegex = /<body[^>]*>/i;
const bodyTagMatch = cleanedContent.match(bodyTagRegex);
if (bodyTagMatch && bodyTagMatch.index !== undefined) {
// 截取从文档开头到 <body> 标签的起始位置
const contentUpToBody = cleanedContent.slice(
0,
bodyTagMatch.index + bodyTagMatch[0].length,
);
setHtmlheader(contentUpToBody); //保存html头部
}
localStorage.setItem("htmlCode", cleanedContent);
setHtmlCode(cleanedContent);
} catch (error) {
msgModal.error("生成失败,请重试");
} finally {
setLoading(false);
}
let messages = [];
const input = getWrtingPrompt(getNavgParam(writeMessage));
console.log("------------------------" + input);
requestWrite(input, []);
};
navigateGetData();
}, []);
... ... @@ -232,17 +222,15 @@ export function WritingPage() {
}
}, [wrapContentInDivWithWidth]);
async function rewrite(msg: string) {
async function rewrite(content: string) {
const messagesStr = localStorage.getItem("aiWrite");
if (!messagesStr) return;
let messages: any;
let messages: RequestMessage[];
try {
messages = JSON.parse(messagesStr);
} catch (error) {
return;
}
// 检查是否是数组且包含合法 message 对象
if (!Array.isArray(messages)) return;
if (
... ... @@ -257,34 +245,7 @@ export function WritingPage() {
)
)
return;
try {
setLoading(true);
messages.push({ role: "user", content: msg });
const response = await chatStore.sendContext(messages, writeModel);
messages.push({ role: "assistant", content: response });
let cleanedContent = response.startsWith("```html")
? response.substring(8)
: response;
if (cleanedContent.endsWith("```")) {
cleanedContent = cleanedContent.substring(0, cleanedContent.length - 4);
}
const bodyTagRegex = /<body[^>]*>/i;
const bodyTagMatch = cleanedContent.match(bodyTagRegex);
if (bodyTagMatch?.index !== undefined) {
setHtmlheader(
cleanedContent.slice(0, bodyTagMatch.index + bodyTagMatch[0].length),
);
}
localStorage.setItem("htmlCode", cleanedContent);
localStorage.setItem("aiWrite", JSON.stringify(messages));
setHtmlCode(cleanedContent);
} catch (error) {
msgModal.error("重写失败,请重试");
} finally {
setLoading(false);
}
requestWrite(content, messages);
}
useEffect(() => {
... ...
export type writePromptParam = {
writingPurposeName: string;
writingStyleName: string;
writingLanguageName: string;
prompt: string;
writingTypeName: string;
isImgName: string;
writingCount: string;
fileData: string;
};
... ... @@ -21,7 +21,8 @@ export function createDeepThink(content: string) {
lines[i].trim().startsWith("8") ||
lines[i].trim().startsWith("9") ||
lines[i].trim().startsWith("10") ||
lines[i].trim().startsWith("10")
lines[i].trim().startsWith("-") ||
lines[i].trim().startsWith("=")
) {
if (j !== 0 && lines[i].startsWith(">")) {
lines[i] = lines[i].substring(1);
... ...
import type { writePromptParam } from "@/app/types/prompt";
import { writePromptParam } from "../components/writing/menuData";
//生成文章提示词
export function getWrtingPrompt(param: writePromptParam): string {
... ...