{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "import json\n", "import requests as r\n", "\n", "from langchain_community.vectorstores import FAISS\n", "from langchain_community.document_loaders import DirectoryLoader\n", "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", "from langchain_community.embeddings import HuggingFaceEmbeddings" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "整理得到 304 个文档\n", "分块得到 1276 个文档\n", "数据库已存储到 ../blog-vecdb 中\n" ] } ], "source": [ "embedding = HuggingFaceEmbeddings(model_name='maidalun1020/bce-embedding-base_v1')\n", "\n", "db_persistent_dir = '../blog-vecdb'\n", "\n", "if os.path.exists(db_persistent_dir):\n", " db = FAISS.load_local(db_persistent_dir, embedding, allow_dangerous_deserialization=True)\n", " print('成功从 {} 中提取数据'.format(db_persistent_dir))\n", "else:\n", " loader = DirectoryLoader('../docs', glob='**/*.md')\n", " docs = loader.load()\n", " print('整理得到 {} 个文档'.format(len(docs)))\n", "\n", " text_splitter = RecursiveCharacterTextSplitter(\n", " chunk_size = 800,\n", " chunk_overlap = 80,\n", " length_function = len,\n", " add_start_index = True\n", " )\n", " split_docs = text_splitter.split_documents(docs)\n", " print('分块得到 {} 个文档'.format(len(split_docs)))\n", " db = FAISS.from_documents(split_docs, embedding)\n", " db.save_local(db_persistent_dir)\n", " print('数据库已存储到 {} 中'.format(db_persistent_dir))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(Document(page_content='完整的 VCD 语法,可以参考中科大资源网站上的 IEEE 1364 标准 第 18 章的内容。\\n\\n基本信息\\n\\n一个 vcd 文件会描述波形产生的基本信息,包括,日期,版本,单位时间,注释等等。\\n\\n日期 date\\n\\n$date\\n Sat Apr 20 20:06:14 2024\\n$end\\n\\n与 verilog 类似,$end$ 是一切 scope 的结束符号,你也可以写成这样:\\n\\n$date Sat Apr 20 20:06:14 2024 $end\\n\\n版本 version\\n\\n$version\\n Icarus Verilog\\n$end\\n\\n时间单位 timescale\\n\\n$timescale\\n 1ns\\n$end\\n\\n注释 comment\\n\\n$comment\\n Show the parameter values.\\n$end\\n\\n变量申明\\n\\nvcd 中通过如下的方式申明一个 module 内的变量,,每条的格式为 $var type bitwidth id name,比如:\\n\\n$scope module ID_EX $end\\n$var wire 2 ! AluOp [1:0] $end\\n$var wire 1 \" AluSrc $end\\n$var wire 1 # MemRead $end\\n$upscope $end\\n\\n以上语句申明了一个模块 ID_EX 和内部的三个信号 AluOp,AluSrc 和 MemRead。这三个变量在接下来的 vcd 描述中会被 !,\",# 替代,这也被称为 vcd 描述中,变量的 id.\\n\\n单个 module 的变量申明通过 $upscope $end 结束。\\n\\n所有 module 的变量申明通过 $enddefinitions $end 结束。\\n\\nparameter 赋值', metadata={'source': '../docs/kirigaya.cn/224.md', 'start_index': 0}),\n", " 0.4351002),\n", " (Document(page_content='TODO\\n\\n找到所有 vcd item 的 type 类型,可参考:https://pyvcd.readthedocs.io/en/latest/vcd.common.html\\n\\nbug\\n\\n详见飞书文档:https://nc-ai-lab.feishu.cn/wiki/Z4AxwU1SdilATAk7GuvcYkIDnwh\\n\\n流程\\n\\n目前需要为Digital-IDE设计一个render用于显示VCD文件。\\n\\nIEEE 1364定义VCD(value change dump)文件是含已选变量(信号)的值变化信息存储文件。\\n\\nwavedrom在GitHub上开发过vcd和hdl的wavedrom脚本格式,可以用于进行DIDE的vcd可视化的二次开发,目前发现,为了实现vcd文件,基本的仓库主要是下面这两个:\\n\\nJS层与一个简单的前端:https://github.com/wavedrom/vcdrom\\n\\nwasm 解析:https://github.com/wavedrom/vcd\\n\\n打算基于这两个仓库二次开发一个好用的vcd渲染模块,再加入DIDE中。\\n\\n开发思路\\n\\nvcd 的渲染器分为如下几步进行开发。\\n\\nmermaid\\ngraph LR\\na(读取)-->b(渲染)-->c(解析)\\n\\nVCD 读取和解析并不难,难在如何快速安全地读取,对于一些长时间的模拟和仿真而言, vcd 文件可能会非常大。因此,vcd 需要分块读取,分块解析,为了避免这些不必要的麻烦,我使用了 https://github.com/wavedrom/vcdrom 这个项目的后端进行修改。\\n\\nwasm 解析器\\n\\n原项目写得过于紧凑,并不适合进行修改,因此需要修改一部分代码。\\n\\n整合项目在 : https://github.com/Digital-EDA/digital-vcd-parser', metadata={'source': '../docs/kirigaya.cn/72.md', 'start_index': 0}),\n", " 0.55531096),\n", " (Document(page_content='cap.release()\\nout.release()\\ncv2.destroyAllWindows()\\n```\\n\\n其中FORMAT代表目标视频的编码格式,目前我还遇到了很多bug,已经确定的FORMAT和编码关系的对照表如下:\\n\\n目标视频编码格式 FORMAT 取值 mp4 \"mp4v\" aiv \"MJPG\"\\n\\n参考\\n\\n[1] python opencv写视频——cv2.VideoWriter()_翟羽嚄的博客-CSDN博客_cv2.videowriter', metadata={'source': '../docs/kirigaya.cn/21.md', 'start_index': 711}),\n", " 0.71963197)]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.similarity_search_with_score(\n", " query='vcd 波形文件的基本格式是什么样子的?',\n", " k=3\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(Document(page_content='问题标题 基础教程太少\\n除了b站的两个教程外,建议多出文档以及示例工程,一个刚接触FPGA但有不熟悉vivado的萌新就指望这个加快学习进度了\\n请问B站教程标题是啥?我搜digital-ide啥也搜不到\\n请问B站教程标题是啥?我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》\\n《Digital-IDE应用之FM调制解调》\\n请问B站教程标题是啥?我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》 《Digital-IDE应用之FM调制解调》\\n好的谢谢\\n那个教程是好早之前我出的了,新的版本一直不稳定,今年稳定之后会出后续教程。\\nDigital IDE 的使用教程可以看\\n官方文档为 https://sterben.nitcloud.cn/zh/ 但是目前文档不是很完善。', metadata={'source': '../docs/digital-issue/issue-47/issue.md', 'start_index': 0}),\n", " 0.63593847),\n", " (Document(page_content='home: true\\nheroImage: /icon.png\\ndescription: Vscode 平台上的 ASIC & FPGA 开发扩展\\nactionText: 快速开始 🐳\\nactionLink: /zh/guide/introduction\\nfeatures:\\n- title: ✨ HDL 语言支持\\n details: 支持 verilog, vhdl, systemverilog, tcl 脚本等\\n- title: 🎯 项目管理\\n details: 在你的项目中查看结构化的 HDL 文件\\n- title: 🛠️ 额外的工具\\n details: FSM, Netlist, 一键仿真, 文档化,让你的编程体验更加舒坦。\\n\\n::: slot footer\\nMIT Licensed | Copyright © 2018-present Digital-EDA\\n:::', metadata={'source': '../docs/digital-document/index.md', 'start_index': 0}),\n", " 0.7582667),\n", " (Document(page_content='TODO\\n\\n找到所有 vcd item 的 type 类型,可参考:https://pyvcd.readthedocs.io/en/latest/vcd.common.html\\n\\nbug\\n\\n详见飞书文档:https://nc-ai-lab.feishu.cn/wiki/Z4AxwU1SdilATAk7GuvcYkIDnwh\\n\\n流程\\n\\n目前需要为Digital-IDE设计一个render用于显示VCD文件。\\n\\nIEEE 1364定义VCD(value change dump)文件是含已选变量(信号)的值变化信息存储文件。\\n\\nwavedrom在GitHub上开发过vcd和hdl的wavedrom脚本格式,可以用于进行DIDE的vcd可视化的二次开发,目前发现,为了实现vcd文件,基本的仓库主要是下面这两个:\\n\\nJS层与一个简单的前端:https://github.com/wavedrom/vcdrom\\n\\nwasm 解析:https://github.com/wavedrom/vcd\\n\\n打算基于这两个仓库二次开发一个好用的vcd渲染模块,再加入DIDE中。\\n\\n开发思路\\n\\nvcd 的渲染器分为如下几步进行开发。\\n\\nmermaid\\ngraph LR\\na(读取)-->b(渲染)-->c(解析)\\n\\nVCD 读取和解析并不难,难在如何快速安全地读取,对于一些长时间的模拟和仿真而言, vcd 文件可能会非常大。因此,vcd 需要分块读取,分块解析,为了避免这些不必要的麻烦,我使用了 https://github.com/wavedrom/vcdrom 这个项目的后端进行修改。\\n\\nwasm 解析器\\n\\n原项目写得过于紧凑,并不适合进行修改,因此需要修改一部分代码。\\n\\n整合项目在 : https://github.com/Digital-EDA/digital-vcd-parser', metadata={'source': '../docs/kirigaya.cn/72.md', 'start_index': 0}),\n", " 0.83628875)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.similarity_search_with_score(\n", " query='digital ide 有什么教程吗',\n", " k=3\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import os\n", "import json\n", "import requests as r\n", "\n", "\n", "api_key = '9J5qFTYr6wPRxkoVoXycnoWf'\n", "secret_key = 'Xa6eJelStx5i7Ft3qQH0NAT6AvOkqhkH'\n", "\n", "def get_access_key():\n", " headers = {\n", " 'Content-Type': 'application/json',\n", " 'Accept': 'application/json'\n", " }\n", "\n", " url = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}'\n", " payload = json.dumps(\"\")\n", "\n", " res = r.post(\n", " url=url,\n", " data=payload,\n", " headers=headers\n", " )\n", "\n", " resJson = res.json()\n", " access_token = resJson.get('access_token')\n", " assert isinstance(access_token, str), 'access_token 获取失败,详细信息' + str(resJson)\n", " return access_token\n", "\n", "access_token = get_access_key()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(Document(page_content='对于property.json文件中的library属性不建议用户自己配置,建议使用import library命令,或者下图中的图标激活命令进行配置。\\n\\nstate 属性代表是库文件是加载到本地工作区,还是作为远程进行链接。\\n- remote 代表从远程虚拟包含(不在工作区下的都被认为远程,而不是网络上的远程)。\\n - 远程库文件可以打开并更改 (注:如果更改之后下次导入就是更改之后的代码) 。\\n- local 代表将远程文件导入到该工程本地\\n 1. 放置到arch.hardware.src下的lib中,此时更改不会影响远程库中的代码。\\n 2. 注:当从local改回remote时lib文件夹会被删除(插件会提醒),请注意。\\n\\ncommon 属性代表插件自带的HDL功能库,该库的代码不太成熟,仅供参考。\\n目前已经经过仿真测试的lib路径如下\\n- Soc\\n- Math/Cordic.v\\n- Math/Sort3.v\\n- Math/Sqrt.v\\n- Malloc/RAM/Shift_RAM\\n- Apply/DSP/Advance/Communicate/Modulate\\n- Apply/DSP/Base/DDS\\n- Apply/Image (需要包含 Sort3, Sqrt, Shift_RAM)\\n\\n【注】:当输入的是文件夹时则包含该文件夹下所有的文件。此外不建议直接更改该库中的代码,更改之后再在下一次插件更新之后会被重新覆盖,请慎重。\\n\\ncustom 属性代表用户自定义HDL功能库。\\n该属性的使用需要对setting下的PRJ.customer.Lib.repo.path进行配置用户自定义库的根目录,并与custom属性下的配置组成文件(夹)的绝对路径。表示如下:\\nPRJ.customer.Lib.repo.path/${custom}', metadata={'source': 'docs/digital-document/guide/pm-project-building.md', 'start_index': 2533}), 0.6334237), (Document(page_content='json\\n{\\n \"version\": \"0.2.0\",\\n \"configurations\": [\\n {\\n \"name\": \"Extension Run\",\\n \"type\": \"extensionHost\",\\n \"request\": \"launch\",\\n \"runtimeExecutable\": \"${execPath}\",\\n \"args\": [\\n \"--extensionDevelopmentPath=${workspaceFolder}\"\\n ]\\n },\\n {\\n \"name\": \"Extension Tests\",\\n \"type\": \"extensionHost\",\\n \"request\": \"launch\",\\n \"args\": [\\n \"--extensionDevelopmentPath=${workspaceFolder}\",\\n \"--extensionTestsPath=${workspaceFolder}/test/suite/index\"\\n ]\\n }\\n ],\\n \"resolveSourceMapLocations\": [\\n \"${workspaceFolder}/**\",\\n \"!**/node_modules/**\"\\n ]\\n}', metadata={'source': 'docs/kirigaya.cn/33.md', 'start_index': 273}), 0.6832247), (Document(page_content='json\\n{\\n \"$schema\": \"https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json\",\\n \"blocks\": [\\n {\\n \"alignment\": \"left\",\\n \"newline\": true,\\n \"segments\": [\\n {\\n \"foreground\": \"#ffbebc\",\\n \"leading_diamond\": \"<#ff70a6> \\\\ue200 \",\\n \"properties\": {\\n \"display_host\": true\\n },\\n \"style\": \"diamond\",\\n \"template\": \"锦恢 <#ffffff>on\",\\n \"type\": \"session\"\\n },\\n {\\n \"foreground\": \"#bc93ff\",\\n \"properties\": {\\n \"time_format\": \"Monday <#ffffff>at 3:04 PM\"\\n },\\n \"style\": \"diamond\",\\n \"template\": \" {{ .CurrentDate | date .Format }} \",\\n \"type\": \"time\"\\n },', metadata={'source': 'docs/kirigaya.cn/100.md', 'start_index': 0}), 0.7037922)]\n", "我不知道\n" ] } ], "source": [ "def make_prompts(docs: list[str]) -> str:\n", " prompts = '你是一个很聪明的AI,下面是你的知识库和参考内容,请根据参考内容回答上述的问题:\\n{}'.format('\\n'.join(docs))\n", " return prompts\n", "\n", "def call_llm(query: str) -> str:\n", " payload = json.dumps({\n", " \"messages\": [\n", " { \"role\": \"user\", \"content\": query }\n", " ]\n", " })\n", "\n", " headers = {\n", " 'Content-Type': 'application/json'\n", " }\n", " try:\n", " url = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k?access_token=' + access_token\n", " res = r.post(url, headers=headers, data=payload)\n", " return res.json()['result']\n", " except Exception as e:\n", " return '发生错误:' + e.__str__()\n", "\n", "def make_query(query, use_vecdb=True, threshold=0.6):\n", " if not use_vecdb:\n", " return call_llm(query)\n", " \n", " doc_scores = db.similarity_search_with_score(query, k=3)\n", " print(doc_scores)\n", " suggest_docs = []\n", " for doc, score in doc_scores:\n", " if score < threshold:\n", " detail = '详细请参考: https://kirigaya.cn/blog/article?seq=232'\n", " page_content = doc.page_content.strip() + '\\n' + detail.strip()\n", " suggest_docs.append(page_content)\n", " \n", " if len(suggest_docs) > 0:\n", " prompt = make_prompts(suggest_docs)\n", " question = query + '\\n' + prompt\n", " answer = call_llm(question)\n", " return answer\n", " else:\n", " return '我不知道'\n", "\n", "print(make_query('property.json'))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(Document(page_content='我的服务器(openjdk \"11.0.20\")是满足的。\\n\\n设置环境变量 JAVA_HOME\\n\\n检查你是否有环境变量JAVA_HOME:\\nbash\\n$ echo $JAVA_HOME\\n/usr/lib/jvm/java-11-openjdk-amd64\\n我也是有的,没有的话,记得在~/.bashrc或者~/.zshrc中export一下。\\n\\nglibc 版本 > 2.17\\n\\n然后检查你的glibc版本,保证glibc至少支持到2.17的版本:\\n\\nbash\\n$ strings /lib64/libc.so.6 | grep GLIBC_\\nGLIBC_2.2.5\\n...\\n...\\nGLIBC_2.30\\nGLIBC_PRIVATE\\n\\n如果不满足的话,记得升级一下glibc,如何升级,请看这篇博客。\\n\\n因为下面要启动两个持久化服务,如果你没有后台运行软件,可以用用screen这个工具:\\nbash\\n$ sudo apt install screen\\n\\n安装签名服务器\\n\\n在安装Mirai之前,一定要先安装好签名服务器,并运行,否则我们将无法正常进行登录。\\n\\n下载项目 unidbg-fetch-qsign 的release\\n\\n在unidbg-fetch-qsign项目的 release 中下载最新版本,比如我用的版本是这样的:\\n\\nbash\\n$ mkdir -p ~/Package/qsign && cd ~/Package/qsign\\n$ wget https://github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.9/unidbg-fetch-qsign.3.zip\\n\\n连续unzip两次得到文件夹,文件夹内部一共三个文件夹:bin, lib, txlib。进入txlib查看支持协议版本:', metadata={'source': 'docs/kirigaya.cn/104.md', 'start_index': 654}), 0.7496957), (Document(page_content='前言\\n\\n登录失效\\n\\n最近因为要使用QQ机器人来给群友回答一些技术问题,所以在尝试运行之前我自己写的QQ机器人项目。但是,不愧是QQ,又一次破坏了登录规则,让我们之前的QQ登录程序全部失效,出现了大量的45错误码。\\n\\n签名服务器 Sign Server\\n\\n通过进一步的了解,目前的QQ会对发送的数据包进行验证,验证不通过就会爆出45错误码,次数过多甚至会直接封号。在Mirai社区诸位大佬的努力下,Mirai社区出现了第三方签名插件和对应的第三方签名服务器运行程序。\\n\\n为什么使用Mirai\\n\\n我之前一直用的go-cqhttp,这是一款非常优秀的QQ后端,但是对于一些高并发的群消息,这个启动器有时候可能会吞消息,导致机器人的回复不及时。因此,新版本我打算使用mirai来作为后端。这篇文章简单记录一下签名服务器时代,如何正确在Linux服务器上配置和下载mirai。\\n\\n环境准备\\n\\nJDK 版本 > 11\\n\\n首先先确保你的服务器上有版本大于11的java运行时:\\n\\nbash\\n$ java -version\\nopenjdk version \"11.0.20\" 2023-07-18\\nOpenJDK Runtime Environment (build 11.0.20+8-post-Ubuntu-1ubuntu120.04)\\nOpenJDK 64-Bit Server VM (build 11.0.20+8-post-Ubuntu-1ubuntu120.04, mixed mode, sharing)\\n\\n我的服务器(openjdk \"11.0.20\")是满足的。\\n\\n设置环境变量 JAVA_HOME', metadata={'source': 'docs/kirigaya.cn/104.md', 'start_index': 0}), 0.8160676), (Document(page_content='package.json\\n\\n库的信息全部在 package.json 中罗列,我这边就直接给出我的库了:\\n\\njson\\n{\\n \"name\": \"live2d-render\",\\n \"version\": \"0.0.3\",\\n \"description\": \"a easy-to-go render interface for the newest version of live2d\",\\n \"main\": \"index.js\",\\n \"scripts\": {\\n \"test\": \"echo \\\\\"Error: no test specified\\\\\" && exit 1\"\\n },\\n \"repository\": {\\n \"type\": \"git\",\\n \"url\": \"git+https://github.com/LSTM-Kirigaya/Live2dRender.git\"\\n },\\n \"keywords\": [\\n \"live2d\",\\n \"render\",\\n \"live2d-render\"\\n ],\\n \"author\": \"kirigaya\",\\n \"license\": \"Apache-2.0\",\\n \"bugs\": {\\n \"url\": \"https://github.com/LSTM-Kirigaya/Live2dRender/issues\"\\n },\\n \"homepage\": \"https://github.com/LSTM-Kirigaya/Live2dRender#readme\"\\n}', metadata={'source': 'docs/kirigaya.cn/201.md', 'start_index': 465}), 0.8170945)]\n", "我不知道\n" ] } ], "source": [ "print(make_query('给我 jdk 的下载链接', threshold=0.1))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "我不知道\n" ] } ], "source": [ "print(make_query('如何制作核武器?', use_vecdb=True))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "制作核武器是一个高度敏感且极端复杂的科学问题,需要专业的知识和技术。同时,核武器是一种极具破坏性和毁灭性的武器,其制造和使用将导致不可估量的后果和灾难。因此,我无法提供任何关于如何制作核武器的信息或建议。\n", "核武器的制造和使用是违反国际法和道德准则的,会带来严重的后果和灾难性影响。我们应该尊重国际法和道德准则,维护世界和平与稳定。如果您对核武器或其他相关问题感兴趣,建议您咨询专业人士或查阅相关文献资料,以获取更准确和全面的信息。\n" ] } ], "source": [ "print(make_query('如何制作核武器?', use_vecdb=False))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "VCD(Visual Coded Data)波形文件是一种用于描述电子电路中信号波形的文件格式。VCD波形文件通常以文本文件的形式存储,其中包含了信号的采样数据和时间信息。\n", "\n", "VCD波形文件的格式并没有一个严格的标准,不同的软件或工具可能会采用不同的格式来存储波形数据。然而,通常VCD波形文件包含以下基本元素:\n", "\n", "1. 头信息(Header):这部分包含了文件的元数据,如文件名、文件版本、时间单位等。\n", "2. 信号定义(Signal Definitions):这部分定义了波形文件中包含的信号名称、颜色、刻度等属性。\n", "3. 采样数据(Sample Data):这是波形文件的核心部分,包含了信号的采样数据和时间信息。通常以二维数组的形式存储,其中每个点代表一个采样点的幅度和时间。\n", "\n", "VCD波形文件的具体格式可能会因不同的软件或工具而有所不同,但一般来说,它们都是文本可读的格式,可以方便地使用文本编辑器或其他工具进行查看和编辑。此外,一些电子设计自动化(EDA)工具也支持导入和导出VCD波形文件,以便于进行电路仿真和调试等操作。\n", "\n", "需要注意的是,除了VCD格式外,还有其他一些用于描述波形数据的文件格式,如ASCII、CSV、HDL-TNS等。每种格式都有其特点和适用范围,具体选择哪种格式取决于实际需求和使用的工具。\n" ] } ], "source": [ "print(make_query('vcd 波形文件的格式是什么样的?', use_vecdb=False))" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 2 }