[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-SeanLee97--AnglE":3,"tool-SeanLee97--AnglE":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",148568,2,"2026-04-09T23:34:24",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":32,"env_os":91,"env_gpu":92,"env_ram":91,"env_deps":93,"category_tags":102,"github_topics":104,"view_count":32,"oss_zip_url":80,"oss_zip_packed_at":80,"status":17,"created_at":125,"updated_at":126,"faqs":127,"releases":163},6155,"SeanLee97\u002FAnglE","AnglE","Train and Infer Powerful Sentence Embeddings with AnglE | 🔥 SOTA on STS and MTEB Leaderboard","AnglE 是一个专注于训练和推理高性能句子嵌入（Sentence Embeddings）的开源框架。它源自 ACL 2024 收录的论文，旨在解决传统方法在语义文本相似度任务中表现不足的问题，帮助开发者轻松构建在 STS 和 MTEB 权威榜单上达到最先进水平（SOTA）的模型。\n\n无论是算法研究人员还是工程开发者，都能通过 AnglE 仅用几行代码即可完成从 BERT 系列到大型语言模型（如 LLaMA、Qwen）的嵌入模型训练与推理。其核心亮点在于独创的\"AnglE 损失函数”，通过角度优化策略显著提升了向量表示的质量。此外，它还兼容对比损失、CoSENT 及最新的 Espresso 损失等多种训练目标，并支持单卡或多卡分布式训练，具备极高的灵活性。\n\n凭借强大的性能，基于 AnglE 训练的模型曾多次刷新 MTEB 榜单纪录，广泛应用于通用语义搜索、代码相似度匹配及医疗文本分析等场景。如果你希望快速复现前沿成果或定制专属的高质量嵌入模型，AnglE 提供了一个高效且专业的解决方案。","\u003Csmall>EN | [简体中文](README_zh.md) \u003C\u002Fsmall>\n\n# AnglE 📐\n> \u003Csmall>Sponsored by \u003Ca href=\"https:\u002F\u002Fwww.mixedbread.ai\u002F\">Mixedbread\u003C\u002Fa>\u003C\u002Fsmall>\n\n**For more detailed usage, please read the 📘 document:** https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Findex.html\n\n\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FArxiv-2309.12871-yellow.svg?style=flat-square\" alt=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fangle_emb\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fangle_emb?style=flat-square\" alt=\"PyPI version\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fangle_emb\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fangle_emb?style=flat-square\" alt=\"PyPI Downloads\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Findex.html\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FSeanLee97_AnglE_readme_337a1e47d97d.png\" alt=\"Read the docs\" \u002F>\n\u003C\u002Fa>\n\n\n📢 **Train\u002FInfer Powerful Sentence Embeddings with AnglE.**\nThis library is from the paper: [AnglE: Angle-optimized Text Embeddings](https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871). It allows for training state-of-the-art BERT\u002FLLM-based sentence embeddings with just a few lines of code. AnglE is also a general sentence embedding inference framework, allowing for infering a variety of transformer-based sentence embeddings.\n\n## ✨ Features\n\n**Loss**:\n- 📐 AnglE loss (ACL24)\n- ⚖ Contrastive loss\n- 📏 CoSENT loss\n- ☕️ Espresso loss (ICLR 2025, a.k.a 2DMSE, detail: [README_ESE](README_ESE.md))\n\n**Backbones**:\n- BERT-based models (BERT, RoBERTa, ModernBERT, etc.)\n- LLM-based models (LLaMA, Mistral, Qwen, etc.)\n- Bi-directional LLM-based models (LLaMA, Mistral, Qwen, OpenELMo, etc.. refer to: https:\u002F\u002Fgithub.com\u002FWhereIsAI\u002FBiLLM)\n\n**Training**:\n- Single-GPU training\n- Multi-GPU training\n\n\n> \u003Ca href=\"http:\u002F\u002Fmakeapullrequest.com\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg?style=flat-square\" alt=\"http:\u002F\u002Fmakeapullrequest.com\" \u002F>\u003C\u002Fa> \n    More features will be added in the future. \n\n## 🏆 Achievements\n\n📅  May 16, 2024 | Paper \"[AnglE: Angle-optimized Text Embeddings](https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871)\" is accepted by ACL 2024 Main Conference.\n\n📅  Mar 13, 2024 | Paper \"[BeLLM: Backward Dependency Enhanced Large Language Model for Sentence Embeddings](https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.05296)\" is accepted by NAACL 2024 Main Conference.\n\n\n📅  Mar 8, 2024 | 🍞 [mixedbread's embedding](https:\u002F\u002Fwww.mixedbread.ai\u002Fblog\u002Fmxbai-embed-large-v1) ([mixedbread-ai\u002Fmxbai-embed-large-v1](https:\u002F\u002Fhuggingface.co\u002Fmixedbread-ai\u002Fmxbai-embed-large-v1)) achieves SOTA on the [MTEB Leaderboard](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fmteb\u002Fleaderboard) with an average score of **64.68**! The model is trained using AnglE. Congrats mixedbread!\n\n\n📅  Dec 4, 2023 | Our universal sentence embedding [WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1) achieves SOTA on the [MTEB Leaderboard](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fmteb\u002Fleaderboard) with an average score of **64.64**! The model is trained using AnglE.\n\n\n📅 Dec, 2023 | AnglE achieves SOTA performance on the STS Bechmark Semantic Textual Similarity! \n\n\n## 🤗 Official Pretrained Models\n\nBERT-based models:\n\n|  🤗 HF | Max Tokens | Pooling Strategy | Scenario |\n|----|------|------|------|\n| [WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1) | 512 | cls | English, General-purpose |\n| [WhereIsAI\u002FUAE-Code-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Code-Large-V1) |  512 | cls | Code Similarity |\n| [WhereIsAI\u002Fpubmed-angle-base-en](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002Fpubmed-angle-base-en) |  512 | cls | Medical Similarity |\n| [WhereIsAI\u002Fpubmed-angle-large-en](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002Fpubmed-angle-large-en) |  512 | cls | Medical Similarity |\n\nLLM-based models:\n\n| 🤗 HF (lora weight) | Backbone | Max Tokens | Prompts |  Pooling Strategy | Scenario  |\n|----|------|------|------|------|------|\n| [SeanLee97\u002Fangle-llama-13b-nli](https:\u002F\u002Fhuggingface.co\u002FSeanLee97\u002Fangle-llama-13b-nli) | NousResearch\u002FLlama-2-13b-hf | 4096 | `Prompts.A` | last token | English, Similarity Measurement | \n| [SeanLee97\u002Fangle-llama-7b-nli-v2](https:\u002F\u002Fhuggingface.co\u002FSeanLee97\u002Fangle-llama-7b-nli-v2) | NousResearch\u002FLlama-2-7b-hf | 4096 | `Prompts.A` | last token | English, Similarity Measurement | \n\n\n**💡 You can find more third-party embeddings trained with AnglE in [HuggingFace Collection](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FSeanLee97\u002Fangle-based-embeddings-669a181354729d168a6ead9b)**\n\n\n## 🚀 Quick Start\n\n### ⬇️ Installation\n\nuse uv \n\n```bash\nuv pip install -U angle-emb\n```\n\nor pip\n\n```bash\npip install -U angle-emb\n```\n\n---\n\n### 🔍 Inference\n\n#### 1️⃣ BERT-based Models\n[![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\n**Option A: With Prompts (for Retrieval Tasks)**\n\nUse prompts with `{text}` as placeholder. Check available prompts via `Prompts.list_prompts()`.\n\n```python\nfrom angle_emb import AnglE, Prompts\nfrom angle_emb.utils import cosine_similarity\n\n# Load model\nangle = AnglE.from_pretrained('WhereIsAI\u002FUAE-Large-V1', pooling_strategy='cls').cuda()\n\n# Encode query with prompt, documents without prompt\nqv = angle.encode(['what is the weather?'], to_numpy=True, prompt=Prompts.C)\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'it is rainy today.',\n    'i am going to bed'\n], to_numpy=True)\n\n# Calculate similarity\nfor dv in doc_vecs:\n    print(cosine_similarity(qv[0], dv))\n```\n\n**Option B: Without Prompts (for Similarity Tasks)**\n\n```python\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# Load model\nangle = AnglE.from_pretrained('WhereIsAI\u002FUAE-Large-V1', pooling_strategy='cls').cuda()\n\n# Encode documents\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'The weather is very good!',\n    'i am going to bed'\n])\n\n# Calculate pairwise similarity\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 2️⃣ LLM-based Models\n[![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\nFor LoRA-based models, specify both the backbone model and LoRA weights. **Always set `is_llm=True`** for LLM models.\n\n```python\nimport torch\nfrom angle_emb import AnglE, Prompts\nfrom angle_emb.utils import cosine_similarity\n\n# Load LLM with LoRA weights\nangle = AnglE.from_pretrained(\n    'NousResearch\u002FLlama-2-7b-hf',\n    pretrained_lora_path='SeanLee97\u002Fangle-llama-7b-nli-v2',\n    pooling_strategy='last',\n    is_llm=True,\n    torch_dtype=torch.float16\n).cuda()\n\n# Encode with prompt\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'The weather is very good!',\n    'i am going to bed'\n], prompt=Prompts.A)\n\n# Calculate similarity\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 3️⃣ BiLLM-based Models\n[![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\nEnable bidirectional LLMs with `apply_billm=True` and specify the model class.\n\n```python\nimport os\nimport torch\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# Set BiLLM environment variable\nos.environ['BiLLM_START_INDEX'] = '31'\n\n# Load BiLLM model\nangle = AnglE.from_pretrained(\n    'NousResearch\u002FLlama-2-7b-hf',\n    pretrained_lora_path='SeanLee97\u002Fbellm-llama-7b-nli',\n    pooling_strategy='last',\n    is_llm=True,\n    apply_billm=True,\n    billm_model_class='LlamaForCausalLM',\n    torch_dtype=torch.float16\n).cuda()\n\n# Encode with custom prompt\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'The weather is very good!',\n    'i am going to bed'\n], prompt='The representative word for sentence {text} is:\"')\n\n# Calculate similarity\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 4️⃣ Espresso\u002FMatryoshka Models\n[![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\nTruncate layers and embedding dimensions for flexible model compression.\n\n```python\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# Load model\nangle = AnglE.from_pretrained('mixedbread-ai\u002Fmxbai-embed-2d-large-v1', pooling_strategy='cls').cuda()\n\n# Truncate to specific layer\nangle = angle.truncate_layer(layer_index=22)\n\n# Encode with truncated embedding size\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'The weather is very good!',\n    'i am going to bed'\n], embedding_size=768)\n\n# Calculate similarity\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 5️⃣ Third-party Models\n\nLoad any transformer-based models (e.g., `sentence-transformers`, `BAAI\u002Fbge`, etc.) using AnglE.\n\n```python\nfrom angle_emb import AnglE\n\n# Load third-party model\nmodel = AnglE.from_pretrained('mixedbread-ai\u002Fmxbai-embed-large-v1', pooling_strategy='cls').cuda()\n\n# Encode text\nvec = model.encode('hello world', to_numpy=True)\nprint(vec)\n```\n\n---\n\n### ⚡ Batch Inference\n\nSpeed up inference with the `batched` library (recommended for large-scale processing).\n\n```bash\nuv pip install batched\n```\n\n```python\nimport batched\nfrom angle_emb import AnglE\n\n# Load model\nmodel = AnglE.from_pretrained(\"WhereIsAI\u002FUAE-Large-V1\", pooling_strategy='cls').cuda()\n\n# Enable dynamic batching\nmodel.encode = batched.dynamically(model.encode, batch_size=64)\n\n# Encode large batch\nvecs = model.encode([\n    'The weather is great!',\n    'The weather is very good!',\n    'i am going to bed'\n] * 50)\n```\n\n## 🕸️ Custom Training\n\n> 💡 For complete details, see the [official training documentation](https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Fnotes\u002Ftraining.html).\n\n---\n\n### 🗂️ Step 1: Prepare Your Dataset\n\nAnglE supports three dataset formats. Choose based on your task:\n\n| Format | Columns | Description | Use Case |\n|--------|---------|-------------|----------|\n| **Format A** | `text1`, `text2`, `label` | Paired texts with similarity scores (0-1) | Similarity scoring |\n| **Format B** | `query`, `positive` | Query-document pairs | Retrieval without hard negatives |\n| **Format C** | `query`, `positive`, `negative` | Query with positive and negative samples | Contrastive learning |\n\n**Notes:**\n- All formats use HuggingFace `datasets.Dataset`\n- `text1`, `text2`, `query`, `positive`, and `negative` can be `str` or `List[str]` (random sampling for lists)\n\n---\n\n### 🚂 Step 2: Training Methods\n\n#### Option A: CLI Training (Recommended)\n\n**Single GPU:**\n\n```bash\nCUDA_VISIBLE_DEVICES=0 angle-trainer --help\n```\n\n**Multi-GPU with FSDP:**\n\n```bash\nCUDA_VISIBLE_DEVICES=0,1,2,3 WANDB_MODE=disabled accelerate launch \\\n  --multi_gpu \\\n  --num_processes 4 \\\n  --main_process_port 2345 \\\n  --config_file examples\u002FFSDP\u002Ffsdp_config.yaml \\\n  -m angle_emb.angle_trainer \\\n  --gradient_checkpointing 1 \\\n  --use_reentrant 0 \\\n  ...\n```\n\n**Multi-GPU (Standard):**\n\n```bash\nCUDA_VISIBLE_DEVICES=0,1,2,3 WANDB_MODE=disabled accelerate launch \\\n  --multi_gpu \\\n  --num_processes 4 \\\n  --main_process_port 2345 \\\n  -m angle_emb.angle_trainer \\\n  --model_name_or_path YOUR_MODEL \\\n  --train_name_or_path YOUR_DATASET \\\n  ...\n```\n\n📁 More examples: [examples\u002FTraining](examples\u002FTraining)\n\n---\n\n#### Option B: Python API Training\n[![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1h28jHvv_x-0fZ0tItIMjf8rJGp3GcO5V?usp=sharing)\n\n```python\nfrom datasets import load_dataset\nfrom angle_emb import AnglE\n\n# Step 1: Load pretrained model\nangle = AnglE.from_pretrained(\n    'SeanLee97\u002Fangle-bert-base-uncased-nli-en-v1',\n    max_length=128,\n    pooling_strategy='cls'\n).cuda()\n\n# Step 2: Prepare dataset (Format A example)\nds = load_dataset('mteb\u002Fstsbenchmark-sts')\nds = ds.map(lambda obj: {\n    \"text1\": str(obj[\"sentence1\"]),\n    \"text2\": str(obj['sentence2']),\n    \"label\": obj['score']\n})\nds = ds.select_columns([\"text1\", \"text2\", \"label\"])\n\n# Step 3: Train the model\nangle.fit(\n    train_ds=ds['train'].shuffle(),\n    valid_ds=ds['validation'],\n    output_dir='ckpts\u002Fsts-b',\n    batch_size=32,\n    epochs=5,\n    learning_rate=2e-5,\n    save_steps=100,\n    eval_steps=1000,\n    warmup_steps=0,\n    gradient_accumulation_steps=1,\n    loss_kwargs={\n        'cosine_w': 1.0,\n        'ibn_w': 1.0,\n        'angle_w': 0.02,\n        'cosine_tau': 20,\n        'ibn_tau': 20,\n        'angle_tau': 20\n    },\n    fp16=True,\n    logging_steps=100\n)\n\n# Step 4: Evaluate\ncorrcoef = angle.evaluate(ds['test'])\nprint('Spearman\\'s corrcoef:', corrcoef)\n```\n\n---\n\n### ⚙️ Advanced Configuration\n\n#### Training Special Models\n\n| Model Type | CLI Flags | Description |\n|------------|-----------|-------------|\n| **LLM** | `--is_llm 1` + LoRA params | Must manually enable LLM mode |\n| **BiLLM** | `--apply_billm 1 --billm_model_class LlamaForCausalLM` | Bidirectional LLMs ([guide](https:\u002F\u002Fgithub.com\u002FWhereIsAI\u002FBiLLM)) |\n| **Espresso (ESE)** | `--apply_ese 1 --ese_kl_temperature 1.0 --ese_compression_size 256` | Matryoshka-style embeddings |\n\n#### Applying Prompts\n\n| Format | Flag | Applies To |\n|--------|------|------------|\n| Format A | `--text_prompt \"text: {text}\"` | Both `text1` and `text2` |\n| Format B\u002FC | `--query_prompt \"query: {text}\"` | `query` field |\n| Format B\u002FC | `--doc_prompt \"document: {text}\"` | `positive` and `negative` fields |\n\n#### Column Mapping (Legacy Compatibility)\n\nAdapt old datasets without modification:\n\n```bash\n# CLI\n--column_rename_mapping \"text:query\"\n\n# Python\ncolumn_rename_mapping={\"text\": \"query\"}\n```\n\n#### Model Conversion\n\nConvert trained models to `sentence-transformers` format:\n\n```bash\npython scripts\u002Fconvert_to_sentence_transformers.py --help\n```\n\n---\n\n### 💡 Fine-tuning Tips\n\n📖 [Full documentation](https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Fnotes\u002Ftraining.html#fine-tuning-tips)\n\n| Format | Recommendation |\n|--------|----------------|\n| **Format A** | Increase `cosine_w` or decrease `ibn_w` |\n| **Format B** | Only tune `ibn_w` and `ibn_tau` |\n| **Format C** | Set `cosine_w=0`, `angle_w=0.02`, and configure `cln_w` + `ibn_w` |\n\n**Prevent Catastrophic Forgetting:**\n- Set `teacher_name_or_path` for knowledge distillation\n- Use same model path for self-distillation\n- ⚠️ Ensure teacher and student use the **same tokenizer**\n\n---\n\n### 🔄 Integration with sentence-transformers\n\n| Task | Status | Notes |\n|------|--------|-------|\n| **Training** | ⚠️ Partial | SentenceTransformers has [AnglE loss](https:\u002F\u002Fsbert.net\u002Fdocs\u002Fpackage_reference\u002Fsentence_transformer\u002Flosses.html#angleloss), but use official `angle_emb` for best results |\n| **Inference** | ✅ Full | Convert trained models: `examples\u002Fconvert_to_sentence_transformers.py` |\n\n\n# 🫡 Citation\n\nIf you use our code and pre-trained models, please support us by citing our work as follows:\n\n```bibtex\n@article{li2023angle,\n  title={AnglE-optimized Text Embeddings},\n  author={Li, Xianming and Li, Jing},\n  journal={arXiv preprint arXiv:2309.12871},\n  year={2023}\n}\n```\n\n# 📜 ChangeLogs\n\n| 📅 | Description |\n|----|------|\n| 2025 Jan |  **v0.6.0 - Major refactoring** 🎉: \u003Cbr\u002F>• Removed `AngleDataTokenizer` - no need to pre-tokenize datasets!\u003Cbr\u002F>• Removed `DatasetFormats` class - use string literals ('A', 'B', 'C')\u003Cbr\u002F>• Removed auto-detection of LLM models - set `is_llm` manually\u003Cbr\u002F>• Renamed `--prompt_template` to `--text_prompt` (Format A only)\u003Cbr\u002F>• Added `--query_prompt` and `--doc_prompt` for Format B\u002FC\u003Cbr\u002F>• Added `--column_rename_mapping` to adapt old datasets without modification\u003Cbr\u002F>• Updated data formats: Format B\u002FC now use `query`, `positive`, `negative` fields\u003Cbr\u002F>• Support list-based sampling in Format B\u002FC\u003Cbr\u002F>• Updated examples to use `accelerate launch`\u003Cbr\u002F>• See [MIGRATION_GUIDE.md](MIGRATION_GUIDE.md) for upgrade instructions |\n| 2024 May 21 |  support Espresso Sentence Embeddings  |\n| 2024 Feb 7 |  support training with only positive pairs (Format C: query, positive)  |\n| 2023 Dec 4 |  Release a universal English sentence embedding model: [WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1)  |\n| 2023 Nov 2 |  Release an English pretrained model: `SeanLee97\u002Fangle-llama-13b-nli` |\n| 2023 Oct 28 |  Release two chinese pretrained models: `SeanLee97\u002Fangle-roberta-wwm-base-zhnli-v1` and `SeanLee97\u002Fangle-llama-7b-zhnli-v1`; Add chinese README.md |\n\n# 📧 Contact\n\nIf you have any questions or suggestions, please feel free to contact us via email: xmlee97@gmail.com\n\n# © License\n\nThis project is licensed under the MIT License.\nFor the pretrained models, please refer to the corresponding license of the models.\n","\u003Csmall>EN | [简体中文](README_zh.md) \u003C\u002Fsmall>\n\n# AnglE 📐\n> \u003Csmall>由 \u003Ca href=\"https:\u002F\u002Fwww.mixedbread.ai\u002F\">Mixedbread\u003C\u002Fa> 赞助\u003C\u002Fsmall>\n\n**如需更详细的使用说明，请参阅 📘 文档：** https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Findex.html\n\n\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FArxiv-2309.12871-yellow.svg?style=flat-square\" alt=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fangle_emb\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fangle_emb?style=flat-square\" alt=\"PyPI 版本\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fangle_emb\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fangle_emb?style=flat-square\" alt=\"PyPI 下载量\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Findex.html\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FSeanLee97_AnglE_readme_337a1e47d97d.png\" alt=\"Read the docs\" \u002F>\n\u003C\u002Fa>\n\n\n📢 **使用 AnglE 训练\u002F推理强大的句子嵌入。**\n该库源自论文：[AnglE: 角度优化的文本嵌入](https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871)。它只需几行代码即可训练最先进的基于 BERT\u002FLLM 的句子嵌入。AnglE 也是一个通用的句子嵌入推理框架，支持多种基于 Transformer 的句子嵌入的推理。\n\n## ✨ 特性\n\n**损失函数**：\n- 📐 AnglE 损失（ACL24）\n- ⚖ 对比损失\n- 📏 CoSENT 损失\n- ☕️ Espresso 损失（ICLR 2025，又名 2DMSE，详情见：[README_ESE](README_ESE.md)）\n\n**骨干模型**：\n- 基于 BERT 的模型（BERT、RoBERTa、ModernBERT 等）\n- 基于 LLM 的模型（LLaMA、Mistral、Qwen 等）\n- 双向 LLM 基础模型（LLaMA、Mistral、Qwen、OpenELMo 等，详情请参阅：https:\u002F\u002Fgithub.com\u002FWhereIsAI\u002FBiLLM）\n\n**训练**：\n- 单 GPU 训练\n- 多 GPU 训练\n\n\n> \u003Ca href=\"http:\u002F\u002Fmakeapullrequest.com\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg?style=flat-square\" alt=\"http:\u002F\u002Fmakeapullrequest.com\" \u002F>\u003C\u002Fa> \n    未来还将添加更多功能。 \n\n## 🏆 成就\n\n📅 2024年5月16日 | 论文“[AnglE: 角度优化的文本嵌入](https:\u002F\u002Farxiv.org\u002Fabs\u002F2309.12871)”被 ACL 2024 主会场接收。\n\n📅 2024年3月13日 | 论文“[BeLLM: 面向句子嵌入的反向依赖增强大型语言模型](https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.05296)”被 NAACL 2024 主会场接收。\n\n\n📅 2024年3月8日 | 🍞 [mixedbread 的嵌入](https:\u002F\u002Fwww.mixedbread.ai\u002Fblog\u002Fmxbai-embed-large-v1) ([mixedbread-ai\u002Fmxbai-embed-large-v1](https:\u002F\u002Fhuggingface.co\u002Fmixedbread-ai\u002Fmxbai-embed-large-v1)) 在 [MTEB Leaderboard](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fmteb\u002Fleaderboard) 上以平均分 **64.68** 获得 SOTA！该模型使用 AnglE 训练而成。恭喜 mixedbread！\n\n\n📅 2023年12月4日 | 我们的通用句子嵌入 [WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1) 在 [MTEB Leaderboard](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fmteb\u002Fleaderboard) 上以平均分 **64.64** 获得 SOTA！该模型同样使用 AnglE 训练而成。\n\n\n📅 2023年12月 | AnglE 在 STS 语义文本相似度基准测试中达到 SOTA 表现！\n\n\n## 🤗 官方预训练模型\n\n基于 BERT 的模型：\n\n|  🤗 HF | 最大标记数 | 池化策略 | 场景 |\n|----|------|------|------|\n| [WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1) | 512 | cls | 英语，通用 |\n| [WhereIsAI\u002FUAE-Code-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Code-Large-V1) | 512 | cls | 代码相似性 |\n| [WhereIsAI\u002Fpubmed-angle-base-en](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002Fpubmed-angle-base-en) | 512 | cls | 医学相似性 |\n| [WhereIsAI\u002Fpubmed-angle-large-en](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002Fpubmed-angle-large-en) | 512 | cls | 医学相似性 |\n\n基于 LLM 的模型：\n\n| 🤗 HF (lora 权重) | 骨干模型 | 最大标记数 | 提示词 | 池化策略 | 场景 |\n|----|------|------|------|------|------|\n| [SeanLee97\u002Fangle-llama-13b-nli](https:\u002F\u002Fhuggingface.co\u002FSeanLee97\u002Fangle-llama-13b-nli) | NousResearch\u002FLlama-2-13b-hf | 4096 | `Prompts.A` | 最后一个 token | 英语，相似性测量 |\n| [SeanLee97\u002Fangle-llama-7b-nli-v2](https:\u002F\u002Fhuggingface.co\u002FSeanLee97\u002Fangle-llama-7b-nli-v2) | NousResearch\u002FLlama-2-7b-hf | 4096 | `Prompts.A` | 最后一个 token | 英语，相似性测量 |\n\n\n**💡 您可以在 [HuggingFace Collection](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FSeanLee97\u002Fangle-based-embeddings-669a181354729d168a6ead9b) 中找到更多使用 AnglE 训练的第三方嵌入。**\n\n\n## 🚀 快速入门\n\n### ⬇️ 安装\n\n使用 uv\n\n```bash\nuv pip install -U angle-emb\n```\n\n或 pip\n\n```bash\npip install -U angle-emb\n```\n\n---\n\n### 🔍 推理\n\n#### 1️⃣ 基于 BERT 的模型\n[![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\n**选项 A：使用提示词（用于检索任务）**\n\n使用包含 `{text}` 占位符的提示词。可通过 `Prompts.list_prompts()` 查看可用提示词。\n\n```python\nfrom angle_emb import AnglE, Prompts\nfrom angle_emb.utils import cosine_similarity\n\n# 加载模型\nangle = AnglE.from_pretrained('WhereIsAI\u002FUAE-Large-V1', pooling_strategy='cls').cuda()\n\n# 使用提示词编码查询，不使用提示词编码文档\nqv = angle.encode(['天气怎么样？'], to_numpy=True, prompt=Prompts.C)\ndoc_vecs = angle.encode([\n    '天气真好！',\n    '今天下雨了。',\n    '我要去睡觉了'\n], to_numpy=True)\n\n# 计算相似度\nfor dv in doc_vecs:\n    print(cosine_similarity(qv[0], dv))\n```\n\n**选项 B：不使用提示词（用于相似性任务）**\n\n```python\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# 加载模型\nangle = AnglE.from_pretrained('WhereIsAI\u002FUAE-Large-V1', pooling_strategy='cls').cuda()\n\n# 编码文档\ndoc_vecs = angle.encode([\n    '天气真好！',\n    '天气非常好！',\n    '我要去睡觉了'\n])\n\n# 计算两两相似度\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 2️⃣ 基于 LLM 的模型\n[![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\n对于基于 LoRA 的模型，需同时指定骨干模型和 LoRA 权重。**对于 LLM 模型，务必设置 `is_llm=True`**。\n\n```python\nimport torch\nfrom angle_emb import AnglE, Prompts\nfrom angle_emb.utils import cosine_similarity\n\n# 加载带有 LoRA 权重的 LLM\nangle = AnglE.from_pretrained(\n    'NousResearch\u002FLlama-2-7b-hf',\n    pretrained_lora_path='SeanLee97\u002Fangle-llama-7b-nli-v2',\n    pooling_strategy='last',\n    is_llm=True,\n    torch_dtype=torch.float16\n).cuda()\n\n# 使用提示词编码\ndoc_vecs = angle.encode([\n    '天气真好！',\n    '天气非常好！',\n    '我要去睡觉了'\n], prompt=Prompts.A)\n\n# 计算相似度\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 3️⃣ 基于 BiLLM 的模型\n[![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\n通过设置 `apply_billm=True` 并指定模型类，启用双向 LLM。\n\n```python\nimport os\nimport torch\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# 设置 BiLLM 环境变量\nos.environ['BiLLM_START_INDEX'] = '31'\n\n# 加载 BiLLM 模型\nangle = AnglE.from_pretrained(\n    'NousResearch\u002FLlama-2-7b-hf',\n    pretrained_lora_path='SeanLee97\u002Fbellm-llama-7b-nli',\n    pooling_strategy='last',\n    is_llm=True,\n    apply_billm=True,\n    billm_model_class='LlamaForCausalLM',\n    torch_dtype=torch.float16\n).cuda()\n\n# 使用自定义提示进行编码\ndoc_vecs = angle.encode([\n    '天气真好！',\n    '天气非常好！',\n    '我要去睡觉了'\n], prompt='句子 {text} 的代表性词语是：')\n\n# 计算相似度\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 4️⃣ 浓缩版\u002F套娃模型\n[![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1QJcA2Mvive4pBxWweTpZz9OgwvE42eJZ?usp=sharing)\n\n通过截断层和嵌入维度，实现灵活的模型压缩。\n\n```python\nfrom angle_emb import AnglE\nfrom angle_emb.utils import cosine_similarity\n\n# 加载模型\nangle = AnglE.from_pretrained('mixedbread-ai\u002Fmxbai-embed-2d-large-v1', pooling_strategy='cls').cuda()\n\n# 截断到特定层\nangle = angle.truncate_layer(layer_index=22)\n\n# 使用截断后的嵌入尺寸进行编码\ndoc_vecs = angle.encode([\n    '天气真好！',\n    '天气非常好！',\n    '我要去睡觉了'\n], embedding_size=768)\n\n# 计算相似度\nfor i, dv1 in enumerate(doc_vecs):\n    for dv2 in doc_vecs[i+1:]:\n        print(cosine_similarity(dv1, dv2))\n```\n\n---\n\n#### 5️⃣ 第三方模型\n\n使用 AnglE 可以加载任何基于 Transformer 的模型（例如 `sentence-transformers`、`BAAI\u002Fbge` 等）。\n\n```python\nfrom angle_emb import AnglE\n\n# 加载第三方模型\nmodel = AnglE.from_pretrained('mixedbread-ai\u002Fmxbai-embed-large-v1', pooling_strategy='cls').cuda()\n\n# 编码文本\nvec = model.encode('hello world', to_numpy=True)\nprint(vec)\n```\n\n---\n\n### ⚡ 批量推理\n\n使用 `batched` 库加速推理（推荐用于大规模处理）。\n\n```bash\nuv pip install batched\n```\n\n```python\nimport batched\nfrom angle_emb import AnglE\n\n# 加载模型\nmodel = AnglE.from_pretrained(\"WhereIsAI\u002FUAE-Large-V1\", pooling_strategy='cls').cuda()\n\n# 启用动态批处理\nmodel.encode = batched.dynamically(model.encode, batch_size=64)\n\n# 编码大批量数据\nvecs = model.encode([\n    '天气真好！',\n    '天气非常好！',\n    '我要去睡觉了'\n] * 50)\n```\n\n## 🕸️ 自定义训练\n\n> 💡 完整详情请参阅 [官方训练文档](https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Fnotes\u002Ftraining.html)。\n\n---\n\n### 🗂️ 第一步：准备数据集\n\nAnglE 支持三种数据集格式。请根据任务选择：\n\n| 格式 | 列 | 描述 | 使用场景 |\n|------|----|------|----------|\n| **格式 A** | `text1`, `text2`, `label` | 成对文本及相似度分数（0–1） | 相似度评分 |\n| **格式 B** | `query`, `positive` | 查询-文档对 | 检索任务，无需硬负样本 |\n| **格式 C** | `query`, `positive`, `negative` | 查询及其正负样本 | 对比学习 |\n\n**注意事项：**\n- 所有格式均使用 HuggingFace 的 `datasets.Dataset`\n- `text1`、`text2`、`query`、`positive` 和 `negative` 可以是字符串或字符串列表（列表时会随机采样）\n\n---\n\n### 🚂 第二步：训练方法\n\n#### 方案 A：命令行训练（推荐）\n\n**单 GPU：**\n\n```bash\nCUDA_VISIBLE_DEVICES=0 angle-trainer --help\n```\n\n**多 GPU 与 FSDP：**\n\n```bash\nCUDA_VISIBLE_DEVICES=0,1,2,3 WANDB_MODE=disabled accelerate launch \\\n  --multi_gpu \\\n  --num_processes 4 \\\n  --main_process_port 2345 \\\n  --config_file examples\u002FFSDP\u002Ffsdp_config.yaml \\\n  -m angle_emb.angle_trainer \\\n  --gradient_checkpointing 1 \\\n  --use_reentrant 0 \\\n  ...\n```\n\n**多 GPU（标准方式）：**\n\n```bash\nCUDA_VISIBLE_DEVICES=0,1,2,3 WANDB_MODE=disabled accelerate launch \\\n  --multi_gpu \\\n  --num_processes 4 \\\n  --main_process_port 2345 \\\n  -m angle_emb.angle_trainer \\\n  --model_name_or_path YOUR_MODEL \\\n  --train_name_or_path YOUR_DATASET \\\n  ...\n```\n\n📁 更多示例：[examples\u002FTraining](examples\u002FTraining)\n\n---\n\n#### 方案 B：Python API 训练\n[![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1h28jHvv_x-0fZ0tItIMjf8rJGp3GcO5V?usp=sharing)\n\n```python\nfrom datasets import load_dataset\nfrom angle_emb import AnglE\n\n# 第一步：加载预训练模型\nangle = AnglE.from_pretrained(\n    'SeanLee97\u002Fangle-bert-base-uncased-nli-en-v1',\n    max_length=128,\n    pooling_strategy='cls'\n).cuda()\n\n# 第二步：准备数据集（格式 A 示例）\nds = load_dataset('mteb\u002Fstsbenchmark-sts')\nds = ds.map(lambda obj: {\n    \"text1\": str(obj[\"sentence1\"]),\n    \"text2\": str(obj['sentence2']),\n    \"label\": obj['score']\n})\nds = ds.select_columns([\"text1\", \"text2\", \"label\"])\n\n# 第三步：训练模型\nangle.fit(\n    train_ds=ds['train'].shuffle(),\n    valid_ds=ds['validation'],\n    output_dir='ckpts\u002Fsts-b',\n    batch_size=32,\n    epochs=5,\n    learning_rate=2e-5,\n    save_steps=100,\n    eval_steps=1000,\n    warmup_steps=0,\n    gradient_accumulation_steps=1,\n    loss_kwargs={\n        'cosine_w': 1.0,\n        'ibn_w': 1.0,\n        'angle_w': 0.02,\n        'cosine_tau': 20,\n        'ibn_tau': 20,\n        'angle_tau': 20\n    },\n    fp16=True,\n    logging_steps=100\n)\n\n# 第四步：评估\ncorrcoef = angle.evaluate(ds['test'])\nprint('Spearman 相关系数：', corrcoef)\n```\n\n---\n\n### ⚙️ 高级配置\n\n#### 训练特殊模型\n\n| 模型类型 | CLI 标志 | 描述 |\n|----------|----------|------|\n| **LLM** | `--is_llm 1` + LoRA 参数 | 必须手动启用 LLM 模式 |\n| **BiLLM** | `--apply_billm 1 --billm_model_class LlamaForCausalLM` | 双向 LLM（[指南](https:\u002F\u002Fgithub.com\u002FWhereIsAI\u002FBiLLM)） |\n| **浓缩版（ESE）** | `--apply_ese 1 --ese_kl_temperature 1.0 --ese_compression_size 256` | 套娃风格嵌入 |\n\n#### 应用提示词\n\n| 格式 | 标志 | 适用对象 |\n|------|------|----------|\n| 格式 A | `--text_prompt \"text: {text}\"` | 同时应用于 `text1` 和 `text2` |\n| 格式 B\u002FC | `--query_prompt \"query: {text}\"` | 仅适用于 `query` 字段 |\n| 格式 B\u002FC | `--doc_prompt \"document: {text}\"` | 仅适用于 `positive` 和 `negative` 字段 |\n\n#### 列映射（旧版兼容性）\n\n无需修改即可适配旧数据集：\n\n```bash\n# 命令行\n--column_rename_mapping \"text:query\"\n\n# Python\n列重命名映射={\"text\": \"query\"}\n```\n\n#### 模型转换\n\n将训练好的模型转换为 `sentence-transformers` 格式：\n\n```bash\npython scripts\u002Fconvert_to_sentence_transformers.py --help\n```\n\n---\n\n### 💡 微调技巧\n\n📖 [完整文档](https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Fnotes\u002Ftraining.html#fine-tuning-tips)\n\n| 格式 | 建议 |\n|--------|----------------|\n| **格式 A** | 增加 `cosine_w` 或减小 `ibn_w` |\n| **格式 B** | 仅调整 `ibn_w` 和 `ibn_tau` |\n| **格式 C** | 设置 `cosine_w=0`, `angle_w=0.02`, 并配置 `cln_w` + `ibn_w` |\n\n**防止灾难性遗忘：**\n- 设置 `teacher_name_or_path` 进行知识蒸馏\n- 自蒸馏时使用相同的模型路径\n- ⚠️ 确保教师模型和学生模型使用 **相同的分词器**\n\n---\n\n### 🔄 与 sentence-transformers 集成\n\n| 任务 | 状态 | 备注 |\n|------|--------|-------|\n| **训练** | ⚠️ 部分 | SentenceTransformers 提供了 [AnglE 损失](https:\u002F\u002Fsbert.net\u002Fdocs\u002Fpackage_reference\u002Fsentence_transformer\u002Flosses.html#angleloss)，但为了获得最佳效果，请使用官方的 `angle_emb` |\n| **推理** | ✅ 全面 | 可以通过 `examples\u002Fconvert_to_sentence_transformers.py` 转换训练好的模型 |\n\n\n# 🫡 引用\n\n如果您使用了我们的代码和预训练模型，请通过以下方式引用我们的工作以支持我们：\n\n```bibtex\n@article{li2023angle,\n  title={AnglE优化文本嵌入},\n  author={李贤明和李静},\n  journal={arXiv 预印本 arXiv:2309.12871},\n  year={2023}\n}\n```\n\n# 📜 更改日志\n\n| 📅 | 描述 |\n|----|------|\n| 2025年1月 |  **v0.6.0 - 重大重构** 🎉： \u003Cbr\u002F>• 移除 `AngleDataTokenizer` - 无需预先对数据集进行分词！\u003Cbr\u002F>• 移除 `DatasetFormats` 类 - 使用字符串字面量（'A', 'B', 'C'）\u003Cbr\u002F>• 移除 LLM 模型的自动检测 - 手动设置 `is_llm`\u003Cbr\u002F>• 将 `--prompt_template` 重命名为 `--text_prompt`（仅适用于格式 A）\u003Cbr\u002F>• 新增 `--query_prompt` 和 `--doc_prompt` 用于格式 B\u002FC\u003Cbr\u002F>• 新增 `--column_rename_mapping`，以便在不修改旧数据集的情况下适配\u003Cbr\u002F>• 更新数据格式：格式 B\u002FC 现在使用 `query`、`positive`、`negative` 字段\u003Cbr\u002F>• 支持格式 B\u002FC 中基于列表的采样\u003Cbr\u002F>• 更新示例，使用 `accelerate launch`\u003Cbr\u002F>• 请参阅 [MIGRATION_GUIDE.md](MIGRATION_GUIDE.md) 获取升级说明 |\n| 2024年5月21日 | 支持 Espresso 句子嵌入 |\n| 2024年2月7日 | 支持仅使用正样本对进行训练（格式 C：query, positive） |\n| 2023年12月4日 | 发布通用英语句子嵌入模型：[WhereIsAI\u002FUAE-Large-V1](https:\u002F\u002Fhuggingface.co\u002FWhereIsAI\u002FUAE-Large-V1) |\n| 2023年11月2日 | 发布英文预训练模型：`SeanLee97\u002Fangle-llama-13b-nli` |\n| 2023年10月28日 | 发布两款中文预训练模型：`SeanLee97\u002Fangle-roberta-wwm-base-zhnli-v1` 和 `SeanLee97\u002Fangle-llama-7b-zhnli-v1`；新增中文 README.md |\n\n# 📧 联系方式\n\n如果您有任何问题或建议，请随时通过电子邮件与我们联系：xmlee97@gmail.com\n\n# © 许可证\n\n本项目采用 MIT 许可证。关于预训练模型的许可信息，请参阅相应模型的许可证文件。","# AnglE 快速上手指南\n\nAnglE 是一个用于训练和推理高性能句子嵌入（Sentence Embeddings）的开源库，支持 BERT 和 LLM 架构，实现了 ACL 2024 论文提出的角度优化损失函数。\n\n## 1. 环境准备\n\n*   **系统要求**：Linux \u002F macOS \u002F Windows (推荐 Linux)\n*   **Python 版本**：3.8+\n*   **硬件要求**：\n    *   推理：CPU 或 GPU (CUDA 兼容)\n    *   训练：推荐 NVIDIA GPU (支持单卡及多卡 FSDP 训练)\n*   **前置依赖**：PyTorch, Transformers, Accelerate\n\n## 2. 安装步骤\n\n推荐使用 `uv` 进行快速安装，也可使用标准的 `pip`。\n\n**方式一：使用 uv (推荐)**\n```bash\nuv pip install -U angle-emb\n```\n\n**方式二：使用 pip**\n```bash\npip install -U angle-emb\n```\n\n> **提示**：如需加速下载，可在命令后添加国内镜像源，例如：`-i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n## 3. 基本使用\n\n### 3.1 模型推理 (Inference)\n\nAnglE 支持加载 HuggingFace 上的预训练模型进行向量化编码。\n\n#### 场景 A：基于 BERT 的模型 (通用检索\u002F相似度)\n\n```python\nfrom angle_emb import AnglE, Prompts\nfrom angle_emb.utils import cosine_similarity\n\n# 1. 加载模型 (自动下载)\n# pooling_strategy 根据模型类型选择 'cls' 或 'last'\nangle = AnglE.from_pretrained('WhereIsAI\u002FUAE-Large-V1', pooling_strategy='cls').cuda()\n\n# 2. 编码文本\n# 检索任务建议给 Query 添加 Prompt (如 Prompts.C)，文档通常不需要\nquery_vec = angle.encode(['what is the weather?'], to_numpy=True, prompt=Prompts.C)\ndoc_vecs = angle.encode([\n    'The weather is great!',\n    'it is rainy today.',\n    'i am going to bed'\n], to_numpy=True)\n\n# 3. 计算余弦相似度\nfor dv in doc_vecs:\n    score = cosine_similarity(query_vec[0], dv)\n    print(f\"Similarity: {score}\")\n```\n\n#### 场景 B：基于 LLM 的模型 (LoRA 微调)\n\n加载 LLM 基座模型及对应的 LoRA 权重时，**必须设置 `is_llm=True`**。\n\n```python\nimport torch\nfrom angle_emb import AnglE, Prompts\n\n# 加载 LLM 基座 + LoRA 权重\nangle = AnglE.from_pretrained(\n    'NousResearch\u002FLlama-2-7b-hf',\n    pretrained_lora_path='SeanLee97\u002Fangle-llama-7b-nli-v2',\n    pooling_strategy='last',\n    is_llm=True,\n    torch_dtype=torch.float16\n).cuda()\n\n# 编码 (LLM 模型通常强依赖 Prompt)\nvectors = angle.encode([\n    'The weather is great!',\n    'The weather is very good!'\n], prompt=Prompts.A)\n```\n\n### 3.2 批量推理优化\n\n处理大规模数据时，结合 `batched` 库可显著提升速度。\n\n```bash\nuv pip install batched\n```\n\n```python\nimport batched\nfrom angle_emb import AnglE\n\nmodel = AnglE.from_pretrained(\"WhereIsAI\u002FUAE-Large-V1\", pooling_strategy='cls').cuda()\n\n# 启用动态批处理\nmodel.encode = batched.dynamically(model.encode, batch_size=64)\n\n# 执行大批量编码\nvecs = model.encode(['text sample'] * 1000)\n```\n\n### 3.3 自定义训练 (Custom Training)\n\nAnglE 支持三种数据集格式，可通过 CLI 或 Python API 启动训练。\n\n**数据集格式示例 (Format C - 对比学习):**\n需包含 `query`, `positive`, `negative` 三列。\n\n**启动训练 (单卡 CLI 模式):**\n\n```bash\n# 查看帮助信息\nCUDA_VISIBLE_DEVICES=0 angle-trainer --help\n\n# 示例启动命令 (需替换实际路径)\nCUDA_VISIBLE_DEVICES=0 angle-trainer \\\n  --model_name_or_path bert-base-uncased \\\n  --train_name_or_path path\u002Fto\u002Fyour\u002Fdataset \\\n  --output_dir .\u002Fsaved_models \\\n  --num_train_epochs 3 \\\n  --per_device_train_batch_size 32 \\\n  --learning_rate 2e-5\n```\n\n> **注意**：完整训练参数配置及多卡 FSDP 训练方案，请参考官方文档：https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Fnotes\u002Ftraining.html","某医疗科技公司的算法团队正在构建一个智能文献检索系统，旨在帮助医生快速从海量 PubMed 论文中找到与特定病例最相关的研究资料。\n\n### 没有 AnglE 时\n- **语义理解偏差大**：传统嵌入模型难以捕捉医学术语间的深层逻辑，导致搜索“心肌梗死”时无法匹配到包含\"MI\"或“急性冠脉综合征”的关键论文。\n- **训练门槛高且耗时**：若要微调专业模型，需编写复杂的对比学习代码并手动调整损失函数，单卡训练效率低，多卡配置繁琐。\n- **效果遭遇瓶颈**：即便投入大量算力微调，模型在专业领域的语义相似度评测（STS）得分依然停滞不前，无法满足临床精准度要求。\n- **模型适配困难**：试图利用强大的 LLM（如 LLaMA）作为基座时，缺乏有效的双向依赖处理机制，导致推理速度慢且显存占用过高。\n\n### 使用 AnglE 后\n- **领域语义精准匹配**：利用 AnglE 预训练的医学专用模型（如 `pubmed-angle-large-en`），系统能准确识别同义词与上下位词，显著提升召回率。\n- **极简高效训练流程**：借助 AnglE 封装的 Angle Loss 和 CoSENT Loss，团队仅用几行代码即可启动单卡或多卡训练，快速迭代出定制化模型。\n- **刷新行业标杆性能**：基于 AnglE 优化的模型在 MTEB  leaderboard 上取得 SOTA 成绩，确保检索结果的相关性达到业界顶尖水平。\n- **灵活支持大模型架构**：直接调用 AnglE 对 LLM 的支持能力，轻松部署基于 LLaMA 等大模型的高精度嵌入服务，兼顾了性能与推理效率。\n\nAnglE 通过角度优化的损失函数和极简的训练框架，让开发者能以最低成本获得医疗垂直领域最先进的语义嵌入能力。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FSeanLee97_AnglE_e793b067.png","SeanLee97","Sean","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FSeanLee97_2af0a97a.jpg","Currently a traveler, a student, and a baker @mixedbread-ai .\r\nEx: @alipay\r\n","@mixedbread-ai","HK & Shanghai ","xmlee97@gmail.com","xmlee97",null,"https:\u002F\u002Fgithub.com\u002FSeanLee97",[83],{"name":84,"color":85,"percentage":86},"Python","#3572A5",100,567,38,"2026-04-02T23:20:22","MIT","未说明","训练和推理均支持 GPU 加速（代码示例中使用 .cuda()）。支持单卡和多卡训练（Multi-GPU with FSDP\u002FStandard）。具体显存大小取决于所选骨干模型（BERT 系列或 LLM 系列如 Llama-2-7b\u002F13b），LLM 模型通常需要较大显存（建议 16GB+ 并使用 float16）。未明确指定最低 CUDA 版本，但需兼容 PyTorch。",{"notes":94,"python":91,"dependencies":95},"1. 安装推荐使用 'uv pip install -U angle-emb' 或 'pip install -U angle-emb'。\n2. 多 GPU 训练需安装并配置 'accelerate'，支持 FSDP 策略。\n3. 推理大规模数据时建议安装 'batched' 库以启用动态批处理加速。\n4. 支持多种骨干网络：BERT 系列、LLM 系列（Llama, Mistral, Qwen 等）及双向 LLM（BiLLM）。\n5. 加载 LLM 模型时需设置 is_llm=True，若使用 LoRA 需指定 pretrained_lora_path。\n6. 支持 Espresso\u002FMatryoshka 模型压缩技术，可截断层数和嵌入维度。",[96,97,98,99,100,101],"angle-emb","torch","transformers","accelerate","datasets","batched",[103,14,35],"其他",[105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124],"llama","llama2","semantic-similarity","semantic-textual-similarity","sentence-embedding","stsbenchmark","text-embedding","sentence-embeddings","text-similarity","retrieval-augmented-generation","sentence-vector","text-vector","text2vec","embeddings","sts","mteb","rag","llm","dense-retrieval","information-retrieval","2026-03-27T02:49:30.150509","2026-04-10T15:53:37.811875",[128,133,138,143,148,153,158],{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},27869,"如何判断两个句子是否相似？模型支持直接预测标签吗？","该库不提供直接预测标签（分类任务）的函数，仅提供获取输入文本句向量（sentence embedding）的函数 `angle.encode(texts)`。若要判断两个句子是否相似，需计算它们句向量之间的余弦相似度。如果相似度较高，可视为相似对，否则为不相似。用户可以自行设定阈值来进行判断。评估通常使用斯皮尔曼相关系数（Spearman's correlation）。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F21",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},27870,"如何使用该模型提取代码片段（如 JavaScript 或 Solidity）的嵌入向量？","可以用于提取代码嵌入。对于基于 LLM 的模型推理，由于模型未专门针对句向量学习进行训练，建议通过添加提示词（prompt）来提升性能。使用方法如下：`angle.encode(..., prompt=\"Here is a prompt: {text}.\")`。如果是特定代码模型（如 Solidity），可直接指定 `model_name_or_path` 为对应模型（例如 `andrijdavid\u002FSolidity-Llama3-8b`），无需指定 `pretrained_lora_path`。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F84",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},27871,"UAE 任务中“非检索（Non-Retrieval）”与“检索（Retrieval）”有什么区别？","虽然 Issue 中未给出详尽的定义对比，但维护者指出这主要取决于应用场景。如果您是为了创建句向量存入数据库以进行后续的相似度搜索或匹配，通常涉及检索任务。在训练过程中，检索任务通常会利用正负样本对（positive and negative pairs）并可能结合特定的提示词（prompt）来优化模型区分相关与不相关内容的能力，而非检索任务更侧重于通用的语义表示。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F8",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},27872,"模型评估结果与论文报告不一致（例如 STS 分数偏高或偏低），是什么原因？","评估结果不一致通常源于不同版本间池化策略（pooling implementation）的实现差异。如果遇到性能数值与原始报告不符的情况，可以尝试将 `angle_emb` 库降级到旧版本（例如 `0.1.1`）以获得与原始报告一致的结果。此外，部分细微差异可能是因为维护者在 Hugging Face 上上传了微调后的更新模型所致。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F68",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},27873,"训练损失函数中的权重参数 w1, w2, w3 应该设置为多少？","在训练脚本中，这些权重的具体取值取决于模型和目标。例如，在训练 `SeanLee97\u002Fangle-llama-7b-nli-v2` 模型时，设置的参数为 `w2=35.0`（w1 和 w3 默认为 1.0 或在代码中设定）。对于 `WhereIsAI\u002FUAE-Large-V1` 模型，维护者建议 `w2` 设置为 35 效果较好。完整的训练命令示例如下：\n`torchrun --nproc_per_node=4 train_angle.py --task NLI-STS --model_name NousResearch\u002FLlama-2-7b-hf --w2 35 --learning_rate 1e-4 ...`","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F24",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},27874,"如何利用该模型衡量大语言模型生成的回答与真实答案之间的语义相似度？","可以直接使用该模型分别提取大模型生成的回答和真实答案的特征向量（embeddings），然后计算这两个向量之间的余弦相似度（cosine similarity），将该分数作为两者语义匹配程度的指标。这是该模型在语义相似度任务中的标准用法。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F18",{"id":159,"question_zh":160,"answer_zh":161,"source_url":162},27875,"项目是否计划支持 Matryoshka Representation Learning (MRL)？","维护者已确认将发布支持 2D Matryoshka Embedding (2DMSE) 的模型。在此之前，用户也可以直接使用 mixedbread.ai 发布的 `mxbai-embed-2d-large-v1` 模型来获取类似功能的嵌入向量。","https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fissues\u002F49",[164,169,174,179,184,189,194],{"id":165,"version":166,"summary_zh":167,"released_at":168},188817,"v0.6.0","## 变更内容\n* 由 @SeanLee97 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F112 中进行重构\n\n**详细变更：**\n- 使用 uv 管理依赖\n- 简化实现\n- 移除所有对 AngleDataTokenizer 的导入\n- 移除所有对 DatasetFormats 的导入\n- 移除所有 .map(AngleDataTokenizer(...)) 调用\n- 更新数据集字段名（将 Format B\u002FC 中的 text 替换为 query）或使用 --column_rename_mapping 参数\n- 在 LLM 模型初始化时添加 is_llm=True 参数\n- 将 --prompt_template 替换为 --text_prompt、--query_prompt 或 --doc_prompt\n- 更新训练脚本以使用 accelerate launch\n- 如果使用返回值，需更新评估代码\n- 支持输入数据为字符串列表。新增数据格式如下：\n   - A: {\"text1\": str | List[str], \"text2\": str | List[str], \"label\": float}\n   - B: {\"query\": str | List[str], \"positive\": str | List[str]}\n   - C: {\"query\": str | List[str], \"positive\": str | List[str], \"negative\": str | List[str]}\n- 支持 FSDP 训练\n- 更新文档\n\n**迁移指南：** https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fblob\u002Fmain\u002FMIGRATION_GUIDE.md\n\n**完整变更日志：** https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fcompare\u002Fv0.5.6...v0.6.0","2025-10-19T04:11:01",{"id":170,"version":171,"summary_zh":172,"released_at":173},188818,"v0.5.6","## 变更内容\n* 由 @SeanLee97 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F107 中修复了由 `last_hidden_state` 引发的 `AttributeError`\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fcompare\u002Fv0.5.5...v0.5.6","2025-01-31T04:01:50",{"id":175,"version":176,"summary_zh":177,"released_at":178},188819,"v0.5.2","## 变更内容\n* 修复了错误的均值池化。感谢 @ir2718 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F102 中的贡献。\n* 支持均值池化（别名为 avg），以兼容 `sentence-transformers`。\n* 支持在 `angle_trainer` 中配置 `save_total_limit`。\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fcompare\u002Fv0.5.1...v0.5.2","2024-10-19T05:34:58",{"id":180,"version":181,"summary_zh":182,"released_at":183},188820,"v0.5.1","- 修复了一些已知的bug\n- 支持打印验证损失","2024-10-12T06:01:14",{"id":185,"version":186,"summary_zh":187,"released_at":188},188821,"v0.4.7","- 修复了一些已知的 bug\n- 在编码函数中支持对嵌入进行归一化。使用方法：`encode(..., normalize_embedding=True)`","2024-07-18T07:49:22",{"id":190,"version":191,"summary_zh":192,"released_at":193},188822,"v0.4.4","- 修复大模型加载中的 bug\n- 修复第三方模型加载中的 bug","2024-05-29T04:36:38",{"id":195,"version":196,"summary_zh":197,"released_at":198},188823,"v0.4.0","## 变更内容\n* 添加 Sphinx 文档 📘：https:\u002F\u002Fangle.readthedocs.io\u002Fen\u002Flatest\u002Findex.html\n* 重新实现 2DMSE；在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F72 中将 2DMSE 重命名为 ☕️ Espresso\n* 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F72 中支持基于 BiLLM 的句子嵌入的微调和推理\n* 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F72 中升级 `angle-trainer`\n* 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F72 中支持将 AnglE 模型转换为 sentence-transformers 格式\n* 在 https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fpull\u002F69 中全面重构 README\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FSeanLee97\u002FAnglE\u002Fcompare\u002Fv0.3.10...v0.4.0","2024-05-22T02:17:17"]