当前位置: 首页 > news >正文

D1-基于本地Ollama模型的单轮问答系统


概述

本程序([gradio_v2.py](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py))是一个基于 Gradio 和 Ollama API 构建的支持多轮对话的小学作文生成器。相比前一版本,该版本新增了对话历史记录、token 数量统计、参数调节和清空对话功能,提升了用户体验与交互灵活性。

程序通过抽象基类 [LLMAgent](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L12-L15) 实现模块化设计,当前使用 [OllamaAgent](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L18-L70) 作为具体实现,调用本地部署的 Ollama 大模型(如 qwen3:8b)生成作文内容,并提供一个交互式 Web 界面供用户操作。

未来可轻松扩展为其他 LLM 平台(如 OpenAI、HuggingFace),只需实现新的 [LLMAgent](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L12-L15) 子类即可。


环境安装

依赖安装

需要以下 Python 库:

  • gradio: 创建交互式 Web 界面。
  • requests: 发送 HTTP 请求到 Ollama API。
  • [json](file://i:\OneDrive\1_LLM_Project\2_Agent\OpenManus\config\mcp.example.json): 解析 API 响应数据(Python 内置)。
  • logging: 记录运行日志(Python 内置)。
  • abc: 定义抽象基类(Python 内置)。
  • tiktoken: 精确计算 token 数量(用于估算输入和历史长度)。

安装命令:

pip install gradio requests tiktoken

建议使用 Python 3.8 或以上版本。


Ollama 服务配置

  1. 安装 Ollama
    • 下载并安装:https://ollama.ai/
  2. 启动 Ollama 服务
    ollama serve
    
    • 默认监听地址:http://localhost:11434
  3. 下载模型
    ollama pull qwen3:8b
    
  4. 验证模型
    ollama list
    

运行程序

  1. 将代码保存为 [gradio_v2.py](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py)
  2. 确保 Ollama 正在运行
  3. 执行程序:
    python gradio_v2.py
    
  4. 打开浏览器访问界面(通常为 http://127.0.0.1:7860
  5. 输入提示词,调整参数后点击“生成作文”,查看结果及对话历史

代码解释

1. 依赖导入

import gradio as gr
import requests
import json
import logging
from abc import ABC, abstractmethod
import tiktoken
  • tiktoken:精确计算文本 token 数量,用于优化大模型输入控制。

2. 日志配置

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
  • 设置日志级别为 INFO,记录 API 调用和错误信息,便于调试。

3. 抽象基类:[LLMAgent](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L12-L15)

class LLMAgent(ABC):@abstractmethoddef generate_response(self, prompt):pass
  • 定义通用接口,所有 LLM Agent 必须实现 [generate_response](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L14-L15) 方法。
  • 支持未来扩展多种 LLM 接口(如 OpenAI、Anthropic)。

4. 具体实现:[OllamaAgent](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L18-L70)

class OllamaAgent(LLMAgent):def __init__(self, config): ...def set_max_history_length(self, max_rounds): ...def set_parameters(self, max_tokens, temperature): ...def generate_response(self, prompt): ...def clear_history(self): ...
  • 对话历史管理:维护 history 列表,支持多轮对话。
  • 参数设置:动态调整 max_tokenstemperature
  • Token 控制:自动截断历史以防止超出模型上下文限制。
  • 异常处理:捕获网络请求失败和 JSON 解析错误,返回用户友好的提示。

5. Token 统计函数

def calculate_tokens(text): ...
def calculate_history_tokens(history): ...
  • 使用 tiktoken 精确估算 token 数量。
  • 提升对大模型输入长度的控制能力,避免超限错误。

6. 格式转换函数

def format_history_for_chatbot(history): ...
  • 将内部 [history](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L0-L0) 结构转换为 gr.Chatbot 所需格式 [user_msg, assistant_msg]

7. 主逻辑函数:[generate_essay](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L105-L111)

def generate_essay(prompt, agent, max_rounds, max_tokens, temperature): ...
  • 设置最大对话轮数与生成参数。
  • 调用 agent.generate_response 获取响应。
  • 返回格式化后的对话历史、最新回复与 token 数量。

8. 辅助函数

def update_token_count(prompt): ...
def clear_conversation(agent): ...
  • 实时更新输入 token 数量。
  • 清空对话历史并重置状态。

9. 主函数:[main](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L120-L199)

def main():config = { ... }agent = OllamaAgent(config)with gr.Blocks(...) as demo:# UI 组件定义...demo.launch()
  • UI 功能增强
    • 支持输入框、token 显示、滑动条参数调节、清空按钮。
    • 对话历史展示采用 gr.Chatbot,提升可视化体验。
  • Gradio 事件绑定
    • prompt_input.change():实时更新 token 数量。
    • submit_button.click():触发作文生成。
    • clear_button.click():清空对话历史。

运行流程图

graph TDA[用户输入提示词] --> B[点击 submit_button]B --> C[调用 generate_essay(prompt, agent, 参数)]C --> D[调用 agent.set_* 设置参数]D --> E[调用 agent.generate_response(prompt)]E --> F[发送 POST 请求至 Ollama API]F --> G[接收并解析 JSON 响应]G --> H[更新 chatbot 对话历史与输出结果]

注意事项

  • Ollama 服务:确保服务运行并监听在 http://localhost:11434/v1
  • 模型可用性:确认 qwen3:8b 已下载。
  • token 上限:注意模型的最大上下文长度(如 4096 tokens),避免因历史过长导致超限。
  • 参数影响temperature 影响生成多样性,值越低越确定;[max_tokens](file://i:\OneDrive\1_LLM_Project\2_Agent\MyAgent\gradio_v2.py#L0-L0) 控制输出长度。
  • 调试信息:查看终端日志,确认 API 响应是否正常或是否有错误发生。

未来扩展建议

  • 多模型支持:添加 OpenAIAgent 等子类,通过下拉菜单切换模型。
  • 配置文件化:将 [config](file://i:\OneDrive\1_LLM_Project\2_Agent\OpenManus\app\config.py#L0-L0) 移出硬编码,支持从 JSON/YAML 文件读取。
  • 异步请求:使用 aiohttp 替换 requests,提高并发性能。
  • 对话持久化:将历史对话保存到本地文件或数据库。
  • 用户登录与权限管理:区分不同用户的对话记录。
  • 移动端适配:优化界面布局以适配手机端使用。

示例使用

  1. 启动程序后访问 http://127.0.0.1:7860
  2. 输入提示:“帮我写一篇小学作文 我的老师”
  3. 调整参数(如 max_tokens=1000,temperature=0.2)
  4. 点击“生成作文”,显示如下示例:
我的老师我的语文老师姓李,我们都叫她李老师。她有一头乌黑的长发,总是扎成一个马尾辫,走起路来像只轻盈的小鹿。最特别的是她的眼睛,像两颗黑葡萄,笑起来会弯成月牙的形状。...

在这里插入图片描述

http://www.xdnf.cn/news/786313.html

相关文章:

  • Docker部署与应用、指令
  • AutoGenTestCase - 借助AI大模型生成测试用例
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • 【Typst】3.Typst脚本语法
  • Unity Shader编程】之高级纹理
  • C++ TCP传输心跳信息
  • 秋招Day12 - 计算机网络 - IP
  • Kafka集群部署(docker容器方式)SASL认证(zookeeper)
  • 用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
  • 软件工程的定义与发展历程
  • 关于FPGA软核的仿真(一)
  • 队列的讲解:C++队列的使用
  • 12.7 LangChain实战:1.2秒响应!用LCEL构建高效RAG系统,准确率提升41%
  • docker离线镜像下载
  • Nginx配置Ollama 访问api服务
  • TablePlus:一个跨平台的数据库管理工具
  • AI Coding 资讯 2025-06-03
  • 垂起固定翼无人机应用及技术分析
  • godwork_ AT 5.2 摄影测量空三数据处理软件。
  • 闲谈PMIC和SBC
  • FTXUI::Screen 模块
  • 《Effective Python》第六章 推导式和生成器——总结(基于智能物流仓储监控系统的数据处理)
  • 1. 引言
  • 《DeepSeek使用指南》开源知识库正式上线啦!
  • Spring AI开发跃迁指南(第二章:精进之道1——花样玩转LLM对话记忆功能)
  • 小巧实用,Windows文件夹着色软件推荐
  • OD 算法题 B卷【矩阵稀疏扫描】
  • 【知识点】openai请求参数如何转为大模型的字符串?
  • 如何将 iOS 性能调试融入日常开发流程?构建“默认监控机制”的实战经验(含 KeyMob 工具搭配)
  • 【高等数学】(1)映射