Next-Level Agents:释放动态上下文(Dynamic Context)的巨大潜力

news2024/11/16 1:53:16

编者按: 本文深入探讨了如何通过优化动态上下文信息(Dynamic Context)来提升 AI Agents 的工作效率和准确性。文章首先概述了五种常见的技术策略,包括信息标识(Message Labeling)、针对不同需求设定不同上下文、优化系统提示词(System Prompts)、精简 RAG 系统中冗余信息,以及其他处理上下文的高级策略。

随后,作者分享了一些技术实施细节和经验教训,这些教训虽然源自与 Multi-agent 团队在实际生产环境中的长期合作实践,但对于 single agent 系统也具有广泛的适用性和指导意义。

文中强调,AI Agents 不应仅局限于使用固定提示词指令来定义,还应包含自己的动态上下文配置。通过简明的上下文类型划分,为每个 AI Agent 量身打造不同的上下文配置,将极大拓展其应用潜能。本文所述的动态上下文配置(Dynamic Context)仅是 AI Agents 系统架构的冰山一角,欢迎各位读者就此主题深入交流探讨。

作者 | Frank Wittkampf

编译 | 岳扬

在这里插入图片描述

AI Agents 之间往往存在很大差异(配图源自 MidJourney)

01 内容简介 Introduction

AI Agents 的行为主要由两点决定: (1) 它所运行的基础模型,以及 (2) 输入给该模型的上下文信息。上下文信息输入的方式直接影响着 Agents 任务执行效果。甚至可以说,即使使用同一模型,不同的上下文内容输入也能造就各具特色的 Agents 行为模式。那么,何为 Agents 所需的“上下文信息”呢?可通过查阅下方的 “Types of Context” 图示了解相关信息。

本文将深入探讨一系列 Agents 进阶策略,依据 AI Agents 的具体需求优化上下文信息,从而提升其工作效率与准确性。本文首先将概述五种常见技术策略,然后会分享一些实施细节。 文中总结的经验教训,虽源自于和 multi-agent 团队在实际生产环境中合作的长期实践经验,但这些经验对于 single agent 系统亦具有广泛的适用性和指导意义。

在这里插入图片描述

AI Agents 所涉及的上下文类别(图片由原文作者提供)

02 理解上下文信息需求

网络上大多数在线示例及教程都倾向于采取简化手段处理上下文信息(例如设定一个固定的上下文长度限制)。然而,在实际的 AI 应用中需要更加细腻和成熟的方法。

依据手头任务的不同,各种 Agents 对上下文信息的需求大相径庭。 有的 Agents 或许只需当前的信息,而有些 Agents 为了确保回答精准,则可能需要依靠大量的历史数据。因为存在这种差异性,需要针对每一个 Agent 制定个性化的上下文管理策略。

下面是一位用户与两个 Agents(用于软件开发的 Agent 和用于软件测试的 Agent)间的交流场景:

1 User: “Please improve the sorting function I wrote from the uploaded file2 System_prompt_for_coder: “You are a SW developer, you help the user to 
  develop …”
3 Coding_agent: “read_file_function”
4 Function_response: “coding snippet: ```some returned code```”
5 System_prompt_for_coder: “You are a SW developer, you help the user to
  develop …”
6 Coding_agent: “I’ve improved your code by adding … and … to your code, 
  here is the new function …”
7 System_prompt_for_reviewer: “you are a SW code reviewer, you …”
8 Code_reviewer_agent: “After reviewing the improved code, there 
  are a few more things that I would add to the code …"
9 System_prompt_for_coder: “you are a SW developer, you help the user to 
  develop …”
10 Coding_agent: “ … ”

在上述案例中,上下文的组织方式显然存在冗余且效率不高。多条对话内容都存在不必要的信息重复(比如 system prompts),同时每个 Agent 都接收到了超出其范围的上下文内容。为此,我们有必要了解改进上下文管理的几种策略。

03 策略 1:Message Labeling(信息标识)

Message labeling 是调控并提升 AI Agents 任务执行互动效能的重要手段。借由为每次交谈的信息附加元数据标识(metadata),可以智能地筛选出对 Agents 手头任务最为关键的信息。此策略围绕几个关键方法展开:

  • Relevance Labeling(相关性信息标识) :每一条信息均应被赋予能够体现其与当前互动乃至未来交流相关性的标签。这一操作包括深入剖析信息内容,并评估其对 Agents 的决策路径是否可能存在益处。譬如,那些含有疑问句、决策节点或独到见解的信息,理应都被标识为极高度相关。
  • Permanence Labeling:根据信息的时效性和实用性进行分类这一步极为重要。有些信息,比如含有 foundational decisions (译者注:“foundational decisions” 指的是那些构成行为规划或讨论交流基础的核心决策,通常对后续步骤有深远影响,确立了基本原则、目标或方向。)或 milestone communications (译者注:“milestone communications” 如同国道上的里程牌,指示项目已达成某个重要目标或正进入新阶段。)的信息,因其存在长远价值,应在不同对话环节中持续保存。相比之下,仅供一次性使用的系统通知类信息(system messages),仅在特定上下文下短暂需要。一旦它们的即刻相关性(immediate relevance)消逝,便应从 AI Agents 的存储记忆库(memory)中予以剔除。
  • Source and Association Labeling:此步骤会明确每条信息的发出源头,不论是来自某个特定的 Agent 、用户交互过程、功能执行流程或其他程序过程。这种标识有利于建立一个条理清晰、便于追踪的历史记录体系,确保 Agents 能够根据信息的源头或与当前任务的关联度,迅速定位并参考所需资料。

在相关信息的元数据上应用智能标识(smart labels),就能启用智能化选取功能(smart selection)。接下来,我们将进一步列举几个实用示例。

04 策略 2:针对 AI Agents 的不同需求设定不同的上下文

各 Agent 因为任务各异,其上下文需求自然也大不相同。有的 Agent 仅凭少量信息就能执行,而有的则需大量的上下文信息才能确保操作无误。这一策略是对之前所述的信息标识策略的深化应用。

关键上下文要素辨识(Critical Context Identification) :识别哪些信息对 Agents 来说比较重要,并集中精力优化这些要素的处理流程,提升模型响应的精确度,这一点至关重要。以先前交流场景上下文中的第8行为例,用于代码审查的 Agent 仅需少量的特定上下文即可准确完成工作。事实上,若提供给它的上下文超出必要范围,其处理结果反而可能不尽人意。

那么,它究竟需要什么样的上下文呢?粗略一看便可知,用于代码审查的 Agent 仅需关注其 system prompt 及紧邻其前、含有最新版本代码的最后一条 Agent 消息(第6行)。

换言之,每个 AI Agent 都应配置为只选择自己需要的对话历史(上下文)。比如,代码审查 Agent 仅查看最近的两条消息,而代码编写 Agent 则需要更长的上下文历史作为支持。

05 策略 3:优化 System Prompts

指令位置的相关策略(Placement) :当探讨 Agents 及其 system prompts 时,不难发现 Agents 的 system prompts 位置非常重要。它该置于对话序列的起始,还是末尾?对此,目前尚无定论,实际效果依具体应用场景而异。试想,哪种位置设计能更好地促进信息的处理与反馈?

1) user: "I visited dr. Fauci on Thursday, and got diagnosed with …"
2) system: "Extract all medically relevant info from the user prompt"

或者

1) system: "Extract all medically relevant info from the user prompt"
2) user: "I visited dr. Fauci on Thursday, and got diagnosed with …"

若在更大规模且复杂多变的对话历史中进行尝试,你会观察到即便是相同的引导语,由于位置不同,最终效果也会有所区别。不过有一点显而易见,system prompts 应当有意识地被放置在某一特定位置,而这一决策需依据 Agents 特性和实际应用场景来决定。

注意:从我的实践经验来看,system prompt 是否应当设置为对话序列的最后一条信息,很大程度上取决于所使用的大语言模型(LLM)。通常情况下,将其置于末位是个不错的选择(当然也有例外,比如信息抽取(information extraction)任务中)。

持久性考量策略(Permanence) :此外,除了 system prompts 的位置安排外,大多数情况下,还必须确保 system prompts 被标记为 “fleeting” 。这里说的“fleeting message(瞬态消息)”,意味着一旦其作用发挥完毕,就不会在对话记录(上下文)中继续留存。

以 agent1 为例,它可能首先接收到一条指令(prompt),要求其暂时搁置问题进行反思(step back and reflect on the problem)。紧接着的下一轮交互环节,agent1 又被要求依据之前的反思来解决问题。在这种情况下,第二次交互时初始的提示词(反思)不仅多余,反而可能干扰 Agents ,导致解答质量下滑。因此,如若那条初始的 system prompt 能够设定为非持久性的,即在之后的交互中不再重复发送给 Agents ,处理效果将会更佳。具体到下述例子,这意味着当第二次向 Agents 发起 LLM 查询请求时,应将第 2 行信息剔除在外。

#1 User: 
  "What is the meaning of the universe?"
#2 System: 
  "You're a philosopher; before you answer, step back and 
  reflect on what the user's question implies."
#3 Agent_philo: 
  "Reflecting on this question, one can consider the universe 
  through various philosophical lenses - existentialism views 
  it as a canvas for creating personal meaning, while cosmology 
  sees it as a playground for understanding physical laws. This 
  interplay between human perception and scientific exploration 
  is central to understanding our query."
#4 System: 
  "You're a philosopher, and you just reflected deeply on the 
  question posed by the user. Use that insightful reflection to 
  craft a comprehensive answer."
#5 Agent_philo: 
  "From an existentialist perspective, the meaning of the universe 
  is a personal journey, where each individual constructs their own 
  meaning through choices and life experiences. In contrast, from a 
  cosmological viewpoint, it is about exploring and understanding 
  the vast, intricate laws that govern the cosmos. These perspectives 
  help us grasp the multifaceted nature of our universe, blending our 
  existential quests with scientific inquiry."

通过这种方法,所有陈旧的 system prompt 都将从对话序列中清理出去,每条 system prompt 都会被安排在最合适的位置。这样一来,对话记录(上下文记录)将会变得干净而有序,为双方提供了更精确与更可预测的互动环境。

06 策略 4:精简 RAG 系统中的冗余信息

关于如何通过优化 RAG 系统来增强 Agents 效率的话题,我们足以撰写一系列文章详述,但在此仅简明扼要地概述几条。由于 RAG 操作可能导致大量的 tokens 消耗,掌握一些管理此问题的技巧显得尤为重要。 若你对该技术方向尚不够熟悉,强烈建议你投入足够的时间深入研究。

初级的 RAG 教程往往假定用户上传的文档简洁、直白、明了,但在实际应用中,大多数文档结构复杂且内容多变。 根据我的经验,许多文档具有大量重复信息,比如同一份 PDF 文章的引言、正文和结论中经常会复述同一内容;一份医疗记录中可能会频繁出现几乎雷同的医疗信息;或是系统日志记录中不断重复的日志记录。尤其在生产环境下,面对海量文件检索时,标准 RAG 流程返回的内容往往会异常冗余,重复度极高。

合理应对重复内容(Dealing with Duplicates) :优化 RAG 系统上下文的第一步是识别并剔除检索文档片段中的确切重复内容及近似重复内容,以防信息冗余。确切的重复内容(Exact duplicates)易于辨认,而近似重复内容(Near duplicates)则可通过语义相似性分析(semantic similarity)、向量嵌入的多样性(diversity of vector embeddings)度量(差异大的文档片段其向量间距离较远)等多种技术来检测。如何执行这一操作极大程度上取决于具体应用情景。这里[1]提供了一些按困惑度(perplexity)分类的实例。

模型响应内容多样化(Diversity in Responses) :确保 RAG 系统输出多样性的方式主要是巧妙地整合来自多个文件的内容。其中一种简便且高效的策略是,在检索时不单纯依据语义相似度(similarity)选取最高的 N 篇文档,而是在检索查询(retrieval query)中使用 GROUP BY 语句。再次强调,是否采取这一策略,高度取决于具体需求场景。这里[2]也提供了一个按困惑度分类的实例。

动态检索(Dynamic Retrieval) :既然本文聚焦于动态上下文的构建,那么如何将这一思想融入 RAG 流程中呢?传统的 RAG 流程通常只提取排名前 N 的结果,比如最相关的 10 段文档片段。但这并不符合人们检索信息的方式。在搜索信息时,人们一般会使用搜索引擎持续探索,直至找到满意答案,可能想要的内容就在搜索结果的第一页,也可能在第二页甚至更后。当然,这取决于个人的耐心与运气 😉 。我们也可以模仿这一过程来设计 RAG 系统,使其能够更加灵活地进行信息提取。也可以让 AI Agents 进行更有选择性的检索,只给出前几条结果,然后让 Agents 决定是否需要更多信息。

这里有一种推荐做法:不要只单一设定一个相似度阈值(similarity cutoff),而是设定高中低三个阈值界限。 举个例子,搜索结果可能包括 11 个高度相似、5 个中等相似以及 20 个轻微相似的文档。若我们设定 Agents 每次只能查看 5 份文档,接下来就由 Agents 自身决定是否需要更多资料。你可以告知 Agents ,它已浏览了 11 份高度相似文档中的 5 份,还有超过 25 份文档可供探索。通过巧妙设计提示词指令(prompt engineering),Agents 在搜索数据时将会更快展现出更为理性的行为模式。

07 策略 5:处理上下文的高级策略

下面我将简要介绍几种策略,进一步介绍动态上下文:

即时元数据标识(Instant Metadata) :如策略 1 所述,在消息中添加元数据标识可以帮助我们预先选择特定 Agent 所需的历史记录。在多数情况下,一个简单的单词文本标签(one word text label)就足够了。知道信息来源于某一个特定功能、特定 Agent 或特定用户,就可以为消息添加一个简单的标签。但如果处理的是非常庞大的 AI 模型响应,并且需要进一步优化,那么需要一种更高级的方法来为对话消息添加元数据标识:即利用人工智能(with AI)。

这里有一些实例:

有一种为历史对话消息(上下文信息)打标签的简单方法 —— 单独调用一个成本较低的 AI 模型,由该模型为对话消息生成消息标识。然而,这样每次就需要进行两次 AI 模型调用,就将整个流程复杂化了。

RAG 采用两步处理方式(Dual processing for RAG) :为了优化 RAG 流程,我们可以考虑使用更便宜(更快)的 LLMs 来浓缩 RAG 系统的输出结果,然后再将其提供给 LLMs。使用这种方法的诀窍在于使用非常简单且不具破坏性的提示词,将原始的 RAG 系统输出结果浓缩或简化为更易于消化的形式。

例如,可以使用更便宜的模型来剥离那些特定信息,减少重复,或者只选择与当前任务相关的文档部分。这就要求我们了解这些较为廉价模型的优缺点。如果与功能更强大的模型结合使用,这种方法可以替我们节省大量成本(和时间)。

08 Implementation

OK,上文所述内容是否意味着每个 AI Agent 都需要大量的个性化代码来优化其性能呢?怎样才能提炼这些理念并广泛运用呢?

Agent 架构设计(Agent Architecture) : 针对这些疑问,实际上存在一些条理清晰的解决方案,只是需要一些长远的规划与设计。要搭建一个能有效支持多种 Agent 运行的平台,就需要有一个 Agents 框架。如果一开始就有一套明确的设计准则,那么便能轻松利用动态上下文信息,从而使 Agents 速度更快、成本更低、效果更好。

动态上下文配置正是 Agents 系统架构中的关键一环。

动态上下文配置(Dynamic Context Configuration) :正如本文所述,每个 Agent 都有独特的上下文需求。要了解、管理这些需求,实质上就是要处理 Agents 在所有上下文中的大量变化(variation)(参考本文顶部插图)。令人欣慰的是,这些变化(variation)能够简化归纳为少数几个基础维度。下面通过一个实例,综合展示本文提及的所有概念。

设想一位用于软件开发的 Agent ,它会先规划程序开发方案,随后根据这一方案执行。这位 Agent 的上下文配置可能为:

  • 保存用户提出的问题(Retain the initial user question)
  • 记录行动方案(Retain the plan)
  • 清除过往对话记录,仅保留最近一次代码修改记录(last code revision)及对话链中的最后一条信息
  • 引入 RAG 机制处理上传的代码文件,但不执行 RAG 系统的压缩处理流程
  • 将 system prompt 恒定设为对话链的最后一条信息

这种配置会被保存在该 Agent 的上下文配置中。因此,我们对 AI Agents 的定义超越了单纯的一系列固定提示词指令—— AI Agents 还配备有专门的动态上下文配置。

您会发现,对于不同的 AI Agent ,这些动态上下文配置既具备深刻意义,又展现出丰富的多样性,它们使得原本高度个性化的代码能够得到有效且高度抽象的统一管理。

09 Rounding up 总结回顾

合理管理动态上下文不仅能让 AI Agents 的表现更加出色,还能显著提升其准确性✅、响应速度✈️,甚至还能减少能源消耗⚡️……

Agents 不应局限于使用固定提示词指令(prompt instructions)来定义,它还应包含自己的动态上下文配置。借助简明的上下文类型划分,为每个 Agents 量身打造不同的动态上下文配置,将极大拓展 Agents 的应用潜能。

动态上下文配置(Dynamic Context)仅是 Agents 系统架构的冰山一角。若各位读者想要深入了解,欢迎随时与原文作者深入交流(或者加入本公众号建立的交流群聊与各位小伙伴一起交流探讨)。也可以在评论区留下您的问题或独到见解,若您觉得本文对你有所裨益,请转发给您的朋友或关注我们,这都是对我们莫大的支持与鼓励!

Thanks for reading!

Frank Wittkampf

Startup Nerd & Tech Exec

https://medium.com/@frankw_usa

END

参考资料

[1]https://www.perplexity.ai/search?q=show+me+best+practices+on+how+to+remove+near+duplicates+in+my+RAG+results

[2]https://www.perplexity.ai/search?q=show+me+a+query+that+selects+the+top+N+similar+results+from+a+vector+database+but+groups+it+by+file+so+that+you+ensure+the+diversity+of+snippets+come+from+several+files+instead+of+just+one+or+two

本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。

原文链接:

https://towardsdatascience.com/next-level-agents-unlocking-the-power-of-dynamic-context-68b8647eef89

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

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

相关文章

用python写一个基于PyQt5和OpenAI的智能问答项目

摘要: 使用python写一个可以对话的智能问答机器人,界面是使用PyQt5写的,通过调用OpenAl的免费接口,实现实时聊天功能。 1.申请免费的API key 前往页面https://github.com/chatanywhere/GPT_API_free 点击下面链接: …

如何判断ubuntu是桌面版(destop版)还是服务版(server版)?(systemctl status display-manager)

文章目录 用命令systemctl status display-manager 用命令systemctl status display-manager systemctl status display-manager如果是ubuntu desktop,将显示服务正在运行,如: 如果是ubuntu server,将不会显示服务,提…

计网ppt标黄知识点整理第(1)章节——谢希仁版本、期末复习自用

大众熟知的三大网络:电信网络、有线电视网络、计算机网络。发展最快起到核心的是计算机网络。Internet是全球最大、最重要的计算机网络。互联网:流行最广、事实上的标准译名。互连网:把许多网络通过一些路由器连接在一起。与网络相连的计算机…

宏集Panorama SCADA:个性化定制,满足多元角色需求

前言 在考虑不同人员在企业中的职能和职责时,他们对于SCADA系统的需求可能因其角色和工作职责的不同而有所差异。在SCADA系统的设计和实施过程中,必须充分考虑和解决这种差异性。 为了满足不同人员的需求, 宏集Panorama SCADA平台具备灵活的功能和定制…

如何通过PHP语言实现远程控制多路照明

如何通过PHP语言实现远程控制多路照明呢? 本文描述了使用PHP语言调用HTTP接口,实现控制多路照明,通过多路控制器,可独立远程控制多路照明。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备名称厂…

Android Dialog使用汇总

Dialog分类 AlertDialog Dialog 类是对话框的基类,官方建议我们不要直接实例化它,而是使用其子类来获取实例。AlertDialog是系统提供的一个直接子类,它能帮助我们快速构建出不同类型的弹窗。接下来就看下各种类型弹窗的使用。 1、普通对话框…

【教学类-13-05】20240604《数字色块图-5*7*8-A4横板-横切》中4班

背景需求: 【教学类-13-04】20230404《数字色块图判断密码是否正确-5*7*8-A4横板-横切》(中班主题《我爱我家》)_图案密码色块-CSDN博客文章浏览阅读530次。【教学类-13-04】20230404《数字色块图判断密码是否正确-5*7*8-A4横板-横切》(中班主…

2024高质量建成新型电力系统加速发展低零碳灵活性资源研究报告

来源:RMI&清华大学 近期历史回顾:2024年中国新能源汽车出海洞察.pdf 2024可信赖的企业级生成式 AI 白皮书.pdf 2023亚洲家族办公室 2024年移动性别鸿沟报告.pdf 2024年社交媒体顶级美容品牌.pdf 2024高质量建成新型电力系统加速发展低零碳灵活性资源…

Linux 搭建 ZeroTier 的 Moon 服务器

系统:centos 7.6 轻量云服务器:腾讯云 Moon是什么,为什么需要Moon? ZeroTier通过自己的多个根服务器帮助我们建立虚拟的局域网,让虚拟局域网内的各台设备可以打洞直连。这些根服务器的功能有些类似于通过域名查询找到…

2024年数字化经济与金融创新国际学术会议(ICDEFI 2024)

2024年数字化经济与金融创新国际学术会议(ICDEFI 2024) 会议简介 2024年数字经济与金融创新国际学术会议即将召开。此次会议旨在汇集全球数字经济与金融创新领域的专家学者,共同探讨数字经济的发展趋势以及金融创新的路径。与会者将分享前沿…

Linux下查看进程和端口信息

1, 根据进程名(这里是模糊查询)查看进程信息,以查看nginx进程名为例,查看所对应的进程id为19013(或者使用: ps -aux | grep nginx查看占用内存等信息) ps -ef | grep nginx 2, 根据进程id查看进程占用端口,查看对应端口为8080&…

springboot+mqtt使用总结

1.软件的选型 1.1.使用免费版EMQX 1.1.1.下载 百度搜索的目前是会打开官网,这里提供下免费版的使用链接EMQX使用手册 文档很详细,这里不再记录了。 1.2.使用rabbitmq rabbitmq一般做消息队列用,作为mqtt用我没有找到详细资料&#xff0c…

VB.net实战(VSTO):Excel插件的安装与卸载

1. 安装 1.1编程环境:Visual Studio 2022 1.2创建新项目: 1.3 加入一行测试程序:MsgBox(“hello”),点击启动,确认可以弹窗 1.4 点击发布 1.5 找到安装程序,点击安装。打开Excel程…

win10环境下nodejs安装过程

打开 https://nodejs.org/en/官网下载node.js 2.下载完成后的安装文件为node-v16.16.0-x64.msi,双击进行安装即可。 3.一直默认安装,记得可以更改安装路径 4.其他不用打勾,一直next,安装完成即可。 5.安装完成后,wi…

软件测试需求管理指南规范(Word原件,项目管理全资料)

3 测试需求 3.1 测试范围 3.2 测试目标 4 测试需求的现状 5 测试需求的内容 5.1 主体内容 5.2 管理内容 6 测试需求的制定 6.1 需求信息来源 6.2 需求分析 6.2.1 功能性需求 6.2.2 系统功能需求 6.2.3 界面需求 6.2.4 安装需求 6.2.5 业务需求 6.2.6 非功能性需求 6.2.7 性能需…

告别复制粘贴:AI论文写作工具的高效应用

写作这件事一直让我们从小学时期就开始头痛,初高中时期800字的作文让我们焦头烂额,一篇作文里用尽了口水话,拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业,结果毕业前的最后一道坎拦住我们的是毕业论文,这玩意不…

企业应用架构模式--详解51种企业应用架构模式

导读:企业应用包括哪些?它们又分别有哪些架构模式? 世界著名软件开发大师Martin Fowler给你答案 目录 01什么是企业应用02 企业应用的种类03企业架构模式 01什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈…

【Python系列】Python装饰器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Spring AI 第二讲 之 Chat Model API 第二节Ollama Chat

通过 Ollama,您可以在本地运行各种大型语言模型 (LLM),并从中生成文本。Spring AI 通过 OllamaChatModel 支持 Ollama 文本生成。 先决条件 首先需要在本地计算机上运行 Ollama。请参阅官方 Ollama 项目 README,开始在本地计算机上运行模型…

使用PyCharm 开发工具创建工程

一. 简介 前面学习了 安装 python解释器。如何安装python的一种开发工具 PyCharm。 本文来简单学习一下,如何使用 PyCharm 开发工具创建一个简单的 python工程。 二. PyCharm 开发工具创建一个工程 1. 首先,首先打开PyCharm 开发工具。选择 创建一…