Openwebui提效小工具

时间:2025-03-28 07:18:53

rag系列文章目录

文章目录

  • rag系列文章目录
  • 前言
  • 一、openwebui介绍
  • 二、配置prompt模板
  • 三、测试输出
  • 总结


前言

大模型时代,人人都在使用大模型进行提效,对程序员而言,尤其如此,不提高自己的开发效率,就会有被取代失业的危险。本文介绍基于openwebui如何进行开发提效,解放自己繁琐的开发任务。


一、openwebui介绍

Open WebUI 是一个功能强大、可扩展的开源 Web 界面,专为本地和云端的大型语言模型(LLM)设计,提供类似 ChatGPT 的用户体验。以下是它的核心功能:

  1. 直观的用户界面
    仿照 ChatGPT 设计,提供流畅的交互体验。
    响应式设计,适配桌面和移动设备。
    代码高亮,支持 Markdown 和 LaTeX 渲染,便于技术文档和数学公式展示。
  2. 多模型支持
    兼容 Ollama、OpenAI API 及其他兼容 API(如 LM Studio、Mistral 等)。
    支持 多模型并行对话,可同时与多个 LLM 交互并比较结果。
    提供 模型竞技场(Model Arena),让用户对不同模型的表现进行评分。
  3. 检索增强生成(RAG)
    支持 本地 RAG 集成,可上传文档(PDF、Word、TXT 等)作为知识库,AI 回答时会参考这些内容。
    支持 网页浏览,通过 #URL 命令直接抓取网页内容进行分析。

二、配置prompt模板

配置prompt模板,主要是为了重复高效使用优秀的prompt示例,这些prompt示例是用户长时间调试好的,主要有特点是,能够针对客户特定问题输出结构化的容易理解的结果。

大家可以根据自己的场景进行调整修改,以满足自己的需要为准。这里以让大模型数据springboot工程里面mybatis的增删改查为例,写的prompt如下:

你是一个springboot工程代码专家,基于建表语句生成操作数据库的相关工程文件。

你需要根据一个建表语句生成3个文件,分别是Po类文件,Mapper文件,Mapper xml文件。

输出格式如下:
==============Po文件===================
主要基于建表语句生成,Po类里面的字段需要参考建表语句的字段,类型需要对应正确。
==============Mapper文件===============
主要基于建表语句生成增删改查接口,查询字段如果含有id,需要含有根据id查询的接口,如果含有name,需要根据name进行模糊查询。插入接口包含两个,单条插入和批量插入。
==============Mapper xml文件============
这里主要基于上面的Mapper接口文件,生成mapper xml文件,实现上面的接口,sql语句使用postgres sql。

样例输入如下:
CREATE TABLE IF NOT EXISTS pg_conversation
 (
   id BIGSERIAL       PRIMARY KEY,
   agent_id    bigint,
   user_id    bigint     NOT NULL,
   conversation_name  text,
   create_time timestamp,
 	update_time timestamp
 );
 COMMENT ON TABLE "pg_conversation" IS '会话信息表';
 COMMENT ON COLUMN "pg_conversation".id IS '主键';
 COMMENT ON COLUMN "pg_conversation".agent_id IS 'agent ID';
 COMMENT ON COLUMN "pg_conversation".user_id IS '用户ID';
 COMMENT ON COLUMN "pg_conversation".conversation_name IS '会话名称';
 COMMENT ON COLUMN "pg_conversation".create_time IS '创建时间';
 COMMENT ON COLUMN "pg_conversation".update_time IS '更新时间';
样例输出如下:
==============Po文件===================
@Data
@Table(name = "pg_conversation")
public class PgConversationPo {
    @Id
    private Long id;
    private Long agentId;
    private Long userId;
    private String conversationName;
    private Date createTime;
    private Date updateTime;
}
==============Mapper文件===============
public interface PgConversationMapper {
    List<PgConversationPo> queryPos(@Param("conversationName") String conversationName);
    int insertPo(PgConversationPo po);
    int deletePo(@Param("id") Long id);
    int updatePo(PgConversationPo po);
}
==============Mapper xml文件============
<mapper namespace="com.test.dao.mapper.PgConversationMapper">
    <resultMap id="PgConversationPoResultMap" type="com.test.po.PgConversationPo">
        <id property="id" column="id"/>
        <result property="agentId" column="agent_id"/>
        <result property="userId" column="user_id"/>
        <result property="conversationName" column="conversation_name"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>

    <select id="queryPos" resultMap="PgConversationPoResultMap">
        select *
        from pg_conversation
         where 
         <if test=" conversationName != null and conversationName != '' ">
           and conversation_name like concat('%',#{conversationName},'%')
         </if>
         order by
         create_time desc
    </select>

    <insert id="insertPo">
        INSERT INTO pg_conversation (agent_id, user_id, conversation_name, create_time, update_time)
        VALUES (#{agentId}, #{userId}, #{conversationName}, #{createTime}, #{updateTime})
    </insert>

    <update id="updatePo">
        UPDATE pg_conversation
        SET conversation_name = #{conversationName}
        WHERE id = #{id}
    </update>
    <delete id="deletePo">
        DELETE FROM pg_conversation
        WHERE id = #{id}
    </delete>
</mapper>


postgres sql建表语句如下:
 {{CLIPBOARD}} 
请开始生成

三、测试输出

Openwebui具有操作简单的特性,复制你需要生成的sql语句,然后在问答会话窗口,输入/mapper(自己配置的模板名称),然后输入tab健,就会把你的复制内容放到变量{{CLIPBOARD}}里面,然后点击问答即可,看到大模型输出效果。
输出结果如下:

@Data
@Table(name = "pg_user")
public class PgUserPo {
    @Id
    private Long id;
    private String userId;
    private String userName;
    private Date createTime;
    private Date updateTime;
}
public interface PgUserMapper {
    List<PgUserPo> queryByUserName(@Param("userName") String userName);
    PgUserPo queryById(@Param("id") Long id);
    PgUserPo queryByUserId(@Param("userId") String userId);
    int insertPo(PgUserPo po);
    int batchInsertPos(@Param("pos") List<PgUserPo> pos);
    int deletePo(@Param("id") Long id);
    int updatePo(PgUserPo po);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.PgUserMapper">

    <resultMap id="PgUserPoResultMap" type="com.example.po.PgUserPo">
        <id property="id" column="id" />
        <result property="userId" column="user_id" />
        <result property="userName" column="user_name" />
        <result property="createTime" column="create_time" />
        <result property="updateTime" column="update_time" />
    </resultMap>
    
    <select id="queryByUserName" resultMap="PgUserPoResultMap">
        SELECT *
        FROM pg_user
        WHERE 
        <if test="userName != null and userName != ''">
            user_name LIKE concat('%',#{userName},'%')
        </if>
        ORDER BY create_time DESC
    </select>

    <select id="queryById" resultMap="PgUserPoResultMap">
        SELECT *
        FROM pg_user
        WHERE id = #{id}
    </select>

    <select id="queryByUserId" resultMap="PgUserPoResultMap">
        SELECT *
        FROM pg_user
        WHERE user_id = #{userId}
    </select>
    
    <insert id="insertPo">
        INSERT INTO pg_user (user_id, user_name, create_time, update_time)
        VALUES (#{userId}, #{userName}, #{createTime}, #{updateTime})
    </insert>

    <insert id="batchInsertPos">
        INSERT INTO pg_user (user_id, user_name, create_time, update_time)
        VALUES 
        <foreach collection="pos" item="po" separator=",">
            (#{po.userId}, #{po.userName}, #{po.createTime}, #{po.updateTime})
        </foreach>
    </insert>

    <update id="updatePo">
        UPDATE pg_user
        SET 
            user_id = #{userId},
            user_name = #{userName},
            create_time = #{createTime},
            update_time = #{updateTime}
        WHERE id = #{id}
    </update>

    <delete id="deletePo">
        DELETE FROM pg_user
        WHERE id = #{id}
    </delete>

</mapper>

总结

本文介绍了使用openwebui来帮助程序员减少重复冗余的开发任务,除了开发工程中CURD任务之外,只要细心发现,还有很多可以来帮助程序员节省时间的功能,比如格式化输出接口文档,mysql sql语句转换为postgres sql语句等等,这些都可以写prompt模板做成一个agent,在需要的时候,帮助自己提升开发效率。