全部版块 我的主页
论坛 数据科学与人工智能 人工智能 机器学习
4277 1
2023-11-16
今天给大家讲讲关于提示词工程,还有大模型多场景实战方面的知识,大家都知道,当下,只要掌握提示词工程技能就能驾驭AI,同时实现大幅提升工作效能和质量,从而拓宽职业发展,接下来我就帮助大家逐步深入并融合大模型提升商业化思维,打通职场、副业的求职、创作、教学、绘图、编程等多场景应用实战。

参考资料下载:
https://pan.baidu.com/s/1tvISY6svrx5YZVD9wo2ZvA 提取码:18kt

资料地址2:
https://pan.baidu.com/s/1OTtLSBrwfbfICfoQ-x41cw 提取码:i4ov

目前,人工智能正在颠覆许多行业,包括新闻行业、医疗卫生行业和教育行业。你可能很快看到人工智能在你工作或教学中出现,即使现在还没有。但是,尽管人工智能非常有用,但它们需要人类来指导它们做什么。通常情况下,人工智能就像非常聪明的五岁小孩。它们可以做很多事情,但它们需要仔细的指导才能做得好。
能够正确指导人工智能是一项非常强大的技能。那么该如何跟它们沟通呢?本课程讨论的人工智能能够理解英语(和其他语言)。所以我们通常只需描述我们想要完成的任务。

推断(Inferring)
所谓推断是指ChatGPT能够从一段文本中推断出作者的情绪,比如:高兴,快乐,正面,负面等。。。
首先我们需要设置通过API来访问ChatGPT的主要代码:
type scase struct {
        c    *hchan         // chan的结构体类型指针
        elem unsafe.Pointer // //读或者写的缓冲区地址
}

type hchan struct {
        qcount   uint           // total data in the queue
        dataqsiz uint           // size of the circular queue
        buf      unsafe.Pointer // points to an array of dataqsiz elements
        elemsize uint16
        closed   uint32
        elemtype *_type // element type
        sendx    uint   // send index
        recvx    uint   // receive index
        recvq    waitq  // list of recv waiters
        sendq    waitq  // list of send waiters

        // lock protects all fields in hchan, as well as several
        // fields in sudogs blocked on this channel.
        //
        // Do not change another G's status while holding this lock
        // (in particular, do not ready a G), as this can deadlock
        // with stack shrinking.
        lock mutex
}

商品评论文本
下面我们给ChatGPT提供一段消费者对某电商网站商品的评论,我们希望ChatGPT能够从这段评论中推断出消费者的情绪,由于原始评论是英文的,我将其翻译的中文也罗列出来,这样可以便于大家理解:
fatal error: concurrent map writes

goroutine 19 [running]:
main.main.func1()
        G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:12 +0x36
created by main.main
        G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:11 +0x3d

goroutine 1 [semacquire]:
sync.runtime_Semacquire(0xc00008e120?)
        D:/Program Files/Go/src/runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0x0?)
        D:/Program Files/Go/src/sync/waitgroup.go:116 +0x4b
main.main()
        G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:16 +0xe5
exit status 2
关于LLM设置的说明
在使用提示时,您将通过API或直接与LLM进行交互。您可以配置一些参数以获得不同提示的结果。

温度 - 简而言之,温度越低,结果就越确定,因为始终选择最有可能的下一个标记。增加温度可能会导致更多的随机性,从而鼓励更多元化或创造性的输出。实际应用中,我们可能希望对基于事实的QA使用较低的温度来鼓励更加客观和简洁的回答。 对于像诗歌生成或其他创意任务,增加温度可能是有益的。

Top_p - 类似地,通过称为nucleus采样的带有温度的采样技术,可以控制模型在生成响应时的确定性。如果您正在寻找准确和事实的答案,请将其保持在低值。如果你正在寻找更多元化的回答,请将其增加到较高的值。

通常的建议是只更改其中一个。

在开始一些基本的示例之前,请记住,您的结果可能取决于您使用的LLM版本。
package main

import (
        "fmt"
        "log"
        "time"
)

var cache = make(map[int]int)

func init() {
        Ticker(refreshCache, time.Second)
}
func main() {
        for i := 0; i < 100000000; i++ {
                //模拟非并发写入
                cache = i
        }
        time.Sleep(time.Second)
        fmt.Println(cache)
}

//全量更新缓存
func refreshCache() {
        log.Println("开始更新缓存")
        data := GetDataFromDB()
        if len(data) == 0 {
                return
        }

        tmp := make(map[int]int, len(data))
        for i, d := range data {
                tmp = d
        }
        //全量更新cache
        cache = tmp
        tmp = nil
}

func GetDataFromDB() []int {
        return []int{1, 2, 3}
}

// 启动一个定时器
func Ticker(f func(), d time.Duration) {
        go func() {
                ticker := time.NewTicker(d)
                for {
                        select {
                        case <-ticker.C:
                                go f()
                        }
                }
        }()
}

指令
您可以使用命令来指示模型您想要实现的内容,例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示。
请记住,您还需要进行大量实验以了解最佳的方法。尝试不同的指令与不同的关键字、上下文和数据,并观察哪种方法最适合您特定的用例和任务。通常,上下文与您要执行的任务相关性越强,越具体和相关,结果越好。我们将在即将推出的指南中讨论采样和添加更多上下文的重要性。
其他人建议指令放在提示的开头。还建议使用一些清晰的分隔符,如“###”来分隔指令和上下文。
例如:
package main

import (
    "log"
)
import "time"

type Request interface{}

func handle(r Request) {
    log.Println("发起请求", r)
}

const RateLimitPeriod = time.Second
const RateLimit = 1 // 任何一秒钟内最多处理1个请求
func handleRequests(requests <-chan Request) {
    quotas := make(chan struct{}, RateLimit)

    //相当于以恒定的速率放入令牌
    go func() {
        tick := time.NewTicker(RateLimitPeriod / RateLimit)
        defer tick.Stop()
        for _ = range tick.C {
            select {
            case quotas <- struct{}{}:
            default:
            }
        }
    }()

    for r := range requests {
        <-quotas
        go handle(r)
    }
}

func main() {
    requests := make(chan Request)
    go handleRequests(requests)
    for i := 0; i < 100; i++ {
        requests <- i
    }
}
今天就给大家写到这里,希望我的文章对大家有所帮助!!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-11-16 18:13:59
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群