提交 e32f5936 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 5e707104
import { Suspense, useEffect } from 'react'
import { Spin } from 'antd'
import { useRoutes, useSearchParams, useLocation } from 'react-router'
import { useRoutes, useLocation, useNavigate } from 'react-router'
import routes from './router/routes'
import './App.scss'
......@@ -9,17 +9,16 @@ const experimentId = params.get('experiment_id') || '7028276368903241728'
const App = () => {
const element = useRoutes(routes)
const [searchParams, setSearchParams] = useSearchParams()
const location = useLocation()
const navigate = useNavigate()
useEffect(() => {
const currentId = searchParams.get('experiment_id')
if (!currentId) {
const newSearchParams = new URLSearchParams(location.search)
newSearchParams.set('experiment_id', experimentId)
setSearchParams(newSearchParams)
const params = new URLSearchParams(location.search)
if (!params.get('experiment_id')) {
params.set('experiment_id', experimentId)
navigate({ search: params.toString() }, { replace: true })
}
}, [location.search, searchParams, setSearchParams])
}, [location, navigate])
return (
<Suspense
......
......@@ -26,10 +26,10 @@ export default function AIChat() {
const handleEnterSearch = (e: KeyboardEvent<HTMLTextAreaElement>) => {
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault()
handleSearch()
handleAI()
}
}
const handleSearch = () => {
const handleAI = () => {
setContent('')
post({ messages: [{ role: 'user', content }] })
}
......@@ -75,13 +75,7 @@ export default function AIChat() {
variant="filled"
suffixIcon={null}
popupMatchSelectWidth={110}></Select>
<Button
type="primary"
shape="circle"
icon={<ArrowUpOutlined />}
onClick={handleSearch}
loading={isLoading}
/>
<Button type="primary" shape="circle" icon={<ArrowUpOutlined />} onClick={handleAI} loading={isLoading} />
</div>
<div className="upload-list"></div>
</div>
......
......@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useProcessData } from '../query'
interface ResultItem {
name: string
desc: string
}
export default function ButtonModal() {
const [searchParams] = useSearchParams()
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const selectOptions = resultsOptions.length ? resultsOptions : fieldOptions
const { isLoading, post } = useAI({
onComplete: (message) => {
try {
const parse = JSON.parse(message.content)
console.log(parse)
} catch (error) {
console.error(error)
}
if (!message.content) return
const parse = JSON.parse(message.content)
console.log(parse)
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.error }],
})
}
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [open, setOpen] = useState(false)
useEffect(() => {
if (searchParams.get('results')) {
......@@ -40,6 +47,7 @@ export default function ButtonModal() {
const [form] = Form.useForm()
const initialValues = {
action: '取该字段平均值',
field: searchParams.get('results') || '',
}
const field = Form.useWatch('field', form)
......@@ -59,6 +67,7 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResults([])
}
const steps = [
......@@ -66,9 +75,9 @@ export default function ButtonModal() {
title: '请选择逻辑错误值字段',
content: (
<Form.Item name="field" rules={[{ required: true, message: '请选择逻辑错误值字段' }]}>
<Radio.Group>
<Radio.Group style={{ width: '100%' }}>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
{selectOptions.map((item) => (
<Col span={6} key={item.value}>
<Radio value={item.value}>{item.label}</Radio>
</Col>
......@@ -132,7 +141,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
检查逻辑错误值字段
</Button>
)}
......
......@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useProcessData } from '../query'
interface ResultItem {
name: string
desc: string
}
export default function ButtonModal() {
const [searchParams] = useSearchParams()
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const selectOptions = resultsOptions.length ? resultsOptions : fieldOptions
const { isLoading, post } = useAI({
onComplete: (message) => {
try {
const parse = JSON.parse(message.content)
console.log(parse)
} catch (error) {
console.error(error)
}
if (!message.content) return
const parse = JSON.parse(message.content)
console.log(parse)
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.max }],
})
}
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [open, setOpen] = useState(false)
useEffect(() => {
if (searchParams.get('results')) {
......@@ -41,6 +48,7 @@ export default function ButtonModal() {
const initialValues = {
action: '取该字段平均值',
field: searchParams.get('results') || '',
}
const field = Form.useWatch('field', form)
......@@ -60,6 +68,7 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResults([])
}
const steps = [
......@@ -67,9 +76,9 @@ export default function ButtonModal() {
title: '请选择过大值字段',
content: (
<Form.Item name="field" rules={[{ required: true, message: '请选择过大值字段' }]}>
<Radio.Group>
<Radio.Group style={{ width: '100%' }}>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
{selectOptions.map((item) => (
<Col span={6} key={item.value}>
<Radio value={item.value}>{item.label}</Radio>
</Col>
......@@ -133,7 +142,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
检查过大值字段
</Button>
)}
......
......@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useProcessData } from '../query'
interface ResultItem {
name: string
desc: string
}
export default function ButtonModal() {
const [searchParams] = useSearchParams()
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const selectOptions = resultsOptions.length ? resultsOptions : fieldOptions
const { isLoading, post } = useAI({
onComplete: (message) => {
try {
const parse = JSON.parse(message.content)
console.log(parse)
} catch (error) {
console.error(error)
}
if (!message.content) return
const parse = JSON.parse(message.content)
console.log(parse)
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.max }],
messages: [{ role: 'user', content: prompt.min }],
})
}
const { fieldOptions, getFieldName } = useDataFieldQuery()
const [open, setOpen] = useState(false)
useEffect(() => {
if (searchParams.get('results')) {
......@@ -40,6 +47,7 @@ export default function ButtonModal() {
const [form] = Form.useForm()
const initialValues = {
action: '取该字段平均值',
field: searchParams.get('results') || '',
}
const field = Form.useWatch('field', form)
......@@ -59,6 +67,7 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResults([])
}
const steps = [
......@@ -66,9 +75,9 @@ export default function ButtonModal() {
title: '请选择过小值字段',
content: (
<Form.Item name="field" rules={[{ required: true, message: '请选择过小值字段' }]}>
<Radio.Group>
<Radio.Group style={{ width: '100%' }}>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
{selectOptions.map((item) => (
<Col span={6} key={item.value}>
<Radio value={item.value}>{item.label}</Radio>
</Col>
......@@ -132,7 +141,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
检查过小值字段
</Button>
)}
......
......@@ -22,29 +22,35 @@ const ruleOptions = [
{ label: '热卡填充(下)', value: '热卡填充(下)' },
]
interface ResultItem {
name: string
desc: string
}
export default function ButtonModal() {
const [searchParams] = useSearchParams()
const { fieldOptions, getFieldName, getFieldNames } = useDataFieldQuery()
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const selectOptions = resultsOptions.length ? resultsOptions : fieldOptions
const { isLoading, post } = useAI({
onComplete: (message) => {
try {
const parse = JSON.parse(message.content)
console.log(parse)
if (parse.results.length) form.setFieldValue('fields', parse.results.map((item: any) => item.name) || [])
} catch (error) {
console.error(error)
}
if (!message.content) return
const parse = JSON.parse(message.content)
console.log(parse)
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.null }],
})
}
const { fieldOptions, getFieldName, getFieldNames } = useDataFieldQuery()
const [open, setOpen] = useState(false)
useEffect(() => {
if (searchParams.get('results')) {
......@@ -79,6 +85,7 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResults([])
}
const steps = [
......@@ -86,9 +93,9 @@ export default function ButtonModal() {
title: '请选择缺失值字段',
content: (
<Form.Item name="fields">
<Checkbox.Group>
<Checkbox.Group style={{ width: '100%' }}>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
{selectOptions.map((item) => (
<Col span={6} key={item.value}>
<Checkbox value={item.value}>{item.label}</Checkbox>
</Col>
......@@ -174,7 +181,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
检查缺失值字段
</Button>
)}
......
......@@ -8,10 +8,7 @@ import { useProcessData } from '../query'
export default function ButtonModal() {
const [searchParams] = useSearchParams()
const [results, setResults] = useState<Array<{ lines: number[]; desc: string }>>([
{ lines: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ lines: [2, 8], desc: '第2行、第8行的数据完全一样' },
])
const [results, setResults] = useState<Array<{ line: number; lines: number[]; desc: string }>>([])
useEffect(() => {
if (searchParams.get('results')) {
setResults(JSON.parse(searchParams.get('results') || '') as any)
......@@ -31,7 +28,7 @@ export default function ButtonModal() {
},
})
const handleSearch = () => {
const handleAI = () => {
post({ response_format: { type: 'json_object' }, messages: [{ role: 'user', content: prompt.repeat }] })
}
......@@ -43,7 +40,7 @@ export default function ButtonModal() {
action: '保留1条,删除剩余重复数据',
}
const checkedList: string[] = Form.useWatch('checkedList', form) || []
const checkedList: number[] = Form.useWatch('checkedList', form) || []
const ruleOptions = ['保留1条,删除剩余重复数据', '全部删除', '不处理']
......@@ -51,7 +48,7 @@ export default function ButtonModal() {
// 开始处理
const handleStart = () => {
form.validateFields().then((values) => {
const params = { ...values }
const params = { ...values, pk_id: checkedList.join(',') }
mutate(params)
})
}
......@@ -61,6 +58,7 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResults([])
}
const steps = [
......@@ -72,7 +70,7 @@ export default function ButtonModal() {
<Row gutter={[10, 10]}>
{results.map((item, index) => (
<Col span={24} key={index}>
<Checkbox value={item.desc}>{item.desc}</Checkbox>
<Checkbox value={item.line}>{item.desc}</Checkbox>
</Col>
))}
</Row>
......@@ -88,7 +86,7 @@ export default function ButtonModal() {
<Form.Item label="要处理的重复值数据">
{checkedList.map((item, index) => (
<p key={index}>
{index + 1}{item}
{index + 1}{results.find((resulst) => resulst.line === item)?.desc}
</p>
))}
</Form.Item>
......@@ -131,7 +129,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
检查重复值字段
</Button>
)}
......
......@@ -2,26 +2,65 @@ import { useState } from 'react'
import { Button, Flex, Modal, Radio, Form, Row, Col } from 'antd'
import { useDataFieldQuery } from '@/hooks/useQuery'
import AppProgressSteps from '@/components/AppProgressSteps'
import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useProcessData } from '../query'
import { useAI } from '@/hooks/useAI'
import MarkdownRender from '@/components/MarkdownRender'
export default function ButtonModal() {
const [result, setResult] = useState('')
const { isLoading, post } = useAI({
onComplete: (message) => {
try {
const parse = JSON.parse(message.content)
console.log(parse)
} catch (error) {
console.error(error)
}
setResult(message?.content || '')
},
})
const handleSearch = () => {
const handleAI = async () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.max }],
messages: [
{
role: 'user',
content: `任务目标
对数据集中指定字段进行 空格问题分析 ,包括:
1.
空格类型检测 (前后空格、中间多余空格、全空格字段)。
2.
影响评估 (如数据匹配失败、统计错误)。
3.
处理建议 (自动化修复或人工审核)。
输入要求
1.
字段列表 :[字段1、字段2、字段3(用顿号分隔)]
2.
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
输出格式:
| 序号 | 字段名称 | 空格问题描述 | 影响分析 | 处理建议(格式:建议名称:描述,执行方式:自动/人工)
| 1 | 用户名 | 字段值前后存在空格 | 影响登录系统唯一性校验 | 建议名称:前后空格清理,执行方式:自动
| 2 | 地址 | 字段值前后存在空格 | 导致地址解析失败 | 建议名称:中间空格标准化,执行方式:自动
执行要求
1.
分析规则 :
前后空格 :检测字段值首尾是否存在空格。
中间多余空格 :检测字段值中是否存在连续空格或不规范空格(如"张 三")。
全空格字段 :字段值仅为空格(如" ")。
空值与空格混淆 :区分空值(NULL)和空字符串("")。
1.
影响评估 :
说明空格问题对业务的影响(如数据匹配、统计分析、系统处理)。`,
},
],
})
}
......@@ -58,23 +97,39 @@ export default function ButtonModal() {
setOpen(false)
setCurrent(0)
remove()
setResult('')
}
const steps = [
{
title: '请选择数据去空格字段',
content: (
<Form.Item name="field" rules={[{ required: true, message: '请选择数据去空格字段' }]}>
<Radio.Group>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
<Col span={6} key={item.value}>
<Radio value={item.value}>{item.label}</Radio>
</Col>
))}
</Row>
</Radio.Group>
</Form.Item>
<>
<Form.Item name="field" rules={[{ required: true, message: '请选择数据去空格字段' }]}>
<Radio.Group>
<Row gutter={[10, 10]}>
{fieldOptions.map((item) => (
<Col span={6} key={item.value}>
<Radio value={item.value}>{item.label}</Radio>
</Col>
))}
</Row>
</Radio.Group>
</Form.Item>
{result && (
<div
style={{
marginTop: 20,
background: '#f5f5f5',
padding: 20,
maxHeight: 300,
overflow: 'auto',
borderRadius: 10,
}}>
<MarkdownRender>{result}</MarkdownRender>
</div>
)}
</>
),
},
{
......@@ -131,7 +186,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
AI去空格字段分析与建议
</Button>
)}
......
......@@ -5,6 +5,7 @@ import { useNavigate } from 'react-router'
import AppSteps from '@/components/AppSteps'
import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useDataFieldQuery } from '@/hooks/useQuery'
interface ResultItem {
name: string
......@@ -13,7 +14,11 @@ interface ResultItem {
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => result.name)
const { fieldOptions } = useDataFieldQuery()
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -23,7 +28,7 @@ export default function ButtonModal() {
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.min }],
......@@ -65,14 +70,14 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
智能探索字段数据逻辑错误
</Button>
)}
{current > 0 && <Button onClick={() => prev()}>上一步</Button>}
{current < steps.length - 1 && (
<Button type="primary" onClick={() => next()} disabled={!!value}>
<Button type="primary" onClick={() => next()} disabled={!value}>
下一步
</Button>
)}
......
......@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
import AppSteps from '@/components/AppSteps'
import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useDataFieldQuery } from '@/hooks/useQuery'
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const { fieldOptions } = useDataFieldQuery()
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -24,7 +28,7 @@ export default function ButtonModal() {
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.max }],
......@@ -73,7 +77,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
智能探索过大值字段
</Button>
)}
......
......@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
import AppSteps from '@/components/AppSteps'
import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useDataFieldQuery } from '@/hooks/useQuery'
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const { fieldOptions } = useDataFieldQuery()
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -24,7 +28,7 @@ export default function ButtonModal() {
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.min }],
......@@ -66,7 +70,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
智能探索过小值字段
</Button>
)}
......
......@@ -5,18 +5,22 @@ import { useNavigate } from 'react-router'
import AppSteps from '@/components/AppSteps'
import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
import { useDataFieldQuery } from '@/hooks/useQuery'
const CheckboxGroup = Checkbox.Group
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const { fieldOptions } = useDataFieldQuery()
const resultsOptions = results.map((result) => ({
label: result.name,
value: fieldOptions.find((option) => option.label === result.name)?.value || '',
}))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -28,7 +32,7 @@ export default function ButtonModal() {
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.null }],
......@@ -119,7 +123,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
智能探索缺失值字段
</Button>
)}
......
......@@ -28,7 +28,7 @@ export default function ButtonModal() {
},
})
const handleSearch = () => {
const handleAI = () => {
const names = results.map((item: any) => item.name).join(',')
post({
response_format: { type: 'json_object' },
......@@ -116,7 +116,7 @@ json
open={open}
footer={
<Flex justify="center" gap={20}>
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
一键计算
</Button>
</Flex>
......
......@@ -7,10 +7,7 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
export default function ButtonModal() {
const [results, setResults] = useState<Array<{ lines: number[]; desc: string }>>([
{ lines: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ lines: [2, 8], desc: '第2行、第8行的数据完全一样' },
])
const [results, setResults] = useState<Array<{ line: number; lines: number[]; desc: string }>>([])
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -20,7 +17,7 @@ export default function ButtonModal() {
setResults(parse.results || [])
},
})
const handleSearch = () => {
const handleAI = () => {
post({
response_format: { type: 'json_object' },
messages: [{ role: 'user', content: prompt.repeat }],
......@@ -52,7 +49,7 @@ export default function ButtonModal() {
footer={
<Flex justify="center" gap={20}>
{current === 0 && (
<Button type="primary" loading={isLoading} onClick={handleSearch}>
<Button type="primary" loading={isLoading} onClick={handleAI}>
智能探索重复值字段
</Button>
)}
......
......@@ -5,8 +5,8 @@ const prompt = {
json
{
results: [
{ name: '字段1', key: 'name1', desc: 'A000001、A000002...' },
{ name: '字段2', key: 'name2', desc: 'A000001、A000002...' },
{ name: '字段1', desc: 'A000001、A000002...' },
{ name: '字段2', desc: 'A000001、A000002...' },
],
}
......@@ -19,8 +19,8 @@ json
json
{
results: [
{ lines: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ lines: [2, 8], desc: '第2行、第8行的数据完全一样' },
{ line: 1, lines: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ line: 2, lines: [2, 8], desc: '第2行、第8行的数据完全一样' },
],
}
......@@ -32,8 +32,8 @@ json
json
{
results: [
{ name: '字段1', key: 'name1', desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段2', key: 'name2', desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段1', desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段2', desc: 'XXXX值过大,参考XXXXXXXX' },
],
}
......@@ -45,8 +45,8 @@ json
json
{
results: [
{ name: '字段1', key: 'name1', desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段2', key: 'name2', desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段1', desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段2', desc: 'XXXX值过小,参考XXXXXXXX' },
],
}
......@@ -57,7 +57,7 @@ json
返回格式示例:
json
{
results: [{ name: '字段1', key: 'name1', desc: 'XXXX值存在逻辑错误,参考XXXXXXXX' }],
results: [{ name: '字段1', desc: 'XXXX值存在逻辑错误,参考XXXXXXXX' }],
}
要求:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论