Spiga

2025年7月的文章归档

通用AI聊天平台实现3:RAG知识库扩展

2025-07-26 15:18:29

摘要:一、实现多格式文档解析器 1. 通用文档解析接口 我们先在ai文件夹创建一个名为parsers的pathon包,用来实现多格式文档解析器。 接着我们先定义一个解析器接口 # app/ai/parsers/base.py from abc import ABC, abstractmethod from typing import List, Dict, Any from pydantic import BaseModel class DocumentChunk(BaseModel): 文档块 content: str metadata: Dict[str, Any] chunk_index: int class DocumentParser(ABC): 文档解析器抽象基类 @abstractmethod def parse(self, file_path: str, file_content: bytes) - List[DocumentChunk]: 解析文档并返回文档块列表 pass DocumentChunk是文档解析器返回类型。 DocumentParser是抽象基类,通过继承ABC来定义。 2. 实现文本解析器 # app/ai/parsers/txt_parser.py from typing import List from langchain_text_splitters import RecursiveCharacterTextSplitter from app.ai.parsers.base import DocumentParser, DocumentChunk class TextParser(DocumentParser): 文本文件解析器 def __init__(self, chunk_size: int = 1000, chunk_overlap: int = 200): 初始化文本解析器 Args: chunk_size: 文档块大小 chunk_overlap: 文档块重叠大小 …… 阅读全文

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

2025-07-19 15:02:32

摘要:上一篇我们已经实现了该项目的一些非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 14:39:31

摘要:一、项目介绍 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 # 创建一个 …… 阅读全文