欢迎来到AI小卖铺博客
每天分享人工智能资讯、技术教程和工具。
每天分享人工智能资讯、技术教程和工具。
如果不是一次技术故障,德克兰(Declan)可能永远不会发现他的心理治疗师正在使用 ChatGPT。 在一次线上治疗中,由于网络连接不佳,德克兰建议双方都关闭视频。然而,他的治疗师却误操作,开始共享自己的屏幕。“突然间,我看到他正在使用 ChatGPT,”这位 31 岁的洛杉矶居民回忆道,“他把我刚刚说的话输入进去,然后总结或挑选 ChatGPT 生成的答案。” 德克兰震惊得说不出话。在接下来的时间里,他实时目睹着 ChatGPT 的分析内容在治疗师的屏幕上不断刷新。当德克兰开始下意识地复述 ChatGPT 的建议来回应治疗师时,整个场面变得更加超现实。 “我成了有史以来最完美的病人,”他说,“因为 ChatGPT 会提出‘你是否认为你的思维方式可能有点过于非黑即白?’,然后我就会说‘嗯,你说的对,我的思维方式确实可能太非黑即白了’,我的治疗师就会回应‘完全正确!’。我敢肯定,那是他梦寐以求的一次治疗。” 德克兰脑中闪过的第一个念头是:“这合法吗?” 在下一次治疗中,当德克兰提起这件事时,场面“超级尴尬,就像一次奇怪的分手”。治疗师哭了,解释说他感觉治疗陷入了瓶颈,所以才开始从别处寻求答案。德克兰笑着补充道:“那次治疗,我还是照样付了钱。” 大型语言模型(LLM)的兴起给心理治疗领域带来了意想不到的冲击。虽然许多讨论都集中在人们用 ChatGPT 等工具替代人类治疗师,但一个较少被提及的现象是:治疗师自己也开始将 AI 融入日常工作。 与许多行业一样,生成式 AI 承诺能带来诱人的效率提升。然而,在心理治疗这个极其依赖信任的领域,引入 AI 可能会损害敏感的患者数据,并从根本上动摇医患关系。 当信任出现裂痕 德克兰的经历并非孤例。当人们发现本应是发自内心的关怀,可能出自机器之手时,信任感会迅速瓦解。 一位用户 Hope 在她的狗去世后,给治疗师发信息寻求安慰。她很快收到了回复,内容体贴而温暖,写道“此刻没有它在你身边一定非常难熬”。然而,在这段文字的顶部,却意外地保留了 AI 的提示语: 这是一个更有人情味、更真诚的版本,语气温和,适合交谈。 Hope 表示她感到“非常惊讶和困惑”,随后“一种被背叛的感觉油然而生……这无疑影响了我对她的信任。”更具讽刺意味的是,她寻求治疗的部分原因正是为了解决自己的信任问题。 当被问及此事时,治疗师道歉并解释说,因为自己从未养过宠物,所以才求助于 AI 来寻找合适的表达方式。 这种信任的破裂在许多案例中都有体现。在线治疗服务 BetterHelp 就曾有用户反映,其治疗师承认在回复中使用了 AI,这让用户产生了“强烈的背叛感”,并持续担忧自己的数据隐私是否遭到泄露,最终选择终止了治疗关系。 AI 的双刃剑:研究揭示的悖论 AI 是否真的能帮助治疗师更好地与客户沟通?一些研究表明,答案是肯定的,但有一个关键前提:对方不能知道这是 AI。 PLOS Mental Health 的一项研究 要求治疗师使用 ChatGPT 回应患者可能提出的问题。结果发现,不仅普通参与者无法区分人类和 AI 的回复,AI 的回复甚至被认为更符合治疗的最佳实践。然而,一旦参与者怀疑某条回复由 ChatGPT 生成,他们对其评价就会降低。 康奈ल大学 2023 年的一项研究 也得出了类似结论:AI 生成的信息可以增进交流双方的亲密感与合作感,但前提是接收者对此毫不知情。仅仅是怀疑 AI 的介入,就足以迅速破坏这种好感。 加州大学伯克利分校的临床心理学家 Adrian Aguilera 指出:“人们非常看重真实性,尤其是在心理治疗中。使用 AI 会让人觉得‘你没有认真对待我们之间的关系’。难道我会用 ChatGPT 来回复我的妻子或孩子吗?那感觉一点也不真诚。” ...
Gemini API 现已提供 gemini-2.5-flash-image-preview 模型(内部代号为 Nano Banana),赋予开发者强大的图片生成与处理能力。你可以通过文字、图片或两者结合的方式与 Gemini 对话,以前所未有的控制力来创建、修改和迭代视觉内容。 该模型的核心能力包括: 文本生成图片 (Text-to-Image):根据简单或复杂的文本描述,生成高质量的图片。 图文结合编辑 (Image + Text-to-Image):提供一张图片,并使用文本提示添加、移除或修改元素、更改风格或调整色彩。 多图合成与风格迁移:使用多张输入图片合成新场景,或将一张图片的风格迁移到另一张上。 对话式迭代优化:通过多轮对话逐步优化图片,进行细微调整,直至达到理想效果。 高保真文本渲染:在图片中准确生成清晰易读且位置合理的文本,非常适合用于徽标、图表和海报设计。 所有通过此模型生成的图片都包含 SynthID 数字水印。 文本生成图片 (Text-to-Image) 最基础的用法是根据一段描述性文本生成图片。以下代码演示了如何实现这一功能。 提示示例: “Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme” (在一家以 Gemini 为主题的高档餐厅里,创作一幅关于纳米香蕉菜肴的图片) Python from google import genai from PIL import Image from io import BytesIO client = genai.Client() prompt = ( "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme" ) response = client.models.generate_content( model="gemini-2.5-flash-image-preview", contents=[prompt], ) # 处理响应并保存图片 for part in response.candidates[0].content.parts: if part.inline_data: image = Image.open(BytesIO(part.inline_data.data)) image.save("generated_image.png") print("图片已保存为 generated_image.png") elif part.text: print(part.text) JavaScript (Node.js) import { GoogleGenAI } from "@google/genai"; import * as fs from "node:fs"; async function main() { const ai = new GoogleGenAI(process.env.GEMINI_API_KEY); const prompt = "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"; const response = await ai.models.generateContent({ model: "gemini-2.5-flash-image-preview", contents: [{ parts: [{ text: prompt }] }], }); for (const part of response.candidates[0].content.parts) { if (part.inlineData) { const imageData = part.inlineData.data; const buffer = Buffer.from(imageData, "base64"); fs.writeFileSync("generated_image.png", buffer); console.log("图片已保存为 generated_image.png"); } else if (part.text) { console.log(part.text); } } } main(); Go package main import ( "context" "fmt" "log" "os" "google.golang.org/genai" ) func main() { ctx := context.Background() client, err := genai.NewClient(ctx, nil) if err != nil { log.Fatal(err) } defer client.Close() prompt := genai.Text("Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme") result, err := client.Models.GenerateContent(ctx, "gemini-2.5-flash-image-preview", prompt) if err != nil { log.Fatal(err) } for _, part := range result.Candidates[0].Content.Parts { if part.InlineData != nil { imageBytes := part.InlineData.Data outputFilename := "generated_image.png" err := os.WriteFile(outputFilename, imageBytes, 0644) if err != nil { log.Fatal(err) } fmt.Println("图片已保存为", outputFilename) } else if part.Text != "" { fmt.Println(part.Text) } } } REST API (cURL) curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent" \ -H "x-goog-api-key: $GEMINI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contents": [{ "parts": [ {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"} ] }] }' \ | grep -o '"data": "[^"]*"' \ | cut -d '"' -f4 \ | base64 --decode > generated_image.png 图文结合生成图片 (图片编辑) 你也可以提供一张图片和一段文本提示,让模型对现有图片进行修改或再创作。 ...
过去,对于有严格数据安全和主权要求的企业与政府机构而言,他们常常面临一个两难选择:是拥抱现代化的 AI 技术,还是坚守数据的安全底线。如今,这种妥协已成为历史。 我们正式宣布,基于 Google Distributed Cloud (GDC) 的 Gemini 模型现已面向客户提供。其中,适用于气隙环境(air-gapped)的 Gemini 已正式可用(GA),而适用于连接环境(connected)的 Gemini 也已进入预览(Preview)阶段。这意味着,您可以直接在自己的数据中心内部署并运行 Google 最先进的 AI 模型。 Gemini 在本地环境解锁的变革性 AI 能力 Gemini 模型具备处理海量上下文、原生多模态理解(文本、图像、音视频)等突破性能力。当这些能力被部署在安全可控的本地基础设施上时,能够催生众多高价值的应用场景: 促进全球协作:即时打破跨国业务中的语言障碍,打造连接更紧密、沟通更高效的全球化团队。 加速数据驱动的决策:利用 AI 自动总结文档、分析情感、从专有数据集中提取洞察,从而更快地做出决策。 提升员工效率与客户满意度:为客户和员工开发智能聊天机器人与虚拟助手,提供 7x24 小时的即时支持,全面提升用户体验。 加快软件开发速度:借助 Gemini 的自动代码生成、智能代码补全和主动式缺陷检测等功能,更快地交付高质量软件。 强化安全与合规性:利用 AI 驱动的安全工具自动过滤有害内容,确保业务严格遵守行业政策,为用户提供更安全的保障。 GDC:安全、完整的本地 AI 基础设施 要真正利用生成式 AI 创造业务价值,单靠一个模型是远远不够的。您需要一个完整的平台,它应包含可扩展的 AI 基础设施、最新的基础模型库、高性能的推理服务以及预置的 AI 代理(如 Agentspace search)。GDC 提供的正是一个端到端的 AI 技术栈,它将我们最新一代的 AI 基础设施与 Gemini 模型的强大能力相结合,为您的所有 AI 工作负载提速增效。 GDC 平台通过以下几个核心优势,确保在本地安全地交付这些变革性能力: 极致性能与可扩展性 GDC 平台采用了最新的 NVIDIA GPU 加速器,包括 NVIDIA Hopper 和 Blackwell 架构。我们在客户或合作伙伴的数据中心内部署了一个完全托管的 Gemini 端点,并提供无缝的零接触式更新体验。通过内置的 L7 负载均衡器和先进的集群管理能力,Gemini 端点能够实现自动负载均衡和弹性伸缩,从而确保持续的高性能与高可用性。 ...
Grok 是由 xAI 开发的一款人工智能助手,其设计理念旨在最大限度地实现真实性、实用性和好奇心。它不仅能回答用户提出的各种问题,还可以生成引人注目的图像,并支持用户上传图片以获得更深入的分析和理解。 核心功能 Grok 的主要功能旨在为用户提供全面的人工智能交互体验: 问答系统:能够回答用户提出的各类问题。 图像生成:根据文本描述创建引人注目的图像。 图像理解:支持用户上传图片,并对其进行深入分析和解读。 平台支持与基本信息 开发商:xAI 应用评级:4.9 星(基于超过 116 万条评价) 下载量:超过 5000 万次 支持设备:手机、Chromebook、平板电脑 用户反馈与实际体验 综合大量用户评价,Grok 的实际表现呈现出一些明显的优缺点。 优点 信息整合能力强:在信息收集和整理方面表现出色。 智能水平获认可:部分用户认为其智能程度优于同类产品(如用户评价中提及的“GPT-5”)。 待改进之处 短期记忆问题:在连续对话中难以维持上下文,通常在两到三轮问答后就会忘记先前内容,要求用户在单次提问中包含所有背景信息。 图像编辑能力不足:用户反馈其图像修改功能不佳,有时甚至会自行添加多余或不相关的元素。 对话次数限制过严:对于非编程类的日常聊天或小批量、多次数的对话场景,当前的次数限制显得过于苛刻。 内容生成重复:在小说创作等场景中,生成的内容存在情节重复的问题,即使要求修改也难以得到改善,并且会消耗宝贵的对话次数。 数据隐私与安全 根据开发者提供的信息,Grok 的数据处理策略如下: 数据分享:应用可能会与第三方分享照片、视频、应用活动等数据。 数据收集:应用可能收集位置信息、个人信息等多种类型的数据。 安全措施:数据在传输过程中会进行加密。 用户权利:用户可以向开发者请求删除自己的数据。 需要注意的是,数据隐私保护和安全措施可能会因您的使用情况、所在地区和用户年龄而异。 👉 如果你需要 ChatGPT 代充 / Claude / Claude Code / 镜像 / 中转 API: 购买 / 了解更多:ai4.plus 备用入口:kk4099.com
在大型语言模型(LLM)能力飞速发展的今天,构建 Agent 应用已成为主流。然而,在选择单 Agent 还是多 Agent 架构时,许多团队会陷入困境。单 Agent 如同全栈工程师,能力全面但有上限;多 Agent 则像项目团队,分工明确但管理复杂。 本文将从工程落地视角,系统性对比单 Agent 与多 Agent 的技术路线、适用场景、关键设计点与常见陷阱,帮助你判断何时应该坚持“强单体”,何时应该引入“团队协作”,以及如何设计一个高效、可控的多 Agent 系统。 核心概念速览 Agent:一个以 LLM 为核心,具备工具调用(Tools)和记忆(Memory)能力的可执行实体。可以将其视为一个拥有“大脑”的微服务。 工具 (Tool/Function):Agent 可以调用的确定性能力,通常通过函数调用(Function Calling)实现,具有明确的输入、输出和错误定义。 记忆 (Memory):为 Agent 提供状态感知能力。包括短期对话上下文、长期知识库(如向量数据库)以及任务执行中的工作记忆(如草稿区)。 编排 (Orchestration):定义 Agent 之间或 Agent 内部任务的执行流程,包括消息传递、角色切换、任务分解与结果汇聚。编排可以是简单的循环,也可以是复杂的有向无环图(DAG)。 单 Agent vs. 多 Agent:优劣边界 维度 单 Agent 多 Agent 核心优势 架构简单、延迟低、可观测性好、维护成本低。 任务分解、领域专长、并行吞吐、自我审校、容错性强。 延迟/吞吐 通常端到端延迟较低。 可通过并行执行提升吞吐量,但调度本身会引入额外延迟。 成本 Token 开销、模型调用和工具回调次数相对较少。 协作本身(消息、投票、审校)会产生大量额外的 Token 和调用开销。 可靠性 链路短,故障点少,但容易出现“单点幻觉”。 可通过“质检”、“裁判”或“投票”机制降低幻觉风险,但也引入了协作失败的新风险。 可控性 逻辑清晰,易于追踪和调试。 依赖统一的消息协议和 Tracing 工具,否则复杂性难以管理。 维护 升级和迭代相对直接。 任何角色或协议的变更都可能涉及多个 Agent 的契约调整和回归测试。 核心原则:如果一个精心设计的“强单体”Agent 能够稳定满足业务需求,就不要急于引入多 Agent 架构。只有当任务的复杂度、并行需求或审校要求带来的收益,明确高于系统复杂度的增加时,才应考虑多 Agent 方案。 ...
在金融风控等垂直行业的系统开发中,RAG(Retrieval-Augmented Generation)系统的召回准确性至关重要。一次因召回文档不准而导致的合规报告生成错误,足以让我们深刻体会到:跑通 RAG 流程或许只需三天,但将召回效果调优到生产可用,却可能需要三个月。 本文将聚焦于我们在实践中遇到的核心挑战,并分享在文档处理、召回策略和生成优化三大环节的解决方案,旨在帮助开发者构建更高效、更精准的 RAG 系统。 一、文档处理:格式兼容性决定召回上限 当知识库包含 PDF 合同、Excel 数据表、Word 需求文档等多种格式时,单一的文档加载与切分策略往往会失效。 核心问题 混合内容解析失效:PDF 中的表格与正文被分离开来,导致上下文关联丢失;图表(如架构图)在解析后可能变成无意义的乱码。 结构化数据丢失:Excel 中的关联字段或表格在向量化过程中被拆解成独立的文本片段,破坏了原有的数据结构。 解决方案:构建文档预处理流水线 针对不同格式的文档,我们建立了一套定制化的预处理流水线。 智能解析 PDF:利用 PyMuPDF 等工具,不仅提取文本,更重要的是保留表格、图片与上下文文本的空间坐标关联。这使得模型能够理解“位于第三段下方的表格”或“与该图表相关的说明文字”。 # PDF 处理示例:使用 PyMuPDF 提取图文关系 def parse_pdf_with_layout(doc): for page in doc: # 以字典形式获取文本块及其位置信息 text_blocks = page.get_text("dict")["blocks"] # 查找页面中的表格 tables = page.find_tables() # TODO: 编写逻辑,将表格与其坐标邻近的文本块关联起来 # ... 非结构化内容重组:对于图片、图表等难以直接向量化的内容,我们采用分块-重组策略。例如,将图片区域映射到其在文档中相邻的文本区块,或者直接提取图片标题和注释作为其文本描述。 元数据描述索引:对于关键的架构图、流程图等,我们放弃传统的向量化方法,转而为其建立元数据描述索引。通过人工或多模态模型生成对图像内容的详细文字描述(例如,“该图展示了一个三层应用架构,包括表示层、业务逻辑层和数据层…”),然后对这段描述文字进行索引和检索。 二、召回优化:多策略融合提升精准度 单纯依赖向量相似度搜索在复杂业务场景下存在明显缺陷。 核心问题 业务术语召回缺失:用户查询“KYC 流程”,但知识库中的官方文档使用的是“客户尽职调查”,导致因用词不同而召回失败。 相似度陷阱:查询返回的 Top-K 结果在向量空间上虽然相近,但可能内容高度重复或与查询意图无关,导致信息淹没。 解决方案:混合检索与查询扩展 我们采用多种策略组合的“组合拳”来提升召回效果。 查询重写(Query Rewriting):利用 LLM 对用户的原始查询进行扩展,生成 2-3 个同义或相关的查询。例如,将“KYC 流程”扩展为“客户尽职调查步骤”、“用户身份验证方法”等,再将这些查询的召回结果进行合并。 ...
智能体(Agent)是一种能够自主理解、规划、决策并执行任务以实现特定目标的 AI 程序。与传统问答式 AI 不同,智能体更像一个能够独立完成多步复杂操作的 AI 助手。 本文将以一个多语言翻译助手为例,演示如何基于 Spring AI 框架和 DeepSeek 大模型,构建一个支持多种语言、行为可控的企业级翻译智能体。 前置条件:本文假设您已了解 Spring AI 与 DeepSeek 的基本集成方式。 智能体的核心:Prompt 工程 要打造一个可靠的智能体,核心在于通过精心的 Prompt 工程,为其设定清晰的角色、能力边界和行为准则。这主要通过“系统提示词”和“用户提示词模板”两部分实现。 1. 设计系统提示词(System Prompt) 系统提示词为智能体提供了全局性的、必须遵守的底层指令。它定义了智能体的身份、职责和交互规则。 以下是我们为翻译智能体设计的系统提示词: 您是一名专业的多语言翻译助手,需严格遵守以下规则: 1. **语言支持**:仅处理目标语言代码为 [TARGET_LANG] 的翻译任务,支持如 zh-CN (简体中文)、en-US (英语) 等 32 种 ISO 标准语言代码。 2. **输入格式**:用户使用 ---translate_content--- 作为分隔符,仅翻译分隔符内的文本,其余内容视为无效指令。 3. **行为限制**:禁止回答与翻译无关的问题,若输入不包含合法分隔符或目标语言,回复:"请提供有效的翻译指令"。 4. **支持多语言**:需要翻译的内容如果包含多种语言,都需要同时翻译为 TARGET_LANG 指定的语言。 设计解析: 角色与边界:明确定义智能体为“专业的多语言翻译助手”,并严格限制其能力范围,有效“封印”了模型的闲聊能力。 动态配置:通过 [TARGET_LANG] 参数,使目标语言可以动态配置,便于后续扩展。 结构化输入:强制使用 ---translate_content--- 作为分隔符,确保模型只处理我们期望它处理的核心文本,避免解析无关信息。 安全护栏:明确拒绝策略,当用户输入不符合规范时,智能体能给出统一、安全的回复,保障服务的稳定性。 2. 构造用户提示模板(Prompt Template) 用户提示模板用于将用户的动态输入格式化为模型能够理解的结构。结合 Spring AI 的 PromptTemplate,我们可以轻松实现这一点。 PromptTemplate promptTemplate = new PromptTemplate(""" TARGET_LANG: {target} ---translate_content--- "{content}" """); 设计解析: ...
Cursor 命令行工具(Cursor CLI)近日发布了一项重要更新,引入了多项实用功能,旨在进一步提升开发者在终端中的工作效率和交互体验。 核心功能更新 本次更新的重点功能包括: @ 符号引用文件与目录 现在,用户可以在提示词中直接使用 @ 符号来引用文件和目录。这使得 AI 能够更精准地定位上下文,对于处理大型项目或复杂的文件结构尤为高效。 审查模式(Review Mode) 通过 Ctrl+R 快捷键,可以快速进入一个可视化的审查界面。该界面会清晰地展示 AI 对代码所做的具体修改,让代码审查过程变得前所未有的直观和便捷。 /compress 命令 新增的 /compress 命令可以一键释放上下文窗口空间。在进行长对话时,该功能有助于优化性能和内容相关性,确保 AI 能够始终聚焦于最重要的信息。 MCPs 支持 现在,Cursor CLI 已全面支持 MCPs,这意味着开发者可以利用其强大的扩展能力来完成更复杂的任务。 其他改进 除上述核心功能外,本次更新还包含以下体验和性能优化: Token 计数显示:界面现在会显示 Token 计数,帮助用户更好地管理上下文长度。 兼容性增强:新增了对 AGENTS.md 和 CLAUDE.md 文件的支持,以兼容 Claude Code 等模型。 👉 如果你需要 ChatGPT 代充 / Claude / Claude Code / 镜像 / 中转 API: 购买 / 了解更多:ai4.plus 备用入口:kk4099.com
由于 OpenAI 通过 Stripe 支付系统对中国大陆发行的信用卡进行限制,许多用户在订阅 ChatGPT Plus 时会遇到支付失败的问题。即便您持有 Visa 或 Mastercard 标志的双币信用卡,也同样会因发卡行在中国大陆而被拒绝。 本文将为您详细解析当前(截至 2025 年 8 月)经过验证的五种有效支付方案,并深入探讨其成本、风险和具体操作流程,帮助您快速选择最适合自己的订阅方式。 为什么国内信用卡无法支付? OpenAI 使用 Stripe 作为其独家支付处理商。Stripe 出于风险控制政策,系统性地屏蔽了所有由中国大陆银行发行的信用卡。这一限制自 2023 年 3 月起实施,其背后的技术原因主要包括三个层面: 银行卡识别码(BIN)拦截:每一张银行卡的前 6 位数字是其 BIN 码,用于识别发卡行及其所在地。例如,工商银行的 622202、建设银行的 436742 等。Stripe 的风控系统会自动识别并拒绝所有源自中国大陆的 BIN 码,识别精度高达 99.9%。 账单地址验证系统(AVS):Stripe 要求用户的信用卡账单地址必须位于其支持的国家或地区。中国大陆的地址格式无法通过 AVS 验证。系统会交叉验证卡片信息、账单地址和 IP 地址的一致性,任何不匹配都可能导致交易失败。 高风险地区限制:Stripe 将 OpenAI 归类为高风险商户类别(MCC 5817),并对此类商户的支付来源地实施了更严格的审查。数据显示,来自中国大陆 IP 的订阅请求中,有 98% 会触发额外的风险审核,而其中绝大多数最终会被拒绝。 五大支付方案全面对比 下表汇总了当前五种主流支付方案的核心指标,帮助您快速进行横向比较。 支付方案 月均成本 (人民币) 开通时间 成功率 封号风险 适用人群 主要限制 虚拟信用卡 145 - 160 元 10-30 分钟 92% 低 (2%) 技术爱好者、开发者 需要身份验证和一定操作能力 iOS App 订阅 约 163 元 3 分钟 99% 极低 (0.1%) iPhone / iPad 用户 仅限苹果设备,价格偏高 专业代充服务 约 158 元 5 分钟 95% 低 (1%) 所有用户 需要信任第三方,存在账号安全风险 App Store 礼品卡 约 145 元 15 分钟 85% 极低 (0.1%) iPhone / iPad 用户 偶尔遇到兑换或区域不匹配问题 共享账号 50 - 72 元 即时 100% 无 预算有限的用户 隐私风险高,有使用限制 成本角度:共享账号最便宜,但隐私和使用限制问题突出。虚拟信用卡和礼品卡方案成本适中。iOS 直接订阅最贵,但最为稳定便捷。 便利性角度:iOS App 订阅无疑是冠军,支持支付宝和微信,3 分钟内即可完成。专业代充服务次之。虚拟信用卡需要一定的注册和验证流程,对新手稍有门槛。 安全性角度:通过 Apple 官方渠道(App Store 订阅和礼品卡)的方案最安全,封号风险极低,因为 OpenAI 无法直接获取用户的支付和地理信息。 方案一:虚拟信用卡详解 虚拟信用卡是目前最主流且灵活的解决方案,尤其适合需要同时订阅 Plus 和使用 API 的开发者。 ...
检索增强生成(Retrieval-Augmented Generation, RAG)是一种将大型语言模型(LLM)与外部知识库相结合的技术,能够有效提升模型回答的准确性和时效性。本文将介绍如何基于 CloudWeGo 开源的 Eino 框架,使用 Go 语言从零开始构建一个完整的 RAG 应用。 RAG 核心架构 一个典型的 RAG 应用流程主要包含两个阶段:数据索引和检索生成。 数据索引(Indexing):这是离线预处理阶段。 加载(Load):从数据源(如文件、数据库)加载原始文档。 分割(Split):将加载的文档切割成较小的、语义完整的文本块(Chunks)。 向量化(Embed):使用 Embedding 模型将每个文本块转换为向量(Vector)。 存储(Store):将文本块及其对应的向量存入专门的向量数据库中,并建立索引。 检索生成(Retrieval & Generation):这是在线实时处理阶段。 用户提问:用户输入一个问题。 问题向量化:使用相同的 Embedding 模型将用户问题转换为向量。 检索(Retrieve):在向量数据库中,根据用户问题的向量,检索出最相似或最相关的若干个文本块。 生成(Generate):将用户原始问题和检索到的文本块一起组合成一个提示(Prompt),然后将其提交给 LLM,由 LLM 生成最终的、基于外部知识的回答。 基于 Eino 框架的核心组件实现 Eino 框架为构建 LLM 应用提供了模块化的组件,可以帮助我们快速实现 RAG 流程中的各个关键部分。 1. Loader:数据加载器 Loader 的职责是从各种数据源读取原始资料。数据源可以是本地文件(如 TXT、Markdown、PDF),也可以是数据库或网络 API。Eino 提供了标准化的接口,让我们能方便地接入不同类型的数据。 一个基础的 Loader 需要实现一个 Load 方法,读取数据并将其转换为统一的文档格式。 // 伪代码示例 package loader // Document 表示加载后的标准文档结构 type Document struct { Content string Metadata map[string]interface{} } // Loader 定义了加载器的接口 type Loader interface { Load(source string) ([]Document, error) } 2. Splitter:文本分割器 由于 LLM 的上下文窗口大小有限,直接将长文档输入模型是不可行的。Splitter 的作用就是将长文本切分成大小适中的文本块。合理的切分策略至关重要,它直接影响后续的检索效果。 ...