美文网首页
AI应用开发03,聊天机器人上下文怎么理解

AI应用开发03,聊天机器人上下文怎么理解

作者: info小欧 | 来源:发表于2025-06-26 18:21 被阅读0次

AI应用开发03,聊天机器人

大模型出来之前,智能客服的做法往往是套用固定的模版,每次的回答都一模一样。当然可以设计多个模版轮换着表达相同的意思,但是最多也就是三四个模版,整体的体验还是相当呆板。

#文本补全

from openai import OpenAI
import os

API_KEY = "sk-**************************************  # SiliconCloud API Key
API_URL = "https://api.siliconflow.cn/v1"  # 示例,以官方文档为准
COMPLETION_MODEL = "deepseek-ai/DeepSeek-V3"

client = OpenAI(api_key=API_KEY,base_url=API_URL,)

prompt = '请你用朋友的语气回复给到客户,并称他为“亲”,他的订单已经发货在路上了,预计在3天之内会送达,订单号2021AEDG,我们很抱歉因为天气的原因物流时间比原来长,感谢他选购我们的商品。'

def get_response(prompt, temperature = 1.0, stop=None):
    completions = client.completions.create (
        model=COMPLETION_MODEL,
        prompt=prompt,
        max_tokens=1024,
        n=1,
        stop=stop,
        temperature=temperature,        
    )
    message = completions.choices[0].text
    return message

#print(get_response(prompt))

运行两次,大模型给了意思相同,遣词造句不同的结果。

#亲,您的订单2021AEDG已经在路上飞奔啦~预计3天内就能和您见面啦!🌪️非常抱歉因为最近的天气捣乱,让物流小哥跑得比平时慢了些。不过您放心,我们的包裹都有穿好"防水衣"的!超感谢您选择了我们家宝贝,等您收到后有任何需要随时cue我哦~(悄悄说:包裹里藏了小彩蛋谢礼哟✨)

#亲,您的订单2021AEDG已经发货啦,正在火速奔向您的路上呢!这几天雨雪天气影响了快递速度,预计3天内就能送到您手上~真的非常抱歉让您久等了,同时也特别感谢您选择我们家的宝贝~如果有任何问题随时喊我哦,我一定第一时间为您解决!☺️(贴心小贴士:最近天气变化大,亲也要注意保暖呀❤️)

我们把temperature设置为0,你可以看到两句内容的遣词造句就基本一致了。

#亲,您的订单2021AEDG已经发货啦,正在快马加鞭奔向您~预计3天内就能送达哦!最近天气不太给力,物流可能会比平时慢一丢丢,真的特别感谢您的理解和耐心等待呢!有任何问题随时喊我,我会第一时间帮您跟进哒~再次感谢您选择我们呀(๑•̀ㅂ•́)و✧
#亲,您的订单2021AEDG已经发货啦,正在快马加鞭奔向您~预计3天内就能送达哦!最近天气不太给力,物流可能会比平时慢一丢丢,真的特别感谢您的理解和耐心等待呢!有任何问题随时喊我哈,祝您收件愉快呀~ (。♥‿♥。)
#亲,您的订单2021AEDG已经发货啦,正在快马加鞭奔向您~预计3天内就能送达哦!非常抱歉因为最近的天气原因,物流时间比平时稍长了一些,感谢您的耐心等待和理解呢~也特别感谢您选择我们的商品,有任何问题随时联系我呀!祝您生活愉快~

Completion API 接口参数的设置

  • temperature,参数设置,取决于实际使用的场景。如果对应的场景比较严肃,不希望出现差错,那么设得低一点比较合适,比如银行客服的场景。如果场景没那么严肃,有趣更加重要,比如讲笑话的机器人,那么就可以设置得高一些。
  • model,设置使用的模式,这里我们调用的是deepseek-ai/DeepSeek-V3 模型。
  • prompt,提示词,
  • max_tokens,也就是调用生成的内容允许的最大token数量。你可以简单地把token理解成一个单词。实际上,token是分词之后的一个字符序列里的一个单元。有时候,一个单词会被分解成两个token。比如,icecream是一个单词,但是实际在大语言模型里,会被拆分成 ice 和 cream 两个token。这样分解可以帮助模型更好地捕捉到单词的含义和语法结构。一般来说,750个英语单词就需要1000个token。需要注意,这个数量既包括你输入的提示语,也包括AI产出的回答,两个加起来不能超过4096个token。比如,你的输入有1000个token,那么你这里设置的 max_tokens 就不能超过 3096。不然调用就会报错。
  • n,代表你希望AI给你生成几条内容供你选择。在这样自动生成客服内容的场景里,我们当然设置成1。但是如果在一些辅助写作的场景里,你可以设置成3或者更多,供用户在多个结果里面自己选择自己想要的。
  • stop,代表你希望模型输出的内容在遇到什么内容的时候就停下来。这个参数我们常常会选用 "\n\n"这样的连续换行,因为这通常意味着文章已经要另起一个新的段落了,既会消耗大量的token数量,又可能没有必要。

Completion这个接口当然还有其他参数,后续单独介绍。

聊天机器人,上下文

上面的例子我们知道了怎么用一句提示语让AI回答一个问题。怎么能让AI和人“聊起来”呢?特别是怎么完成多轮对话,让模型记住上下文。
对于聊天机器人来说,只理解当前用户的句子是不够的,能够理解整个上下文是必不可少的。要完成支持多轮的问答也并不复杂。我们只需要在提示语里增加一些小小的工作就好了。

我们只要把之前对话的内容也都放到提示语里面,把整个上下文都提供给AI。AI就能够自动根据上下文,回答第二个问题。

比如,你接着问“那蚝油生菜呢?”。我们不要只是把这个问题传给AI,而是把前面的对话也一并传给AI,那么AI自然知道你问的“那蚝油生菜呢?”是指怎么做,而不是去哪里买或者需要多少钱。

from openai import OpenAI
import os

API_KEY = "sk-nkmfvaiyahrsrxwbfumclpqogfjbzsvmfgokytslswisecuc"  # SiliconCloud API Key
API_URL = "https://api.siliconflow.cn/v1"  # 示例,以官方文档为准
COMPLETION_MODEL = "deepseek-ai/DeepSeek-V3"

client = OpenAI(api_key=API_KEY,base_url=API_URL,)

#food_chatbot
def ask_gpt3(prompt):
    response = client.completions.create(
        model=COMPLETION_MODEL,
        prompt=prompt,
        max_tokens=512,
        n=1,
        stop=None,
        temperature=0.5,
    )

    message = response.choices[0].text.strip()
    return message

print("你好,我是一个聊天机器人,请你提出你的问题吧?")

questions = []
answers = []

def generate_prompt(prompt, questions, answers):
    num = len(answers)
    for i in range(num):
        prompt += "\n Q : " + questions[i]
        prompt += "\n A : " + answers[i]
    prompt += "\n Q : " + questions[num] + "\n A : "        
    return prompt

while True:
    user_input = input("> ")
    questions.append(user_input)
    if user_input.lower() in ["bye", "goodbye", "exit"]:
        print("Goodbye!")
        break

    prompt = generate_prompt("", questions, answers)

    answer = ask_gpt3(prompt)
    print(answer)
    answers.append(answer)

执行内容

你好,我是一个聊天机器人,请你提出你的问题吧?
>  土豆焖排骨怎么做?
土豆焖排骨是一道非常受欢迎的家常菜,其做法简单,味道鲜美。以下是一个基本的土豆焖排骨的做法:

### 材料:
- 排骨 500克
- 土豆 2-3个(中等大小)
- 姜片 3-4片
- 蒜瓣 3-4个(拍扁)
- 葱段 适量
- 生抽 2汤匙
- 老抽 1汤匙
- 料酒 1汤匙
- 糖 1茶匙
- 盐 适量
- 清水 适量
- 食用油 适量
- 八角 1-2颗(可选)
- 香叶 1-2片(可选)

### 做法:
1. **准备材料**:排骨洗净,切成小块;土豆去皮,切成滚刀块;姜切片,蒜拍扁,葱切段。
   
2. **焯水**:将排骨放入冷水中,加入几片姜和少许料酒,大火煮开后撇去浮沫,捞出排骨沥干水分备用。

3. **炒排骨**:热锅凉油,放入姜片、蒜瓣和葱段爆香,然后加入排骨翻炒至表面微黄。

4. **调味**:加入生抽、老抽、料酒和糖,翻炒均匀,让排骨上色。

5. **加水焖煮**:加入足够的清水(水量要没过排骨),放入八角和香叶(可选),大火煮开后转小火焖煮约30分钟,直到排骨变得软烂。

6. **加入土豆**:将土豆块加入锅中,继续焖煮约15-20分钟,直到土豆熟透,汤汁收浓。

7. **调味收汁**:根据个人口味加盐调味,然后大火收汁,直到汤汁浓稠即可。

8. **出锅**:撒上葱花或香菜点缀,即可出锅。

### 小贴士:
- 如果喜欢更浓郁的口感,可以在收汁前加入少许水淀粉勾芡。
- 土豆可以根据个人喜好切块或切片,但切块的话更容易保持形状。
- 如果喜欢辣味,可以在炒排骨时加入一些干辣椒或辣椒酱。

这样一道美味的土豆焖排骨就完成了,配米饭非常下饭!
>  那蚝油生菜呢?
蚝油生菜是一道简单又美味的家常菜,制作过程快捷,口感清爽。以下是蚝油生菜的基本做法:

### 材料:
- 生菜 1颗(约300克)
- 蚝油 2汤匙
- 蒜末 2-3瓣
- 生抽 1茶匙(可选)
- 白糖 1/2茶匙(可选)
- 清水 2-3汤匙
- 食用油 1汤匙
- 盐 少许(焯水用)

### 做法:
1. **准备生菜**:  
   - 生菜洗净,撕成大片(或对半切开),沥干水分备用。

2. **焯水**:  
   - 锅中烧开水,加入少许盐和几滴油(保持生菜翠绿)。  
   - 放入生菜,快速焯烫10-15秒(变软即可),捞出沥干,摆入盘中。

3. **调制蚝油汁**:  
   - 小碗中混合蚝油、生抽(可选)、白糖(可选)和清水,搅拌均匀。

4. **炒香蒜末**:  
   - 热锅冷油,放入蒜末小火炒香(避免焦糊)。

5. **煮蚝油汁**:  
   - 倒入调好的蚝油汁,小火煮开至略微浓稠(约30秒)。

6. **淋汁**:  
   - 将煮好的蚝油汁均匀淋在焯好的生菜上即可。

### 小贴士:
1. **生菜选择**:  
   - 用脆嫩的球生菜或罗马生菜口感更佳。
   
2. **焯水时间**:  
   - 焯烫时间不宜过长,否则生菜会变黄变软。

3. **调味灵活**:  
   - 蚝油本身有咸味,生抽和盐可酌情减少。  
   - 喜欢鲜甜的可以加少许糖提味。

4. **升级版**:  
   - 可加少许香菇丁或胡萝卜丝与蒜末同炒,增加风味。

这道菜从准备到完成只需5-10分钟,清爽解腻,非常适合搭配肉类主食!
>  bye
Goodbye!

相关文章

网友评论

      本文标题:AI应用开发03,聊天机器人上下文怎么理解

      本文链接:https://www.haomeiwen.com/subject/suaugjtx.html