【React+TypeScript+DeepSeek】穿越时空对话机

news2025/1/8 18:38:25

引言

在这个数字化的时代,历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里,我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来?如何让历史学习变得生动有趣?带着这些思考,我们开发了一个简单的"穿越时空对话机"。

源码已经放在最后啦!


人物选择界面:
人物选择界面
聊天界面:
在这里插入图片描述


1. 项目背景

1.1 创意起源

在传统的历史学习中,学生们往往需要通过记忆大量的史实和年代来了解历史。这种学习方式不仅枯燥,而且难以激发学习兴趣。我们注意到:

  • 学生对历史人物的故事最感兴趣
  • 互动式学习效果最好
  • AI技术为教育带来新可能

基于这些观察,我萌生了开发一个能让用户直接与历史人物"对话"的应用的想法。

1.2 项目目标

  1. 教育价值

    • 让历史学习变得生动有趣
    • 深入理解历史人物的思想
    • 培养历史思维能力
  2. 技术创新

    • 运用先进的AI对话技术
    • 打造流畅的用户体验
    • 实现智能的角色扮演
  3. 文化传承

    • 弘扬优秀传统文化
    • 促进文化交流
    • 连接古今智慧

2. 核心功能概述

2.1 人物库设计

我们精心挑选了来自不同时期、不同领域的历史名人:

  1. 中国古代名人

    • 孔子:儒家思想的代表,强调仁义礼智信
    • 诸葛亮:军事谋略家,智慧与忠诚的化身
    • 李白:浪漫主义诗人,豪放不羁的文学天才
    • 苏轼:文学艺术全才,豁达乐观的人生导师
    • 李时珍:医学大师,严谨求实的科学精神
  2. 世界名人

    • 达芬奇:文艺复兴全才,艺术与科学的完美结合
    • 爱因斯坦:现代物理学家,创新思维的代表
    • 莎士比亚:戏剧大师,人性洞察的大师
    • 莫扎特:音乐天才,艺术激情的化身

每个人物都经过精心设计,包括:

  • 详细的背景故事
  • 独特的性格特征
  • 专业领域知识
  • 语言表达风格
  • 典型的思维方式

2.2 对话系统

基于DeepSeek API构建的智能对话系统具有以下特点:

  1. 角色准确性

    • 准确还原历史人物性格
    • 保持语言风格一致性
    • 符合历史背景
  2. 对话智能性

    • 上下文理解能力
    • 灵活的问题处理
    • 深度的知识储备
  3. 交互自然性

    • 流畅的对话节奏
    • 自然的语言表达
    • 适当的情感表现

3. 技术架构

3.1 技术栈选择

我们采用了现代化的技术栈:

  1. 前端技术

    - React 18
    - TypeScript 4.x
    - Vite
    - CSS Modules
    
  2. AI对话引擎

    - DeepSeek API
    - WebSocket
    - Axios
    
  3. 数据存储

    - LocalStorage
    

3.2 系统架构

采用清晰的分层架构:

  1. 表现层

    • 角色选择界面
    • 对话交互界面
    • 用户反馈组件
  2. 业务层

    • 对话管理
    • 角色控制
    • 会话处理
  3. 数据层

    • API通信
    • 本地存储
    • 状态管理

3.3 数据流设计

实现了清晰的单向数据流:

用户输入
状态更新
API请求
响应处理
界面更新

4. DeepSeek API集成

4.1 API配置

const api = axios.create({
  baseURL: 'https://api.deepseek.com/v1',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
  },
});

4.2 对话生成

export const generateResponse = async (messages: ChatMessage[]) => {
  const response = await api.post('/chat/completions', {
    model: 'deepseek-chat',
    messages,
    temperature: 0.7,
    max_tokens: 1000,
  });
  return response.data.choices[0].message.content;
};

4.3 提示词系统

为每个历史人物设计了专门的提示词模板:

interface HistoricalFigurePrompt {
  id: string;
  name: string;
  period: string;
  description: string;
  avatar: string;
  systemPrompt: string;
  sampleQuestions: string[];
  personality: string;
  background: string;
}

5. 开发规范

5.1 代码规范

  • 使用ESLint进行代码检查
  • 使用Prettier进行代码格式化
  • 遵循TypeScript严格模式
  • 采用函数式编程范式

5.2 命名规范

  • 组件采用大驼峰命名
  • 函数采用小驼峰命名
  • 常量使用大写下划线
  • CSS类名采用kebab-case

5.3 文件组织

src/
├── components/     # 通用组件
├── pages/         # 页面组件
├── services/      # 服务层
├── styles/        # 样式文件

6. 用户界面设计理念

6.1 设计原则

在设计用户界面时,我们遵循以下核心原则:

  1. 简约而不简单

    • 清晰的视觉层次
    • 重点内容突出
    • 减少视觉干扰
  2. 沉浸式体验

    • 符合历史氛围
    • 富有时代特色
    • 细节打造意境
  3. 交互友好

    • 操作直观
    • 反馈及时
    • 引导清晰

6.2 视觉风格

我们采用了现代简约与古典元素相结合的设计风格:

  1. 配色方案

    :root {
      --primary-color: #4A90E2;
      --secondary-color: #F5A623;
      --text-color: #2C3E50;
      --background-color: #F8F9FA;
      --border-color: #E2E8F0;
    }
    
  2. 字体选择

    • 中文:思源宋体
    • 英文:Roboto
    • 代码:JetBrains Mono
  3. 布局网格

    • 基础单位:8px
    • 内容区域最大宽度:1200px
    • 响应式断点:576px、768px、992px、1200px

7. 角色选择页面

7.1 布局设计

角色选择页面采用卡片式布局:

const CharacterSelect: React.FC = () => {
  return (
    <div className="character-select">
      <header className="header">
        <h1>穿越时空</h1>
        <p>与历史对话</p>
      </header>
      <div className="character-grid">
        {historicalFigures.map(figure => (
          <CharacterCard
            key={figure.id}
            figure={figure}
            onClick={() => handleSelect(figure)}
          />
        ))}
      </div>
    </div>
  );
};

7.2 角色卡片设计

每个角色卡片包含:

  1. 视觉元素

    • 头像/形象
    • 姓名/时代
    • 特色标签
    • 简介文字
  2. 交互效果

    .character-card {
      transition: transform 0.3s ease;
      &:hover {
        transform: translateY(-5px);
        box-shadow: 0 10px 20px rgba(0,0,0,0.1);
      }
    }
    
  3. 信息展示

    const CharacterCard: React.FC<Props> = ({ figure }) => (
      <div className="character-card">
        <div className="avatar">{figure.avatar}</div>
        <h3>{figure.name}</h3>
        <p className="period">{figure.period}</p>
        <p className="description">{figure.description}</p>
        <div className="personality-tags">
          {figure.personality.split(',').map(tag => (
            <span className="tag">{tag}</span>
          ))}
        </div>
      </div>
    );
    

8. 对话界面实现

8.1 整体布局

对话界面分为三个主要部分:

  1. 顶部导航

    • 返回按钮
    • 当前角色信息
    • 功能按钮
  2. 对话区域

    • 消息气泡
    • 打字机效果
    • 滚动加载
  3. 输入区域

    • 消息输入框
    • 发送按钮
    • 快捷操作

8.2 消息展示

实现了富有特色的消息气泡:

const MessageBubble: React.FC<Props> = ({ message, isUser }) => (
  <div className={`message ${isUser ? 'user' : 'assistant'}`}>
    <div className="avatar">
      {isUser ? '👤' : selectedFigure.avatar}
    </div>
    <div className="content">
      <div className="bubble">
        {message.content}
      </div>
      <div className="time">
        {formatTime(message.timestamp)}
      </div>
    </div>
  </div>
);

8.3 打字机效果

实现了自然的打字机效果:

const simulateTyping = async (content: string) => {
  await new Promise(resolve => setTimeout(resolve, 500 + Math.random() * 1000));
  return content;
};

8.4 历史记录功能

实现了完整的对话历史管理:

interface ChatHistory {
  characterId: string;
  messages: ChatMessage[];
  lastUpdated: string;
}

export const saveChatHistory = (characterId: string, messages: ChatMessage[]) => {
  try {
    const existingHistory = localStorage.getItem(CHAT_HISTORY_KEY);
    const history = existingHistory ? JSON.parse(existingHistory) : {};
    
    history[characterId] = {
      characterId,
      messages,
      lastUpdated: new Date().toISOString()
    };
    
    localStorage.setItem(CHAT_HISTORY_KEY, JSON.stringify(history));
  } catch (error) {
    console.error('Failed to save chat history:', error);
  }
};

9. 动画效果

9.1 过渡动画

使用CSS transitions实现平滑过渡:

.fade-enter {
  opacity: 0;
  transform: translateY(20px);
}

.fade-enter-active {
  opacity: 1;
  transform: translateY(0);
  transition: opacity 300ms, transform 300ms;
}

.fade-exit {
  opacity: 1;
}

.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

9.2 加载动画

实现了优雅的加载效果:

.typing-indicator {
  display: flex;
  gap: 4px;
  padding: 8px 12px;
  
  .dot {
    width: 8px;
    height: 8px;
    background: var(--primary-color);
    border-radius: 50%;
    animation: bounce 1.4s infinite ease-in-out;
    
    &:nth-child(1) { animation-delay: -0.32s; }
    &:nth-child(2) { animation-delay: -0.16s; }
  }
}

@keyframes bounce {
  0%, 80%, 100% { transform: scale(0); }
  40% { transform: scale(1); }
}

10. 响应式设计

10.1 媒体查询

实现了完整的响应式布局:

/* 移动端 */
@media (max-width: 576px) {
  .character-grid {
    grid-template-columns: 1fr;
  }
}

/* 平板 */
@media (min-width: 577px) and (max-width: 992px) {
  .character-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 桌面端 */
@media (min-width: 993px) {
  .character-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

10.2 弹性布局

使用Flexbox实现灵活的布局:

.chat-container {
  display: flex;
  flex-direction: column;
  height: 100vh;
  
  .chat-messages {
    flex: 1;
    overflow-y: auto;
  }
  
  .chat-input {
    padding: 1rem;
    border-top: 1px solid var(--border-color);
  }
}

11. 性能优化

11.1 虚拟滚动

实现了消息列表的虚拟滚动:

import { FixedSizeList } from 'react-window';

const MessageList: React.FC<Props> = ({ messages }) => (
  <FixedSizeList
    height={600}
    itemCount={messages.length}
    itemSize={80}
    width="100%"
  >
    {({ index, style }) => (
      <MessageItem
        message={messages[index]}
        style={style}
      />
    )}
  </FixedSizeList>
);

11.2 防抖处理

对输入和滚动事件进行防抖处理:

const debouncedScroll = debounce(() => {
  const { scrollTop, scrollHeight, clientHeight } = messagesRef.current;
  if (scrollHeight - scrollTop === clientHeight) {
    loadMoreMessages();
  }
}, 200);

11.3 懒加载

实现了图片和组件的懒加载:

const LazyCharacterCard = React.lazy(() => import('./CharacterCard'));

const CharacterGrid = () => (
  <Suspense fallback={<Skeleton />}>
    {figures.map(figure => (
      <LazyCharacterCard
        key={figure.id}
        figure={figure}
      />
    ))}
  </Suspense>
);

12. 性能优化策略

12.1 代码层面优化

12.1.1 React优化
  1. 组件优化
// 使用React.memo避免不必要的重渲染
const MessageBubble = React.memo<Props>(({ message, isUser }) => {
  return (
    <div className={`message ${isUser ? 'user' : 'assistant'}`}>
      {/* 消息内容 */}
    </div>
  );
});

// 使用useCallback优化事件处理函数
const handleSendMessage = useCallback(() => {
  // 处理发送消息
}, [dependencies]);
  1. 状态管理优化
// 使用useReducer处理复杂状态
const [state, dispatch] = useReducer(chatReducer, initialState);

// 分离状态逻辑
const chatReducer = (state, action) => {
  switch (action.type) {
    case 'ADD_MESSAGE':
      return {
        ...state,
        messages: [...state.messages, action.payload]
      };
    case 'CLEAR_HISTORY':
      return {
        ...state,
        messages: []
      };
    default:
      return state;
  }
};
12.1.2 资源加载优化
  1. 代码分割
// 路由级别的代码分割
const ChatInterface = lazy(() => import('./pages/ChatInterface'));
const CharacterSelect = lazy(() => import('./pages/CharacterSelect'));

// 组件级别的代码分割
const MarkdownRenderer = lazy(() => import('./components/MarkdownRenderer'));
  1. 资源预加载
// 预加载关键资源
const prefetchResources = () => {
  const links = [
    { rel: 'prefetch', href: '/assets/fonts/main.woff2' },
    { rel: 'preload', href: '/assets/images/sprites.png', as: 'image' }
  ];
  
  links.forEach(link => {
    const linkElement = document.createElement('link');
    Object.assign(linkElement, link);
    document.head.appendChild(linkElement);
  });
};

12.2 网络优化

12.2.1 API请求优化
  1. 请求缓存
const cache = new Map();

const cachedFetch = async (url: string) => {
  if (cache.has(url)) {
    return cache.get(url);
  }
  
  const response = await fetch(url);
  const data = await response.json();
  cache.set(url, data);
  
  return data;
};
  1. 请求合并
const batchRequest = async (requests: Request[]) => {
  const batchId = generateBatchId();
  return await api.post('/batch', {
    batchId,
    requests
  });
};
12.2.2 WebSocket优化
class WebSocketManager {
  private ws: WebSocket;
  private reconnectAttempts = 0;
  private maxReconnectAttempts = 5;
  
  constructor(url: string) {
    this.ws = new WebSocket(url);
    this.setupEventHandlers();
  }
  
  private setupEventHandlers() {
    this.ws.onclose = () => {
      if (this.reconnectAttempts < this.maxReconnectAttempts) {
        setTimeout(() => this.reconnect(), 1000 * Math.pow(2, this.reconnectAttempts));
      }
    };
  }
  
  private reconnect() {
    this.reconnectAttempts++;
    // 重新连接逻辑
  }
}

12.3 存储优化

12.3.1 本地存储优化
  1. 数据压缩
import { compress, decompress } from 'lz-string';

const saveCompressedData = (key: string, data: any) => {
  const compressed = compress(JSON.stringify(data));
  localStorage.setItem(key, compressed);
};

const loadCompressedData = (key: string) => {
  const compressed = localStorage.getItem(key);
  if (!compressed) return null;
  return JSON.parse(decompress(compressed));
};
  1. 存储管理
class StorageManager {
  private maxSize = 5 * 1024 * 1024; // 5MB
  
  async cleanup() {
    const items = { ...localStorage };
    const totalSize = Object.values(items)
      .reduce((size, item) => size + item.length, 0);
    
    if (totalSize > this.maxSize) {
      // 清理最旧的数据
      const oldestKey = this.findOldestKey();
      localStorage.removeItem(oldestKey);
    }
  }
}

13. 用户体验优化

13.1 交互优化

13.1.1 输入优化
  1. 智能提示
const AutoComplete: React.FC<Props> = ({ suggestions, onSelect }) => {
  return (
    <div className="autocomplete">
      {suggestions.map(suggestion => (
        <div
          key={suggestion.id}
          className="suggestion"
          onClick={() => onSelect(suggestion)}
        >
          {suggestion.text}
        </div>
      ))}
    </div>
  );
};
  1. 输入防抖
const useDebounce = (value: string, delay: number) => {
  const [debouncedValue, setDebouncedValue] = useState(value);
  
  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);
    
    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);
  
  return debouncedValue;
};

13.2 动画优化

13.2.1 性能优化的动画
.optimized-animation {
  will-change: transform;
  transform: translateZ(0);
  backface-visibility: hidden;
}

@keyframes smooth-entrance {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
13.2.2 动画管理
class AnimationManager {
  private animations: Map<string, Animation> = new Map();
  
  register(id: string, animation: Animation) {
    this.animations.set(id, animation);
  }
  
  play(id: string) {
    const animation = this.animations.get(id);
    if (animation) {
      animation.play();
    }
  }
  
  pause(id: string) {
    const animation = this.animations.get(id);
    if (animation) {
      animation.pause();
    }
  }
}

结语

"穿越时空对话机"探索了如何将先进的AI技术与教育需求相结合的可能性。通过这个项目,我们不仅实现了有趣的历史对话功能,也积累了宝贵的技术经验。

未来,我们将继续优化和扩展这个项目,让更多人能够通过这种创新的方式学习历史、感受文化。我们相信,技术的进步将为教育带来更多可能性。


Gitee源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…

AIA - APLIC之三(附APLIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 APLIC复位 APLIC复位后,其所有状态都变得有效且一致,但以下情况除外: 每个中断域的domaincfg寄存器(spec第 4.5.1 节);可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5…

openwrt 清缓存命令行

一、查看缓存 &#xff1a; free -m 二、清缓存&#xff1a;echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象&#xff0c;包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…

Linux -- 端口号、套接字、网络字节序、sockaddr 结构体

目录 什么是端口号&#xff1f; 什么是套接字&#xff1f; 网络字节序 struct sockaddr 结构体 什么是端口号&#xff1f; 我们日常上网的时候&#xff0c;主机其实是在进行两种操作&#xff1a; 1、把远端的数据拉取到本地&#xff0c;比如刷抖音的时候&#xff0c;手机向…

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为&#xff1f;22. 单链表的存储密度比1&#xff1f;23.单链表的那些操作的效率受链表长度的影响&#xff1f;24.顺序表中某元素的地址为&#xff1f;25.m叉树第K层的结点数为&#xff1f;26. 在双向循环链表某节点…

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…

《Opencv》基础操作详解(4)

接上篇&#xff1a;《Opencv》基础操作详解&#xff08;3&#xff09;-CSDN博客 目录 22、图像形态学操作 &#xff08;1&#xff09;、顶帽&#xff08;原图-开运算&#xff09; 公式&#xff1a; 应用场景&#xff1a; 代码示例&#xff1a; &#xff08;2&#xff09;…

大数据高级ACP学习笔记(2)

钻取&#xff1a;变换维度的层次&#xff0c;改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub

尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)

vue3 主要内容 核心&#xff1a;ref、reactive、computed、watch、生命周期 常用&#xff1a;hooks、自定义ref、路由、pinia、miit 面试&#xff1a;组件通信、响应式相关api ----> 笔记&#xff1a;ts快速梳理&#xff1b;vue3快速上手.pdf 笔记及大纲 如下&#xff…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗&#xff08;Impedance&#xff09;、容抗&#xff08;Capacitive Reactance&#xff09;、感抗&#xff08;Inductive Reactance&#xff09; 都是交流电路中描述电流和电压之间关系的参数&#xff0c;但它们的含义、单位和作用不同。下面是它们的定义和区别&#xff1a; …

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列&#xff1f;2. 什么是非聚合列&#xff1f;3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中&#xff1f;5. 如何判断一个列是聚合列还是非聚合列&#xff1f;6. 总结 在 SQL 中&#…

B树与B+树:数据库索引的秘密武器

想象一下&#xff0c;你正在构建一个超级大的图书馆&#xff0c;里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式&#xff0c;它们都能帮助你快速找到想要的书籍&#xff0c;但各有特点。 B树就像是一个传统的图书馆摆放方式&#xff1a; 1. 书籍摆放&…

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测预测效果基本介绍模型架构程序设计参考资料 预测效果 基本介绍 CNN-SVM多输入单输出回归预测是一种结合卷积神经网络&#xff08;CNN&#xff09;和支持向量机&#…

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度 一&#xff0c; PWM实现原理二&#xff0c;软件实现三&#xff0c;正点原子裸机开发总结 一&#xff0c; PWM实现原理 PWM和学习51时候基本上一致&#xff0c;控制频率&#xff08;周期&#xff09;和占空比&#xff0c;51实验…

自定义校验注解

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解) 1.自定义注解,并在注解上指定校验逻辑 Constraint(validatedBy StateValidation.class) // 指定校验逻辑 package com.example.demo.validation;import jakarta.validation.Constraint; import j…

分数阶傅里叶变换代码 MATLAB实现

function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数&#xff1a; %f&#xff1a;原始信号 %a&#xff1a;阶数 %输出结果&#xff1a; %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N)&#xff0c;起到翻…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

小兔鲜儿:头部区域的logo,导航,搜索,购物车

头部&#xff1a;logo ,导航&#xff0c;搜索&#xff0c;购物车 头部总体布局: 设置好上下外边距以及总体高度&#xff0c; flex布局让总体一行排列 logo&#xff1a; logo考虑搜索引擎优化&#xff0c;所以要使用 h1中包裹 a 标签&#xff0c;a 里边写内容&#xff08;到时候…

Linux C编程——文件IO基础

文件IO基础 一、简单的文件 IO 示例二、文件描述符三、open 打开文件1. 函数原型2. 文件权限3. 宏定义文件权限4. 函数使用实例 四、write 写文件五、read 读文件六、close 关闭文件七、Iseek 绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、Outout…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 史丹&#xff0c;天津大学博士生 内容简介 大语言模型&#xff08;LLM&#xff09;经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…