零基础玩转大模型扩展开发:从RAG到智能体的实战指南
【免费下载链接】happy-llm 📚 从零开始的大语言模型原理与实践教程 项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm
你是否遇到过这些问题:大模型回答总是过时?专业领域知识一问三不知?想定制专属功能却不知从何下手?本文将带你基于happy-llm项目,通过RAG检索增强和Agent智能体两大核心技术,从零开始实现个性化大模型应用,无需深厚AI背景也能轻松上手。
项目扩展基础:可复用的模块化架构
happy-llm项目采用分层设计理念,将大模型应用拆分为数据层、模型层和应用层,各模块间通过标准化接口通信,为二次开发提供极大便利。项目核心扩展点主要集中在第七章"大模型应用"部分,包含完整的RAG检索增强和Agent智能体实现方案。
扩展开发资源导航
项目提供了丰富的扩展开发资源,包括:
- 官方开发文档:docs/chapter7/第七章 大模型应用.md
- RAG功能源码:docs/chapter7/RAG/
- Agent智能体框架:docs/chapter7/Agent/src/core.py
- 社区贡献指南:Extra-Chapter/Readme.md
这些资源涵盖从基础原理到高级实现的全流程指导,无论是新手还是有经验的开发者都能快速找到所需内容。
实战一:构建专属知识库——RAG检索增强开发
检索增强生成(Retrieval-Augmented Generation,RAG)技术能让大模型动态获取外部知识,有效解决幻觉问题和知识过时问题。happy-llm提供的Tiny-RAG框架结构清晰,非常适合二次开发。
RAG核心模块解析
Tiny-RAG框架包含五大核心模块,各模块职责明确,便于扩展:
- 文档处理模块:负责加载和切分各类文档,支持PDF、Markdown和文本文件
- 向量化模块:将文本转换为向量表示,支持多种Embedding模型
- 向量存储模块:管理向量数据,实现高效相似性检索
- 检索模块:根据用户查询找到相关文档片段
- 生成模块:结合检索结果生成准确回答
快速扩展:自定义文档加载器
要支持新的文件格式,只需扩展文档处理模块。以添加Excel文件支持为例,修改RAG/utils.py文件:
# 添加Excel文件读取支持
elif file_path.endswith('.xlsx'):
return cls.read_excel(file_path)
@classmethod
def read_excel(cls, file_path: str):
import pandas as pd
df = pd.read_excel(file_path)
return '\n'.join(df.astype(str).agg('\t'.join, axis=1))
这段代码添加了Excel文件读取功能,将表格内容转换为文本格式,便于后续处理。通过这种方式,可以轻松扩展系统支持的文件类型。
优化检索效果:自定义分块策略
文档分块质量直接影响检索效果。项目默认分块策略基于Token长度,可根据需求自定义。修改分块函数RAG/utils.py:
def get_chunk(cls, text: str, max_token_len: int = 800, cover_content: int = 200):
# 增加标题优先的分块逻辑
# 当遇到以'#'开头的标题行时,强制开始新块
lines = text.splitlines()
new_lines = []
for line in lines:
if line.startswith('#'):
new_lines.append('\n---NEW-CHUNK---\n')
new_lines.append(line)
else:
new_lines.append(line)
text = '\n'.join(new_lines)
# 保留原有分块逻辑...
这种优化确保每个标题下的内容作为独立语义单元,特别适合技术文档和书籍的处理。
实战二:打造智能助手——Agent智能体扩展开发
Agent智能体是大模型应用的高级形态,它赋予模型自主规划、工具使用和结果反思的能力。happy-llm提供的Tiny-Agent框架轻量灵活,易于扩展。
Agent工作原理
Agent系统以大模型为"大脑",通过工具调用扩展能力边界,核心工作流程包括目标理解、规划、执行和反思四个阶段:
项目中的Agent实现采用了模块化设计,主要包含:
- 核心控制器:src/core.py
- 工具定义:src/tools.py
- 工具调用逻辑:src/utils.py
扩展工具集:添加自定义工具
扩展Agent能力最直接的方式是添加新工具。以实现天气查询工具为例,修改src/tools.py:
def get_weather(city: str) -> str:
"""
查询指定城市的天气情况。
:param city: 城市名称,如"北京"
:return: 天气信息字符串
"""
import requests
api_key = os.getenv("WEATHER_API_KEY")
url = f"https://restapi.amap.com/v3/weather/weatherInfo?city={city}&key={api_key}"
response = requests.get(url)
data = response.json()
if data["status"] == "1":
forecast = data["lives"][0]
return f"{forecast['province']}{forecast['city']}:{forecast['weather']},温度{forecast['temperature']}℃,{forecast['winddirection']}{forecast['windpower']}级"
else:
return f"无法获取{city}的天气信息"
然后在Agent初始化时注册新工具:
agent = Agent(
client=client,
model="Qwen/Qwen2.5-32B-Instruct",
tools=[get_current_datetime, count_letter_in_string, get_weather], # 添加新工具
verbose=True
)
这个简单的扩展让Agent具备了实时天气查询能力,类似地,你可以添加邮件发送、文件处理、数据库查询等各类工具。
优化决策逻辑:自定义提示词模板
Agent的决策能力很大程度上依赖于提示词设计。修改src/core.py中的系统提示词:
SYSTEM_PROMPT = """
你是一个叫不要葱姜蒜的人工智能助手。你的输出应该与用户的语言保持一致。
当用户的问题需要调用工具时,你可以从提供的工具列表中调用适当的工具函数。
使用工具的规则:
1. 对于需要实时信息的问题,必须调用对应工具
2. 进行多步骤计算时,先规划步骤再依次调用工具
3. 如果工具调用失败,尝试分析原因并换用其他方法
4. 回答时必须引用工具返回的具体数据
"""
通过定制提示词,可以引导Agent形成更符合特定场景需求的行为模式。
部署与分享:扩展成果展示
完成扩展开发后,你可以通过项目提供的演示程序展示成果,或集成到自己的应用中。项目提供了两种演示方式:
- 命令行演示:demo.py
- Web界面演示:web_demo.py
要分享你的扩展成果,可以通过Extra-Chapter目录提交PR,项目维护者会根据贡献指南评估是否合并到主项目中。
总结与进阶方向
本文介绍了基于happy-llm项目进行RAG和Agent扩展开发的实战方法,涵盖核心模块解析、自定义扩展和部署展示等环节。通过这些技术,你可以快速构建个性化的大模型应用。
进阶学习建议:
- 性能优化:研究Extra-Chapter/s1-vllm-thinking-budget/中的思考预算机制,提升Agent效率
- 多模态扩展:参考Extra-Chapter/vlm-concatenation-finetune/实现图文混合理解
- 高级检索策略:学习Extra-Chapter/CDDRS/中的细粒度语义检索方法
大模型扩展开发是一个快速发展的领域,建议定期关注项目更新和社区贡献,持续学习新方法和最佳实践。
如果你在扩展开发中有创新想法或实用工具,欢迎通过PR规范提交到项目中,与社区共享你的成果!
附录:扩展开发资源汇总
- 官方教程:docs/
- 代码示例:docs/chapter7/code/
- 模型下载:ModelScope
- 社区讨论:项目Issue区
- 许可证信息:LICENSE.txt
【免费下载链接】happy-llm 📚 从零开始的大语言模型原理与实践教程 项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






