掘金 人工智能 07月20日 08:23
AI入门-搭建一个本地聊天机器人
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文聚焦AI时代下开发者必备技能,强调掌握大语言模型应用开发的重要性。文章深入浅出地介绍了如何选择和使用AI模型,并以阿里云百炼大模型为例,分析了其在中国语境下的核心优势,如中文优化、合规性及成本效益。同时,文章详细阐述了提示词(Prompt)的核心要素、设计黄金法则及进阶技巧,并提供了一个完整的Python脚本,指导开发者如何搭建本地AI机器人,是AI开发入门的实用指南。

🚀 AI时代已将大语言模型应用开发能力推向开发者必备技能的地位,随着GPT-4等模型的崛起,掌握AI技术对于开发者而言不再是加分项,而是保持竞争力的关键。

🇨🇳 阿里云百炼(Qwen)大模型在中文场景下表现出色,具备原生中文优化、国内合规性、低API延迟和成本效益等优势,使其成为国内开发者和企业部署AI应用的优选方案。

✍️ 提示词(Prompt)是与AI模型交互的核心,一个好的提示词通过角色设定、任务指令和约束条件,能够精准引导模型输出。掌握如少样本学习、链式思考等进阶技巧,能显著提升AI应用的质量和表现。

💻 文章提供了完整的Python开发指南,涵盖了从环境配置、模型对象创建到对话管理的全过程,并附有可执行的脚本示例,帮助开发者快速上手构建本地AI聊天机器人,实现AI技术的实际落地应用。

前言:AI时代开发者的新必修课

我们正处在一个激动人心的技术变革时代。随着GPT-4、Claude、LLaMA等大语言模型的崛起,人工智能正在从实验室走向千家万户,从理论研究转变为实际生产力工具。作为开发者,掌握AI应用开发能力已不再是"锦上添花",而是"必备技能"。

知识速食通过本篇文章你将会了解

代码基于 python 基于 pycharm 进行开发

大模型选择

我选择的是 阿里云百炼大模型(原因:免费)。下面的内容是ai帮忙总结的

## 为什么选择阿里云百炼大模型?### 🌟 核心优势对比| 特性                | 阿里云百炼(qwen) | OpenAI(GPT) | 本地部署(LLaMA) ||---------------------|------------------|-------------|----------------|| **中文支持**        | ✅ 原生优化       | ⚠️ 需调教   | ❌ 依赖中文语料 || **合规性**          | ✅ 国内可用       | ❌ 需代理    | ✅ 完全自主     || **API延迟**         | <500ms(国内节点) | 1-3s        | 依赖硬件       || **成本**            | ¥0.01/千token    | $0.02       | 一次性硬件投入 || **领域适配**        | ✅ 金融/政务特化 | ⚠️ 通用     | ❌ 需微调      |### 🏆 选择阿里云大模型的六大理由1. **中文场景深度优化**     - 千问(Qwen)系列模型针对中文语法、成语、诗词等有专项训练   - 在C-Eval中文评测中表现优于同等规模国际模型(准确率82.3% vs GPT-3.5的71.8%)2. **企业级合规保障**     ```python   # 数据不出境,满足等保要求   base_url = "https://dashscope.aliyuncs.com"  # 国内服务器

3. 无缝的工程化集成

*   提供与OpenAI完全兼容的API接口*   支持Python/Java/Go等多语言SDK*   完善的监控和调用统计面板

4. 行业解决方案支持

*   金融版模型通过《生成式AI金融行业应用白皮书》认证*   政务版支持政策文件结构化处理

5. 灵活的部署方式

python    # 可切换不同规格模型    model = "qwen-plus"  # 可选 qwen-turbo(快)/qwen-max(强)

6. 性价比优势

*   比国际同类产品便宜40-60%

申请过程可以自行搜索。

环境设置

大部分的案例都是将 apikey设置到系统环境变量里面去。这样的好处是 整个电脑都可以获取这个配置。我这里直接将 apikey放在项目的.env 文件中,并且在代码提交时 忽略该文件

创建模型对象

# 加载 .env 文件load_dotenv()  # 默认加载项目根目录的 .env 文件try:    client = OpenAI(        api_key=os.getenv("TONG_YI_API_KEY"),        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",    )except Exception as e:    print(e)

提示词设定

什么是AI提示词?

提示词(Prompt)是用户提供给AI模型的输入指令,它相当于:

"好的提示词能让普通模型发挥专家水平,差的提示词会让顶尖模型表现平庸" —— OpenAI技术报告

提示词的核心要素

1. 角色设定(Role)
system_prompt = ChatCompletionSystemMessageParam(    role="system",     content="你是一位资深Python开发工程师,擅长用比喻解释技术概念")

作用:定义AI的"人设",影响回答的专业度和视角

2. 任务指令(Task)

text

请用三句话向小学生解释递归,要求:1. 使用楼梯作为比喻2. 包含一个简单代码示例3. 最后提个思考问题

要点:明确、具体、可验证

3. 约束条件(Constraints)

text

回答需遵守:- 使用中文回答- 代码用Python3.10语法- 禁用学术术语- 输出不超过200字

价值:防止AI"自由发挥过度"

提示词设计黄金法则

✨ 结构化公式

text

角色 + 专业领域 + 任务目标 + 输出要求 + 禁忌事项↓"作为[角色],在[领域]方面,请完成[任务],要求[格式],避免[问题]"

进阶技巧

1. 少样本学习(Few-shot)

python

prompt = """问:如何理解闭包?答:就像背包旅行时带的零食盒(外层函数),路上随时取用(内层函数)现在请用类似比喻解释装饰器:"""
2. 链式思考(Chain-of-Thought)

text

请分步骤解决:1. 理解问题:客户需要什么?2. 分析现状:当前系统瓶颈3. 提出方案:三个可选架构4. 推荐选择:给出依据
3. 自洽校验(Self-verification)

text

回答后请自行检查:1. 是否满足所有要求?2. 是否存在事实错误?3. 逻辑是否自洽?

对话支持

在较老的大模型对话案例中大部分直接只用json 来作为信息的发送对象

但在新版本的message接收的是一个 Iterable[ChatCompletionMessageParam]

类型定义解析

ChatCompletionMessageParam 是OpenAI API中用于对话消息的联合类型(Union Type),包含6种可能的角色类型:

ChatCompletionMessageParam: TypeAlias = Union[    ChatCompletionDeveloperMessageParam,  # 开发者调试用    ChatCompletionSystemMessageParam,     # 系统指令    ChatCompletionUserMessageParam,       # 用户输入      ChatCompletionAssistantMessageParam,  # AI回复    ChatCompletionToolMessageParam,       # 工具调用    ChatCompletionFunctionMessageParam    # 函数调用(旧版)]

我们设定一位老师的提示词:

system_prompt = ChatCompletionSystemMessageParam(    role="system",    content="""# 角色设定你是一位拥有10年教学经验的AI特级教师,同时具备:- 学科专家(STEM教育认证)- 心理咨询师(儿童教育方向)- 课程设计师(PBL认证)# 核心任务为K12学生提供符合以下标准的解答:1. **准确性**   - 所有知识点需标注来源(如:人教版物理八年级下册P23)   - 数学解答必须展示2种不同解法   - 实验类问题需包含安全注意事项2. **教学法**   - 使用"解释-示例-练习"三段式结构   - 每讲解3个知识点插入1个随堂测试题   - 复杂概念必须使用生活化比喻(如:电压=水管水压)3. **交互设计**   - 根据学生认知水平动态调整:     | 学段   | 词汇复杂度 | 句子长度 | 抽象度 |     |--------|------------|----------|--------|     | 小学生 | 基础500词  | ≤15字    | 具象   |     | 中学生 | 通用3000词 | ≤25字    | 半抽象 |     | 高中生 | 专业术语   | ≤40字    | 抽象   |   - 每轮对话包含:     1. 知识讲解(主内容)     2. 趣味互动([表情包])     3. 延伸思考(开放性问题)# 表情包使用规范1. 知识难点:[挠头emoji]+"这个地方确实有点烧脑呢~"2. 重要提醒:[警报emoji]+"注意!这是考试高频考点!"3. 鼓励反馈:[鼓掌emoji]+"你这个思路很有创意!"# 安全守则1. 遇到以下问题必须拒绝回答:   - 涉及暴力/违法内容 → "这个问题不适合讨论,我们聊聊..."   - 作业代写请求 → "我可以教你方法,但答案要自己完成哦[眨眼emoji]"2. 对存疑内容必须声明:"根据XX理论的主流观点..."# 特别能力1. **错题诊断**:学生提供错误答案时,能分析:   - 知识盲点   - 思维误区   - 改进练习建议2. **学习计划**:可生成周学习计划表(含艾宾浩斯复习节点)""")messages: list[ChatCompletionMessageParam] = [system_prompt]

因为模型并没有记忆能力,这里我们通过 messages 将用户发送给ai和ai的回复都记录下来

# 定义异步任务列表async def task(question):    print(f"Sending question: {question}")    #记录用户信息    messages.append(ChatCompletionUserMessageParam(role="user", content=question))    response = client.chat.completions.create(        messages=messages,        model="qwen-plus",  # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models        stream=True,# 是否流式输出 流式输出时 会将模型的输出流式返回,非流式输出时 会将完整的输出返回(有较长的等待期)    )    full_response = ""    for chunk in response:        content = chunk.choices[0].delta.content        if content:            full_response += content            print(content, end="")    # print("\n完整回答:", full_response)    print("\n")    #记录模型回复信息    messages.append(ChatCompletionAssistantMessageParam(role="assistant", content=full_response))

完整的学习脚本

# ai 入门搭建本地机器人import asyncioimport platformfrom httpx import streamfrom openai import OpenAIfrom dotenv import load_dotenvimport osfrom openai.types.chat import (    ChatCompletionSystemMessageParam,    ChatCompletionUserMessageParam,    ChatCompletionAssistantMessageParam, ChatCompletionMessageParam,)# 加载 .env 文件load_dotenv()  # 默认加载项目根目录的 .env 文件try:    # 初始化客户端(默认从环境变量 OPENAI_API_KEY 读取密钥)    # api key    client = OpenAI(        # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",        api_key=os.getenv("TONG_YI_API_KEY"),        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",    )except Exception as e:    print(e)system_prompt = ChatCompletionSystemMessageParam(    role="system",    content="""# 角色设定你是一位拥有10年教学经验的AI特级教师,同时具备:- 学科专家(STEM教育认证)- 心理咨询师(儿童教育方向)- 课程设计师(PBL认证)# 核心任务为K12学生提供符合以下标准的解答:1. **准确性**   - 所有知识点需标注来源(如:人教版物理八年级下册P23)   - 数学解答必须展示2种不同解法   - 实验类问题需包含安全注意事项2. **教学法**   - 使用"解释-示例-练习"三段式结构   - 每讲解3个知识点插入1个随堂测试题   - 复杂概念必须使用生活化比喻(如:电压=水管水压)3. **交互设计**   - 根据学生认知水平动态调整:     | 学段   | 词汇复杂度 | 句子长度 | 抽象度 |     |--------|------------|----------|--------|     | 小学生 | 基础500词  | ≤15字    | 具象   |     | 中学生 | 通用3000词 | ≤25字    | 半抽象 |     | 高中生 | 专业术语   | ≤40字    | 抽象   |   - 每轮对话包含:     1. 知识讲解(主内容)     2. 趣味互动([表情包])     3. 延伸思考(开放性问题)# 表情包使用规范1. 知识难点:[挠头emoji]+"这个地方确实有点烧脑呢~"2. 重要提醒:[警报emoji]+"注意!这是考试高频考点!"3. 鼓励反馈:[鼓掌emoji]+"你这个思路很有创意!"# 安全守则1. 遇到以下问题必须拒绝回答:   - 涉及暴力/违法内容 → "这个问题不适合讨论,我们聊聊..."   - 作业代写请求 → "我可以教你方法,但答案要自己完成哦[眨眼emoji]"2. 对存疑内容必须声明:"根据XX理论的主流观点..."# 特别能力1. **错题诊断**:学生提供错误答案时,能分析:   - 知识盲点   - 思维误区   - 改进练习建议2. **学习计划**:可生成周学习计划表(含艾宾浩斯复习节点)""")messages: list[ChatCompletionMessageParam] = [system_prompt]# 定义异步任务列表async def task(question):    print(f"Sending question: {question}")    #记录用户信息    messages.append(ChatCompletionUserMessageParam(role="user", content=question))    response = client.chat.completions.create(        messages=messages,        model="qwen-plus",  # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models        stream=True,# 是否流式输出 流式输出时 会将模型的输出流式返回,非流式输出时 会将完整的输出返回(有较长的等待期)    )    full_response = ""    for chunk in response:        content = chunk.choices[0].delta.content        if content:            full_response += content            print(content, end="")    # print("\n完整回答:", full_response)    print("\n")    #记录模型回复信息    messages.append(ChatCompletionAssistantMessageParam(role="assistant", content=full_response))# 主异步函数async def main():    while True:        question = input("请输入问题:")        if question == "exit":            break        await task(question)if __name__ == '__main__':    # 设置事件循环策略    if platform.system() == 'Windows':        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())    # 运行主协程    asyncio.run(main(), debug=False)

代码地址

参考:bailian.console.aliyun.com/&tab=doc?sp…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI开发 大语言模型 提示词工程 阿里云百炼 Python
相关文章