Spiga

标签为AI的文章

通用AI聊天平台实现2:实现AI聊天服务

2025-07-19 16:51:06

摘要:上一篇我们已经实现了该项目的一些非AI功能的基础服务,如提供商、角色、会话等,本篇内容开始来实现AI部分的服务开发。 首先来实现一个AI聊天服务,然后在这些基础上将我们的AI聊天服务实现支持上传知识库。 一、实现AI聊天服务 AI聊天服务的功能很简单:就是通过我们提供的AI角色的信息, 对话的历史记录,已经用户发送过来的最新的信息,与大语言模型进行交互,生成回复内容。 AI聊天服务通过LangChain来实现。 1. 安装LangChain环境 uv add langchain langchain-openai 2. 实现AI聊天服务类 # app/ai/chat.py from typing import List,AsyncGenerator from langchain_core.messages import HumanMessage, AIMessage from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from app.data.models import Role from app.schemas.message import MessageBase, MessageRole class AIChatService: def __init__(self, role: Role): # 创建ChatOpenAI实例 llm = ChatOpenAI( base_url=role.provider.endpoint, api_key=role.provider.api_key, model=role.provider.model, temperature=role.temperature, streaming=True ) # 构建Prompt模板 promp…… 阅读全文

通用AI聊天平台实现1:基础服务与API

2025-07-12 23:14:04

摘要:一、项目介绍 1. 项目目标 Python + 面向单一用户 + 私有化部署 + 通用AI聊天平台 通过Web界面轻松交互 管理多个自定义AI角色 拥有会话管理能力 自由接入并切换语言模型(兼容OpenAl接口规范) 构建私有化知识库 扩展外部工具:集成MCP服务器 2. 功能性需求 多角色管理功能 对话管理功能 模型管理功能 RAG功能 前端界面(会话、知识库、模型设置、角色设置) MCP 服务器接入 3. 技术选型 包与项目管理工具:NuGet+ dotnet cli == uv 后端API框架与服务器:ASP.NET Core Web APl(Kestrel) == FastAPl + Uvicorn 数据模型与验证:数据注解/FluentValidation == Pydantic ORM + 数据迁移:EF Core == SQLAlchemy + Alembic 前端UI框架:Blazor Server == Gradio 元数据库(关系):PgSQL 向量数据库:Chroma 嵌入生成服务:云端向量服务 + 本地开源向量模型 AI组件:SK == LangChain 4. 项目架构 该项目采用分层架构(因为是第一个实例项目,没有采用领域驱动设计) 二、项目初始化 安装UV # https://docs.astral.sh/uv/getting-started/installation/#__tabbed_1_2 pip install uv # uv的依赖环境恢复可以使用 uv sync 创建UV项目 项目初始化 创建app和ui文件夹,按下面目录结构分别创建Python软件包和文件: app |--ai |--api |--data |--|--models |--schemas |--service |--.env |--config.py |--main.py ui 安装 fastapi uv add fastapi 安装 uvicorn uv add uvicorn 创建HelloWorld API # app/api/hello.py # 从 fastapi 库中导入 APIRouter 类,用于创建路由模块 from fastapi import APIRouter # 创建一个 …… 阅读全文

程序员的AI基础12:Magentic-One与GraphFlow

2025-06-28 16:58:31

摘要:一、Magentic-One系统解析 1. Magentic-One定位与价值 预构建专家系统:Magentic-One是一个基于AutoGen框架构建的预构建通用任务解决专家系统,具备处理复杂任务的能力。 双重价值:Magentic-One既可以作为强大的工具直接使用,也是学习复杂多智能体设计的最佳实践蓝图,为开发者提供设计参考。 2. 编排者双循环机制 内循环执行与反思:编排者的内循环围绕进度分类账进行任务执行与即时反思,快速迭代以确保任务按计划推进。 外循环规划调整:当内循环陷入停滞时,编排者启动外循环,重新审视任务分类账,调整宏观计划以应对复杂情况。 自适应能力:双循环机制赋予Magentic-One强大的自适应能力,使其能够灵活应对复杂多变的任务环境。 3. 专家角色能力矩阵 WebSurfer:负责网页浏览与交互,能够控制浏览器状态,执行网页导航、交互和内容阅读等操作。 FileSurfer:专注于本地文件系统操作,支持读取多种文件格式、浏览目录结构和文件管理。 Coder:擅长代码编写和数据分析,根据任务需求生成Python脚本等代码,完成数据处理和信息整合。 ComputerTerminal:为Coder提供安全的代码执行环境,确保代码安全运行并处理依赖库安装等。 4. 环境安装与安全守则 安装准备:运行Magentic-One前需安装autogen-ext[magentic-one]、Playwright及Chromium等依赖,确保环境完备。 安全运行建议:建议在Docker容器中运行Magentic-One,以隔离环境风险,保护系统安全。 人工审批机制:引入人工审批机制,对代码执行等关键操作进行审核,防止潜在风险。 pip install autogen-ext[magentic-one] # 时间比较长,耐心等待 playwrithr install --with-deps chromium # PowerShell 下运行 # https://chocolatey.org/install Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Ne…… 阅读全文

程序员的AI基础11:AutoGen

2025-06-21 13:41:34

摘要:一、框架概览 1. 框架概览 框架背景:AutoGen是由微软推出的开源框架,专为构建基于大型语言模型的复杂应用而设计。它改变了传统AI应用开发的方式,不再依赖单一的‘超级英雄’式智能体,而是通过多个智能体的协作来解决复杂任务。 核心思想:其核心思想是通过智能体间的对话与协作来动态驱动任务的解决。这种模式将任务分解为多个子任务,并分配给不同的智能体,每个智能体专注于特定的角色和任务,从而实现高效的协作。 架构优势:AutoGen框架的出现是对早期单一、巨型智能体设计局限性的一种回应。它通过任务分解和角色专业化,优化了问题解决的效率,提升了系统的灵活性和可扩展性。 2. 与LangChain和SK对比 LangChain与Semantic Kernel:LangChain通过模块化和组件化编排任务逻辑,形成‘链’或‘图’;Semantic Kernel则侧重于将大型语言模型的能力集成到企业级应用中,通过‘内核’与‘插件’动态编排执行计划。 AutoGen的独特性:AutoGen的核心抽象是‘对话’,通过智能体间的协作与对话隐式地驱动任务解决。开发者的工作重心从编排任务逻辑转向设计智能体团队,这种方式更加灵活,能够适应复杂的任务需求。 3. 设计理念深度解析 以对话为中心:AutoGen的设计理念是‘以多智能体对话为中心’,对话不仅是信息交换的形式,更是整个应用框架的计算核心。通过对话结构,开发者可以管理复杂的控制流,包括条件逻辑、循环和错误处理。 动态执行图:对话被抽象为动态的执行图,开发者可以通过设计智能体的角色、目标和沟通规则来间接引导应用程序的行为,这种方式更灵活、更具适应性。 决策与推理的转移:这种设计理念将应用程序的决策和推理部分从代码转移到对话本身,充分发挥了大型语言模型的自然语言理解和生成能力。 灵活性与适应性:开发者通过设计智能体的角色和沟通规则来引导应用程序的行为,这种方式不仅灵活,还能更好地适应不同的任务需求,契合了大型语言模型的特性。 4. 分层架构设计 核心API 功能:核心API是AutoGen框架的基石,提供最基础、最通用的构建模块,关注底层消息传递机制、智能体的生命周期管理以及对本地与分布式运行时的支持。 使用场景:当开发者需要构建全新的智能体交互模式或将其集成到已有的事件驱动系统中时,核心API提供了必要的灵活性和控…… 阅读全文

程序员的AI基础10:Semantic Kernel RAG

2025-06-14 18:16:51

摘要:一、RAG核心机制与组件 1. SK RAG架构与抽象层 抽象层转变 Semantic Kernel为RAG应用提供了现代化、企业级的抽象层,从单一组件向精细、解耦、类型安全的抽象转变。这种转变使得系统更加健壮、可维护,分离了数据存储、嵌入生成和信息检索的关注点,提升了模块化和可测试性。 数据模型映射 通过定义C#类和添加特性,可以将数据模型映射到向量数据库的模式。例如,使用VectorStoreKey、VectorStoreData等特性,能够简化与数据库的交互,避免编写复杂的数据库迁移代码,提高代码的可维护性和可扩展性。 技术选型灵活性 这种架构设计增强了技术选型的灵活性,允许开发者根据项目需求选择合适的数据库和嵌入模型,同时保持系统的稳定性和可扩展性。 2. RAG完整生命周期 生命周期阶段 RAG应用的核心生命周期包括数据加载与预处理、文本分块、嵌入、索引、检索和增强生成六个阶段。每个阶段都有明确的作用和输入输出,例如数据加载阶段负责读取数据,嵌入阶段将文本转换为向量。 标准性与通用性 与LangChain课程中提到的生命周期相比,SemanticKernel的RAG生命周期更加标准化和通用化,适用于多种数据类型和应用场景,为开发者提供了一套清晰的开发流程。 二、文本预处理与分块 文本分块的重要性 文本分块是RAG流程中的关键步骤,能够将长文本分割成适合嵌入和检索的小块,从而提高检索的准确性和效率。 自定义Token计算器 默认的Token计算器在处理中文分词时存在局限性,通过自定义Token计算器可以解决这一问题,确保分块的准确性。 TextChunker静态类 Semantic Kernel提供了TextChunker静态类,包含按行分割和段落组合等核心方法。通过设置最大Token数量和重叠Token参数,可以灵活地控制分块的粒度。 封装不稳定依赖 为了隔离变更风险,可以创建稳定的ITextSplitter接口和SemanticKernelTextSplitter包装类,封装不稳定的依赖,提高代码的稳定性和可维护性。 public interface ITextSplitter { Liststring Split(string text, int maxTokensPerChunk, int overlapTokens)…… 阅读全文

程序员的AI基础9:Semantic Kernel 流程框架

2025-06-07 13:32:45

摘要:一、流程框架设计理念 探索性AI与企业级应用差异:探索性AI高度自主,适合创意生成;企业级应用需确定性、可重复性、可审计性。 流程框架关键转变:从“让AI决定做什么”转变为“让AI高效执行预定义流程”,开发者通过声明式语法控制业务流程。 应用场景与优势:插件数量多时,单纯依靠大语言模型编排函数调用不可靠,流程框架可解决此挑战。 架构基础:事件驱动架构 优势 高度解耦与模块化:每个步骤独立开发、测试和替换,提升系统可维护性。 异步与并发:步骤发布事件后无需等待响应,实现高性能并行处理。 灵活性与可扩展性:修改事件路由规则或增加新步骤即可适应业务变更。 云原生环境支持 支持本地与分布式部署:流程框架支持本地开发环境及Dapr、Orleans等分布式云原生环境。 无缝迁移与扩展:本地定义的流程可无缝迁移到生产环境,无需修改核心业务逻辑。 核心概念详解 流程 定义与构成:流程是顶层容器,由步骤和事件路由规则构成,代表端到端业务目标。 生命周期与状态:每个流程实例有独立生命周期和状态。 步骤 基本执行单元:步骤是流程的原子性活动,封装具体业务逻辑,遵循单一职责原则。 内核函数:步骤类中用[KernelFunction]标记的方法,可被流程框架调用。 事件 信息传递与触发载体:事件由特定类表示,包含Id和Data属性,用于步骤间传递信息。 事件路由:事件路由基于Id,决定事件的流向。 上下文 运行时关键组件:上下文对象提供运行时信息和提交事件的方法,实现复杂流程控制逻辑。 SK的流程框架还在预发布版本,最终版代码可能会有偏差,但不影响我们学习。 二、构建第一个线性流程 1. 环境准备与项目设置 创建.NET控制台应用程序项目,安装Semantic Kernel流程框架核心依赖包。 Process.Core是核心库 Process.LocalRuntime提供本地运行组件。 PropertyGroup NoWarnSKEXP0080/NoWarn !-- 关闭警告 -- /PropertyGroup ItemGroup PackageReference Include=Microsoft.Extensions.Configuration Version=9.0.8 / …… 阅读全文

程序员的AI基础8:Semantic Kernel 架构

2025-05-31 15:54:54

摘要:一、Semantic Kernel概述 1. 与LangChain对比 设计理念:LangChain以社区驱动,快速迭代,适合原型验证;Semantic Kernel则以企业级应用为目标,注重稳定性与可维护性。 核心概念:提供LangChain与Semantic Kernel的核心概念映射表,帮助开发者快速理解两者差异。 适用场景:LangChain适合快速开发和试验,Semantic Kernel更适合企业级应用,强调与现有系统的深度融合。 LangChain概念 Semantic Kernel对应概念 备注说明 Agent Agent(Planner) / Kernel Agent类似于一个高级的Agent,能根据用户目标自动生成执行计划(Plan)。而Kernel(内核)则扮演了AgentExecutor角色,是负责实际执行这个计划的核心引擎。 Tool Plugin(插件) / KernelFunction(内核函数) Plugin是SK中与tool对等的概念,代表一个能力的集合。SK的一个重要设计是它明确地将能力分成两种 Chain 手动调用链 LangChain的Chain是一种预先定义好的、线性的调用序列。在SK中,我们可以通过编写代码来手动实现类似的函数调用链,这种确定性的编排方式是理解后续自动化规划器工作原理的基础。 Memory Memory(记忆) 这个概念在两个框架中基本一致,都用于在多次交互中保持状态和上下午,从而实现连贯的对话或复杂的任务处理。 PromptTemplate 提示模版 SK将提示模板的工程化提到了一个新的高度。与LangChain中通常的代码里定义的字符串模板不同,SK推荐将提示模版做为独立的文件进行管理,并配有专门的配置文件,使其成为一个可复用、可配置的软件工件。 2. 架构概览 内核:内核是Semantic Kernel的核心,负责接收请求、编排插件、管理服务和执行任务。 插件:插件是功能扩展的核心机制,包含语义函数和原生函数,实现AI能力与传统代码的融合。 记忆:记忆模块使AI应用能够保持上下文,支持连贯对话和复杂任务处理。 3. 搭建Semantic Kernel应用 创建一个.NET项目,如控制台应用程序,并添加Semantic Kernel的NuGet包。 …… 阅读全文

程序员的AI基础7:LangChain RAG

2025-05-24 19:31:52

摘要:一、RAG基本概念 RAG定义与价值:RAG(检索增强生成)是一种AI技术框架,通过检索外部知识源来增强大语言模型的知识储备和生成能力,解决模型知识过时和内容幻觉问题,提升回答的准确性和可信度。 RAG工作原理:RAG工作流分为索引阶段和检索与生成阶段。索引阶段将数据处理成可检索格式,存储于向量数据库;检索与生成阶段实时响应用户查询,检索相关文本块并生成答案。 RAG应用场景:RAG适用于企业知识管理、智能客服、法律咨询等专业领域,能够针对特定信息源回答问题,发挥巨大价值。 构建基础RAG流程: 索引阶段:线下数据准备过程 加载 分割 嵌入 存储 检索和生成阶段:线上阶段 检索 生成 开发难题 繁杂的数据接入 复杂的文本处理 多样的模型与接口 专业的向量存储 粘合所有环节 LangChain的价值 从零开发RAG应用面临数据接入、文本处理、模型接口、向量存储和环节粘合等诸多难题,LangChain通过模块化架构简化了构建过程。 LangChain由多个独立包组成,如langchain-core提供核心接口和数据类型,langchain-community集成第三方服务,langchain-openai针对特定模型提供商集成。 LangChain具有流式处理、异步与并行执行、可观察性与调试、标准化接口等核心优势,让构建复杂AI应用变得简单高效。 二、文档加载 1. LCEL语言 LCEL(LangChain表达式语言)是一种声明式编程范式,用于将LangChain组件组合在一起,通过管道操作符|实现数据流的高效表达。 LCEL支持流式处理、异步与并行执行、可观察性与调试、标准化接口,为构建高性能AI应用提供强大支持。 2. 文档加载器 文档加载器是RAG流程的入口,负责将各种数据源加载为LangChain能够处理的文档对象,其质量直接影响整个系统的性能。 文档对象包含page_content和metadata两个核心属性,分别存储文本内容和相关元数据,元数据对于数据过滤、答案引用和来源追溯至关重要。 from langchain_core.documents import Document doc = Document( page_content=这是一段示例文本内容,它将被用作文档的主要内容。, met…… 阅读全文

程序员的AI基础6:LangChain 链

2025-05-17 23:30:40

摘要:一、链的概念 定义与作用:链是LangChain中最核心的概念,指将多个模块化组件按特定顺序链接起来,执行多步骤任务的序列,可将复杂任务分解为更小、更易于管理的独立步骤。 核心优势:链在LangChain生态系统中扮演“粘合剂”和“骨架”的角色,连接不同人工智能组件,促成协同工作,简化应用开发过程,提升开发效率。 链的演进 在早期LangChain版本中,链通过继承Chain抽象基类实现,采用命令式的面向对象继承编程模型,存在组合灵活性不足等问题。 LangChain引入了LangChain表达式语言(LCEL),采用声明式的管道操作符|连接组件,具有可组合性、可读性、灵活性、原生支持高级功能和可观察性等优势。 构建链的核心组件 模型:模型是链的核心引擎,包括大型语言模型(LLMs)和聊天模型(Chat Models),负责执行主要的智能任务。 提示模板:提示模板负责构建和格式化模型的输入,将用户输入与预设指令和示例结合,生成完整、结构化的提示。 输出解析器:输出解析器将模型返回的原始输出转换为更结构化、易于处理的格式,是连接非结构化智能与结构化数据的桥梁。 二、构建第一个LLM应用 1. LangChain表达式语言基础 基础链结构:最基础的链结构为提示 | 模型 | 解析器,是所有复杂链条的基础构建单元,体现了与大型语言模型交互的三个基本阶段。 工作原理:详细追踪了从输入到输出的完整数据流动过程,包括提示模板的格式化、模型的推理生成和输出解析器的结构化处理。 2. 从零构建翻译链 import os # 1. 导入所需的核心组件 from dotenv import load_dotenv from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI # 从.env 文件加载我们配置的环境变量 load_dotenv() api_base = os.getenv(DASHSCOPE_API_BASE) api_key = os.getenv(DASHSCOPE_API_KEY) # 2. 定义我们…… 阅读全文

程序员的AI基础5:LangChain 介绍

2025-05-11 20:03:37

摘要:我们先配置一下环境 安装anaconda,具体安装方法查看页面:Python环境Anaconda下载与安装教程(附安装包) 2025最新版详细图文安装教程 - 知乎 清华镜像站:清华大学开源软件镜像站 安装好后创建一个langchain的环境,建议使用python3.10的版本(避免安装插件时冲突),安装langchain相关插件5个 如果插件安装不上,可以打开工具 anaconda prompt conda create -n langchain python=3.10 conda activate langchain conda install -c conda-forge langchain-openai 安装PyCharm,社区版即可,2025.2是最后一个社区版,下载地址 安装方法PyCharm安装教程及基本使用(更新至2024年新版本),教你迈出学习python第一步-CSDN博客 自备一个云ai大模型环境,比如通义千问 通义大模型_AI大模型_一站式大模型推理和部署服务-阿里云 一、LangChain介绍 LangChain是基于大语言模型的应用开发框架,提供工具、组件和接口,让开发者像搭积木一样创建复杂AI应用。 特点 数据感知:能与多种数据源连接,将外部数据作为知识库,弥补大模型数据陈旧、无法实时获取信息等缺陷 代理交互:应用可主动与环境互动,如自动规划行程、总结邮件内容等,增强用户体验和工作效率。 解决痛点:针对大模型内部数据过时、无法联网、Token限制、无法调用API等问题,LangChain提供解决方案。 应用场景 文档摘要应用 智能客服 编程助手 智能私人助理 学习助手 模型支持 LangChain封装了LLM类、Chat类和Embedding类模型,提供标准化接口。 LLM模型:接收文本输入,返回文本输出,无状态,不记交互历史。适用于快速问答、文本摘要、信息提取、代码生成等任务。 Chat类模型:接收消息列表,返回AI消息,支持多轮对话和角色扮演。构建聊天机器人、角色扮演应用、多轮交互任务等。 Embedding类模型:将文本映射为高维向量,用于语义搜索和知识库问答。实现语义搜索,是RAG应用的基石。 与OpenAI、Google、阿里等主流供应商合作,集成多种大模型。 常见参数:temperat…… 阅读全文