Git Product home page Git Product logo

llm-universe's Introduction

动手学大模型应用开发

项目简介

本项目是一个面向小白开发者的大模型应用开发教程,旨在基于阿里云服务器,结合个人知识库助手项目,通过一个课程完成大模型开发的重点入门,主要内容包括:

  1. 大模型简介,何为大模型、大模型特点是什么、LangChain 是什么,如何开发一个 LLM 应用,针对小白开发者的简单介绍;
  2. 如何调用大模型 API,本节介绍了国内外知名大模型产品 API 的多种调用方式,包括调用原生 API、封装为 LangChain LLM、封装为 Fastapi 等调用方式,同时将包括百度文心、讯飞星火、智谱AI等多种大模型 API 进行了统一形式封装;
  3. 知识库搭建,不同类型知识库文档的加载、处理,向量数据库的搭建;
  4. 构建 RAG 应用,包括将 LLM 接入到 LangChain 构建检索问答链,使用 Streamlit 进行应用部署
  5. 验证迭代,大模型开发如何实现验证迭代,一般的评估方法有什么;

本项目主要包括三部分内容:

  1. LLM 开发入门。V1 版本的简化版,旨在帮助初学者最快、最便捷地入门 LLM 开发,理解 LLM 开发的一般流程,可以搭建出一个简单的 Demo。
  2. LLM 开发技巧。LLM 开发更进阶的技巧,包括但不限于:Prompt Engineering、多类型源数据的处理、优化检索、召回精排、Agent 框架等
  3. LLM 应用实例。引入一些成功的开源案例,从本课程的角度出发,解析这些应用范例的 Idea、核心思路、实现框架,帮助初学者明白其可以通过 LLM 开发什么样的应用。

目前,第一部分已经完稿,欢迎大家阅读学习;第二、三部分正在创作中。

目录结构说明:

  requirements.txt:官方环境下的安装依赖
  notebook:Notebook 源代码文件
  docs:Markdown 文档文件
  figures:图片
  data_base:所使用的知识库源文件

项目意义

LLM 正逐步成为信息世界的新革命力量,其通过强大的自然语言理解、自然语言生成能力,为开发者提供了新的、更强大的应用开发选择。随着国内外井喷式的 LLM API 服务开放,如何基于 LLM API 快速、便捷地开发具备更强能力、集成 LLM 的应用,开始成为开发者的一项重要技能。

目前,关于 LLM 的介绍以及零散的 LLM 开发技能课程已有不少,但质量参差不齐,且没有很好地整合,开发者需要搜索大量教程并阅读大量相关性不强、必要性较低的内容,才能初步掌握大模型开发的必备技能,学习效率低,学习门槛也较高。

本项目从实践出发,结合最常见、通用的个人知识库助手项目,深入浅出逐步拆解 LLM 开发的一般流程、步骤,旨在帮助没有算法基础的小白通过一个课程完成大模型开发的基础入门。同时,我们也会加入 RAG 开发的进阶技巧以及一些成功的 LLM 应用案例的解读,帮助完成第一部分学习的读者进一步掌握更高阶的 RAG 开发技巧,并能够通过对已有成功项目的借鉴开发自己的、好玩的应用。

项目受众

所有具备基础 Python 能力,想要掌握 LLM 应用开发技能的开发者。

本项目对学习者的人工智能基础、算法基础没有任何要求,仅需要掌握基本 Python 语法、掌握初级 Python 开发技能即可。

考虑到环境搭建问题,本项目提供了阿里云服务器学生免费领取方式,学生读者可以免费领取阿里云服务器,并通过阿里云服务器完成本课程的学习;本项目同时也提供了个人电脑及非阿里云服务器的环境搭建指南;本项目对本地硬件基本没有要求,不需要 GPU 环境,个人电脑及服务器均可用于学习。

注:本项目主要使用各大模型厂商提供的 API 来进行应用开发,如果你想要学习部署应用本地开源 LLM,欢迎学习同样由 Datawhale 出品的 Self LLM | 开源大模型食用指南,该项目将手把手教你如何速通开源 LLM 部署微调全链路!

注:考虑到学习难度,本项目主要面向初学者,介绍如何使用 LLM 来搭建应用。如果你想要进一步深入学习 LLM 的理论基础,并在理论的基础上进一步认识、应用 LLM,欢迎学习同样由 Datawhale 出品的 So Large LM | 大模型基础,该项目将为你提供全面而深入的 LLM 理论知识及实践方法!

项目亮点

  1. 充分面向实践,动手学习大模型开发。相较于其他从理论入手、与实践代差较大的类似教程,本教程基于具有通用性的个人知识库助手项目打造,将普适的大模型开发理念融合在项目实践中,帮助学习者通过动手搭建个人项目来掌握大模型开发技能。

  2. 从零开始,全面又简短的大模型教程。本项目针对个人知识库助手项目,对相关大模型开发理论、概念和基本技能进行了项目主导的重构,删去不需要理解的底层原理和算法细节,涵盖所有大模型开发的核心技能。教程整体时长在数小时之内,但学习完本教程,可以掌握基础大模型开发的所有核心技能。

  3. 兼具统一性与拓展性。本项目对 GPT、百度文心、讯飞星火、智谱GLM 等国内外主要 LLM API 进行了统一封装,支持一键调用不同的 LLM,帮助开发者将更多的精力放在学习应用与模型本身的优化上,而不需要花时间在繁琐的调用细节上;同时,本教程拟上线 奇想星球 | AIGC共创社区平台,支持学习者自定义项目为本教程增加拓展内容,具备充分的拓展性。

在线阅读地址

https://datawhalechina.github.io/llm-universe/

PDF 地址

https://github.com/datawhalechina/llm-universe/releases/tag/v1

内容大纲

第一部分 LLM 开发入门

负责人:邹雨衡

  1. LLM 介绍 @高立业
    1. LLM 的理论介绍
    2. 什么是 RAG,RAG 的核心优势
    3. 什么是 LangChain
    4. 开发 LLM 应用的整体流程
    5. 阿里云服务器的基本使用
    6. GitHub Codespaces 的基本使用(选修)
    7. 环境配置
  2. 使用 LLM API 开发应用 @毛雨
    1. 基本概念
    2. 使用 LLM API
      • ChatGPT
      • 文心一言
      • 讯飞星火
      • 智谱 GLM
    3. Prompt Engineering
  3. 搭建知识库 @娄天奥
    1. 词向量及向量知识库介绍
    2. 使用 Embedding API
    3. 数据处理:读取、清洗与切片
    4. 搭建并使用向量数据库
  4. 构建 RAG 应用 @徐虎
    1. 将 LLM 接入 LangChain
      • ChatGPT
      • 文心一言
      • 讯飞星火
      • 智谱 GLM
    2. 基于 LangChain 搭建检索问答链
    3. 基于 Streamlit 部署知识库助手
  5. 系统评估与优化 @邹雨衡
    1. 如何评估 LLM 应用
    2. 评估并优化生成部分
    3. 评估并优化检索部分

第二部分 进阶 RAG 技巧(正在创作)

负责人:高立业

  1. 背景
    1. 架构概览
    2. 存在的问题
    3. 解决方法
  2. 数据处理
    1. 多类型文档处理
    2. 分块优化
    3. 向量模型的选择
    4. 微调向量模型(进阶)
  3. 索引层面
    1. 索引结构
    2. 混合检索
    3. 假设性问题
  4. 检索阶段
    1. query 过滤
    2. 对齐 query 和 文档
    3. 对齐检索和 LLM
  5. 生成阶段
    1. 后处理
    2. 微调 LLM(进阶)
    3. 参考引用
  6. 增强阶段
    1. 上下文增强
    2. 增强流程
  7. RAG 工程化评估

第三部分 开源 LLM 应用解读

负责人:徐虎

  1. ChatWithDatawhale——个人知识库助手解读
  2. 天机——人情世故大模型解读

致谢

核心贡献者

主要贡献者

其他

  1. 特别感谢 @Sm1les@LSGOMYP 对本项目的帮助与支持;
  2. 特别感谢奇想星球 | AIGC共创社区平台提供的支持,欢迎大家关注;
  3. 如果有任何想法可以联系我们 DataWhale 也欢迎大家多多提出 issue;
  4. 特别感谢以下为教程做出贡献的同学!

Made with contrib.rocks.

Star History

Star History Chart

llm-universe's People

Contributors

0-yy-0 avatar 2951121599 avatar chg0901 avatar futureunreal avatar gckwd avatar halolah avatar honlu avatar jackbaixue avatar linchentang avatar logan-zou avatar lta155 avatar myoungs avatar promptmelody avatar sm1les avatar tackhwa avatar weihong-liu avatar xiaoyangbi avatar xuhu0115 avatar yikunhan42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

llm-universe's Issues

构建向量库chroma章节报错

from langchain.vectorstores.chroma import Chroma

vectordb = Chroma.from_documents(
documents=split_docs[:20], # 为了速度,只选择前 20 个切分的 doc 进行生成;使用千帆时因QPS限制,建议选择前 5 个doc
embedding=embedding,
persist_directory=persist_directory # 允许我们将persist_directory目录保存到磁盘上
)

File ~/miniconda3/envs/llm-universe/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py:196, in ConnectionPool.handle_request(self, request)
194 try:
195 # Send the request on the assigned connection.
--> 196 response = connection.handle_request(
197 pool_request.request
198 )
199 except ConnectionNotAvailable:
...
83 raise
85 message = str(exc)
---> 86 raise mapped_exc(message) from exc

ConnectError: [Errno 111] Connection refused

embeding后维度不一致问题。

你好.我在做向量数据库时,采用了智普的大模型做embedding,在写入choram向量数据库时,因为向量化后的维度不一致导致无法写入。查了很久不知道怎么解决。请大神指点
066265eef82c57a136caa6ed8fe4886
b8e3395875b1b56886b1b920a3f24d4

使用langchain接入chatgpt输出没有内容

结果显示有tokens,却看不见具体内容
content='' response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 95, 'total_tokens': 136}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': None, 'finish_reason': 'content_filter', 'logprobs': None} id='run-28d73283-36c7-4a3e-afbc-d4652bed3bd2-0'

from langchain.prompts.chat import ChatPromptTemplate

template = "你是一个翻译助手,可以帮助我将 {input_language} 翻译成 {output_language}."
human_template = "{text}"

chat_prompt = ChatPromptTemplate.from_messages([
("system", template),
("human", human_template),
])

text = "我带着比身体重的行李,
游入尼罗河底,
经过几道闪电 看到一堆光圈,
不确定是不是这里。
"
messages = chat_prompt.format_messages(input_language="中文", output_language="英文", text=text)
print(messages) # [SystemMessage(content='你是一个翻译助手,可以帮助我将 中文 翻译成 英文.'), HumanMessage(content='我带着比身体重的行李,游入尼罗河底,经过几道闪电 看到一堆光圈,不确定是不是这里。')]

output = llm.invoke(messages)

print(output)

请问,python版本和依赖版本都是按照requirements_windows.txt来着,但使用 LangChain 调用智谱 AI运行报错

运行这段
ai_model.generate(['你好'])
报错

Traceback (most recent call last):
File "F:\projects\LangChain_LLM\main.py", line 7, in
zhipuai_model.generate(['你好'])
File "E:\develop\miniconda3\envs\LangChain_LLM\lib\site-packages\langchain\llms\base.py", line 603, in generate
params = self.dict()
File "E:\develop\miniconda3\envs\LangChain_LLM\lib\site-packages\langchain\llms\base.py", line 929, in dict
starter_dict = dict(self._identifying_params)
File "F:\projects\LangChain_LLM\llm\zhipuai_llm.py", line 157, in _identifying_params
super()._identifying_params,
File "F:\projects\LangChain_LLM\llm\zhipuai_llm.py", line 85, in _identifying_params
return {
{"model_name": self.model_name}, **self._default_params}
File "F:\projects\LangChain_LLM\llm\zhipuai_llm.py", line 175, in _default_params
return {**normal_params, **self.model_kwargs}
TypeError: 'FieldInfo' object is not a mapping

有大佬知道啥原因吗

依赖安装失败

在windows下运行
pip install -r requirements_windows.txt
或者
pip install -r requirements.txt
都不能成功安装依赖
前者会卡在找不到backports=1.0这个包
image
后者会卡在uviloop这个包不能适配windows系统

请问project运行了,但是选择gpt3.5-turbo访问不了

之前notebook的gpt-3.5-turbo已经接入, 充值到OpenAI的帐号了, 可以正常访问

但是project中使用gpt-3.5模型出错:
1.开了vpn, project中的gradio一直等待
2.不开vpn, 则显示Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))

请问怎么解决

openai 包更新 1.X 版后的代码兼容问题

11月7日 OpenAI 举办 OpenAI DevDay 并配套将 Python SDK openai 包更新到了 1.X 版本,包含了若干 breaking changes,例如对话补完API的新的调用方法就变为

openai.OpenAI().chat.completions.create(...)

此类变更并不向后兼容,即在 1.X 版本下,若使用旧版代码调用对话补完

openai.ChatCompletion.create(...)

则会报APIRemovedInV1异常:

You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.
You can run openai migrate to automatically upgrade your codebase to use the 1.0.0 interface.
Alternatively, you can pin your installation to the old version, e.g. pip install openai==0.28
A detailed migration guide is available here: openai/openai-python#742

即在11月7日后,学习此教程第二课 “调用ChatGPT” 部分,且安装了 1.X 版本openai 包的学习者将遇到代码运行错误的情况。
另外因为 /project/llm/call_llm.py 中也有调用 openai.ChatCompletion.create(),且此项目似乎并没有固定依赖包的版本,预计此项目也将受影响。

解决方案一:
在 notebook 和 项目 中固定 openai 包的版本为某个 0.X 版本,如最后一个 0.X 版本 0.28.1

解决方案二:
参考上文中的迁移指南,手动或尝试使用 openai migarate 命令将现有代码更新为适应 1.X 版本的代码。

streamlit version

May I ask the version of streamlit in the project? I installed 1.11.0; 1.12.0 and 1.10.0. I always meet problem like:
TypeError: radio() got an unexpected keyword argument 'captions' for the following codes
selected_method = st.radio(
"你想选择哪种模式进行对话?",
["None", "qa_chain", "chat_qa_chain"],
captions = ["不使用检索问答的普通模式", "不带历史记录的检索问答模式", "带历史记录的检索问答模式"])

TypeError: container() got an unexpected keyword argument 'height' for the following codes
messages = st.container(height=300)

更新后的版本

您好,特别感谢你们的项目,请问一下目前我是安装1.0版本学习的,学习完后可以无缝衔接到2.x吗

求助:星火API调用Bug

文档中关于星火 api 调用的示例很简洁,但是有一个问题就是,下方的 sparkAPI.main 函数的返回值是 None,这个 response 是无效的。那么应该如何流式的获得响应的数据并且封装好呢 :)
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.