![1.png](https://static.golangjob.cn/231116/21805250b9c1f07f1eba677dd50e5baa.png)
今天给大家讲讲关于提示词工程,还有大模型多场景实战方面的知识,大家都知道,当下,只要掌握提示词工程技能就能驾驭AI,同时实现大幅提升工作效能和质量,从而拓宽职业发展,接下来我就帮助大家逐步深入并融合大模型提升商业化思维,打通职场、副业的求职、创作、教学、绘图、编程等多场景应用实战。
目前,人工智能正在颠覆许多行业,包括新闻行业、医疗卫生行业和教育行业。你可能很快看到人工智能在你工作或教学中出现,即使现在还没有。但是,尽管人工智能非常有用,但它们需要人类来指导它们做什么。通常情况下,人工智能就像非常聪明的五岁小孩。它们可以做很多事情,但它们需要仔细的指导才能做得好。
能够正确指导人工智能是一项非常强大的技能。那么该如何跟它们沟通呢?本课程讨论的人工智能能够理解英语(和其他语言)。所以我们通常只需描述我们想要完成的任务。
推断(Inferring)
所谓推断是指能够从一段文本中推断出作者的情绪,比如:高兴,快乐,正面,负面等。。。
首先我们需要设置通过API来访问的主要代码:
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
}
商品评论文本
下面我们给提供一段消费者对某电商网站商品的评论,我们希望能够从这段评论中推断出消费者的情绪,由于原始评论是英文的,我将其翻译的中文也罗列出来,这样可以便于大家理解:
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] = 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[i] = 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
}
}
今天就给大家写到这里,希望我的文章对大家有所帮助!!
有疑问加站长微信联系(非本文作者)